Subversion Repositories pentevo

Rev

Rev 437 | Rev 855 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. #include "pins.h"
  5. #include "mytypes.h"
  6.  
  7. #include "main.h"
  8. #include "atx.h"
  9. #include "rs232.h"
  10. #include "zx.h"
  11.  
  12. //if want Log than comment next string
  13. #undef LOGENABLE
  14.  
  15. volatile UWORD atx_counter;
  16.  
  17. void wait_for_atx_power(void)
  18. {
  19.         UBYTE j = MCUCSR;
  20.  
  21.         //clear status register
  22.         MCUCSR = 0;
  23.  
  24. #ifdef LOGENABLE
  25.         char log_ps2keyboard_parse[] = "MC..\r\n";
  26.         log_ps2keyboard_parse[2] = ((j >> 4) <= 9 )?'0'+(j >> 4):'A'+(j >> 4)-10;
  27.         log_ps2keyboard_parse[3] = ((j & 0x0F) <= 9 )?'0'+(j & 0x0F):'A'+(j & 0x0F)-10;
  28.         to_log(log_ps2keyboard_parse);
  29. #endif
  30.  
  31.         //check power
  32.         if ( (nCONFIG_PIN & (1<<nCONFIG)) == 0 )
  33.         {
  34.                 //if not external reset
  35.                 //then wait for atx power on button (SOFTRESET)
  36.                 if ( !(j & ((1<<JTRF)|(1<<WDRF)|(1<<BORF)|(1<<EXTRF))) ||
  37.                          (j & (1<<PORF)) )
  38.                 while( SOFTRES_PIN&(1<<SOFTRES) );
  39.  
  40.                 //switch on ATX power
  41.                 ATXPWRON_PORT |= (1<<ATXPWRON);
  42.  
  43.                 //1 sec delay
  44.                 j=50;
  45.                 do _delay_ms(20); while(--j);
  46.         }
  47.  
  48.         //init port F
  49.         PORTF = 0b11111000;
  50.         //clear counter
  51.         atx_counter = 0;
  52. }
  53.  
  54. void atx_power_task(void)
  55. {
  56.         static UWORD last_count = 0;
  57. //      UBYTE j = 50;
  58.  
  59.         if ( atx_counter > 1700 )
  60.         {
  61.                 //here if either SOFTRES_PIN or F12 held for more than ~5 seconds
  62.  
  63. //              if ( ( SOFTRES_PIN & (1<<SOFTRES) ) == 0 )
  64. //              {
  65. //                      //atx power off button pressed (~5 sec)
  66. //
  67. //                      //switch off atx power
  68. //                      atxpwron_port &= ~(1<<atxpwron);
  69. //
  70. //                      // wait for power to drop
  71. //              }
  72. //              else
  73. //              {
  74. //                      //enable hard reset
  75. //                      flags_register |= FLAG_HARD_RESET;
  76. //              }
  77.  
  78.                 UBYTE was_soft_rst = !(SOFTRES_PIN & (1<<SOFTRES));
  79.  
  80.                 // switch off ATX power
  81.                 ATXPWRON_PORT &= ~(1<<ATXPWRON);
  82.  
  83.                 // wait for ATX power to drop
  84.                 while( nCONFIG_PIN & (1<<nCONFIG) );
  85.  
  86.                 // if it was soft reset switch initiated -- wait for it to release
  87.                 if( was_soft_rst )
  88.                 {
  89.                         while( !(SOFTRES_PIN & (1<<SOFTRES)) );
  90.  
  91.                         _delay_ms(50); // and then debounce it
  92.                 }
  93.  
  94.                 //power led off (timer output disconnect from led pin)
  95.                 TCCR2 &= ~((1<<COM20)|(1<<COM21));
  96.  
  97.                 // signal HARD_RESET to exit out of mainloop in main.c -- and eventually return to wait_for_atx_power()
  98.                 flags_register |= FLAG_HARD_RESET;
  99.         }
  100.         else if ( ( last_count > 0 ) && ( atx_counter == 0 ) )
  101.         {
  102.                 //soft reset (reset Z80 only) -- F12 or softreset pressed for less than 1700 ticks
  103.                 zx_spi_send(SPI_RST_REG, 0, 0x7F);
  104.         }
  105.         last_count = atx_counter;
  106.  
  107. //      if ( ( nCONFIG_PIN & (1<<nCONFIG) ) == 0 )
  108. //      {
  109. //              //power down
  110. //
  111. //              //power led off (timer output disconnect from led pin)
  112. //              TCCR2 &= ~((1<<COM20)|(1<<COM21));
  113. //
  114. //              //wait for button released
  115. //              while (  ( SOFTRES_PIN & (1<<SOFTRES) ) == 0 );
  116. //
  117. //              //1 sec delay
  118. //              do _delay_ms(20); while(--j);
  119. //
  120. //              last_count = 0;
  121. //
  122. //              //enable hard reset
  123. //              flags_register |= FLAG_HARD_RESET;
  124. //      }
  125.  
  126. }
  127.