Subversion Repositories pentevo

Rev

Rev 380 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

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