Subversion Repositories pentevo

Rev

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

Rev Author Line No. Line
261 ddp 1
;01234567890123456789012345678901234567890123456789012
277 ddp 2
;            ZX Evolution Service (101106)            00
261 ddp 3
;ĿĿ01    Ŀ
4
; Exit          ..           <DIR>31.12.0923:5802     室         
5
; Retrieve all  ~1     <DIR>31.12.0923:5803      ᭮     
551 ddp 6
;Erase chip    NEWFOL~1     <DIR>31.12.0923:5804      /. 
261 ddp 7
; Add job       testram  rom  204831.12.0923:5805     . 
8
; Execute jobs  filename rom52428831.12.0923:5806     믮     
9
;ٳzxevo    rom 6553631.12.0923:5807    
10
;Ŀtrdos503 rom 1638431.12.0923:5808    Ŀ
11
; Chip: M29F040 bigfile  bin3214 K31.12.0923:5809     ChipID: 20 E2 
12
; CRC: 12345678 verybig  bin4095 M31.12.0923:5810     CRC: 12345678 
13
; SDcard: FAT32 some     rom   12331.12.0923:5811      No SD-card!  
14
; Erase...      onemore  bin  987631.12.0923:5812     Verify...     
15
;13    
551 ddp 16
;Ŀ14
261 ddp 17
;gluk     rom trdos610 rom basic128 rom basic48  rom15     ᥪ஢(1)  .(4)  (8+3)  |  ⮣  祩 16
277 ddp 18
;............ ............ ............ ............16                                            |  ⮣     512
261 ddp 19
;............ ............ ............ ............17
20
;............ ............ ............ ............18
21
;............ ............ ............ ............19
22
;............ ............ ............ ............20
23
;............ ............ ............ ............21
24
;............ ............ ............ ............22
25
;23
26
;               http://www.NedoPC.com/                24
27
 
28
 
29
MSG_FL_CHIP:
30
        .DB     $16, 2, 9,$15,$9F,"Chip",0
31
MSG_FL_ID:
32
        .DB     "ID: ",0,0
33
MSG_FL_M29F040:
34
        .DB     ": M29F040",0
35
MSG_FL_AM29F040:
36
        .DB     ":Am29F040",0
37
MSG_FL_CRC:
38
        .DB     $16, 2,10,$15,$9F,"CRC: "        ,0,0
39
MSG_FL_SDCARD:
40
        .DB     $16, 2,11,        "SDcard: FAT"  ,0,0
41
MSG_FL_ERASECHIP:
551 ddp 42
        .DB     $16,1,4,$FB,0,0
261 ddp 43
MSG_FL_ERRPOS:
44
        .DB     $16, 1,11,$15,$AE,0
45
;
46
WIND_FL_MENU:
47
        .DB     0,1,17,7,$9F,$00
48
WIND_FL_STATUS:
49
        .DB     0,8,17,6,$9F,$00
50
WIND_FL_FILEPANEL:
51
        .DB     17,1,36,13,$9F,$00
52
WIND_FL_CONTENT:
53
        .DB     0,14,53,10,$9F,$00
54
WIND_FL_RESULT_OK:
55
        .DB     11,4,31,6,$CF,$01
56
WIND_FL_RESULT_FAIL:
57
        .DB     11,4,31,6,$AF,$01
58
;
59
FL_UNKNOWN:
60
        .DB     "    ????   ",0
61
FL_EMPTY:
62
        .DB     "   empty   ",0
63
FL_ZXBAS48:
64
        .DB     $A8,$02,$99,$0C ;0C9902A8
636 ddp 65
        .DB     "ZX Basic48 ",0
261 ddp 66
FL_ZXBAS128:
498 ddp 67
        .DB     $C8,$59,$C0,$83 ;83C059C8
636 ddp 68
        .DB     "ZX Basic128",0
261 ddp 69
FL_TRDOS:
498 ddp 70
        .DB     $71,$06,$7A,$7A ;7A7A0671
636 ddp 71
        .DB     "TR-DOS     ",0
261 ddp 72
FL_ALCOGLUKPEN:
73
        .DB     $44,$6F,$D7,$87 ;87D76F44
636 ddp 74
        .DB     "AlCoGLUKpen",0
75
FL_EMPT2:
76
        .DB     $AD,$33,$52,$BE ;BE5233AD
77
        .DB     " * empty*  ",0
411 ddp 78
FL_QC3:
79
        .DB     "QC 3"
636 ddp 80
        .DB     "QC3.xx     ",0
261 ddp 81
FL_ATM2CPM:
82
        .DB     $1E,$65,$1E,$B3 ;B31E651E
636 ddp 83
        .DB     "ATM2_CPM   ",0
261 ddp 84
FL_XBIOSMENU:
85
        .DB     $BC,$A4,$2C,$29 ;292CA4BC
636 ddp 86
        .DB     "xBIOS stmnu",0
261 ddp 87
FL_VTRDOS:
88
        .DB     $27,$2E,$23,$68 ;68232E27
636 ddp 89
        .DB     "vTR-dos    ",0
90
FL_TSBIOS:
91
        .DB     $FF,$63,$9B,$15 ;159B63FF
92
        .DB     "TS-BIOS    ",0
93
FL_PROFKA:
94
        .DB     "PROFKA     ",0
261 ddp 95
;
96
MSG_FP_DIR:
97
        .DB     " <DIR>",$B3,0
98
;
99
;
100
;
101
;--------------------------------------
102
;
103
.EQU    FL_CONTENT      =MEGABUFFER
277 ddp 104
.EQU    FL_BUFFER       =MEGABUFFER+512
261 ddp 105
.DSEG
106
FL_TMP0:        .BYTE   2
107
FL_TMP2:        .BYTE   1
108
.CSEG
109
;
110
;======================================
111
;⥭ ID Flash-ROM 稯
112
;out:   ZL,ZH
113
F_ID:   RCALL   F_RST
114
        LDI     DATA,$90
115
        RCALL   F_CMD
116
        LDI     TEMP,FLASH_CTRL
117
        LDI     DATA,0B00000011
118
        RCALL   FPGA_REG
119
        LDI     WL,$00
120
        LDI     WH,$00
121
        LDI     TMP2,$00
122
        RCALL   F_IN
123
        MOV     ZL,DATA
124
        LDI     WL,$01
125
        RCALL   F_IN
126
        MOV     ZH,DATA
127
        RJMP    F_RST
128
;
129
;--------------------------------------
130
; 512   Flash-ROM   BUFSECT
131
;in:    WL,WH == address (LO,MID)
132
;out:   W+512
133
F_WRITE512:
134
        LDIZ    BUFSECT
135
        LDIX    512
136
 
137
F_W5122:LD      DATA,Z
138
        CPI     DATA,$FF
139
        BREQ    F_W5123
140
        LDI     DATA,$A0
141
        RCALL   F_CMD
142
        LDI     TEMP,FLASH_CTRL
143
        LDI     DATA,0B00000001
144
        RCALL   FPGA_REG
145
        LDI     TEMP,FLASH_LOADDR
146
        MOV     DATA,WL
147
        RCALL   FPGA_REG
148
        LDI     TEMP,FLASH_MIDADDR
149
        MOV     DATA,WH
150
        RCALL   FPGA_REG
151
        LDI     TEMP,FLASH_DATA
152
        LD      DATA,Z
153
        RCALL   FPGA_REG
154
        LDI     TEMP,FLASH_CTRL
155
        LDI     DATA,0B00000101
156
        RCALL   FPGA_REG
157
        LDI     DATA,0B00000001
158
        RCALL   FPGA_SAME_REG
159
        LDI     DATA,0B00000011
160
        RCALL   FPGA_SAME_REG
161
        LDI     TEMP,FLASH_DATA
162
        RCALL   FPGA_REG
163
F_W5121:RCALL   FPGA_SAME_REG
164
        LD      TEMP,Z
165
        EOR     DATA,TEMP
166
        SBRC    DATA,7
167
        RJMP    F_W5121
168
 
169
F_W5123:ADIW    ZL,1
170
        ADIW    WL,1
171
        SBIW    XL,1
172
        BRNE    F_W5122
173
 
174
        RET
175
;
176
;--------------------------------------
177
;࠭ ᥣ 稯 Flash-ROM
178
F_CHIPERASE:
179
        LDI     DATA,$80
180
        RCALL   F_CMD
181
        LDI     DATA,$10
182
        RCALL   F_CMD
183
F_ERAS1:LDI     TEMP,FLASH_CTRL
184
        LDI     DATA,0B00000011
185
        RCALL   FPGA_REG
186
        LDI     TEMP,FLASH_DATA
187
        RCALL   FPGA_REG
188
F_ERAS9:RCALL   FPGA_SAME_REG
189
        SBRS    DATA,7
190
        RJMP    F_ERAS9
191
;
192
; - - - - - - - - - - - - - - - - - - -
193
; Flash-ROM 稯
194
F_RST:  LDI     DATA,$F0
195
        RCALL   F_CMD
196
        DELAY_US 5
197
        LDI     TEMP,FLASH_CTRL
198
        LDI     DATA,0B00000011
199
        RCALL   FPGA_REG
200
        RET
201
;
202
;--------------------------------------
203
;  Flash-ROM 稯
204
;in:    DATA == instructions
205
F_CMD:  PUSH    DATA
206
        LDI     TEMP,FLASH_CTRL
207
        LDI     DATA,0B00000001
208
        RCALL   FPGA_REG
209
        LDI     TEMP,FLASH_LOADDR
210
        LDI     DATA,$55
211
        RCALL   FPGA_REG
212
        LDI     TEMP,FLASH_MIDADDR
213
        LDI     DATA,$55
214
        RCALL   FPGA_REG
215
        LDI     TEMP,FLASH_DATA
216
        LDI     DATA,$AA
217
        RCALL   FPGA_REG
218
        LDI     TEMP,FLASH_CTRL
219
        LDI     DATA,0B00000101
220
        RCALL   FPGA_REG
221
        LDI     DATA,0B00000001
222
        RCALL   FPGA_SAME_REG
223
        LDI     TEMP,FLASH_LOADDR
224
        LDI     DATA,$AA
225
        RCALL   FPGA_REG
226
        LDI     TEMP,FLASH_MIDADDR
227
        LDI     DATA,$2A
228
        RCALL   FPGA_REG
229
        LDI     TEMP,FLASH_DATA
230
        LDI     DATA,$55
231
        RCALL   FPGA_REG
232
        LDI     TEMP,FLASH_CTRL
233
        LDI     DATA,0B00000101
234
        RCALL   FPGA_REG
235
        LDI     DATA,0B00000001
236
        RCALL   FPGA_SAME_REG
237
        LDI     TEMP,FLASH_LOADDR
238
        LDI     DATA,$55
239
        RCALL   FPGA_REG
240
        LDI     TEMP,FLASH_MIDADDR
241
        LDI     DATA,$55
242
        RCALL   FPGA_REG
243
        POP     DATA
244
F_WRD:  LDI     TEMP,FLASH_DATA
245
        RCALL   FPGA_REG
246
        LDI     TEMP,FLASH_CTRL
247
        LDI     DATA,0B00000101
248
        RCALL   FPGA_REG
249
        LDI     DATA,0B00000001
250
        RJMP    FPGA_SAME_REG
251
;
252
;--------------------------------------
253
;⥭   Flash-ROM
254
;in:    WL,WH,TMP2 == address
255
;out:   DATA == data
256
F_IN:   LDI     TEMP,FLASH_HIADDR
257
        MOV     DATA,TMP2
258
        RCALL   FPGA_REG
259
F_IN2:  LDI     TEMP,FLASH_MIDADDR
260
        MOV     DATA,WH
261
        RCALL   FPGA_REG
262
        LDI     TEMP,FLASH_LOADDR
263
        MOV     DATA,WL
264
        RCALL   FPGA_REG
265
        LDI     TEMP,FLASH_DATA
266
        LDI     DATA,$FF
267
        RJMP    FPGA_REG
268
;
269
;--------------------------------------
270
;in:    WH,TMP2 -  (mid,hi)  Flash-ROM
271
;       Z - 㤠 (  AVR-)
272
;       X - ᪮쪮 
273
F_READFLASH:; +   crc32, +  ...
290 ddp 274
        LDI     TEMP,FLASH_CTRL
275
        LDI     DATA,0B00001011
276
        RCALL   FPGA_REG
261 ddp 277
        CLR     WL
290 ddp 278
        RCALL   F_IN
279
        RJMP    F_RDFL2
280
F_RDFL1:RCALL   FPGA_SAME_REG
281
F_RDFL2:ST      Z+,DATA
261 ddp 282
        AND     COUNT,DATA
283
        CALL    CRC32_UPDATE
284
        ADIW    WL,1
285
        ADC     TMP2,NULL
286
        SBIW    XL,1
287
        BRNE    F_RDFL1
288
        RET
289
;
290
;======================================
291
;
292
.EQU    CRC32_0         =0
293
.EQU    CRC32_1         =1
294
.EQU    CRC32_2         =2
295
.EQU    CRC32_3         =3
296
.EQU    FLSH_ADR1       =4
297
.EQU    FLSH_ADR2       =5
298
.EQU    FLSH_COUNT      =6
299
.EQU    FLFP_BUFADR0    =7
300
.EQU    FLFP_BUFADR1    =8
301
.EQU    FLFP_TOTAL      =9
302
.EQU    FLFP_TOP        =10
303
.EQU    FLFP_SELECT     =11
304
.EQU    FLFP_CURSOR     =12
305
.EQU    FLSH_TEMP0      =13
306
.EQU    FLSH_TEMP1      =14
307
.EQU    FLSH_TEMP2      =15
308
.EQU    FLSH_TEMP3      =16
309
.EQU    FLSH_START      =17
310
.EQU    FLSH_SIZE       =18
311
.EQU    FLSH_ERASE      =19
312
.EQU    FLMNU_FLAGS     =20
313
.EQU    FLMNU_CURSOR    =21
314
.EQU    FLMEMSIZE       =22
315
;
316
.EQU    FLFP_HEIGHT     =11
317
.EQU    FLFP_WIDTH      =34
318
.EQU    FLFP_XPOS       =18
319
.EQU    FLFP_YPOS       =2
320
;
321
FLASHER:
322
        GETMEM  FLMEMSIZE
323
FL_REVERT:
324
        ANDI    FLAGS1,0B11111100
315 ddp 325
;        SBR     FLAGS1,0B00001000
261 ddp 326
        STH     FLSH_ERASE,NULL
327
        STH     FLMNU_FLAGS,NULL
328
        LDI     DATA,0B10000010
329
        STH     FLMNU_CURSOR,DATA
330
 
331
        LDIX    FL_CONTENT
332
        LDI     COUNT,32
333
FL_CLRCNT2:
334
        LDI     DATA,$80
335
        ST      X+,DATA
336
        LDI     TEMP,15
337
FL_CLRCNT1:
338
        ST      X+,NULL
339
        DEC     TEMP
340
        BRNE    FL_CLRCNT1
341
        DEC     COUNT
342
        BRNE    FL_CLRCNT2
343
 
344
        LDIZ    WIND_FL_MENU*2
345
        CALL    WINDOW
346
        LDIZ    WIND_FL_STATUS*2
347
        CALL    WINDOW
348
        LDIZ    WIND_FL_FILEPANEL*2
349
        CALL    WINDOW
350
        LDIZ    WIND_FL_CONTENT*2
351
        CALL    WINDOW
352
 
353
        LDIZ    MLMSG_FL_MENU*2
354
        CALL    SCR_PRINTMLSTR
355
        RCALL   FLMENU_PUTCURSOR
356
        LDI     DATA,0B00001111
357
        STH     FLMNU_FLAGS,DATA
358
; - - - - - - - - - - - - - - - - - - -
359
        LDIZ    MSG_FL_CHIP*2
360
        CALL    SCR_PRINTSTRZ
361
 
362
        RCALL   F_ID
363
        CPI     ZL,$01
364
        BRNE    FL_DET_CHIP1
365
        CPI     ZH,$A4
366
        BRNE    FL_DET_CHIP1
367
        LDIZ    MSG_FL_AM29F040*2
368
        RJMP    FL_DET_CHIP2
369
FL_DET_CHIP1:
370
        CPI     ZL,$20
371
        BRNE    FL_DET_CHIP8
372
        CPI     ZH,$E2
373
        BRNE    FL_DET_CHIP8
374
        LDIZ    MSG_FL_M29F040*2
375
FL_DET_CHIP2:
376
        CALL    SCR_PRINTSTRZ
377
        RJMP    FL_DET_CHIP9
378
 
379
FL_DET_CHIP8:
380
        PUSHZ
381
        LDIZ    MSG_FL_ID*2
382
        CALL    SCR_PRINTSTRZ
383
        POPZ
384
        MOV     DATA,ZL
385
        CALL    HEXBYTE
386
        LDI     DATA,$20
387
        CALL    PUTCHAR
388
        MOV     DATA,ZH
389
        CALL    HEXBYTE
390
FL_DET_CHIP9:
391
; - - - - - - - - - - - - - - - - - - -
392
        LDIZ    MLMSG_FL_READROM*2
393
        CALL    SCR_PRINTMLSTR
394
        STH     FLSH_START,FF
395
        STH     FLSH_SIZE,NULL
396
        RCALL   FL_SHOWCONTENT
397
 
398
        RCALL   CRC32_INIT
399
        CLR     COUNT
400
        CLR     WH
401
        CLR     TMP2
636 ddp 402
FL_DET_ROM_00:
261 ddp 403
        STH     FLSH_COUNT,COUNT
404
        STH     FLSH_ADR1,WH
405
        STH     FLSH_ADR2,TMP2
406
        LDIZ    FL_UNKNOWN*2
407
        STSZ    FL_TMP0
636 ddp 408
        SER     COUNT
261 ddp 409
 
410
        LDIZ    FL_BUFFER
411
        LDIX    $0400
412
        RCALL   F_READFLASH
413
        STS     FL_TMP2,COUNT
414
 
415
        GETMEM  4
636 ddp 416
        LDIZ    FL_BUFFER+$00FF
417
        LD      DATA,Z+
418
        CPI     DATA,$02
419
        BRNE    FL_DET_ROM_10
420
        LD      DATA,Z+
421
        CPI     DATA,$01
422
        BRNE    FL_DET_ROM_11
423
        ADIW    ZL,1
424
        LD      DATA,Z+
425
        CPI     DATA,$C9
426
        BRNE    FL_DET_ROM_11
427
        LDIZ    FL_PROFKA*2
428
        RJMP    FL_DET_ROM_12
429
 
430
FL_DET_ROM_10:
431
        CPI     DATA,$14
432
        BRNE    FL_DET_ROM_11
433
        LD      DATA,Z+
434
        CPI     DATA,$01
435
        BRNE    FL_DET_ROM_11
436
        LD      DATA,Z+
437
        CPI     DATA,$06
438
        BRNE    FL_DET_ROM_11
439
        LDIZ    FL_PROFKA*2
440
        RJMP    FL_DET_ROM_12
441
 
442
FL_DET_ROM_11:
261 ddp 443
        LDIZ    FL_BUFFER+$0096
444
        LDIX    $016F
445
        RCALL   RAM_CRC32
446
        LDIZ    FL_ZXBAS48*2
447
        RCALL   FL_CRC_CMP
636 ddp 448
        BREQ    FL_DET_ROM_12
261 ddp 449
 
498 ddp 450
        LDIZ    FL_BUFFER+$0080
451
        LDIX    $0080
261 ddp 452
        RCALL   RAM_CRC32
453
        LDIZ    FL_ZXBAS128*2
454
        RCALL   FL_CRC_CMP
636 ddp 455
        BREQ    FL_DET_ROM_12
261 ddp 456
 
457
        LDIZ    FL_BUFFER+$0363
458
        LDIX    $0008
459
        RCALL   RAM_CRC32
460
        LDIZ    FL_VTRDOS*2
461
        RCALL   FL_CRC_CMP
636 ddp 462
        BREQ    FL_DET_ROM_12
261 ddp 463
 
464
        LDIZ    FL_BUFFER+$0000
465
        LDIX    $0007
466
        RCALL   RAM_CRC32
467
        LDIZ    FL_XBIOSMENU*2
468
        RCALL   FL_CRC_CMP
636 ddp 469
        BREQ    FL_DET_ROM_12
261 ddp 470
 
471
        LDIZ    FL_BUFFER+$0000
636 ddp 472
        LDIX    $0010
473
        RCALL   RAM_CRC32
474
        LDIZ    FL_TSBIOS*2
475
        RCALL   FL_CRC_CMP
476
        BREQ    FL_DET_ROM_12
477
 
478
        LDIZ    FL_BUFFER+$0000
261 ddp 479
        LDIX    $0038
480
        RCALL   RAM_CRC32
481
        LDIZ    FL_ATM2CPM*2
482
        RCALL   FL_CRC_CMP
636 ddp 483
        BRNE    FL_DET_ROM_13
484
FL_DET_ROM_12:
261 ddp 485
        STSZ    FL_TMP0
636 ddp 486
FL_DET_ROM_13:
261 ddp 487
        FREEMEM 4
488
 
489
        CLR     WL
490
        LDH     WH,FLSH_ADR1
491
        ADDI    WH,$04
492
        LDH     TMP2,FLSH_ADR2
493
        LDIX    $3800
290 ddp 494
        LDI     TEMP,FLASH_CTRL
495
        LDI     DATA,0B00001011
496
        RCALL   FPGA_REG
261 ddp 497
        LDS     COUNT,FL_TMP2
290 ddp 498
        RCALL   F_IN
636 ddp 499
        RJMP    FL_DET_ROM_21
500
FL_DET_ROM_20:
290 ddp 501
        RCALL   FPGA_SAME_REG
636 ddp 502
FL_DET_ROM_21:
261 ddp 503
        AND     COUNT,DATA
504
        RCALL   CRC32_UPDATE
505
        ADIW    WL,1
506
        SBIW    XL,1
636 ddp 507
        BRNE    FL_DET_ROM_20
261 ddp 508
        STS     FL_TMP2,COUNT
509
 
510
        LDH     WH,FLSH_ADR1
511
        ADDI    WH,$3C
512
        LDH     TMP2,FLSH_ADR2
513
        LDIZ    FL_BUFFER
514
        LDIX    $0400
515
        RCALL   F_READFLASH
516
        LDIZ    FL_EMPTY*2
517
        INC     COUNT
636 ddp 518
        BRNE    FL_DET_ROM_30
261 ddp 519
        STSZ    FL_TMP0
636 ddp 520
FL_DET_ROM_30:
261 ddp 521
 
522
        GETMEM  4
523
 
411 ddp 524
        LDIZ    FL_BUFFER+$019B
525
        LDD     R0,Z+0
526
        LDD     R1,Z+1
527
        LDD     R2,Z+2
528
        LDD     R3,Z+3
529
        LDIZ    FL_QC3*2
530
        RCALL   FL_CRC_CMP
636 ddp 531
        BREQ    FL_DET_ROM_32
411 ddp 532
 
261 ddp 533
        LDIZ    FL_BUFFER+$012F
534
        LDIX    $0209
535
        RCALL   RAM_CRC32
536
        LDIZ    FL_ALCOGLUKPEN*2
537
        RCALL   FL_CRC_CMP
636 ddp 538
        BREQ    FL_DET_ROM_32
539
        LDIZ    FL_EMPT2*2
540
        RCALL   FL_CRC_CMP
541
        BRNE    FL_DET_ROM_31
542
        LDS     DATA,FL_TMP2
543
        INC     DATA
544
        BREQ    FL_DET_ROM_32
261 ddp 545
 
636 ddp 546
FL_DET_ROM_31:
498 ddp 547
        LDIZ    FL_BUFFER+$03B0
548
        LDIX    $0040
261 ddp 549
        RCALL   RAM_CRC32
550
        LDIZ    FL_TRDOS*2
551
        RCALL   FL_CRC_CMP
636 ddp 552
        BRNE    FL_DET_ROM_33
553
FL_DET_ROM_32:
261 ddp 554
        STSZ    FL_TMP0
636 ddp 555
FL_DET_ROM_33:
556
 
261 ddp 557
        FREEMEM 4
558
 
636 ddp 559
        LDIZ    FL_BUFFER+$03F8
560
        LDI     COUNT,6
561
FL_DET_ROM_34:
562
        LD      DATA,Z+
563
        CPI     DATA,$20
564
        BRCS    FL_DET_ROM_37
565
        CPI     DATA,$7F
566
        BRCC    FL_DET_ROM_37
567
        DEC     COUNT
568
        BRNE    FL_DET_ROM_34
569
 
570
        LDIZ    FL_BUFFER+$03F8
571
        LDIX    FL_CONTENT+5
572
        LDH     DATA,FLSH_COUNT
573
        LDI     TEMP,16
574
        MUL     DATA,TEMP
575
        ADD     XL,R0
576
        ADC     XH,R1
577
        LDI     COUNT,6
578
FL_DET_ROM_35:
579
        LD      DATA,Z+
580
        ST      X+,DATA
581
        DEC     COUNT
582
        BRNE    FL_DET_ROM_35
583
        LDI     COUNT,5
584
FL_DET_ROM_36:
585
        ST      X+,NULL
586
        DEC     COUNT
587
        BRNE    FL_DET_ROM_36
588
        RJMP    FL_DET_ROM_40
589
 
590
FL_DET_ROM_37:
261 ddp 591
        LDSZ    FL_TMP0
592
        LDIX    FL_CONTENT+5
593
        LDH     DATA,FLSH_COUNT
594
        LDI     TEMP,16
595
        MUL     DATA,TEMP
596
        ADD     XL,R0
597
        ADC     XH,R1
598
        LDI     COUNT,11
636 ddp 599
FL_DET_ROM_38:
261 ddp 600
        LPM     DATA,Z+
601
        ST      X+,DATA
602
        DEC     COUNT
636 ddp 603
        BRNE    FL_DET_ROM_38
604
 
605
FL_DET_ROM_40:
261 ddp 606
        RCALL   FL_SHOWCONTENT
607
 
608
        CALL    INKEY
636 ddp 609
        BREQ    FL_DET_ROM_41
261 ddp 610
        SBRC    TEMP,PS2K_BIT_EXTKEY
636 ddp 611
        RJMP    FL_DET_ROM_41
261 ddp 612
        CPI     DATA,KEY_ESC
636 ddp 613
        BRNE    FL_DET_ROM_41
261 ddp 614
        RJMP    FLSH_EXIT
636 ddp 615
FL_DET_ROM_41:
261 ddp 616
        LDH     WH,FLSH_ADR1
617
        LDH     TMP2,FLSH_ADR2
618
        LDI     TEMP,$40
619
        ADD     WH,TEMP
620
        ADC     TMP2,NULL
621
        LDH     COUNT,FLSH_COUNT
622
        INC     COUNT
623
        SBRS    COUNT,5 ; COUNT==32 ?
636 ddp 624
        RJMP    FL_DET_ROM_00
261 ddp 625
 
626
        RCALL   CRC32_RELEASE
627
        LDIZ    MSG_FL_CRC*2
628
        CALL    SCR_PRINTSTRZ
629
        LDH     DATA,CRC32_3
630
        CALL    HEXBYTE
631
        LDH     DATA,CRC32_2
632
        CALL    HEXBYTE
633
        LDH     DATA,CRC32_1
634
        CALL    HEXBYTE
635
        LDH     DATA,CRC32_0
636
        CALL    HEXBYTE
637
; - - - - - - - - - - - - - - - - - - -
638
        LDIZ    MLMSG_FL_SDINIT*2
639
        CALL    SCR_PRINTMLSTR
640
 
641
        IN      TEMP,SPL
277 ddp 642
        STS     GLB_STACK+0,TEMP
261 ddp 643
        IN      TEMP,SPH
277 ddp 644
        STS     GLB_STACK+1,TEMP
645
        STS     GLB_Y+0,YL
646
        STS     GLB_Y+1,YH
261 ddp 647
        LDIZ    FL_ERRHANDLER
648
        RCALL   SD_FAT_INIT
649
 
650
        PUSHX
651
        PUSHW
652
        LDIZ    MSG_FL_SDCARD*2
653
        CALL    SCR_PRINTSTRZ
654
        LDS     TMP2,FAT_CAL_FAT
655
        LDI     DATA,$31 ;"1"
656
        LDI     TEMP,$32 ;"2"
657
        TST     TMP2
658
        BREQ    FP_SDI1
659
        LDI     TEMP,$36 ;"6"
660
        DEC     TMP2
661
        BREQ    FP_SDI1
662
        LDI     DATA,$33 ;"3"
663
        LDI     TEMP,$32 ;"2"
664
FP_SDI1:PUSH    TEMP
665
        CALL    SCR_PUTCHAR
666
        POP     DATA
667
        CALL    SCR_PUTCHAR
668
        POPW
669
        POPX
670
 
671
        RCALL   FP_RD_DIR
672
        STH     FLFP_CURSOR,FF
673
        RCALL   FP_OUT
674
        STH     FLFP_CURSOR,NULL
675
; - - - - - - - - - - - - - - - - - - -
676
FLMENU1:LDH     DATA,FLMNU_CURSOR
677
        ANDI    DATA,0B00011111
678
FLMENU2:STH     FLMNU_CURSOR,DATA
679
        RCALL   FLMENU_PUTCURSOR
680
FLMENU0:CALL    WAITKEY
681
        CPI     DATA,KEY_UP
682
        BREQ    FLMENU_UP
683
        CPI     DATA,KEY_DOWN
684
        BREQ    FLMENU_DOWN
685
        CPI     DATA,KEY_ENTER
686
        BREQ    FLMENU_ENTER
687
        CPI     DATA,KEY_ESC
688
        BRNE    FLMENU0
689
        LDI     DATA,0B00000001
690
        RJMP    FLMENU2
691
;
692
FLMENU_UP:
693
        LDH     DATA,FLMNU_CURSOR
694
FLMENU_U1:
695
        LSR     DATA
696
        BRCS    FLMENU0
697
        LDH     TEMP,FLMNU_FLAGS
698
        AND     TEMP,DATA
699
        BRNE    FLMENU_U2
700
        RJMP    FLMENU_U1
701
FLMENU_U2:
702
        STH     FLMNU_CURSOR,DATA
703
        RJMP    FLMENU1
704
;
705
FLMENU_DOWN:
706
        LDH     DATA,FLMNU_CURSOR
707
FLMENU_D1:
708
        LSL     DATA
709
        BRCS    FLMENU0
710
        LDH     TEMP,FLMNU_FLAGS
711
        AND     TEMP,DATA
712
        BRNE    FLMENU_U2
713
        RJMP    FLMENU_D1
714
;
715
FLMENU_ENTER:
716
        LDH     DATA,FLMNU_CURSOR
717
        LDH     TEMP,FLMNU_FLAGS
718
        AND     DATA,TEMP
719
        BREQ    FLMENU0
720
        LSR     DATA
721
        BRCC    FLMENU_E1
722
FLSH_EXIT:
723
        FREEMEM FLMEMSIZE
724
        RET
725
FLMENU_E1:
726
        LSR     DATA
727
        BRCC    FLMENU_E2
728
        RJMP    FL_REVERT
729
FLMENU_E2:
730
        LSR     DATA
731
        BRCC    FLMENU_E3
732
        RJMP    FL_ERASEJOB
733
FLMENU_E3:
734
        LSR     DATA
735
        BRCC    FLMENU_E4
736
        LDH     DATA,FLMNU_CURSOR
737
        ORI     DATA,0B10000000
738
        STH     FLMNU_CURSOR,DATA
739
        RCALL   FLMENU_PUTCURSOR
740
        RJMP    FP_FS1
741
FLMENU_E4:
742
        LSR     DATA
743
        BRCS    FLMENU_E5
744
        RJMP    FLMENU0
745
;
746
FLMENU_E5: ; execute job(s)
315 ddp 747
;        SBR     FLAGS1,0B00001000
261 ddp 748
        LDH     DATA,FLMNU_CURSOR
749
        ORI     DATA,0B10000000
750
        STH     FLMNU_CURSOR,DATA
751
        RCALL   FLMENU_PUTCURSOR
752
 
753
        LDIZ    MLMSG_FL_SURE*2
754
        CALL    SCR_PRINTMLSTR
755
        CALL    WAITKEY
756
        SBRC    TEMP,PS2K_BIT_EXTKEY
757
        RJMP    FL_EX01
758
        CPI     DATA,KEY_Y
759
        BREQ    FL_EX09
760
FL_EX01:LDI     XL,2
761
        LDI     XH,12
762
        CALL    SCR_SET_CURSOR
763
        LDI     DATA,$20
764
        LDI     TEMP,$9F
765
        LDI     COUNT,13
766
        CALL    SCR_FILL_CHAR_ATTR
767
        RJMP    FLMENU1
768
FL_EX09:
769
;
770
        LDI     TEMP,$0E
771
        CALL    SCR_SET_ATTR
772
        LDH     DATA,FLSH_ERASE
773
        LDI     COUNT,0
774
FL_EX12:LSR     DATA
775
        BRCC    FL_EX11
776
 
777
        PUSH    DATA
778
        PUSH    COUNT
779
        LSL     COUNT
780
        LSL     COUNT
781
        PUSH    COUNT
782
        RCALL   FL_SHW_SETCURSOR
783
        LDI     DATA,$45;"E"
784
        LDI     COUNT,12
785
        CALL    SCR_FILL_CHAR
786
        POP     COUNT
787
        INC     COUNT
788
        PUSH    COUNT
789
        RCALL   FL_SHW_SETCURSOR
790
        LDI     DATA,$45;"E"
791
        LDI     COUNT,12
792
        CALL    SCR_FILL_CHAR
793
        POP     COUNT
794
        INC     COUNT
795
        PUSH    COUNT
796
        RCALL   FL_SHW_SETCURSOR
797
        LDI     DATA,$45;"E"
798
        LDI     COUNT,12
799
        CALL    SCR_FILL_CHAR
800
        POP     COUNT
801
        INC     COUNT
802
        RCALL   FL_SHW_SETCURSOR
803
        LDI     DATA,$45;"E"
804
        LDI     COUNT,12
805
        CALL    SCR_FILL_CHAR
806
        POP     COUNT
807
        POP     DATA
808
 
809
FL_EX11:INC     COUNT
810
        CPI     COUNT,8
811
        BRNE    FL_EX12
812
 
813
        LDIZ    MLMSG_FL_ERASE*2
814
        CALL    SCR_PRINTMLSTR
815
        LDH     DATA,FLSH_ERASE
816
        CPI     DATA,$FF
817
        BRNE    FL_EX15
818
        RCALL   F_CHIPERASE
819
        RJMP    FL_EX20
820
FL_EX15:
821
        LDI     TMP2,$FF
822
FL_EX16:INC     TMP2
823
        LSR     DATA
824
        BRCC    FL_EX16
825
        PUSH    DATA
826
        PUSH    TMP2
827
        LDI     DATA,$80
828
        RCALL   F_CMD
829
        LDI     TEMP,FLASH_HIADDR
830
        POP     DATA
831
        PUSH    DATA
832
        CALL    FPGA_REG
833
        LDI     DATA,$30
834
        RCALL   F_CMD
835
        POP     TMP2
836
        POP     DATA
837
FL_EX18:INC     TMP2
838
        CPI     TMP2,8
839
        BRCC    FL_EX17
840
        LSR     DATA
841
        BRCC    FL_EX18
842
        PUSH    DATA
843
        PUSH    TMP2
844
        LDI     TEMP,FLASH_HIADDR
845
        MOV     DATA,TMP2
846
        CALL    FPGA_REG
847
        LDI     DATA,$30
848
        RCALL   F_WRD
849
        POP     TMP2
850
        POP     DATA
851
        RJMP    FL_EX18
852
FL_EX17:
853
        LDI     TEMP,FLASH_CTRL
854
        LDI     DATA,0B00000011
855
        CALL    FPGA_REG
856
        LDI     TEMP,FLASH_DATA
857
        CALL    FPGA_REG
858
FL_EX19:CALL    FPGA_SAME_REG
859
        SBRS    DATA,3
860
        RJMP    FL_EX19
861
        RCALL   F_ERAS1
862
FL_EX20:
863
;
864
        LDIZ    MLMSG_FL_WRITE*2
865
        CALL    SCR_PRINTMLSTR
866
        LDI     TEMP,$0A
867
        CALL    SCR_SET_ATTR
868
 
869
        LDI     COUNT,0
870
FL_EX30:STH     FLSH_COUNT,COUNT
871
        LDIZ    FL_CONTENT
872
        LDI     TEMP,16
873
        MUL     TEMP,COUNT
874
        ADD     ZL,R0
875
        ADC     ZH,R1
876
        LD      WL,Z
877
        ANDI    WL,$3F
878
        BREQ    FL_EX390
879
        CPI     WL,33
880
        BRCS    FL_EX31
881
FL_EX390:RJMP   FL_EX39
882
FL_EX31:STH     FLSH_SIZE,WL
883
        CLR     WH
884
        CLR     XL
885
        CLR     XH
886
        LD      TEMP,Z
887
        SBRC    TEMP,6
888
        ADIW    WL,32
889
        SBIW    WL,1
890
        LDS     DATA,FAT_BYTSSEC
891
        DEC     DATA
892
        AND     DATA,WL
893
        INC     DATA
894
        STS     FAT_MPHWOST,DATA
895
        LDS     DATA,FAT_BYTSSEC
896
        RCALL   BCDE_A
897
        STSW    FAT_KOL_CLS+0
898
        STSX    FAT_KOL_CLS+2
899
        STS     FAT_NUMSECK,NULL
900
        LDD     WL,Z+1
901
        LDD     WH,Z+2
902
        LDD     XL,Z+3
903
        LDD     XH,Z+4
904
        STSW    FAT_TFILCLS+0
905
        STSX    FAT_TFILCLS+2
906
 
907
        LD      TEMP,Z
908
        SBRS    TEMP,6
909
        RJMP    FL_EX32
910
        LDI     COUNT,32
911
FL_EX33:PUSH    COUNT
912
        RCALL   NEXTSEC
913
        POP     COUNT
914
        DEC     COUNT
915
        BRNE    FL_EX33
916
 
917
FL_EX32:LDH     COUNT,FLSH_COUNT
918
        RCALL   FL_SHW_SETCURSOR
919
        CLR     WH
920
        LDH     TMP2,FLSH_COUNT
921
        LSR     TMP2
922
        ROR     WH
923
        LSR     TMP2
924
        ROR     WH
925
        LDI     TEMP,FLASH_HIADDR
926
        MOV     DATA,TMP2
927
        CALL    FPGA_REG
928
        LDIX    1365 ;16384/12
929
FL_EX35:STH     FLSH_TEMP0,XL
930
        STH     FLSH_TEMP1,XH
931
        PUSH    WH
932
        RCALL   NEXTSEC
933
        POP     WH
934
        CLR     WL
935
        RCALL   F_WRITE512
936
        LDH     XL,FLSH_TEMP0
937
        LDH     XH,FLSH_TEMP1
938
        SUBI    XH,2 ;HIGH(512)
939
        BRCC    FL_EX34
940
        LDI     DATA,$57;"W"
941
        CALL    SCR_PUTCHAR
942
        LDI     TEMP,LOW(1365)
943
        ADD     XL,TEMP
944
        LDI     TEMP,HIGH(1365)
945
        ADC     XH,TEMP
946
FL_EX34:LDH     TEMP,FLSH_SIZE
947
        DEC     TEMP
948
        STH     FLSH_SIZE,TEMP
949
        BRNE    FL_EX35
950
 
951
FL_EX39:LDH     COUNT,FLSH_COUNT
952
        INC     COUNT
953
        SBRS    COUNT,5 ;COUNT=32
954
        RJMP    FL_EX30
955
;
956
        RCALL   F_RST
957
        LDI     TEMP,FLASH_CTRL
958
        LDI     DATA,0B00000011
959
        CALL    FPGA_REG
960
 
961
        LDIZ    MLMSG_FL_VERIFY*2
962
        CALL    SCR_PRINTMLSTR
963
 
636 ddp 964
        STH     FLSH_TEMP3,NULL
261 ddp 965
        LDI     COUNT,0
966
FL_EX40:STH     FLSH_COUNT,COUNT
967
        LDIZ    FL_CONTENT
968
        LDI     TEMP,16
969
        MUL     TEMP,COUNT
970
        ADD     ZL,R0
971
        ADC     ZH,R1
972
        LD      WL,Z
973
        ANDI    WL,$3F
974
        BREQ    FL_EX490
975
        CPI     WL,33
976
        BRCS    FL_EX41
977
FL_EX490:RJMP   FL_EX49
978
FL_EX41:STH     FLSH_SIZE,WL
979
        CLR     WH
980
        CLR     XL
981
        CLR     XH
982
        LD      TEMP,Z
983
        SBRC    TEMP,6
984
        ADIW    WL,32
985
        SBIW    WL,1
986
        LDS     DATA,FAT_BYTSSEC
987
        DEC     DATA
988
        AND     DATA,WL
989
        INC     DATA
990
        STS     FAT_MPHWOST,DATA
991
        LDS     DATA,FAT_BYTSSEC
992
        RCALL   BCDE_A
993
        STSW    FAT_KOL_CLS+0
994
        STSX    FAT_KOL_CLS+2
995
        STS     FAT_NUMSECK,NULL
996
        LDD     WL,Z+1
997
        LDD     WH,Z+2
998
        LDD     XL,Z+3
999
        LDD     XH,Z+4
1000
        STSW    FAT_TFILCLS+0
1001
        STSX    FAT_TFILCLS+2
1002
 
1003
        LD      TEMP,Z
1004
        SBRS    TEMP,6
1005
        RJMP    FL_EX42
1006
        LDI     COUNT,32
1007
FL_EX43:PUSH    COUNT
1008
        RCALL   NEXTSEC
1009
        POP     COUNT
1010
        DEC     COUNT
1011
        BRNE    FL_EX43
1012
 
1013
FL_EX42:LDH     COUNT,FLSH_COUNT
1014
        RCALL   FL_SHW_SETCURSOR
1015
        CLR     WH
1016
        LDH     TMP2,FLSH_COUNT
1017
        LSR     TMP2
1018
        ROR     WH
1019
        LSR     TMP2
1020
        ROR     WH
1021
        LDI     TEMP,FLASH_HIADDR
1022
        MOV     DATA,TMP2
1023
        CALL    FPGA_REG
1024
        STH     FLSH_TEMP2,NULL
1025
        LDIX    1365 ;16384/12
1026
FL_EX45:STH     FLSH_TEMP0,XL
1027
        STH     FLSH_TEMP1,XH
1028
        PUSH    WH
1029
        RCALL   NEXTSEC
1030
        POP     WH
1031
        CLR     WL
1032
 
1033
        LDIZ    BUFSECT
1034
        LDIX    512
290 ddp 1035
        LDI     TEMP,FLASH_CTRL
1036
        LDI     DATA,0B00001011
1037
        CALL    FPGA_REG
1038
        RCALL   F_IN2
1039
        RJMP    FL_EX48
1040
FL_EX47:CALL    FPGA_SAME_REG
1041
FL_EX48:LD      TEMP,Z+
261 ddp 1042
        CP      DATA,TEMP
1043
        BREQ    FL_EX46
1044
        STH     FLSH_TEMP2,ONE
1045
        STH     FLSH_TEMP3,ONE
1046
FL_EX46:ADIW    WL,1
1047
        SBIW    XL,1
1048
        BRNE    FL_EX47
1049
 
1050
        LDH     XL,FLSH_TEMP0
1051
        LDH     XH,FLSH_TEMP1
1052
        SUBI    XH,2 ;HIGH(512)
1053
        BRCC    FL_EX44
1054
        LDH     DATA,FLSH_TEMP2
1055
        LDI     TEMP,$0C
1056
        SBRC    DATA,0
1057
        LDI     TEMP,$AE
1058
        CALL    SCR_SET_ATTR
1059
        LDI     DATA,$56;"V"
1060
        CALL    SCR_PUTCHAR
1061
        STH     FLSH_TEMP2,NULL
1062
        LDI     TEMP,LOW(1365)
1063
        ADD     XL,TEMP
1064
        LDI     TEMP,HIGH(1365)
1065
        ADC     XH,TEMP
1066
FL_EX44:LDH     TEMP,FLSH_SIZE
1067
        DEC     TEMP
1068
        STH     FLSH_SIZE,TEMP
1069
        BRNE    FL_EX45
1070
 
1071
FL_EX49:LDH     COUNT,FLSH_COUNT
1072
        INC     COUNT
1073
        SBRS    COUNT,5 ;COUNT=32
1074
        RJMP    FL_EX40
1075
;
1076
        LDIZ    MLMSG_FL_COMPLETE*2
1077
        CALL    SCR_PRINTMLSTR
1078
 
1079
        LDIZ    WIND_FL_RESULT_OK*2
1080
        LDH     DATA,FLSH_TEMP3
1081
        TST     DATA
1082
        BREQ    FL_EX91
1083
        LDIZ    WIND_FL_RESULT_FAIL*2
1084
FL_EX91:CALL    WINDOW
1085
        LDIZ    MLMSG_FLRES0*2
1086
        CALL    SCR_PRINTMLSTR
1087
 
1088
        LDIZ    MLMSG_FLRES1*2
1089
        LDH     DATA,FLSH_TEMP3
636 ddp 1090
        TST     DATA
261 ddp 1091
        BREQ    FL_EX92
1092
        LDIZ    MLMSG_FLRES2*2
1093
FL_EX92:CALL    SCR_PRINTMLSTR
1094
 
1095
        CALL    WAITKEY
1096
        RJMP    FL_REVERT
1097
;
1098
;--------------------------------------
1099
;
1100
FL_ERRHANDLER:
1101
        CLI
277 ddp 1102
        LDS     TEMP,GLB_STACK+0
261 ddp 1103
        OUT     SPL,TEMP
277 ddp 1104
        LDS     TEMP,GLB_STACK+1
261 ddp 1105
        OUT     SPH,TEMP
277 ddp 1106
        LDS     YL,GLB_Y+0
1107
        LDS     YH,GLB_Y+1
261 ddp 1108
        SEI
1109
        PUSH    DATA
1110
        LDIZ    MSG_FL_ERRPOS*2
1111
        CALL    SCR_PRINTSTRZ
1112
        POP     DATA
1113
        LDIZ    MLMSG_FL_SDERROR1*2
1114
        CPI     DATA,1
1115
        BREQ    FL_ERRHNDL1
1116
        LDIZ    MLMSG_FL_SDERROR2*2
1117
        CPI     DATA,2
1118
        BREQ    FL_ERRHNDL1
1119
        LDIZ    MLMSG_FL_SDERROR3*2
1120
        CPI     DATA,3
1121
        BREQ    FL_ERRHNDL1
277 ddp 1122
        LDIZ    MLMSG_FL_SDERROR4*2
1123
        CPI     DATA,4
1124
        BREQ    FL_ERRHNDL1
261 ddp 1125
        LDIZ    MLMSG_FL_SDERRORX*2
1126
FL_ERRHNDL1:
1127
        CALL    SCR_PRINTMLSTR
1128
        LDI     DATA,0B00000111
1129
        STH     FLMNU_FLAGS,DATA
1130
        LDI     DATA,0B00000010
1131
        RJMP    FLMENU2
1132
;
1133
;--------------------------------------
1134
;
1135
FL_ERASEJOB:
1136
        LDIX    FL_CONTENT
1137
        LDI     TEMP,0B00000001
1138
FL_EJB5:LDH     DATA,FLSH_ERASE
1139
        AND     DATA,TEMP
1140
        BRNE    FL_EJB1
1141
        LDH     DATA,FLSH_ERASE
1142
        OR      DATA,TEMP
1143
        STH     FLSH_ERASE,DATA
1144
        LDI     COUNT,4
1145
FL_EJB3:ST      X+,NULL
1146
        ST      X+,NULL
1147
        ST      X+,NULL
1148
        ST      X+,NULL
1149
        ST      X+,NULL
1150
        LDIZ    FL_EMPTY*2
1151
        LDI     WL,11
1152
FL_EJB2:LPM     DATA,Z+
1153
        ST      X+,DATA
1154
        DEC     WL
1155
        BRNE    FL_EJB2
1156
        DEC     COUNT
1157
        BRNE    FL_EJB3
1158
        RJMP    FL_EJB4
1159
FL_EJB1:ADIW    XL,32
1160
        ADIW    XL,32
1161
FL_EJB4:LSL     TEMP
1162
        BRCC    FL_EJB5
1163
        LDH     DATA,FLMNU_FLAGS
1164
        ORI     DATA,0B00010000
1165
        STH     FLMNU_FLAGS,DATA
1166
        RCALL   FL_SHOWCONTENT
1167
        RJMP    FLMENU1
1168
;
1169
;--------------------------------------
1170
;
1171
FP_FS1: RCALL   FP_OUT
1172
FP_FS0: CALL    WAITKEY
1173
        CPI     DATA,KEY_UP
1174
        BREQ    FP_1_UP
1175
        CPI     DATA,KEY_DOWN
1176
        BREQ    FP_1_DOWN
1177
        CPI     DATA,KEY_PAGEUP
1178
        BREQ    FP_P_UP
1179
        CPI     DATA,KEY_PAGEDOWN
1180
        BREQ    FP_P_DOWN
1181
        CPI     DATA,KEY_HOME
1182
        BREQ    FP_BEGIN
1183
        CPI     DATA,KEY_END
1184
        BREQ    FP_END
1185
        CPI     DATA,KEY_ENTER
1186
        BREQ    FP_ENTER
1187
        CPI     DATA,KEY_ESC
1188
        BRNE    FP_FS0
1189
 
1190
        LDH     XH,FLFP_CURSOR
1191
        ADDI    XH,FLFP_YPOS
1192
        LDI     XL,FLFP_XPOS
1193
        CALL    SCR_SET_CURSOR
1194
        LDI     TEMP,$9F
1195
        LDI     COUNT,FLFP_WIDTH
1196
        CALL    SCR_FILL_ATTR
1197
        RJMP    FLMENU1
1198
;
1199
FP_END: RJMP    FP_END0
1200
FP_ENTER:RJMP   FP_ENTER0
1201
;
1202
FP_1_UP:
1203
        LDH     DATA,FLFP_SELECT
1204
        TST     DATA
1205
        BREQ    FP_FS0
1206
        DEC     DATA
1207
        STH     FLFP_SELECT,DATA
1208
        LDH     DATA,FLFP_CURSOR
1209
        TST     DATA
1210
        BREQ    FP_1_UP1
1211
        DEC     DATA
1212
        STH     FLFP_CURSOR,DATA
1213
        RJMP    FP_1_UP9
1214
FP_1_UP1:
1215
        LDH     DATA,FLFP_TOP
1216
        DEC     DATA
1217
        STH     FLFP_TOP,DATA
1218
FP_1_UP9:
1219
        RJMP    FP_FS1
1220
;
1221
FP_1_DOWN:
1222
        LDH     DATA,FLFP_SELECT
1223
        LDH     TEMP,FLFP_TOTAL
1224
        INC     DATA
1225
        CP      DATA,TEMP
1226
        BRCC    FP_FS0
1227
        STH     FLFP_SELECT,DATA
1228
        LDH     DATA,FLFP_CURSOR
1229
        CPI     DATA,FLFP_HEIGHT-1
1230
        BRCC    FP_1_DOWN1
1231
        INC     DATA
1232
        STH     FLFP_CURSOR,DATA
1233
        RJMP    FP_1_DOWN9
1234
FP_1_DOWN1:
1235
        LDH     DATA,FLFP_TOP
1236
        INC     DATA
1237
        STH     FLFP_TOP,DATA
1238
FP_1_DOWN9:
1239
        RJMP    FP_FS1
1240
;
1241
FP_P_UP:
1242
        LDH     DATA,FLFP_SELECT
1243
        SUBI    DATA,FLFP_HEIGHT-1
1244
        BRCC    FP_P_UP1
1245
FP_BEGIN:
1246
        CLR     DATA
1247
FP_P_UP1:
1248
        STH     FLFP_SELECT,DATA
1249
        STH     FLFP_TOP,DATA
1250
        STH     FLFP_CURSOR,NULL
1251
        RJMP    FP_FS1
1252
;
1253
FP_P_DOWN:
1254
        LDH     TEMP,FLFP_TOTAL
1255
        CPI     TEMP,FLFP_HEIGHT+1
1256
        BRCC    FP_P_DOWN1
1257
        LDI     DATA,FLFP_HEIGHT-1
1258
        STH     FLFP_SELECT,DATA
1259
        STH     FLFP_TOP,NULL
1260
        STH     FLFP_CURSOR,DATA
1261
        RJMP    FP_P_DOWN9
1262
FP_P_DOWN1:
1263
        LDH     DATA,FLFP_SELECT
1264
        ADDI    DATA,FLFP_HEIGHT-1
1265
        CP      DATA,TEMP
1266
        BRCS    FP_P_DOWN2
1267
        MOV     DATA,TEMP
1268
        DEC     DATA
1269
FP_P_DOWN2:
1270
        STH     FLFP_SELECT,DATA
1271
        LDI     TEMP,FLFP_HEIGHT-1
1272
        STH     FLFP_CURSOR,TEMP
1273
        SUB     DATA,TEMP
1274
        STH     FLFP_TOP,DATA
1275
FP_P_DOWN9:
1276
        RJMP    FP_FS1
1277
;
1278
FP_END0:
1279
        LDH     TEMP,FLFP_TOTAL
1280
        CPI     TEMP,FLFP_HEIGHT+1
1281
        BRCC    FP_END1
1282
        LDI     DATA,FLFP_HEIGHT-1
1283
        STH     FLFP_SELECT,DATA
1284
        STH     FLFP_TOP,NULL
1285
        STH     FLFP_CURSOR,DATA
1286
        RJMP    FP_END9
1287
FP_END1:
1288
        MOV     DATA,TEMP
1289
        DEC     DATA
1290
        STH     FLFP_SELECT,DATA
1291
        LDI     TEMP,FLFP_HEIGHT-1
1292
        STH     FLFP_CURSOR,TEMP
1293
        SUB     DATA,TEMP
1294
        STH     FLFP_TOP,DATA
1295
FP_END9:
1296
        RJMP    FP_FS1
1297
;
1298
FP_ENTER0:
1299
        LDH     DATA,FLFP_SELECT
1300
        LDIZ    FL_BUFFER
1301
        LDI     TEMP,32
1302
        MUL     DATA,TEMP
1303
        ADD     ZL,R0
1304
        ADC     ZH,R1
1305
        LDD     DATA,Z+11
1306
        TST     DATA
1307
        BREQ    FP_ENTER9
1308
        LDD     WL,Z+26
1309
        LDD     WH,Z+27
1310
        LDD     XL,Z+20
1311
        LDD     XH,Z+21
352 ddp 1312
        MOV     TEMP,WL
1313
        OR      TEMP,WH
1314
        OR      TEMP,XL
1315
        OR      TEMP,XH
1316
        BRNE    FP_ENTER1
1317
        LDSW    FAT_ROOTCLS+0
1318
        LDSX    FAT_ROOTCLS+2
1319
FP_ENTER1:
261 ddp 1320
        STSW    FAT_TEK_DIR+0
1321
        STSX    FAT_TEK_DIR+2
1322
        RCALL   FP_RD_DIR
1323
        STH     FLFP_CURSOR,NULL
1324
        RJMP    FP_FS1
1325
FP_ENTER9:
1326
        STH     FLFP_BUFADR0,ZL
1327
        STH     FLFP_BUFADR1,ZH
1328
        LDD     WL,Z+28
1329
        LDD     WH,Z+29
1330
        LDD     XL,Z+30
1331
        LDI     DATA,LOW(16383)
1332
        LDI     TEMP,HIGH(16383)
1333
        ADD     WL,DATA
1334
        ADC     WH,TEMP
1335
        ADC     XL,NULL
1336
        LSL     WH
1337
        ROL     XL
1338
        LSL     WH
1339
        ROL     XL
1340
        STH     FLSH_SIZE,XL
1341
        STH     FLSH_START,NULL
1342
 
1343
        LDH     XH,FLFP_CURSOR
1344
        ADDI    XH,FLFP_YPOS
1345
        LDI     XL,FLFP_XPOS
1346
        CALL    SCR_SET_CURSOR
1347
        LDI     TEMP,$1F
1348
        LDI     COUNT,FLFP_WIDTH
1349
        CALL    SCR_FILL_ATTR
1350
;
1351
FLMAP10:RCALL   FL_SHOWCONTENT
1352
 
1353
FLMAP11:CALL    WAITKEY
1354
        CPI     DATA,KEY_UP
1355
        BREQ    FLMAP_UP
1356
        CPI     DATA,KEY_DOWN
1357
        BREQ    FLMAP_DOWN
1358
        CPI     DATA,KEY_LEFT
1359
        BREQ    FLMAP_LEFT
1360
        CPI     DATA,KEY_RIGHT
1361
        BREQ    FLMAP_RIGHT
1362
        CPI     DATA,KEY_ENTER
1363
        BREQ    FLMAP_ENTER
1364
        CPI     DATA,KEY_ESC
1365
        BRNE    FLMAP11
1366
        RJMP    FLMAP_EXIT
1367
;
1368
FLMAP_LEFT:
1369
        LDH     DATA,FLSH_START
1370
        TST     DATA
1371
        BREQ    FLMAP11
1372
        DEC     DATA
1373
        STH     FLSH_START,DATA
1374
        RJMP    FLMAP10
1375
;
1376
FLMAP_RIGHT:
1377
        LDH     DATA,FLSH_START
1378
        LDH     TEMP,FLSH_SIZE
1379
        ADD     TEMP,DATA
1380
        CPI     TEMP,32
1381
        BRCC    FLMAP11
1382
        INC     DATA
1383
        STH     FLSH_START,DATA
1384
        RJMP    FLMAP10
1385
;
1386
FLMAP_UP:
1387
        LDH     DATA,FLSH_START
1388
        SUBI    DATA,4
1389
        BRCC    FLMAP_U1
1390
        CLR     DATA
1391
FLMAP_U1:
1392
        STH     FLSH_START,DATA
1393
        RJMP    FLMAP10
1394
;
1395
FLMAP_DOWN:
1396
        LDH     DATA,FLSH_START
1397
        LDH     TEMP,FLSH_SIZE
1398
        ADD     DATA,TEMP
1399
        ADDI    DATA,4
1400
        CPI     DATA,32
1401
        BRCS    FLMAP_D1
1402
        LDI     DATA,32
1403
FLMAP_D1:
1404
        SUB     DATA,TEMP
1405
        STH     FLSH_START,DATA
1406
        RJMP    FLMAP10
1407
;
1408
FLMAP_ENTER:
1409
        LDIZ    FL_CONTENT
1410
        LDH     DATA,FLSH_START
1411
        LDI     TEMP,16
1412
        MUL     DATA,TEMP
1413
        ADD     ZL,R0
1414
        ADC     ZH,R1
1415
        STH     FLSH_ADR1,ZL
1416
        STH     FLSH_ADR2,ZH
1417
 
1418
        LDS     TEMP,FAT_BYTSSEC
1419
        STS     FAT_NUMSECK,TEMP
1420
 
1421
        LDH     ZL,FLFP_BUFADR0
1422
        LDH     ZH,FLFP_BUFADR1
1423
        LDD     WL,Z+26
1424
        LDD     WH,Z+27
1425
        LDD     XL,Z+20
1426
        LDD     XH,Z+21
1427
        STSW    FAT_TFILCLS+0
1428
        STSX    FAT_TFILCLS+2
1429
        LDD     WL,Z+28
1430
        LDD     WH,Z+29
1431
        LDD     XL,Z+30
1432
        LDD     XH,Z+31
1433
        LDI     TMP2,LOW(511)
1434
        LDI     TMP3,HIGH(511)
1435
        RCALL   HLDEPBC
1436
        RCALL   BCDE200         ;稫 - ᥪ஢
1437
;-------
1438
FL_FS0: LDI     COUNT,32
1439
        SBIW    WL,32
1440
        BRCS    FL_FS9
1441
        BREQ    FL_FS9
1442
        STH     FLSH_TEMP0,WL
1443
        STH     FLSH_TEMP1,WH
1444
        RCALL   FL_CPTR
1445
 
1446
        LDI     COUNT,32
1447
 
1448
FL_FS2: STH     FLSH_COUNT,COUNT
1449
        LDS     DATA,FAT_NUMSECK
1450
        DEC     DATA
1451
        BRNE    FL_FS3
1452
 
1453
        LDSW    FAT_TFILCLS+0
1454
        LDSX    FAT_TFILCLS+2
1455
        CALL    RDFATZP
1456
        STSW    FAT_TFILCLS+0
1457
        STSX    FAT_TFILCLS+2
1458
        LDS     DATA,FAT_BYTSSEC
1459
FL_FS3: STS     FAT_NUMSECK,DATA
1460
 
1461
        LDH     COUNT,FLSH_COUNT
1462
        DEC     COUNT
1463
        BRNE    FL_FS2
1464
 
1465
        LDH     WL,FLSH_TEMP0
1466
        LDH     WH,FLSH_TEMP1
1467
        RJMP    FL_FS0
1468
 
1469
FL_FS9: ADIW    WL,32
1470
        MOV     COUNT,WL
1471
        RCALL   FL_CPTR
1472
;
1473
FLMAP_EXIT:
1474
        STH     FLSH_START,FF
1475
        STH     FLSH_SIZE,NULL
1476
        RCALL   FL_SHOWCONTENT
1477
        RJMP    FLMENU1
1478
;
1479
;======================================
1480
;
1481
FL_CPTR:PUSH    COUNT
1482
        LDI     TEMP,$01
1483
        LDH     DATA,FLSH_START
1484
        LSR     DATA
1485
        LSR     DATA
1486
        TST     DATA
1487
        BREQ    FL_CPT1
1488
FL_CPT2:LSL     TEMP
1489
        DEC     DATA
1490
        BRNE    FL_CPT2
1491
FL_CPT1:LDH     DATA,FLSH_ERASE
1492
        AND     DATA,TEMP
1493
        BRNE    FL_CPT5
1494
        LDH     DATA,FLSH_ERASE
1495
        OR      DATA,TEMP
1496
        STH     FLSH_ERASE,DATA
1497
        LDIX    FL_CONTENT
1498
        LDH     DATA,FLSH_START
1499
        ANDI    DATA,0B00011100
1500
        LDI     TEMP,16
1501
        MUL     DATA,TEMP
1502
        ADD     XL,R0
1503
        ADC     XH,R1
1504
        LDI     COUNT,4
1505
FL_CPT4:ST      X+,NULL
1506
        ST      X+,NULL
1507
        ST      X+,NULL
1508
        ST      X+,NULL
1509
        ST      X+,NULL
1510
        LDIZ    FL_EMPTY*2
1511
        LDI     TEMP,11
1512
FL_CPT3:LPM     DATA,Z+
1513
        ST      X+,DATA
1514
        DEC     TEMP
1515
        BRNE    FL_CPT3
1516
        DEC     COUNT
1517
        BRNE    FL_CPT4
1518
FL_CPT5:POP     COUNT
1519
 
1520
        LDS     DATA,FAT_BYTSSEC
1521
        LDS     TEMP,FAT_NUMSECK
1522
        CP      DATA,TEMP
1523
        BREQ    FL_CPT6
1524
        ORI     COUNT,$40
1525
FL_CPT6:LDH     XL,FLSH_ADR1
1526
        LDH     XH,FLSH_ADR2
1527
        ST      X+,COUNT
1528
        LDS     DATA,FAT_TFILCLS+0
1529
        ST      X+,DATA
1530
        LDS     DATA,FAT_TFILCLS+1
1531
        ST      X+,DATA
1532
        LDS     DATA,FAT_TFILCLS+2
1533
        ST      X+,DATA
1534
        LDS     DATA,FAT_TFILCLS+3
1535
        ST      X+,DATA
1536
        LDH     ZL,FLFP_BUFADR0
1537
        LDH     ZH,FLFP_BUFADR1
1538
        LDI     COUNT,11
1539
FL_CPT7:LD      DATA,Z+
1540
        ST      X+,DATA
1541
        DEC     COUNT
1542
        BRNE    FL_CPT7
1543
        STH     FLSH_ADR1,XL
1544
        STH     FLSH_ADR2,XH
1545
        LDH     DATA,FLMNU_FLAGS
1546
        ORI     DATA,0B00010000
1547
        STH     FLMNU_FLAGS,DATA
1548
        LDH     DATA,FLSH_START
1549
        INC     DATA
1550
        STH     FLSH_START,DATA
1551
        RET
1552
;
1553
;======================================
1554
;
1555
FLMENU_PUTCURSOR:
551 ddp 1556
        LDH     DATA,FLSH_ERASE
1557
        CPI     DATA,$FF
1558
        BRNE    FPM_PC5
1559
        LDIZ    MSG_FL_ERASECHIP*2
1560
        CALL    SCR_PRINTSTRZ
1561
FPM_PC5:
261 ddp 1562
        CLR     COUNT
1563
        LDI     TEMP,0B00000001
1564
FPM_PC4:STH     FLSH_COUNT,COUNT
1565
        STH     FLSH_TEMP0,TEMP
1566
        MOV     XH,COUNT
1567
        ADDI    XH,2
1568
        LDI     XL,1
1569
        CALL    SCR_SET_CURSOR
1570
        LDH     DATA,FLSH_TEMP0
1571
        LDH     XL,FLMNU_FLAGS
1572
        LDI     TEMP,$9F
1573
        AND     XL,DATA
1574
        BRNE    FPM_PC1
1575
        LDI     TEMP,$97
1576
FPM_PC1:LDH     XL,FLMNU_CURSOR
1577
        AND     DATA,XL
1578
        BREQ    FPM_PC2
1579
        LSL     XL
1580
        BRCS    FPM_PC3
1581
        LDI     TEMP,$F0
1582
        RJMP    FPM_PC2
1583
FPM_PC3:ANDI    TEMP,$1F
1584
FPM_PC2:LDI     COUNT,15
1585
        CALL    SCR_FILL_ATTR
1586
        LDH     COUNT,FLSH_COUNT
1587
        INC     COUNT
1588
        LDH     TEMP,FLSH_TEMP0
1589
        LSL     TEMP
1590
        SBRS    TEMP,5
1591
        RJMP    FPM_PC4
1592
        RET
1593
;
1594
;======================================
1595
;
1596
FP_RD_DIR:
1597
        LDIZ    FL_BUFFER
1598
        STH     FLFP_BUFADR0,ZL
1599
        STH     FLFP_BUFADR1,ZH
1600
        STH     FLFP_TOTAL,NULL
1601
        STH     FLFP_TOP,NULL
1602
        STH     FLFP_SELECT,NULL
1603
 
290 ddp 1604
        CALL    CALCKCLSDIR
261 ddp 1605
        LDIW    0
277 ddp 1606
        CALL    RDDIRSC
261 ddp 1607
; 䠩  ४ਨ
1608
;       LDIW    0               ; ⥫ 䠩
1609
        RJMP    FP_RDD2
1610
 
1611
FP_RDD1:ADIW    WL,1            ;ய⥫++
1612
        ADIW    ZL,$20          ;᫥騩 ⥫
1613
        CPI     ZH,HIGH(BUF4FAT+512);
1614
                                ;뫥  ᥪ?
1615
        BRNE    FP_RDD2         ; 
1616
        CALL    RDDIRSC         ;뢠 ᫥騩
1617
        BRNE    FP_RDDE         ;稫 ᥪ  ४ਨ
1618
 
1619
FP_RDD2:LD      TEMP,Z          ; ᨬ
1620
        CPI     TEMP,$E5        ;㤠?
1621
        BREQ    FP_RDD1
1622
        TST     TEMP            ;⮩ ⥫? ( ᯨ᪠)
1623
        BREQ    FP_RDDE
1624
        CPI     TEMP,$2E ;"."
1625
        BRNE    FP_RDD3
1626
        LDD     TEMP,Z+1
1627
        CPI     TEMP,$2E ;"."
1628
        BRNE    FP_RDD1
1629
 
1630
FP_RDD3:LDD     DATA,Z+$0B      ;ਡ
1631
        ANDI    DATA,0B11011110
1632
        BREQ    FP_RDD4         ;䠩
1633
        CPI     DATA,$10        ;४
1634
        BRNE    FP_RDD1
1635
        RJMP    FP_RDD7
1636
 
1637
FP_RDDE:RJMP    FP_RDDX
1638
 
1639
FP_RDD4:LDD     DATA,Z+8
1640
        CPI     DATA,$52 ;"R"
1641
        BREQ    FP_RDD5
1642
        CPI     DATA,$42 ;"B"
1643
        BRNE    FP_RDD1
1644
        LDD     DATA,Z+9
1645
        CPI     DATA,$49 ;"I"
1646
        BRNE    FP_RDD1
1647
        LDD     DATA,Z+10
1648
        CPI     DATA,$4E ;"N"
1649
        BREQ    FP_RDD6
1650
FP_RDD1A:RJMP   FP_RDD1
1651
FP_RDD5:LDD     DATA,Z+9
1652
        CPI     DATA,$4F ;"O"
1653
        BRNE    FP_RDD1
1654
        LDD     DATA,Z+10
1655
        CPI     DATA,$4D ;"M"
1656
        BRNE    FP_RDD1
1657
 
1658
FP_RDD6:LDD     DATA,Z+31       ;
1659
        TST     DATA
1660
        BRNE    FP_RDD1
1661
        LDD     DATA,Z+30
1662
        LDD     R1,Z+29
1663
        LDD     R0,Z+28
1664
        SUB     R0,ONE
1665
        SBC     R1,NULL
1666
        SBC     DATA,NULL
1667
        BRCS    FP_RDD1
1668
        CPI     DATA,$08
1669
        BRCC    FP_RDD1
1670
 
1671
FP_RDD7:LDH     XL,FLFP_BUFADR0
1672
        LDH     XH,FLFP_BUFADR1
1673
        LDI     COUNT,32
1674
        PUSHZ
1675
FP_RDD8:LD      DATA,Z+
1676
        ST      X+,DATA
1677
        DEC     COUNT
1678
        BRNE    FP_RDD8
1679
        POPZ
1680
        STH     FLFP_BUFADR0,XL
1681
        STH     FLFP_BUFADR1,XH
1682
        LDH     COUNT,FLFP_TOTAL
1683
        INC     COUNT
1684
        STH     FLFP_TOTAL,COUNT
1685
        CPI     COUNT,48
1686
        BRCC    FP_SORT
1687
        RJMP    FP_RDD1
1688
 
1689
FP_RDDX:LDH     COUNT,FLFP_TOTAL
1690
        CPI     COUNT,1
1691
        BREQ    FP_NOSORT
1692
        TST     COUNT
1693
        BRNE    FP_SORT
1694
        LDH     DATA,FLMNU_FLAGS
1695
        ANDI    DATA,0B00000111
1696
        STH     FLMNU_FLAGS,DATA
1697
        RJMP    FP_NOFILES
1698
FP_SORT:
1699
FP_RDDY:
1700
        LDIZ    FL_BUFFER
1701
        CLR     TMP2
1702
        LDH     TMP3,FLFP_TOTAL
1703
        DEC     TMP3
1704
        LD      DATA,Z
1705
        CPI     DATA,$2E
1706
        BRNE    FP_RDDZ
1707
        INC     TMP2
1708
FP_RDDZ:RCALL   FSORT
1709
FP_NOFILES:
1710
FP_NOSORT:
1711
;
1712
        LDIZ    FL_BUFFER
1713
        LDH     COUNT,FLFP_TOTAL
1714
FP_LO2: LDD     DATA,Z+11
1715
        ANDI    DATA,0B11011110
1716
        STD     Z+11,DATA
1717
        BRNE    FP_LO1
1718
        LDI     TEMP,11
1719
FP_LO3: LD      DATA,Z
1720
        RCALL   TOLOWER
1721
        ST      Z+,DATA
1722
        DEC     TEMP
1723
        BRNE    FP_LO3
1724
        ADIW    ZL,21
1725
        RJMP    FP_LO4
1726
FP_LO1: ADIW    ZL,32
1727
FP_LO4: DEC     COUNT
1728
        BRNE    FP_LO2
1729
        RET
1730
;
1731
;======================================
1732
;
1733
FP_OUT: CLR     COUNT
1734
FPOUT00:PUSH    COUNT
1735
        MOV     XH,COUNT
1736
        ADDI    XH,FLFP_YPOS
1737
        LDI     XL,FLFP_XPOS
1738
        CALL    SCR_SET_CURSOR
1739
 
1740
        LDH     DATA,FLFP_CURSOR
1741
        LDI     TEMP,$9F
1742
        CP      DATA,COUNT
1743
        BRNE    FPOUT04
1744
        LDI     TEMP,$F0
1745
FPOUT04:CALL    SCR_SET_ATTR
1746
 
1747
        LDH     DATA,FLFP_TOP
1748
        ADD     DATA,COUNT
1749
        LDH     TEMP,FLFP_TOTAL
1750
        CP      DATA,TEMP
1751
        BRCS    FPOUT01
1752
        OR      COUNT,TEMP
1753
        BRNE    FPOUT02
1754
 
1755
        LDIZ    MLMSG_FP_NOFILES*2
1756
        CALL    SCR_PRINTMLSTR
1757
        LDI     COUNT,FLFP_WIDTH-12 ;22
1758
        RJMP    FPOUT03
1759
FPOUT02:LDI     COUNT,FLFP_WIDTH ;34
1760
FPOUT03:LDI     DATA,$20
1761
        CALL    SCR_FILL_CHAR
1762
        RJMP    FPOUT90
1763
 
1764
FPOUT01:LDIZ    FL_BUFFER
1765
        LDI     TEMP,32
1766
        MUL     DATA,TEMP
1767
        ADD     ZL,R0
1768
        ADC     ZH,R1
1769
        PUSH    ZL
1770
        LDI     COUNT,8
1771
        CALL    SCR_PRNRAMSTRN
1772
        LDI     DATA,$20
1773
        CALL    SCR_PUTCHAR
1774
        LDI     COUNT,3
1775
        CALL    SCR_PRNRAMSTRN
1776
        LDI     DATA,$B3 ;""
1777
        CALL    SCR_PUTCHAR
1778
        POP     ZL
1779
        ;here Z=0
1780
        PUSHZ
1781
        LDD     DATA,Z+11
1782
        TST     DATA
1783
        BREQ    FPOUT11
1784
        LDIZ    MSG_FP_DIR*2
1785
        CALL    SCR_PRINTSTRZ
1786
        RJMP    FPOUT12
1787
FPOUT11:LDD     WL,Z+28
1788
        LDD     WH,Z+29
1789
        LDD     XL,Z+30
1790
        RCALL   SCR_DEC1M
1791
        LDI     DATA,$B3 ;""
1792
        CALL    SCR_PUTCHAR
1793
FPOUT12:POPZ
1794
 
1795
        LDD     DATA,Z+24
1796
        ANDI    DATA,$1F
1797
        CALL    DECBYTE
1798
        LDI     DATA,$2E ;"."
1799
        CALL    SCR_PUTCHAR
1800
        LDD     DATA,Z+24
1801
        LDD     TEMP,Z+25
1802
        ROR     TEMP
1803
        ROR     DATA
1804
        SWAP    DATA
1805
        ANDI    DATA,$0F
1806
        CALL    DECBYTE
1807
        LDI     DATA,$2E ;"."
1808
        CALL    SCR_PUTCHAR
1809
        LDD     DATA,Z+25
1810
        LSR     DATA
1811
        ADDI    DATA,80 ;+1980
1812
FPOUT14:CPI     DATA,100
1813
        BRCS    FPOUT13
1814
        SUBI    DATA,100
1815
        RJMP    FPOUT14
1816
FPOUT13:CALL    DECBYTE
1817
        LDI     DATA,$B3 ;""
1818
        CALL    SCR_PUTCHAR
1819
 
1820
        LDD     DATA,Z+23
1821
        LSR     DATA
1822
        LSR     DATA
1823
        LSR     DATA
1824
        CALL    DECBYTE
1825
        LDI     DATA,$3A ;":"
1826
        CALL    SCR_PUTCHAR
1827
        LDD     TEMP,Z+22
1828
        LDD     DATA,Z+23
1829
        ROL     TEMP
1830
        ROL     DATA
1831
        ROL     TEMP
1832
        ROL     DATA
1833
        ROL     TEMP
1834
        ROL     DATA
1835
        ANDI    DATA,$3F
1836
        CALL    DECBYTE
1837
 
1838
FPOUT90:POP     COUNT
1839
        INC     COUNT
1840
        CPI     COUNT,FLFP_HEIGHT
1841
        BRCC    FPOUT91
1842
        RJMP    FPOUT00
1843
FPOUT91:
1844
        RET
1845
;
1846
;======================================
1847
;For CodePage866 only!!!
1848
;in:    DATA
1849
;out:   DATA
1850
TOLOWER:CPI     DATA,$41
1851
        BRCS    TOLOW9   ;$00..."@"
1852
        CPI     DATA,$5B
1853
        BRCS    TOLOW8   ;"A"..."Z"
1854
        CPI     DATA,$80
1855
        BRCS    TOLOW9   ;"["...""
1856
        CPI     DATA,$90
1857
        BRCS    TOLOW8   ;""...""
1858
        CPI     DATA,$A0
1859
        BRCS    TOLOW7   ;""...""
1860
        CPI     DATA,$F0
1861
        BRCS    TOLOW9   ;""...""
1862
        CPI     DATA,$F8
1863
        BRCC    TOLOW9   ;$F8...$FF
1864
        ORI     DATA,$01 ;""...""
1865
        RET
277 ddp 1866
TOLOW7: ADDI    DATA,$50
261 ddp 1867
        RET
1868
TOLOW8: ADDI    DATA,$20
1869
TOLOW9: RET
1870
;
1871
;======================================
1872
;out number (up to 999999) in dec (right justify)
1873
;in:    XL,WH,WL == number
1874
SCR_DEC1M:
1875
        LDIZ    DEC1MTAB*2
1876
        LDI     COUNT,5
1877
        MOV     R2,ONE
1878
        CLR     DATA
1879
DEC1M5: LPM     R0,Z+
1880
        LPM     R1,Z+
1881
DEC1M2: SUB     WL,R0
1882
        SBC     WH,R1
1883
        SBC     XL,R2
1884
        BRCS    DEC1M1
1885
        INC     DATA
1886
        RJMP    DEC1M2
1887
DEC1M1: ADD     WL,R0
1888
        ADC     WH,R1
1889
        ADC     XL,R2
1890
        TST     DATA
1891
        BRNE    DEC1M3
1892
        LDI     DATA,$20
1893
        CALL    SCR_PUTCHAR
1894
        CLR     DATA
1895
        RJMP    DEC1M4
1896
DEC1M3: ORI     DATA,$30
1897
        CALL    SCR_PUTCHAR
1898
        LDI     DATA,$30
1899
DEC1M4: CLR     R2
1900
        DEC     COUNT
1901
        BRNE    DEC1M5
1902
        MOV     DATA,WL
1903
        ORI     DATA,$30
1904
        JMP     SCR_PUTCHAR
1905
DEC1MTAB:.DW    $86A0,10000,1000,100,10
1906
;
1907
;======================================
1908
;in:    Z == buffer ptr
1909
;       TMP2 == lo index
277 ddp 1910
;       TMP3 == hi index
1911
FSORT:  CP      TMP2,TMP3
1912
        BRLT    FSRT_1
1913
        RET
1914
FSRT_1: MOV     WH,TMP2
1915
        ADD     WH,TMP3
1916
        LSR     WH
1917
        MOV     WL,TMP2
1918
        RCALL   FXCHNG
1919
        MOV     R2,TMP2
1920
        INC     R2
261 ddp 1921
        MOV     R3,TMP3
277 ddp 1922
FSRT_2: CP      R3,R2
1923
        BRLT    FSRT_7
1924
FSRT_3: CP      TMP3,R2
1925
        BRLT    FSRT_4
1926
        MOV     WL,TMP2
261 ddp 1927
        MOV     WH,R2
277 ddp 1928
        RCALL   FCOMP
1929
        BRCS    FSRT_4
1930
        INC     R2
1931
        RJMP    FSRT_3
1932
FSRT_4: CP      R3,TMP2
1933
        BRLT    FSRT_5
1934
        MOV     WL,TMP2
1935
        MOV     WH,R3
1936
        RCALL   FCOMP
1937
        BRCC    FSRT_5
1938
        DEC     R3
1939
        RJMP    FSRT_4
1940
FSRT_5: CP      R2,R3
1941
        BRGE    FSRT_6
1942
        MOV     WL,R2
1943
        MOV     WH,R3
1944
        RCALL   FXCHNG
1945
FSRT_6: RJMP    FSRT_2
1946
FSRT_7: MOV     WL,TMP2
1947
        MOV     WH,R3
1948
        RCALL   FXCHNG
1949
        PUSH    R3
1950
        PUSH    TMP3
1951
        MOV     TMP3,R3
1952
        DEC     TMP3
1953
        RCALL   FSORT
1954
        POP     TMP3
1955
        POP     TMP2
1956
        INC     TMP2
1957
        RJMP    FSORT
1958
;
1959
;======================================
1960
;in:    Z
1961
;       WL, WH - indexes
1962
;chng:  COUNT,DATA,TEMP (,X,R0,R1)
1963
FXCHNG:
1964
        CP      WL,WH
1965
        BRNE    FXCHN_1
1966
        RET
1967
FXCHN_1:
261 ddp 1968
        PUSHZ
1969
        MOVW    XL,ZL
1970
        LDI     COUNT,32
277 ddp 1971
        MUL     WL,COUNT
261 ddp 1972
        ADD     XL,R0
1973
        ADC     XH,R1
277 ddp 1974
        MUL     WH,COUNT
261 ddp 1975
        ADD     ZL,R0
1976
        ADC     ZH,R1
277 ddp 1977
FXCHN_2:LD      DATA,X
261 ddp 1978
        LD      TEMP,Z
1979
        ST      X+,TEMP
1980
        ST      Z+,DATA
1981
        DEC     COUNT
277 ddp 1982
        BRNE    FXCHN_2
261 ddp 1983
        POPZ
277 ddp 1984
        RET
261 ddp 1985
;
1986
;======================================
277 ddp 1987
;in:    Z
1988
;       WL, WH - indexes
1989
;out:   sreg.C - SET - [WL]<[WH], CLR - [WL]>=[WH]
1990
;chng:  COUNT,DATA,TEMP (,X,R0,R1)
261 ddp 1991
FCOMP:  PUSHZ
1992
        MOVW    XL,ZL
1993
        LDI     DATA,32
277 ddp 1994
        MUL     WH,DATA
261 ddp 1995
        ADD     XL,R0
1996
        ADC     XH,R1
277 ddp 1997
        MUL     WL,DATA
261 ddp 1998
        ADD     ZL,R0
1999
        ADC     ZH,R1
2000
        LDD     TEMP,Z+11
2001
        ANDI    TEMP,0B11011110
2002
        ADDI    XL,11
2003
        LD      DATA,X
2004
        ANDI    DATA,0B11011110
2005
        CP      DATA,TEMP
2006
        BRNE    FCMP9
2007
        SUBI    XL,11
2008
        LDI     COUNT,11
2009
FCMP1:  LD      DATA,X+
2010
        LD      TEMP,Z+
2011
        CP      TEMP,DATA
2012
        BRNE    FCMP9
2013
        DEC     COUNT
2014
        BRNE    FCMP1
2015
FCMP9:  POPZ
2016
        RET
2017
;
2018
;======================================
2019
;
2020
FL_CRC_CMP:
2021
        LPM     DATA,Z+
2022
        CP      DATA,R0
2023
        BRNE    FL_CRCCMP1
2024
        LPM     DATA,Z+
2025
        CP      DATA,R1
2026
        BRNE    FL_CRCCMP1
2027
        LPM     DATA,Z+
2028
        CP      DATA,R2
2029
        BRNE    FL_CRCCMP1
2030
        LPM     DATA,Z+
2031
        CP      DATA,R3
2032
        BRNE    FL_CRCCMP1
2033
FL_CRCCMP1:
2034
        RET
2035
;
2036
;======================================
2037
;
2038
FL_SHOWCONTENT:
2039
        LDIZ    FL_CONTENT
2040
        CLR     COUNT
2041
 
2042
FL_SHW1:STH     FLSH_TEMP2,COUNT
2043
        RCALL   FL_SHW_SETCURSOR
2044
        LD      DATA,Z
2045
        LDI     TEMP,$0E
2046
        SBRC    DATA,7
2047
        LDI     TEMP,$07
2048
        LDH     COUNT,FLSH_TEMP2
2049
        LDH     DATA,FLSH_START
2050
        CP      COUNT,DATA
2051
        BRCS    FL_SHW5
2052
        LDH     XH,FLSH_SIZE
2053
        ADD     DATA,XH
2054
        CP      COUNT,DATA
2055
        BRCC    FL_SHW5
2056
        LDI     TEMP,$F0
2057
FL_SHW5:LDH     XH,FLSH_TEMP2
2058
        LDI     DATA,$10
2059
        SBRC    XH,2
2060
        EOR     TEMP,DATA
2061
        CALL    SCR_SET_ATTR
2062
 
2063
        ADIW    ZL,5
2064
        LDI     COUNT,8
2065
        CALL    SCR_PRNRAMSTRN
2066
        LDI     DATA,$20
2067
        CALL    SCR_PUTCHAR
2068
        LDI     COUNT,3
2069
        CALL    SCR_PRNRAMSTRN
2070
 
2071
        LDH     COUNT,FLSH_TEMP2
2072
        INC     COUNT
2073
        CPI     COUNT,32
2074
        BRCS    FL_SHW1
551 ddp 2075
        RET
261 ddp 2076
;
2077
;======================================
2078
;
2079
FL_SHW_SETCURSOR:
2080
        MOV     XL,COUNT
2081
        ANDI    XL,$03
2082
        LDI     TEMP,13
2083
        MUL     XL,TEMP
2084
        MOV     XL,R0
2085
        INC     XL
2086
        MOV     XH,COUNT
2087
        ANDI    XH,$1C
2088
        LSR     XH
2089
        LSR     XH
2090
        ADDI    XH,15
2091
        JMP     SCR_SET_CURSOR
2092
;
2093
;======================================
2094
;