Subversion Repositories pentevo

Rev

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

  1. .NOLIST
  2. .INCLUDE "m128def.inc"
  3. .INCLUDE "_macros.asm"
  4. .LIST
  5. .LISTMAC
  6.  
  7. .DEF    MODE1   =R10    ;глобальный регистр, (.0 - 0=VGAmode, 1=TVmode) читается из EEPROM
  8. .DEF    LANG    =R11    ;глобальный регистр, язык интерфейса (умнож.на 2) читается из EEPROM
  9. .DEF    INT6VECT=R12    ;глобальный регистр, (обработчики INT6)
  10. .DEF    FF      =R13    ;глобальный регистр, всегда = $FF
  11. .DEF    ONE     =R14    ;глобальный регистр, всегда = $01
  12. .DEF    NULL    =R15    ;глобальный регистр, всегда = $00
  13. .DEF    DATA    =R16
  14. .DEF    TEMP    =R17
  15. .DEF    COUNT   =R18
  16. .DEF    BITS    =R19
  17. .DEF    FLAGS1  =R20    ;глобальный регистр, флаги:
  18.                         ;.0 - PUTCHAR вызывает UARTDIRECT_PUTCHAR
  19.                         ;.1 - PUTCHAR вызывает UART_PUTCHAR
  20.                         ;.2 - PUTCHAR вызывает SCR_PUTCHAR
  21.                         ;.3 - лог обмена SD в RS232
  22. .DEF    TMP2    =R22
  23. .DEF    TMP3    =R23
  24. .DEF    WL      =R24
  25. .DEF    WH      =R25
  26. ; DATA,TEMP,COUNT,WL,WH,XL,XH,ZL,ZH - могут передавать параметры в функции и возвращать результаты
  27. ; Y - указатель на стек данных (растёт вниз)
  28. ; R0,R1 и остальные - используются локально
  29. ;
  30. ;--------------------------------------
  31. ;
  32. .EQU    DBSIZE_HI       =HIGH(2048)
  33. .EQU    DBMASK_HI       =HIGH(2047)
  34. .EQU    nCONFIG         =PORTF0
  35. .EQU    nSTATUS         =PORTF1
  36. .EQU    CONF_DONE       =PORTF2
  37. ;
  38. ;--------------------------------------
  39. ;регистры fpga
  40. .EQU    TEMP_REG        =$A0
  41. .EQU    SD_CS0          =$A1
  42. .EQU    SD_CS1          =$A2
  43. .EQU    FLASH_LOADDR    =$A3
  44. .EQU    FLASH_MIDADDR   =$A4
  45. .EQU    FLASH_HIADDR    =$A5
  46. .EQU    FLASH_DATA      =$A6
  47. .EQU    FLASH_CTRL      =$A7
  48. .EQU    SCR_LOADDR      =$A8    ; текущая позиция печати
  49. .EQU    SCR_HIADDR      =$A9    ;
  50. .EQU    SCR_ATTR        =$AA    ; запись атрибута в ATTR
  51. .EQU    SCR_FILL        =$AB    ; прединкремент адреса и запись атрибута в ATTR и в память
  52.                                 ; (если только дергать spics_n, будет писаться предыдущий ATTR)
  53. .EQU    SCR_CHAR        =$AC    ; прединкремент адреса и запись символа в память и ATTR в память
  54.                                 ; (если только дергать spics_n, будет писаться предыдущий символ)
  55. .EQU    SCR_MOUSE_TEMP  =TEMP_REG
  56. .EQU    SCR_MOUSE_X     =$AD
  57. .EQU    SCR_MOUSE_Y     =$AE
  58. .EQU    SCR_MODE        =$AF    ; .0 - 0=VGAmode, 1=TVmode; .1 - 0=сетка 720x576;
  59.  
  60. .EQU    MTST_CONTROL    =$50
  61. .EQU    MTST_PASS_CNT0  =$51
  62. .EQU    MTST_PASS_CNT1  =TEMP_REG
  63. .EQU    MTST_FAIL_CNT0  =$52
  64. .EQU    MTST_FAIL_CNT1  =TEMP_REG
  65.  
  66. .EQU    COVOX           =$53
  67.  
  68. .EQU    INT_CONTROL     =$54
  69. ;
  70. ;--------------------------------------
  71. ;
  72. .MACRO  SPICS_SET
  73.         SBI     PORTB,0
  74. .ENDMACRO
  75.  
  76. .MACRO  SPICS_CLR
  77.         CBI     PORTB,0
  78. .ENDMACRO
  79. ;
  80. ;--------------------------------------
  81. ;
  82. .DSEG
  83.                 .ORG    $0300
  84. DSTACK:
  85. .EQU    UART_TXBSIZE    =128            ;размер буфера д.б. равен СТЕПЕНЬ_ДВОЙКИ байт (...32,64,128,256)
  86. UART_TX_BUFF:   .BYTE   UART_TXBSIZE    ;адрес д.б. кратен UART_TXBSIZE
  87. .EQU    UART_RXBSIZE    =128            ;размер буфера д.б. равен СТЕПЕНЬ_ДВОЙКИ байт
  88. UART_RX_BUFF:   .BYTE   UART_RXBSIZE    ;адрес д.б. кратен UART_RXBSIZE
  89.  
  90.                 .ORG    $0400
  91. BUFSECT:        ;буфер сектора
  92.                 .ORG    $0600
  93. BUF4FAT:        ;временный буфер (FAT и т.п.)
  94.                 .ORG    $0800
  95. MEGABUFFER:
  96.                 .ORG    RAMEND
  97. HSTACK:
  98.                 .ORG    $0100
  99. RND:            .BYTE   3
  100. NEWFRAME:       .BYTE   1
  101. GLB_STACK:      .BYTE   2
  102. GLB_Y:          .BYTE   2
  103. ;
  104. ;--------------------------------------
  105. ;
  106. .ESEG
  107.                 .ORG    $0000
  108. EE_DUMMY:       .DB     $FF
  109. EE_MODE1:       .DB     $FF
  110. EE_LANG:        .DB     $00
  111. ;
  112. ;--------------------------------------
  113. ;
  114. .CSEG
  115.         .ORG    0
  116.         JMP     START
  117.         JMP     START   ;EXT_INT0 ; IRQ0 Handler
  118.         JMP     START   ;EXT_INT1 ; IRQ1 Handler
  119.         JMP     START   ;EXT_INT2 ; IRQ2 Handler
  120.         JMP     START   ;EXT_INT3 ; IRQ3 Handler
  121.         JMP     EXT_INT4 ; IRQ4 Handler
  122.         JMP     EXT_INT5 ; IRQ5 Handler
  123.         JMP     EXT_INT6 ; IRQ6 Handler
  124.         JMP     START   ;EXT_INT7 ; IRQ7 Handler
  125.         JMP     START   ;TIM2_COMP ; Timer2 Compare Handler
  126.         JMP     START   ;TIM2_OVF ; Timer2 Overflow Handler
  127.         JMP     START   ;TIM1_CAPT ; Timer1 Capture Handler
  128.         JMP     START   ;TIM1_COMPA ; Timer1 CompareA Handler
  129.         JMP     START   ;TIM1_COMPB ; Timer1 CompareB Handler
  130.         JMP     START   ;TIM1_OVF ; Timer1 Overflow Handler
  131.         JMP     START   ;TIM0_COMP ; Timer0 Compare Handler
  132.         JMP     TIM0_OVF ; Timer0 Overflow Handler
  133.         JMP     START   ;SPI_STC ; SPI Transfer Complete Handler
  134.         JMP     START   ;USART0_RXC ; USART0 RX Complete Handler
  135.         JMP     START   ;USART0_DRE ; USART0,UDR Empty Handler
  136.         JMP     START   ;USART0_TXC ; USART0 TX Complete Handler
  137.         JMP     START   ;ADC ; ADC Conversion Complete Handler
  138.         JMP     START   ;EE_RDY ; EEPROM Ready Handler
  139.         JMP     START   ;ANA_COMP ; Analog Comparator Handler
  140.         JMP     START   ;TIM1_COMPC ; Timer1 CompareC Handler
  141.         JMP     START   ;TIM3_CAPT ; Timer3 Capture Handler
  142.         JMP     TIM3_COMPA ; Timer3 CompareA Handler
  143.         JMP     START   ;TIM3_COMPB ; Timer3 CompareB Handler
  144.         JMP     START   ;TIM3_COMPC ; Timer3 CompareC Handler
  145.         JMP     START   ;TIM3_OVF ; Timer3 Overflow Handler
  146.         JMP     USART1_RXC ; USART1 RX Complete Handler
  147.         JMP     USART1_DRE ; USART1,UDR Empty Handler
  148.         JMP     START   ;USART1_TXC ; USART1 TX Complete Handler
  149.         JMP     START   ;TWI_INT ; Two-wire Serial Interface Interrupt Handler
  150.         JMP     START   ;SPM_RDY ; SPM Ready Handler
  151.  
  152.         .DW     0,0
  153.         .DB     "================"
  154.         .DB     " ZX Evo Service "
  155.         .DB     "================"
  156. ;
  157. ;--------------------------------------
  158. ;
  159. .INCLUDE "_message.inc"
  160. .INCLUDE "_t_sd.asm"
  161. .INCLUDE "_uart.asm"
  162. .INCLUDE "_timers.asm"
  163. .INCLUDE "_pintest.asm"
  164. .INCLUDE "_ps2k.asm"
  165. .INCLUDE "_t_ps2k.asm"
  166. .INCLUDE "_t_ps2m.asm"
  167. .INCLUDE "_output.asm"
  168. .INCLUDE "_screen.asm"
  169. ;
  170. ;--------------------------------------
  171. ;обмен с регистрами в FPGA
  172. ;in:    TEMP == номер регистра
  173. ;       DATA == данные
  174. ;out:   DATA == данные
  175. FPGA_REG:
  176.         PUSH    DATA
  177.         SPICS_SET
  178.         OUT     SPDR,TEMP
  179.         RCALL   FPGA_RDY_RD
  180.         POP     DATA
  181. ;обмен без установки регистра
  182. ;in:    DATA == данные
  183. ;out:   DATA == данные
  184. FPGA_SAME_REG:
  185.         SPICS_CLR
  186.         OUT     SPDR,DATA
  187. ;ожидание окончания обмена с FPGA по SPI
  188. ;и чтение пришедших данных
  189. ;out:   DATA == данные
  190. FPGA_RDY_RD:
  191. ;        SBIC    SPSR,WCOL
  192. ;        JMP     CHAOS00
  193.         SBIS    SPSR,SPIF
  194.         RJMP    FPGA_RDY_RD
  195.         IN      DATA,SPDR
  196.         SPICS_SET
  197.         RET
  198. ;
  199. ;--------------------------------------
  200. ;
  201. EXT_INT6:
  202.         PUSH    BITS
  203.         IN      BITS,SREG
  204.         SBRC    INT6VECT,0
  205.         CALL    T_BEEP_INT
  206.         SBRC    INT6VECT,1
  207.         STS     NEWFRAME,ONE
  208.         OUT     SREG,BITS
  209.         POP     BITS
  210.         RETI
  211. ;
  212. ;--------------------------------------
  213. ;
  214. .INCLUDE "_sd_lowl.asm"
  215. .INCLUDE "_t_zxkbd.asm"
  216. .INCLUDE "_t_beep.asm"
  217. .INCLUDE "_sd_fat.asm"
  218. .INCLUDE "_depack.asm"
  219. .INCLUDE "_flasher.asm"
  220. .INCLUDE "_t_video.asm"
  221. .INCLUDE "_t_dram.asm"
  222. .INCLUDE "_misc.asm"
  223. ;
  224. ;--------------------------------------
  225. ;
  226. START:  CLI
  227.         CLR     R0
  228.         LDIZ    $0001
  229. CLRALL1:ST      Z+,R0
  230.         CPI     ZL,$1E
  231.         BRNE    CLRALL1
  232.         LDI     ZL,$20
  233. CLRALL2:ST      Z+,NULL
  234.         CPI     ZH,$11
  235.         BRNE    CLRALL2
  236.         INC     ONE
  237.         DEC     FF
  238. ;
  239.         LDI     TEMP,LOW(HSTACK)
  240.         OUT     SPL,TEMP
  241.         LDI     TEMP,HIGH(HSTACK)
  242.         OUT     SPH,TEMP
  243.         LDIX    RND
  244.         ST      X+,TEMP
  245.         ST      X+,FF
  246.         ST      X+,ONE
  247. ;
  248.         LDIW    EE_MODE1
  249.         CALL    EEPROM_READ
  250.         MOV     MODE1,DATA
  251.         LDI     WL,LOW(EE_LANG)
  252.         CALL    EEPROM_READ
  253.         CPI     DATA,MAX_LANG
  254.         BRCS    RDE1
  255.         CLR     DATA
  256. RDE1:   LSL     DATA
  257.         MOV     LANG,DATA
  258. ;
  259.         CALL    PINTEST
  260. ; - - - - - - - - - - - - - - -
  261.         LDI     TEMP,      0B11111111
  262.         OUTPORT PORTG,TEMP
  263.         LDI     TEMP,      0B00000000
  264.         OUTPORT DDRG,TEMP
  265.  
  266.         LDI     TEMP,      0B00001000
  267.         OUTPORT PORTF,TEMP
  268.         OUTPORT DDRF,TEMP
  269.  
  270.         LDI     TEMP,      0B11111111
  271.         OUT     PORTE,TEMP
  272.         LDI     TEMP,      0B00000000
  273.         OUT     DDRE,TEMP
  274.  
  275.         LDI     TEMP,      0B11111111
  276.         OUT     PORTD,TEMP
  277.         LDI     TEMP,      0B00000000
  278.         OUT     DDRD,TEMP
  279.  
  280.         LDI     TEMP,      0B11011111
  281.         OUT     PORTC,TEMP
  282.         LDI     TEMP,      0B00000000
  283.         OUT     DDRC,TEMP
  284.  
  285.         LDI     TEMP,      0B11111001
  286.         OUT     PORTB,TEMP
  287.         LDI     TEMP,      0B10000111
  288.         OUT     DDRB,TEMP
  289.  
  290.         LDI     TEMP,      0B11111111
  291.         OUT     PORTA,TEMP
  292.         LDI     TEMP,      0B00000000
  293.         OUT     DDRA,TEMP
  294. ; - - - - - - - - - - - - - - -
  295.         LDIZ    MLMSG_STATUSOF_CRLF*2
  296.         CALL    POWER_STATUS
  297.         SBIS    PINF,0 ;VCC5
  298.         RJMP    UP10
  299.         SBIS    PINC,5 ;POWERGOOD
  300.         RJMP    UP11
  301.         RJMP    UP19
  302. UP10:   LDIZ    MLMSG_POWER_ON*2
  303.         CALL    PRINTMLSTR
  304. ;ждём включения ATX, а потом ещё чуть-чуть.
  305. UP12:   SBIC    PINF,0 ;VCC5
  306.         RJMP    UP11
  307.         LDIZ    MLMSG_STATUSOF_CR*2
  308.         CALL    POWER_STATUS
  309.         RJMP    UP12
  310. UP11:   LDI     COUNT,170 ;170 раз по 31 символу на скорости 115200 = ~500ms
  311. UP13:   PUSH    COUNT
  312.         LDIZ    MLMSG_STATUSOF_CR*2
  313.         CALL    POWER_STATUS
  314.         POP     COUNT
  315.         DEC     COUNT
  316.         BRNE    UP13
  317. UP19:
  318. ; - - - - - - - - - - - - - - -
  319.         LDIZ    MLMSG_CFGFPGA*2
  320.         CALL    PRINTMLSTR
  321. ;SPI init
  322.         LDI     TEMP,(1<<SPI2X)
  323.         OUT     SPSR,TEMP
  324.         LDI     TEMP,(1<<SPE)|(1<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)
  325.         OUT     SPCR,TEMP
  326. ;загрузка FPGA
  327.         INPORT  TEMP,DDRF
  328.         SBR     TEMP,(1<<nCONFIG)
  329.         OUTPORT DDRF,TEMP
  330.  
  331.         DELAY_US 40
  332.  
  333.         INPORT  TEMP,DDRF
  334.         CBR     TEMP,(1<<nCONFIG)
  335.         OUTPORT DDRF,TEMP
  336.  
  337. LDFPGA1:SBIS    PINF,nSTATUS
  338.         RJMP    LDFPGA1
  339.  
  340.         LDIZ    PACKED_FPGA*2
  341.         OUT     RAMPZ,ONE
  342.         CALL    DMLZ_INIT
  343. LDFPGA3:CALL    DMLZ_GETBYTE
  344.         BREQ    LDFPGA_DONE
  345.         OUT     SPDR,DATA
  346. LDFPGA2:SBIS    SPSR,SPIF
  347.         RJMP    LDFPGA2
  348.         RJMP    LDFPGA3
  349. LDFPGA_DONE:
  350.         SBIS    PINF,CONF_DONE
  351.         RJMP    LDFPGA_DONE
  352.  
  353.         LDIZ    $0100
  354. CLRRAM: ST      Z+,NULL
  355.         CPI     ZH,$11
  356.         BRNE    CLRRAM
  357.  
  358. ;SPI reinit
  359.         LDI     TEMP,(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)
  360.         OUT     SPCR,TEMP
  361. ; - - - - - - - - - - - - - - -
  362.         LDIZ    MLMSG_DONE*2
  363.         CALL    PRINTMLSTR
  364.         DELAY_US 200
  365.         LDIY    DSTACK
  366. ;
  367.         CALL    UART_INIT
  368.         CALL    PS2K_INIT
  369.         CALL    TIMERS_INIT
  370.         IN      TEMP,EICRB
  371.         ORI     TEMP,(1<<ISC61)|(0<<ISC60)
  372.         OUT     EICRB,TEMP
  373.         IN      TEMP,EIMSK
  374.         ORI     TEMP,(1<<INT6)
  375.         OUT     EIMSK,TEMP
  376.         SEI
  377.  
  378.         MOV     DATA,MODE1
  379.         ORI     DATA,0B11111110
  380.         LDI     TEMP,SCR_MODE
  381.         CALL    FPGA_REG
  382.         LDI     DATA,0B00000000
  383.         LDI     TEMP,INT_CONTROL
  384.         CALL    FPGA_REG
  385.  
  386.         CALL    PS2K_DETECT_KBD
  387.  
  388.         LDI     DATA,$01
  389.         LDI     TEMP,MTST_CONTROL
  390.         CALL    FPGA_REG
  391.  
  392.         LDIZ    MSG_READY*2
  393.         CALL    PRINTSTRZ
  394.         CALL    SCR_KBDSETLED
  395. ;
  396. NOEXIT:
  397.         LDIZ    MENU_MAIN*2
  398.         CALL    MENU
  399.         RJMP    NOEXIT
  400. ;
  401. MSG_READY:
  402.         .DB     "---",$0D,$0A,0
  403. ;
  404. ;--------------------------------------
  405. ;
  406. POWER_STATUS:
  407.         CALL    PRINTMLSTR
  408.         LDIZ    MSG_POWER_PG*2
  409.         CALL    PRINTSTRZ
  410.         LDI     DATA,$30 ;"0"
  411.         SBIC    PINC,5 ;POWERGOOD
  412.         LDI     DATA,$31 ;"1"
  413.         CALL    HEXHALF
  414.         LDIZ    MSG_POWER_VCC5*2
  415.         CALL    PRINTSTRZ
  416.         LDI     DATA,$30 ;"0"
  417.         SBIC    PINF,0 ;VCC5
  418.         LDI     DATA,$31 ;"1"
  419.         JMP     HEXHALF
  420. ;
  421. ;--------------------------------------
  422. ;
  423. ;NOTHING:RET
  424. ;
  425. ;--------------------------------------
  426. ;
  427. .NOLIST
  428.         .ORG    $7F80
  429. TABL_SINUS:
  430. .INCLUDE "sin256.inc"
  431.         .ORG    $8000
  432. PACKED_FPGA:
  433. .INCLUDE "fpga.inc"
  434. ;
  435. ;--------------------------------------
  436. ;
  437.