Subversion Repositories pentevo

Rev

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

Rev Author Line No. Line
507 savelij 1
 
1186 savelij 2
; LAST UPDATE: 07.02.2025 savelij
507 savelij 3
 
1120 savelij 4
                include macros.a80
5
                include define.a80
6
                include global_vars.a80
7
                include ports_ngs.a80
8
                include sdcomand.a80
9
                include ports_ide.a80
10
                include nums_devices.a80
11
                include fat_dir.a80
680 savelij 12
 
1120 savelij 13
 INIT_VAR DRV_VAR
14
 SETVAR BUF_512_,       0x200                           ;  ᥪ
1186 savelij 15
FATVAR
16
 _INIT_VAR INITVAR      ;    ६ FAT
17
                include fat_vars.a80
1120 savelij 18
 SETVAR_ALIGN
19
 SUBVAR (WORD + WORD + BYTE + BYTE)
20
 SETVAR LENGHT,         WORD                            ;  䠩  
21
 SETVAR LOADSCS1,       WORD                            ;  뢠 ࠩ
22
 SETVAR MAS_SLA,        BYTE                            ; ᪠  MASTER/SLAVE
23
 SETVAR NUM_DEVICE,     BYTE                            ;  ன⢠  ᪠ 
680 savelij 24
 
1120 savelij 25
                ORG INITVAR
26
 
27
;  室: A -  ࠭ ன⢠
28
;        BCDE -   ᪠ 䠩
507 savelij 29
                DI
30
                LD A,(NUM_DEVICE)
831 savelij 31
                CP _SD_SDZ
1120 savelij 32
                LD HL,READ_ZSD                          ; ࠩ SD ZC            
507 savelij 33
                JR Z,SETLOADER
831 savelij 34
                CP _SD_SDG
1120 savelij 35
                LD HL,READ_NEOGS                        ; ࠩ SD NGS 
507 savelij 36
                JR Z,SETLOADER
831 savelij 37
                CP _HDD_NEMO_MASTER
1120 savelij 38
                LD HL,RD_HDD_NEMO                       ; ࠩ HDD NEMO
39
        IFDEF ALL_DRVS
507 savelij 40
                JR Z,SETLOADER
831 savelij 41
                CP _HDD_SMUC_MASTER
1120 savelij 42
                LD HL,RD_HDD_SMUC                       ; ࠩ HDD SMUC
585 savelij 43
                JR Z,SETLOADER
831 savelij 44
                CP _HDD_DIVIDE_MASTER
1120 savelij 45
                LD HL,RD_HDD_DIVIDE                     ; ࠩ HDD DIVIDE
585 savelij 46
                JR Z,SETLOADER
1120 savelij 47
                LD HL,RD_HDD_PROFI                      ; ࠩ HDD PROFI
48
        ENDIF
49
SETLOADER       LD (LOADSCS1),HL                        ; ⠭  ⠫ ᥪ஢
507 savelij 50
                LD A,(MAS_SLA)
51
                AND A
1120 savelij 52
                LD A,0xE0
507 savelij 53
                JR Z,SETMASL
1120 savelij 54
                LD A,0xF0
507 savelij 55
SETMASL         LD (MAS_SLA),A
1186 savelij 56
                LD BC,(FATVAR.FILE_SRC + _DIR_FstClusHI)
57
                LD (FATVAR.AFILCLS+2),BC
58
                LD DE,(FATVAR.FILE_SRC + _DIR_FstClusLO)
59
                LD (FATVAR.AFILCLS),DE
60
                LD A,(FATVAR.FILE_SRC + _DIR_Ext + 1)
61
                CP 'P'
1120 savelij 62
                JP Z,RUNSPG2                            ; 室   SPG 䠩
1186 savelij 63
                CP 'N'
1120 savelij 64
                JP Z,RUNSNA                             ; 室   SNA 䠩
65
                CALL REALSEC                            ; ८ࠧ   ᥪ
66
                CALL LOADLST                            ; 㧨  
507 savelij 67
                EXX
1120 savelij 68
                LD HL,(BUF_512_ + _DIR_Ext + 1)
69
                LD (0x5D45),HL                          ;   
70
                LD HL,(BUF_512_ + _DIR_Attr)
71
                LD (LENGHT),HL                          ; ⠭  䠩  
72
                LD DE,0x11
73
                ADD HL,DE                               ; ய HOBETA 
507 savelij 74
                LD A,L
75
                AND A
1120 savelij 76
                JR Z,READ01                             ; ᫨ 訩   0
77
                INC H                                   ; 訩 +1
507 savelij 78
READ01          LD A,H
1120 savelij 79
                SRL A                                   ;   2   FAT ᥪ 512 
80
                ADC A,0                                 ; 뢠 /
81
                DEC A                                   ;  ᥪ 㦥, 㧨  1 
507 savelij 82
                EXX
1120 savelij 83
                JP Z,LDIRBUF                            ; ᫨ ᥪ 1 ७  
961 savelij 84
                DEC A
1120 savelij 85
                LD IXL,A                                ;  ⢮ ᥪ஢ - 1
86
                JP Z,READ08                             ; ᫨ 䠩   2 ᥪ
507 savelij 87
                EXX
1120 savelij 88
                CALL LD_ONES                            ; ७ ⪮ ࢮ ᥪ
89
                PUSH DE                                 ;  㤠  㧨
507 savelij 90
                EXX
1120 savelij 91
                LD HL,1                                 ;  ᥪ 㦥 㦥
92
                ADD HL,DE                               ;  㧨  ᫥饣 ᥪ 
507 savelij 93
                EX DE,HL
94
                JR NC,READ04
1120 savelij 95
                INC BC                                  ; BCDE = BCDE + 1
96
READ04          POP HL                                  ;  HL   த 㧪
1186 savelij 97
                LD IY,(FATVAR.SecPerClus)               ; LY = ⢮ ᥪ஢  
507 savelij 98
                LD A,IXL
1120 savelij 99
                CP IYL                                  ; ᥪ஢ ⠫  祬  
100
                JR C,READ02                             ; 室  㧪 ⪠ ᥪ஢
507 savelij 101
                INC IXL
102
                LD A,IYL
103
                CP 2
104
                JR C,READ07
105
                DEC A
106
                JR READ05
107
 
108
READ07          PUSH HL
1186 savelij 109
                LD DE,(FATVAR.AFILCLS)
110
                LD BC,(FATVAR.AFILCLS + 2)
1120 savelij 111
                CALL RD_NEXT_CLUSTER                    ;   ᫥饣 
1186 savelij 112
                LD (FATVAR.AFILCLS),DE
113
                LD (FATVAR.AFILCLS + 2),BC
1120 savelij 114
                CALL CHECK_LAST_CLUSTER                 ; ஢ઠ  砭 FAT 楯窨
507 savelij 115
                POP HL
1120 savelij 116
                JR C,RUNLOAD                            ; ᫨  稫,   㦥
507 savelij 117
                PUSH HL
1120 savelij 118
                CALL REALSEC                            ; ८ࠧ     ᥪ
507 savelij 119
                POP HL
1120 savelij 120
                LD A,IXL                                ; ᪮쪮 ᥪ஢ ⠫ 㧨
121
                CP IYL                                  ; ࠢ  ࠧ஬ 
122
                JR C,READ02                             ; ᫨ ⠫ 㧨 ᥪ஢  祬  ,  㦠 ⮪
123
                LD A,IYL                                ; ᪮쪮 ᥪ஢ 㦠
124
READ05          CALL LOADSCS                            ; 㧪 ᥪ஢
125
                LD A,IXL                                ; ᪮쪮 ᥪ஢ ᥣ 㦠
126
                SUB IYL                                 ;  ᪮쪮 ᥪ஢ ⮫쪮  㧨
127
                JR Z,RUNLOAD                            ; ᥪ 稫, 室  
128
                LD IXL,A                                ; ᪮쪮 ᥪ஢ ⠫ 㧨
129
                JR READ07                               ; த 㧪
507 savelij 130
 
961 savelij 131
; ࠧ   Hobeta  2 ᥪ஢
132
; 㥬 墮 ࢮ ᥪ  㦠  ண  ७ᮬ
133
READ08          EXX
134
                CALL LD_ONES
135
                PUSH DE
136
                EXX
137
                POP HL
138
                LD IXL,1
139
                JR READ03
140
 
1120 savelij 141
; 㧪 ⢠ ᥪ஢, ᫨ ⠫  ࠧ 
507 savelij 142
READ02          AND A
143
                JR Z,READ03
144
                CALL LOADSCS
145
READ03          PUSH HL
146
                LD A,IXL
147
                LD L,A
148
                LD H,0
149
                ADD HL,DE
150
                EX DE,HL
151
                JR NC,READ06
152
                INC BC
153
READ06          CALL LOADLST
154
                LD BC,(LENGHT)
155
                EX DE,HL
1120 savelij 156
                LD HL,0x11
507 savelij 157
                ADD HL,BC
158
                LD B,H
159
                LD C,L
160
                EX DE,HL
161
                POP DE
162
                LD A,B
163
                AND 1
164
                LD B,A
605 savelij 165
                OR C
166
                JR Z,RUNLOAD
507 savelij 167
                LDIR
1120 savelij 168
;  㦥
169
RUNLOAD         LD HL,0x2758
507 savelij 170
                EXX
1120 savelij 171
                LD IY,0x5C3A
507 savelij 172
                EI
1120 savelij 173
                JP 0x1B7D                               ;  ७ᥭ ᨪ ண
507 savelij 174
 
1120 savelij 175
LDIRBUF         LD HL,0x200 - 0x11
176
                LD DE,(BUF_512_ + 0x0B)
507 savelij 177
                AND A
178
                SBC HL,DE
179
                JR NC,LDIRBUF1
180
                CALL LD_ONES
181
                JP RUNLOAD
182
 
1120 savelij 183
LDIRBUF1        LD HL,BUF_512_ + 0x11
184
                LD DE,(BUF_512_ + 9)
185
                LD BC,(BUF_512_ + 0x0B)
507 savelij 186
                LDIR
187
                JP RUNLOAD
188
 
1120 savelij 189
; ७ ᪠  㦥 㦥 ᥪ, ᫨ 䠩 = 501   
190
LD_ONES         LD HL,BUF_512_ + 0x11
191
                LD DE,(BUF_512_ + 9)
192
                LD BC,0x200-0x11
507 savelij 193
                LDIR
194
                RET
195
 
1120 savelij 196
; 㧨 ᥪ  ࠭ ன⢠
507 savelij 197
LOADSCS         PUSH HL
198
                LD HL,(LOADSCS1)
199
                EX (SP),HL
200
                RET
201
 
961 savelij 202
; ⥭ 䠩
203
; BCDE -   㤠 㧨
204
; IXL - ࠧ  
205
; IXH - ६ ६
206
; IYL - ⢮ ᥪ஢  㧪
207
; IYH - ᬥ饭  
1120 savelij 208
LOAD_FILE       PUSH BC                                 ; 訥 16   
209
                PUSH DE                                 ; 訥 16   
210
                PUSH HL                                 ; ࠭  㧪
211
                CALL REALSEC                            ; ॢ     ᥪ
1186 savelij 212
                LD IX,(FATVAR.SecPerClus)
1120 savelij 213
                LD A,IYH                                ; ᬥ饭  
507 savelij 214
                LD L,A
215
                LD H,0
216
                ADD HL,DE
217
                EX DE,HL
1120 savelij 218
                JR NC,.L1
219
                INC BC                                  ; BCDE =  ᥪ 㤠 㧨
220
.L1             LD A,IYL                                ; ⢮ ᥪ஢  㧪
221
                CP IXL                                  ; ࠧ 
222
                JP C,.L2
223
                LD A,IXL                                ; ࠧ 
224
.L2             ADD A,IYH                               ; ᬥ饭  
225
                CP IXL                                  ; ࠧ 
226
                LD A,IYL                                ; ⢮ ᥪ஢  㧪
227
                JP C,.L5
228
                LD A,IXL                                ; ࠧ 
229
                SUB IYH                                 ; ᬥ饭  
230
.L5             LD IXH,A                                ; TEMP VAR, ᪮쪮 ᥪ஢ ᥩ 㧨
231
                POP HL                                  ; ⠭  㧪
232
                CALL LOADSCS                            ; 㧨 ᥪ
507 savelij 233
                POP DE
1120 savelij 234
                POP BC                                  ; ⠭  
235
                LD A,IYH                                ; ᬥ饭  
236
                ADD A,IXH                               ; TEMP VAR
237
                CP IXL                                  ; ࠧ 
238
                JP C,.L3
239
                SUB IXL                                 ; ࠧ 
240
.L3             LD IYH,A                                ; ᬥ饭  
241
                JP C,.L4
242
                PUSH HL                                 ; ࠭  㧪
243
                CALL RD_NEXT_CLUSTER                    ; ⠫  ᫥饣 
244
                CALL CHECK_LAST_CLUSTER                 ; ஢ਫ,    ᫥ ?
245
                POP HL                                  ; ⠭  㧪
246
                RET C                                   ; ᫨ ᫥, 室
247
.L4             LD A,IYL                                ; ⢮ ᥪ஢  㧪
248
                SUB IXH                                 ; TEMP VAR
507 savelij 249
                RET Z
1120 savelij 250
                LD IYL,A                                ; ⢮ ᥪ஢  㧪
251
                JP NZ,LOAD_FILE
507 savelij 252
                RET
253
 
1120 savelij 254
; ஢ઠ  
255
CHECK_LAST_CLUSTER
1186 savelij 256
                LD A,(FATVAR.FATType)
507 savelij 257
                AND A
1120 savelij 258
                JR NZ,.L1
259
                LD HL,0x0FF7
507 savelij 260
                SBC HL,DE
261
                RET
262
 
1120 savelij 263
.L1             DEC A
264
                JR NZ,.L2
265
                LD HL,0xFFF7
507 savelij 266
                SBC HL,DE
267
                RET
268
 
1120 savelij 269
.L2             LD HL,0x0FFF
507 savelij 270
                SBC HL,BC
271
                RET NZ
1120 savelij 272
                LD HL,0xFFF7
507 savelij 273
                SBC HL,DE
274
                RET
275
 
1120 savelij 276
; ⥭ ᫥饣 
1186 savelij 277
RD_NEXT_CLUSTER LD A,(FATVAR.FATType)
507 savelij 278
                AND A
1120 savelij 279
                JR Z,.L1
507 savelij 280
                DEC A
1120 savelij 281
                JR Z,.L2
507 savelij 282
                EX DE,HL
283
                ADD HL,HL
284
                EX DE,HL
285
                LD HL,0
286
                ADC HL,BC
1120 savelij 287
                ADD HL,BC                               ; HLDE = BCDE * 2
507 savelij 288
                LD A,E
289
                LD E,D
290
                LD D,L
291
                LD C,H
292
                LD B,0
1120 savelij 293
                CALL .L3
507 savelij 294
                INC HL
295
                LD C,(HL)
296
                INC HL
297
                LD B,(HL)
298
                RET
299
 
1120 savelij 300
.L2             LD BC,0
507 savelij 301
                LD A,E
302
                LD E,D
303
                LD D,C
1120 savelij 304
.L3             PUSH AF
507 savelij 305
                PUSH BC
1186 savelij 306
                LD HL,FATVAR.NumSecFAT1
507 savelij 307
                CALL BCDEHLP
308
                CALL LOADLST
309
                POP BC
310
                POP AF
311
                LD E,A
312
                LD D,0
313
                ADD HL,DE
314
                ADD HL,DE
315
                LD E,(HL)
316
                INC HL
317
                LD D,(HL)
961 savelij 318
                RET
507 savelij 319
 
1120 savelij 320
.L1             LD H,D
507 savelij 321
                LD L,E
322
                ADD HL,HL
323
                ADD HL,DE
324
                SRL H
325
                RR L
326
                LD A,E
327
                LD E,H
328
                LD D,0
329
                LD B,D
330
                LD C,D
331
                SRL E
332
                PUSH AF
333
                PUSH HL
1186 savelij 334
                LD DE,(FATVAR.NumSecFAT1)
335
                LD BC,(FATVAR.NumSecFAT1 + 2)
507 savelij 336
                CALL LOADLST
337
                POP BC
338
                LD A,B
339
                AND 1
340
                LD B,A
341
                ADD HL,BC
342
                LD B,(HL)
343
                INC HL
344
                LD A,H
1186 savelij 345
                CP HIGH (BUF_512_) + 2
1120 savelij 346
                JR NZ,.L4
507 savelij 347
                PUSH BC
348
                LD BC,0
349
                INC DE
350
                CALL LOADLST
351
                POP BC
1120 savelij 352
.L4             POP AF
507 savelij 353
                LD D,(HL)
354
                LD E,B
355
                LD BC,0
356
                RRA
1120 savelij 357
                JR NC,.L5
961 savelij 358
        REPT 4
507 savelij 359
                SRL D
360
                RR E
961 savelij 361
        ENDM
1120 savelij 362
.L5             LD A,D
363
                AND 0x0F
507 savelij 364
                LD D,A
961 savelij 365
                RET
507 savelij 366
 
1120 savelij 367
; ८ࠧ  
368
; ᫥ ॠ쭮 ᥪ
369
;  室:  BCDE =  
370
;  室: BCDE =  ᥪ
961 savelij 371
REALSEC         LD A,B
507 savelij 372
                OR C
373
                OR D
374
                OR E
375
                JR NZ,REALSE1
1186 savelij 376
                LD DE,(FATVAR.NumSecRootDir)
377
                LD BC,(FATVAR.NumSecRootDir + 2)
961 savelij 378
                RET
507 savelij 379
 
1120 savelij 380
REALSE1         LD HL,0xFFFE
507 savelij 381
                EX DE,HL
382
                ADD HL,DE
383
                EX DE,HL
384
                INC HL
1120 savelij 385
                ADC HL,BC                               ;   - 2
1186 savelij 386
                LD A,(FATVAR.SecPerClus)
961 savelij 387
                JR REALSE2
507 savelij 388
 
961 savelij 389
REALSE3         SLA E
507 savelij 390
                RL D
391
                RL L
392
                RL H
961 savelij 393
REALSE2         RRCA
1120 savelij 394
                JR NC,REALSE3                           ; 㬭  ࠧ 
507 savelij 395
                LD B,H
396
                LD C,L
1186 savelij 397
                LD HL,FATVAR.FirstSecData
1120 savelij 398
                JP BCDEHLP                              ; ਡ ᬥ饭  砫 ࠧ
507 savelij 399
 
1120 savelij 400
; BCDE / 512
507 savelij 401
BCDE200         LD E,D
402
                LD D,C
403
                LD C,B
404
                LD B,0
405
                LD A,2
406
                JR BCDE_A
407
 
1120 savelij 408
; BCDE >> A = BCDE
507 savelij 409
BCDE_A1         SRL B
410
                RR C
411
                RR D
412
                RR E
413
BCDE_A          RRCA
414
                JR NC,BCDE_A1
415
                RET
416
 
1120 savelij 417
; (ADR) - BCDE = BCDE
507 savelij 418
BCDEHLM         LD A,(HL)
419
                INC HL
420
                SUB E
421
                LD E,A
422
                LD A,(HL)
423
                INC HL
424
                SBC A,D
425
                LD D,A
426
                LD A,(HL)
427
                INC HL
428
                SBC A,C
429
                LD C,A
430
                LD A,(HL)
431
                SBC A,B
432
                LD B,A
433
                RET
434
 
1120 savelij 435
; (ADR) + BCDE = BCDE
507 savelij 436
BCDEHLP         LD A,(HL)
437
                INC HL
438
                ADD A,E
439
                LD E,A
440
                LD A,(HL)
441
                INC HL
442
                ADC A,D
443
                LD D,A
444
                LD A,(HL)
445
                INC HL
446
                ADC A,C
447
                LD C,A
448
                LD A,(HL)
449
                ADC A,B
450
                LD B,A
451
                RET
452
 
1120 savelij 453
; HLDE + BC = HLDE
507 savelij 454
HLDEPBC         EX DE,HL
455
                ADD HL,BC
456
                EX DE,HL
457
                LD BC,0
458
                ADC HL,BC
459
                RET
460
 
1120 savelij 461
; 㧪 ᥪ  
573 savelij 462
LOADLST         LD HL,BUF_512_
507 savelij 463
                PUSH HL
464
                LD A,1
465
                CALL LOADSCS
466
                POP HL
467
                RET
468
 
680 savelij 469
                include drivers/drv_zc.a80
470
                include drivers/drv_neogs.a80
471
                include drivers/drv_nemo.a80
1120 savelij 472
        IFDEF ALL_DRVS
680 savelij 473
                include drivers/drv_smuc.a80
474
                include drivers/drv_divide.a80
475
                include drivers/drv_profi.a80
1120 savelij 476
        ENDIF
680 savelij 477
                include spg2_run.a80
706 Dimkam 478
                include sna_run.a80