Subversion Repositories pentevo

Rev

Rev 411 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
261 ddp 1
.NOLIST
290 ddp 2
.INCLUDE "m128def.inc"
3
.INCLUDE "_macros.asm"
695 chrv 4
.INCLUDE "deflang.inc"
261 ddp 5
.LIST
6
.LISTMAC
7
 
380 ddp 8
;.EQU    DEBUG_FPGA_OUT=1
9
 
10
.DEF    MODE1   =R10    ;глобальный регистр, (.7 - 0=VGAmode, 1=TVmode) читается из EEPROM
277 ddp 11
.DEF    LANG    =R11    ;глобальный регистр, язык интерфейса (умнож.на 2) читается из EEPROM
261 ddp 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
352 ddp 24
                        ;.3 - лог обмена SD в RS-232
25
                        ;.4 - RS-232 RTS/CTS flow control
261 ddp 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
411 ddp 62
.EQU    SCR_MODE        =$AF    ; .7 - 0=VGAmode, 1=TVmode; .2.1.0 - режимы;
261 ddp 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
380 ddp 83
 
84
.MACRO  LED_ON
85
        CBI     PORTB,7
86
.ENDMACRO
87
 
88
.MACRO  LED_OFF
89
        SBI     PORTB,7
90
.ENDMACRO
91
 
261 ddp 92
;
93
;--------------------------------------
94
;
95
.DSEG
277 ddp 96
                .ORG    $0300
261 ddp 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
 
277 ddp 103
                .ORG    $0400
104
BUFSECT:        ;буфер сектора
105
                .ORG    $0600
106
BUF4FAT:        ;временный буфер (FAT и т.п.)
107
                .ORG    $0800
261 ddp 108
MEGABUFFER:
277 ddp 109
                .ORG    RAMEND
261 ddp 110
HSTACK:
277 ddp 111
                .ORG    $0100
352 ddp 112
RND:            .BYTE   4
277 ddp 113
NEWFRAME:       .BYTE   1
114
GLB_STACK:      .BYTE   2
115
GLB_Y:          .BYTE   2
261 ddp 116
;
117
;--------------------------------------
118
;
119
.ESEG
380 ddp 120
                .ORG    $0F00
121
EE_DUMMY:       .DB     $54,$53
261 ddp 122
EE_MODE1:       .DB     $FF
695 chrv 123
EE_LANG:        .DB     DEF_LANG
261 ddp 124
;
125
;--------------------------------------
126
;
127
.CSEG
128
        .ORG    0
129
        JMP     START
380 ddp 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
261 ddp 164
 
165
        .DW     0,0
166
        .DB     "================"
352 ddp 167
        .DB     "  Test&Service  "
261 ddp 168
        .DB     "================"
169
;
170
;--------------------------------------
171
;
290 ddp 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"
261 ddp 182
;
183
;--------------------------------------
184
;обмен с регистрами в FPGA
185
;in:    TEMP == номер регистра
186
;       DATA == данные
187
;out:   DATA == данные
188
FPGA_REG:
189
        PUSH    DATA
380 ddp 190
.IFDEF DEBUG_FPGA_OUT
191
        CALL    DBG_SET_FPGA_REG
192
.ENDIF
261 ddp 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:
380 ddp 201
.IFDEF DEBUG_FPGA_OUT
202
        CALL    DBG_OUT_TO_FPGA
203
.ENDIF
261 ddp 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:
277 ddp 221
        PUSH    BITS
222
        IN      BITS,SREG
261 ddp 223
        SBRC    INT6VECT,0
224
        CALL    T_BEEP_INT
277 ddp 225
        SBRC    INT6VECT,1
226
        STS     NEWFRAME,ONE
227
        OUT     SREG,BITS
228
        POP     BITS
261 ddp 229
        RETI
230
;
231
;--------------------------------------
232
;
290 ddp 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"
352 ddp 242
.INCLUDE "_t_rs232.asm"
380 ddp 243
.IFDEF DEBUG_FPGA_OUT
244
.INCLUDE "__debug.asm"
245
.ENDIF
261 ddp 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
352 ddp 270
        ST      X+,FF
261 ddp 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
 
411 ddp 294
        LDI     TEMP,      0B11110011
261 ddp 295
        OUT     PORTE,TEMP
290 ddp 296
        LDI     TEMP,      0B00000000
261 ddp 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
; - - - - - - - - - - - - - - -
352 ddp 381
        LDIY    DSTACK
382
        LDIZ    MLMSG_DONE1*2
261 ddp 383
        CALL    PRINTMLSTR
352 ddp 384
;
385
        LDI     COUNT,0
386
        CALL    RANDOM ;note: используются особенности
380 ddp 387
        LDI     TEMP,SCR_ATTR
352 ddp 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
;
261 ddp 403
        DELAY_US 200
404
        CALL    UART_INIT
405
        CALL    PS2K_INIT
406
        CALL    TIMERS_INIT
277 ddp 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
261 ddp 413
        SEI
414
 
415
        MOV     DATA,MODE1
380 ddp 416
        ANDI    DATA,0B10000000
261 ddp 417
        LDI     TEMP,SCR_MODE
418
        CALL    FPGA_REG
277 ddp 419
        LDI     DATA,0B00000000
420
        LDI     TEMP,INT_CONTROL
421
        CALL    FPGA_REG
261 ddp 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
;
352 ddp 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
;
261 ddp 483
;NOTHING:RET
484
;
485
;--------------------------------------
486
;
487
.NOLIST
488
        .ORG    $7F80
489
TABL_SINUS:
290 ddp 490
.INCLUDE "sin256.inc"
261 ddp 491
        .ORG    $8000
492
PACKED_FPGA:
290 ddp 493
.INCLUDE "fpga.inc"
261 ddp 494
;
495
;--------------------------------------
496
;