Subversion Repositories pentevo

Rev

Rev 411 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

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