Subversion Repositories ngs

Rev

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

Rev Author Line No. Line
105 savelij 1
 
165 savelij 2
; LAST UPDATE: 13.01.2024 savelij
105 savelij 3
 
164 savelij 4
STACK_CURR_DIR          EQU 0x6000      ; �⥪ ����஢ ��� ��। �室�� � ���
5
 
163 savelij 6
; FAT �㭪樨 �� ����ࠬ
7
 INIT_VAR
164 savelij 8
 SETVAR Init_Fatvars                    ; ���� FAT �ࠩ���
9
 SETVAR Getfzap                         ; ������� ����⥫� 䠩��
10
 SETVAR Getlong                         ; ������� ������� ��� 䠩��
11
 SETVAR Finddir                         ; ���� �� ��४�ਨ
12
 SETVAR Findfil                         ; ���� �� 䠩�� �� ��᪥
13
 SETVAR Set_fil                         ; ��⠭���� ����� 䠩��
14
 SETVAR Nextsec                         ; ᫥���騩 ᥪ�� �� MP3 稯
15
 SETVAR Openfil                         ; ����⨥ 䠩��
16
 SETVAR Prvdir                          ; �।���� DIR ��� PLAY
17
 SETVAR Nxtdir                          ; ᫥����� DIR ��� PLAY
18
 SETVAR Loadfil                         ; ����㧪� 䠩��
105 savelij 19
 
163 savelij 20
 INIT_VAR B512BAS
164 savelij 21
 SETVAR BUF_512,                0x200   ; 200 ���� ᥪ��
22
 SETVAR TDIRCLS,                0x400   ; 400 ���� �����஢ root ��४�ਨ
23
 SETVAR DIR_CEP,                0x100   ; 100 楯�窠 �����஢ �����४�਩
24
 SETVAR BUF_PATH,               0x100   ; 100 ���� ⥪�饣� ���
25
 SETVAR ERORDRV,                WORD    ; 2 ������ � �訡��� � A
163 savelij 26
 SETVAR FATType,                BYTE    ; ⨯ FAT: 0-12/1-16/2-32
27
 SETVAR NumFATs,                BYTE    ; ������⢮ FAT ⠡���
28
 SETVAR SecPerClus,             BYTE    ; ������⢮ ᥪ�஢ � ������
29
 SETVAR RootDIRCluster,         DWORD   ; ����� ������ ��୥��� DIR
30
 SETVAR NumSecRootDir,          DWORD   ; ����� ᥪ�� ��୥��� ��४�ਨ
164 savelij 31
 SETVAR ROOTSEC,                WORD    ; ࠧ��� � ᥪ��� ROOT ��४�ਨ
163 savelij 32
 SETVAR FATSize,                DWORD   ; ࠧ��� FAT ⠡���� � ᥪ���
33
 SETVAR StartSecVol,            DWORD   ; ����� ���⮢��� ᥪ�� ࠧ����
34
 SETVAR FirstSecData,           DWORD   ; ����� ᥪ�� ��砫� ������ ������
35
 SETVAR NumSecFAT1,             DWORD   ; ����� ᥪ�� ��ࢮ� FAT ⠡����
36
 SETVAR NumSecFAT2,             DWORD   ; ����� ᥪ�� ��ன FAT ⠡����
37
 SETVAR NumSec2Buf,             DWORD   ; ����� ᥪ�� ����㦥����� � ����
38
 SETVAR NumsSectorsVol,         DWORD   ; ������⢮ ᥪ�஢ �� ࠧ����
39
 SETVAR NumsClustersVol,        DWORD   ; ������⢮ �����஢ �� ࠧ����
40
 SETVAR CurrentDIRCluster,      DWORD   ; ����� ������ ⥪�饩 DIR
164 savelij 41
 SETVAR TEK_ZAP,                WORD    ; ⥪��� ������ � DIR
42
 SETVAR TEK_LEV,                BYTE    ; ��㡨�� ��宦����� � ��४����
43
 SETVAR NUMSECK,                BYTE    ; ���稪 ᥪ�஢ � ������
44
 SETVAR PAGEDIR,                WORD    ; ���� 㪫������ � ��࠭�� ��஢
45
 SETVAR PAGEMP3,                WORD    ; ���� 㪫������ � ��࠭�� 䠩���
46
 SETVAR TFILCLS,                DWORD   ; ⥪�騩 ������
47
 SETVAR TEKNUMC,                WORD    ; ���� ⥪�饣� ������
48
 SETVAR MPHWOST,                BYTE    ; ���⮪ ᥪ�஢ � ��᫥���� ������
49
 SETVAR KOL_CLS,                DWORD   ; ���-�� ������ �����஢ 䠩��
50
 SETVAR KOLVMP3,                WORD    ; ���-�� ��������� 䠩���
51
 SETVAR KOLVDIR,                WORD    ; ���-�� ��������� ��஢
52
 SETVAR STR_MP3,                WORD    ; ���� 㪫���� ��������� 䠩���
53
 SETVAR STACKPREVDIR,           WORD    ; ���� � �⥪� �।���� ��४�਩ ��� ������ �����
163 savelij 54
 SETVAR_ALIGN
164 savelij 55
 SETVAR STR_DIR,                0       ; ? ���� 㪫���� ��������� DIR
163 savelij 56
 
57
; ���� �窠 �室� ��� ࠡ��� � FAT
112 savelij 58
                CALL CMP_INT
105 savelij 59
                DI
60
                EXX
61
                PUSH IX
62
                PUSH IY
63
                LD (ERORDRV),SP
64
                PUSH HL
65
                LD HL,EXITDRV
66
                EX (SP),HL
67
                PUSH HL
68
                PUSH DE
69
                ADD A,A
70
                LD L,A
71
                LD H,0
72
                LD DE,TABLFAT
73
                ADD HL,DE
74
                EX AF,AF'
75
                LD E,(HL)
76
                INC HL
77
                LD D,(HL)
78
                EX DE,HL
79
                POP DE
80
                EX (SP),HL
81
                EXX
82
                RET
83
 
84
ERR_DRV         LD SP,(ERORDRV)
85
EXITDRV         POP IY
86
                POP IX
112 savelij 87
                PUSH AF
88
                LD A,(INT_MODE)
89
                AND A
90
                JR Z,EXITDRV1
91
                EI
92
EXITDRV1        POP AF
105 savelij 93
                RET
94
 
163 savelij 95
TABLFAT         DW INIT_FATVARS                 ; 00 ���� FAT �ࠩ���
96
                DW GETFZAP                      ; 01 ������� ����⥫� 䠩��
97
                DW GETLONG                      ; 02 ������� ������� ��� 䠩��
98
                DW FINDDIR                      ; 03 ���� �� ��४�ਨ
99
                DW FINDMP3                      ; 04 ���� �� 䠩�� �� ��᪥
100
                DW SET_MP3                      ; 05 ��⠭���� ����� 䠩��
101
                DW NEXTSEC                      ; 06 ᫥���騩 ᥪ�� �� MP3 稯
102
                DW OPENFIL                      ; 07 ����⨥ 䠩��
103
                DW PRVDIR                       ; 08 �।���� DIR ��� PLAY
104
                DW NXTDIR                       ; 09 ᫥����� DIR ��� PLAY
105
                DW LOADFIL                      ; 0A ����㧪� 䠩��
105 savelij 106
 
107
NO_LNG          POP DE
108
                LD BC,8
109
                LDIR
110
                LD A,(HL)
163 savelij 111
                CP " "
112
                JR Z,.NO_LNG1
105 savelij 113
                EX DE,HL
163 savelij 114
                LD (HL),"."
105 savelij 115
                INC HL
116
                EX DE,HL
117
                LDI
118
                LDI
119
                LDI
163 savelij 120
.NO_LNG1        EX DE,HL
105 savelij 121
                LD (HL),0
122
                POP HL
123
                RET
124
 
125
GETLONG         PUSH HL
126
                PUSH HL
127
                CALL SET_MP3
128
                CALL GETFZAP
129
                BIT 0,E
130
                JR Z,NO_LNG
131
                EXX
132
                LD C,0
133
                EXX
163 savelij 134
.GETLNG2        DEC BC
105 savelij 135
                CALL GETRZAP
136
                LD A,(HL)
137
                INC HL
138
                EXX
139
                BIT 6,C
140
                POP HL
163 savelij 141
                JR NZ,.GETLNGE_1
105 savelij 142
                LD C,A
143
                EXX
144
                LD A,5
163 savelij 145
                CALL .GETLNG1
105 savelij 146
                AND A
163 savelij 147
                JR Z,.GETLNGE
105 savelij 148
                INC HL
149
                INC HL
150
                INC HL
151
                LD A,6
163 savelij 152
                CALL .GETLNG1
105 savelij 153
                AND A
163 savelij 154
                JR Z,.GETLNGE
105 savelij 155
                INC HL
156
                INC HL
157
                LD A,2
163 savelij 158
                CALL .GETLNG1
105 savelij 159
                AND A
163 savelij 160
                JR Z,.GETLNGE
105 savelij 161
                EXX
162
                PUSH HL
163
                EXX
163 savelij 164
                JR .GETLNG2
105 savelij 165
 
163 savelij 166
.GETLNGE        EXX
167
.GETLNGE_1      LD (HL),0
105 savelij 168
                EXX
169
                POP HL
170
                RET
171
 
163 savelij 172
.GETLNG1        EXX
105 savelij 173
                LD B,A
174
                EXX
163 savelij 175
.GETLNG1_3      LD D,(HL)
105 savelij 176
                INC HL
177
                LD E,(HL)
178
                INC HL
179
                LD A,D
180
                OR E
181
                RET Z
182
                LD A,E
183
                AND A
163 savelij 184
                JR NZ,.GETLNG3
105 savelij 185
                LD A,D
163 savelij 186
                CP 0x80
187
                JR C,.GETLNG5
188
                LD D,0x5F
189
                JR .GETLNG5
105 savelij 190
 
163 savelij 191
.GETLNG3        CP 4
192
                LD A,0x5F
193
                JR NZ,.GETLNG5
105 savelij 194
                LD A,D
163 savelij 195
                LD E,0xEF
196
                LD D,0x5F
105 savelij 197
                CP 1
163 savelij 198
                JR Z,.GETLNG4
199
                LD E,0xA0
200
                CP 0x51
201
                JR Z,.GETLNG4
202
                SUB 0x10
203
                LD E,0x80
204
                JR NC,.GETLNG6
105 savelij 205
                LD A,D
163 savelij 206
                JR .GETLNG5
105 savelij 207
 
163 savelij 208
.GETLNG6        CP 0x30
209
                JR C,.GETLNG4
210
                LD E,0xB0
211
                CP 0x40
212
                JR C,.GETLNG4
105 savelij 213
                LD A,D
163 savelij 214
                JR .GETLNG5
105 savelij 215
 
163 savelij 216
.GETLNG4        ADD A,E
217
.GETLNG5        EXX
105 savelij 218
                LD (HL),A
219
                INC HL
220
                DEC B
221
                EXX
222
                RET Z
163 savelij 223
                JR .GETLNG1_3
224
; 401,410-44F,451
105 savelij 225
 
164 savelij 226
READ_SECTOR     CALL CPNUMSC
227
                JR NZ,.L1
112 savelij 228
                LD HL,BUF_512
229
                RET
164 savelij 230
 
231
.L1             LD (NumSec2Buf),DE
163 savelij 232
                LD (NumSec2Buf+2),BC
112 savelij 233
                LD HL,BUF_512
105 savelij 234
                PUSH HL
235
                EX AF,AF'
236
                LD A,2
237
                CALL COM__SD
238
                AND A
239
                JP NZ,ERR_DRV
240
                POP HL
241
                RET
242
 
163 savelij 243
; �஢�ઠ �� 㦥 ����㦥��� ᥪ��
244
CPNUMSC         LD HL,NumSec2Buf
112 savelij 245
                LD A,(HL)
246
                INC HL
247
                CP E
248
                RET NZ
249
                LD A,(HL)
250
                INC HL
251
                CP D
252
                RET NZ
253
                LD A,(HL)
254
                INC HL
255
                CP C
256
                RET NZ
257
                LD A,(HL)
258
                CP B
259
                RET
260
 
105 savelij 261
ENT_DIR         CALL GETFZAP
262
                BIT 4,A
263
                EX AF,AF'
264
                LD A,E
265
                EX AF,AF'
266
                LD E,A
267
                LD D,(HL)
268
                RET Z
269
                EXX
270
                EX AF,AF'
271
                BIT 7,A
272
                JR Z,ENT_DI2
273
                LD HL,TEK_LEV
274
                LD A,(HL)
275
                AND A
276
                EXX
277
                RET Z
278
                EXX
279
                DEC A
280
                LD (HL),A
281
                ADD A,A
282
                LD H,HIGH (DIR_CEP)
283
                LD L,A
284
                LD A,(HL)
285
                INC L
286
                LD H,(HL)
287
                LD L,A
288
                CALL ENT_DI1
289
                EXX
290
                LD (TEK_ZAP),HL
291
                EXX
292
                RET
293
 
294
ENT_DI2         LD HL,TEK_LEV
295
                LD A,(HL)
296
                INC A
163 savelij 297
                CP 0x80
105 savelij 298
                EXX
299
                RET Z
300
                EXX
301
                LD (HL),A
302
                DEC A
303
                ADD A,A
304
                LD H,HIGH (DIR_CEP)
305
                LD L,A
306
                LD BC,(TEK_ZAP)
307
                LD (HL),C
308
                INC L
309
                LD (HL),B
310
ENT_DI1         EXX
311
                LD DE,20
312
                ADD HL,DE
313
                LD C,(HL)
314
                INC HL
315
                LD B,(HL)
316
                LD E,5
317
                ADD HL,DE
318
                LD E,(HL)
319
                INC HL
320
                LD D,(HL)
321
                LD A,B
322
                OR C
323
                OR D
324
                OR E
325
                JR NZ,ENT_DI0
163 savelij 326
                LD DE,(RootDIRCluster)
327
                LD BC,(RootDIRCluster+2)
328
ENT_DI0         LD (CurrentDIRCluster),DE
329
                LD (CurrentDIRCluster+2),BC
105 savelij 330
                CALL INIRTSC
331
                XOR A
332
                INC A
333
                RET
334
 
335
GETFZAP         LD BC,(TEK_ZAP)
336
                LD A,B
337
                OR C
338
                JR Z,GETRZAP
339
                PUSH BC
340
                DEC BC
341
                CALL GETRZAP
342
                POP BC
343
                LD E,A
344
GETRZAP         PUSH DE
345
                CALL RDDIRSC
346
                POP DE
163 savelij 347
                CP 0xFF
105 savelij 348
                LD A,E
349
                RET Z
350
                EX AF,AF'
163 savelij 351
                LD A,C
352
                AND 0x0F
105 savelij 353
                LD E,A
354
                LD D,0
355
                EX DE,HL
356
                ADD HL,HL
357
                ADD HL,HL
358
                ADD HL,HL
359
                ADD HL,HL
360
                ADD HL,HL
361
                ADD HL,DE
362
                LD DE,11
363
                EX DE,HL
364
                ADD HL,DE
365
                LD L,(HL)
366
                LD H,0
367
                EX DE,HL
368
                CALL CP_TWOT
163 savelij 369
                JR NZ,.L1
370
                LD D,0x80
371
.L1             EX AF,AF'
372
                CP 0x0F
105 savelij 373
                LD A,E
374
                LD E,D
375
                RET NZ
376
                SET 0,E
377
                RET
378
 
163 savelij 379
; �⥭�� ᥪ�� DIR �� ������ BC
380
; �� ��室�: A = 0xFF - ��室 �� �।��� DIR
105 savelij 381
RDDIRSC         PUSH BC
382
                LD D,B
383
                LD E,C
384
                LD BC,0
163 savelij 385
                LD A,0x10
105 savelij 386
                CALL BCDE_A
387
                LD A,E
388
                PUSH AF
163 savelij 389
                LD A,(SecPerClus)
105 savelij 390
                PUSH AF
391
                CALL BCDE_A
112 savelij 392
                LD HL,TDIRCLS
393
                EX DE,HL
394
                ADD HL,HL
395
                ADD HL,HL
396
                ADD HL,DE
163 savelij 397
                CALL GET_DWORD
164 savelij 398
                BIT 7,B
399
                JR Z,.L1
105 savelij 400
                POP AF
164 savelij 401
                POP AF
402
                POP AF
403
                XOR A
105 savelij 404
                DEC A
164 savelij 405
                RET
406
 
407
.L1             CALL REALSEC
408
                POP AF
409
                DEC A
105 savelij 410
                LD L,A
411
                POP AF
412
                AND L
413
                LD L,A
414
                LD H,0
415
                ADD HL,DE
416
                EX DE,HL
417
                LD HL,0
418
                ADC HL,BC
419
                LD B,H
420
                LD C,L
164 savelij 421
                CALL READ_SECTOR
105 savelij 422
                POP BC
423
                RET
424
 
163 savelij 425
GET_DWORD       LD E,(HL)
112 savelij 426
                INC HL
427
                LD D,(HL)
428
                INC HL
429
                LD C,(HL)
430
                INC HL
431
                LD B,(HL)
432
                INC HL
433
                RET
434
 
163 savelij 435
SET_DWORD       LD (HL),E
112 savelij 436
                INC HL
437
                LD (HL),D
438
                INC HL
439
                LD (HL),C
440
                INC HL
441
                LD (HL),B
442
                INC HL
443
                RET
444
 
105 savelij 445
INIRTSC         PUSH AF
163 savelij 446
                LD HL,0xFFFF
447
                LD (NumSec2Buf + 2),HL
448
                LD HL,TDIRCLS
449
                LD DE,(CurrentDIRCluster)
450
                LD BC,(CurrentDIRCluster + 2)
451
                CALL SET_DWORD                  ; ��࠭��� � ⠡���� ����� ⥪�饣� ������
164 savelij 452
                LD A,D
453
                OR E
454
                OR B
455
                OR C
163 savelij 456
                JR Z,LASTCLS                    ; �᫨ ����� ������ 0, � �� ROOT ��� (��� FAT12/16)
105 savelij 457
NEXTCLS         PUSH HL
163 savelij 458
                CALL RDFATZP                    ; �⠥� ᫥��騩 ����� ������ �� 楯�窨 ��४�ਨ
459
                CALL LST_CLS                    ; �஢��塞 �� ����� 楯�窨
105 savelij 460
                POP HL
461
                JR C,LASTCLS
163 savelij 462
                CALL SET_DWORD                  ; �᫨ �� ��᫥���� ��࠭塞 � ⠡����
463
                JR NEXTCLS                      ; ᫥���騩 ����� ������
105 savelij 464
 
163 savelij 465
LASTCLS         LD BC,0xFFFF
466
                CALL SET_DWORD                  ; ������ ��થ� ���� 楯�窨
112 savelij 467
                INC BC
105 savelij 468
                CALL RDDIRSC
469
                LD A,(HL)
112 savelij 470
                CP "."
105 savelij 471
                JR NZ,INIRTS1
472
                INC HL
473
                LD A,(HL)
112 savelij 474
                CP "."
105 savelij 475
                JR Z,INIRTS1
476
                INC BC
477
INIRTS1         LD (TEK_ZAP),BC
478
                POP AF
479
                RET
480
 
481
CP_TWOT         LD A,(HL)
112 savelij 482
                CP "."
105 savelij 483
                RET NZ
484
                INC HL
485
                LD A,(HL)
486
                DEC HL
112 savelij 487
                CP "."
105 savelij 488
                RET NZ
489
                XOR A
490
                RET
491
 
163 savelij 492
LST_CLS         LD A,(FATType)
105 savelij 493
                AND A
494
                JR NZ,LST_CL1
163 savelij 495
                LD HL,0x0FF7
105 savelij 496
                SBC HL,DE
497
                RET
498
 
499
LST_CL1         DEC A
500
                JR NZ,LST_CL2
163 savelij 501
                LD HL,0xFFF7
105 savelij 502
                SBC HL,DE
503
                RET
504
 
505
LST_CL2         PUSH BC
506
                LD A,B
163 savelij 507
                AND 0x0F
105 savelij 508
                LD B,A
163 savelij 509
                LD HL,0x0FFF
105 savelij 510
                SBC HL,BC
511
                POP BC
512
                RET NZ
163 savelij 513
                LD HL,0xFFF7
105 savelij 514
                SBC HL,DE
515
                RET
516
 
163 savelij 517
RDFATZP         LD A,(FATType)                  ; �⥭�� ������ �� ࠧ�來��� FAT
105 savelij 518
                AND A
163 savelij 519
                JR Z,RDFATS0                    ; ���室 ���। ��� FAT12
105 savelij 520
                DEC A
163 savelij 521
                JR Z,RDFATS1                    ; ���室 ���। ��� FAT16
522
                EX DE,HL                        ; ����� �⥭�� ��� FTA32
105 savelij 523
                ADD HL,HL
524
                EX DE,HL
164 savelij 525
                LD H,B
526
                LD L,C
527
                ADC HL,HL                       ; 㬭����� ����� ������ �� 2
105 savelij 528
                LD A,E
529
                LD E,D
530
                LD D,L
531
                LD C,H
163 savelij 532
                LD B,0                          ; ࠧ������ ����� ������ �� 256
533
                CALL RDFATS2                    ; �⠥� ����訥 16 ��� �ᯮ���� �⥭�� ��� FAT16
105 savelij 534
                INC HL
535
                LD C,(HL)
536
                INC HL
163 savelij 537
                LD B,(HL)                       ; ���⠫� ��᫥���騥 ���訥 16 ���
105 savelij 538
                RET
539
 
163 savelij 540
; �⥭�� 16 ��⭮�� ����� ������ �� 楯�窨 ��� FAT16
105 savelij 541
RDFATS1         LD BC,0
542
                LD A,E
543
                LD E,D
163 savelij 544
                LD D,C                          ; ࠧ������ ����� ������ �� 256, ���訥 16 ��� =0
545
RDFATS2         PUSH AF                         ; ��饥 �⥭�� 16 ��⭮�� ����� ������ ��� FAT16/32
105 savelij 546
                PUSH BC
163 savelij 547
                LD HL,NumSecFAT1
548
                CALL BCDEHLP                    ; �ਡ����� ᬥ饭�� �� ��砫� FAT ⠡����
164 savelij 549
                CALL READ_SECTOR                ; ����㧨�� ���᫥��� ����� ᥪ��
105 savelij 550
                POP BC
551
                POP AF
552
                LD E,A
553
                LD D,0
554
                ADD HL,DE
163 savelij 555
                ADD HL,DE                       ; ���᫨�� ᬥ饭�� �� �㦭��� ����� � ����㦥���� ᥪ��
105 savelij 556
                LD E,(HL)
557
                INC HL
163 savelij 558
                LD D,(HL)                       ; ����稫� 16 ��� ����� ������
105 savelij 559
                RET
560
 
163 savelij 561
; �⥭�� 12 ��⭮�� ����� ������ �� 楯�窨 ��� FAT12
105 savelij 562
RDFATS0         LD H,D
563
                LD L,E
564
                ADD HL,HL
163 savelij 565
                ADD HL,DE                       ; HL = HL * 3
105 savelij 566
                SRL H
163 savelij 567
                RR L                            ; HL = HL / 2 - � �⮣� 㬭����� ����� ������ �� 1,5
568
                LD A,E                          ; A - ��� ����ᥭ ⮫쪮 ��� ����� ��ண� ����� ������
105 savelij 569
                LD E,H
570
                LD D,0
571
                LD B,D
163 savelij 572
                LD C,D                          ; ࠧ������ ����� ������ �� 256
105 savelij 573
                SRL E
574
                PUSH AF
575
                PUSH HL
163 savelij 576
                LD DE,(NumSecFAT1)
577
                LD BC,(NumSecFAT1 + 2)
164 savelij 578
                CALL READ_SECTOR                ; ����㧨�� ���᫥��� ᥪ��
105 savelij 579
                POP BC
580
                LD A,B
581
                AND 1
163 savelij 582
                LD B,A                          ; BC = ᬥ饭�� � ����㦥���� ᥪ��
583
                ADD HL,BC                       ; HL = ���� ��㤠 ���� ����� ����� ������
584
                LD B,(HL)                       ; ���⠫� ������� ���� ����� ������
585
                INC HL                          ; ���� ᫥���饣� ����
105 savelij 586
                LD A,H
163 savelij 587
                CP HIGH (BUF_512)+2             ; �஢�ઠ �� ���室 �࠭��� ����㦥����� ᥪ��
105 savelij 588
                JR NZ,RDFATS4
163 savelij 589
                PUSH BC                         ; ��室 �� �।��� ⥪�饣� ����㦥����� ᥪ��
105 savelij 590
                LD BC,0
591
                INC DE
164 savelij 592
                CALL READ_SECTOR                ; ����㦠�� ᫥���騩 ᥪ�� FAT ⠡����
105 savelij 593
                POP BC
594
RDFATS4         POP AF
163 savelij 595
                LD D,(HL)                       ; �⠥� ���訥 ���� ����� ������
596
                LD E,B                          ; ⥯��� DE = ����� ᫥���饣� ������ � 楯�窥
105 savelij 597
                LD BC,0
163 savelij 598
                RRA                             ; �஢��塞 ��� 0 ��ண� ����� ������
105 savelij 599
                JR NC,RDFATS3
163 savelij 600
        REPT 4
601
                SRL D                           ; ᤢ����� ����� ���⠭���� ����� ������ � ����訥 12 ���
105 savelij 602
                RR E
163 savelij 603
        ENDM
105 savelij 604
RDFATS3         LD A,D
163 savelij 605
                AND 0x0F
606
                LD D,A                          ; ��ᨫ� ������騥 ���訥 4 ��� � ����祭���� ����� ������
105 savelij 607
                RET
608
 
163 savelij 609
; ���᫥��� ॠ�쭮�� ᥪ��
610
; �� �室� BCDE = ����� FAT
611
; �� ��室� BCDE = ���� ᥪ��
105 savelij 612
REALSEC         LD A,B
613
                OR C
614
                OR D
615
                OR E
163 savelij 616
                JR NZ,REALSE1                   ; BCDE = 0?
617
                LD DE,(NumSecRootDir)
618
                LD BC,(NumSecRootDir + 2)
619
                RET
620
 
621
REALSE1         LD HL,0xFFFE
105 savelij 622
                EX DE,HL
623
                ADD HL,DE
624
                EX DE,HL
625
                INC HL
164 savelij 626
                ADC HL,BC                       ; HLDE = ����� ������ - 2
163 savelij 627
                LD A,(SecPerClus)               ; �㦭� 㬭����� �� ࠧ��� ������
105 savelij 628
                JR REALSE2
629
 
630
REALSE3         SLA E
631
                RL D
632
                RL L
633
                RL H
634
REALSE2         RRCA
163 savelij 635
                JR NC,REALSE3                   ; 㬭����� �� ࠧ��� ������
105 savelij 636
                LD B,H
637
                LD C,L
163 savelij 638
                LD HL,FirstSecData
639
                JP BCDEHLP                      ; �ਡ����� ᬥ饭�� �� ��砫� ࠧ����
105 savelij 640
 
641
BCDE200         LD E,D
642
                LD D,C
643
                LD C,B
644
                LD B,0
645
                LD A,2
646
                JR BCDE_A
647
 
163 savelij 648
; BCDE >> A = BCDE
105 savelij 649
BCDE_A1         SRL B
650
                RR C
651
                RR D
652
                RR E
653
BCDE_A          RRCA
654
                JR NC,BCDE_A1
655
                RET
656
 
163 savelij 657
; (ADR) - BCDE = BCDE
105 savelij 658
BCDEHLM         LD A,(HL)
659
                INC HL
660
                SUB E
661
                LD E,A
662
                LD A,(HL)
663
                INC HL
664
                SBC A,D
665
                LD D,A
666
                LD A,(HL)
667
                INC HL
668
                SBC A,C
669
                LD C,A
670
                LD A,(HL)
671
                SBC A,B
672
                LD B,A
673
                RET
674
 
163 savelij 675
; (ADR) + BCDE = BCDE
105 savelij 676
BCDEHLP         LD A,(HL)
677
                INC HL
678
                ADD A,E
679
                LD E,A
680
                LD A,(HL)
681
                INC HL
682
                ADC A,D
683
                LD D,A
684
                LD A,(HL)
685
                INC HL
686
                ADC A,C
687
                LD C,A
688
                LD A,(HL)
689
                ADC A,B
690
                LD B,A
691
                RET
692
 
163 savelij 693
; HLDE + BC = HLDE
105 savelij 694
HLDEPBC         EX DE,HL
695
                ADD HL,BC
696
                EX DE,HL
697
                LD BC,0
698
                ADC HL,BC
699
                RET
700
 
163 savelij 701
; BCDE - (ADR) = BCDE
112 savelij 702
HLBCDEM         LD A,E
703
                SUB (HL)
704
                INC HL
705
                LD E,A
706
                LD A,D
707
                SBC A,(HL)
708
                INC HL
709
                LD D,A
710
                LD A,C
711
                SBC A,(HL)
712
                INC HL
713
                LD C,A
714
                LD A,B
715
                SBC A,(HL)
716
                LD B,A
717
                RET
718
 
163 savelij 719
; �஢�ઠ 0 ᥪ�� ࠧ����
720
VALID_BOOTSEC   LD HL,(BUF_512 + _BPB_BytsPerSec)
721
                LD A,H
722
                SUB 2
723
                OR L
724
                JR NZ,VALID_BOOTSEC1
725
                LD HL,(BUF_512 + _BPB_SecPerClus)
726
                OR L
727
                JR Z,VALID_BOOTSEC1
728
                NEG
729
                AND L
730
                CP L
731
                JR NZ,VALID_BOOTSEC1
732
                LD A,(BUF_512 + _BPB_NumFATs)
733
                DEC A
734
                CP 7
735
                JR NC,VALID_BOOTSEC1
736
                XOR A
105 savelij 737
                RET
738
 
163 savelij 739
VALID_BOOTSEC1  OR IXH
740
                RET
741
 
742
FAT_ERR         LD A,0xFF
743
                LD (FATType),A
744
                RET
745
 
746
; ���樠������ ��६����� FAT
747
INIT_FATVARS    LD A,0xFF
748
                LD (NumSec2Buf+3),A
112 savelij 749
                LD DE,0
105 savelij 750
                LD B,D
751
                LD C,E
164 savelij 752
                CALL READ_SECTOR
105 savelij 753
                PUSH HL
754
                POP IY
163 savelij 755
                LD DE,0x01BE
105 savelij 756
                ADD HL,DE
757
                LD A,(HL)
758
                AND A
759
                JR NZ,RDFAT05
760
                LD DE,4
761
                ADD HL,DE
762
                LD A,(HL)
763
                LD B,0
764
                CP 1
765
                JR Z,RDFAT06
766
                LD B,2
163 savelij 767
                CP 0x0B
105 savelij 768
                JR Z,RDFAT06
163 savelij 769
                CP 0x0C
105 savelij 770
                JR Z,RDFAT06
771
                LD B,1
772
                CP 6
773
                JR Z,RDFAT06
163 savelij 774
                CP 0x0E
105 savelij 775
                JR NZ,RDFAT05
776
RDFAT06         LD A,B
163 savelij 777
                LD (FATType),A
105 savelij 778
                ADD HL,DE
779
                LD E,(HL)
780
                INC HL
781
                LD D,(HL)
782
                INC HL
783
                LD C,(HL)
784
                INC HL
785
                LD B,(HL)
786
                JR RDFAT00
787
 
163 savelij 788
RDFAT05         LD C,(IY+0x0D)
105 savelij 789
                XOR A
790
                LD E,A
791
                LD B,8
164 savelij 792
.L4             RR C
105 savelij 793
                ADC A,0
164 savelij 794
                DJNZ .L4
105 savelij 795
                DEC A
164 savelij 796
                JR NZ,.L5
105 savelij 797
                INC E
164 savelij 798
.L5             LD A,(IY+0x0E)
163 savelij 799
                OR (IY+0x0F)
800
                JR Z,.L2
105 savelij 801
                INC E
163 savelij 802
.L2             LD A,(IY+0x13)
803
                OR (IY+0x14)
804
                JR NZ,.L3
105 savelij 805
                INC E
163 savelij 806
.L3             LD A,(IY+0x20)
807
                OR (IY+0x21)
808
                OR (IY+0x22)
809
                OR (IY+0x23)
164 savelij 810
                JR NZ,.L6
105 savelij 811
                INC E
164 savelij 812
.L6             LD A,(IY+0x15)
163 savelij 813
                AND 0xF0
814
                CP 0xF0
815
                JR NZ,.L1
105 savelij 816
                INC E
163 savelij 817
.L1             LD A,E
105 savelij 818
                CP 4
819
                JP NZ,FAT_ERR
163 savelij 820
                LD A,0xFF
821
                LD (FATType),A
105 savelij 822
                LD DE,0
823
                LD B,D
824
                LD C,E
825
 
163 savelij 826
RDFAT00         LD (StartSecVol),DE
164 savelij 827
                LD (StartSecVol + 2),BC         ; �������� ����� ���⮢��� ᥪ�� ࠧ����
828
                CALL READ_SECTOR                ; ����㧨�� ���
163 savelij 829
 
830
                LD A,(BUF_512 + _BPB_SecPerClus)
831
                LD (SecPerClus),A
832
                LD HL,(BUF_512 + _BPB_RsvdSecCnt)
833
                ADD HL,DE
834
                LD (NumSecFAT1),HL
105 savelij 835
                LD HL,0
163 savelij 836
                ADC HL,BC
837
                LD (NumSecFAT1 + 2),HL
838
                LD HL,0
839
                LD DE,(BUF_512 + _BPB_FATSz16)
105 savelij 840
                LD A,D
841
                OR E
163 savelij 842
                JR NZ,RDFAT01                   ; �᫨ �� FAT12/16 (_BPB_FATSz16 == 0)
843
                LD DE,(BUF_512 + _BPB_FATSz32)
164 savelij 844
                LD HL,(BUF_512 + _BPB_FATSz32 + 2)      ; � ��६ �� ᬥ饭�� +36
163 savelij 845
RDFAT01         LD (FATSize),DE
164 savelij 846
                LD (FATSize + 2),HL             ; �᫮ ᥪ�஢ �� FAT-⠡����
163 savelij 847
 
105 savelij 848
                LD HL,0
163 savelij 849
                LD DE,(BUF_512 + _BPB_TotSec16)
105 savelij 850
                LD A,D
851
                OR E
164 savelij 852
                JR NZ,.L1                       ; �᫨ �� FAT12/16 (BPB_TOTSEC16=0)
163 savelij 853
                LD DE,(BUF_512 + _BPB_TotSec32)
854
                LD HL,(BUF_512 + _BPB_TotSec32+2)
164 savelij 855
                                                ; � ��६ �� ᬥ饭�� +32
163 savelij 856
.L1             LD (NumsSectorsVol + 2),HL
164 savelij 857
                LD (NumsSectorsVol),DE          ; ������⢮ ᥪ�஢ �� ��᪥/ࠧ����
105 savelij 858
 
163 savelij 859
; ����塞 ROOTDIRSECTORS
860
                LD DE,(BUF_512 + _BPB_RootEntCnt)
861
                LD BC,0
105 savelij 862
                LD A,D
863
                OR E
864
                JR Z,RDFAT03
163 savelij 865
                LD A,0x10
105 savelij 866
                CALL BCDE_A
867
 
164 savelij 868
; �� ॠ�������� ��㫠
869
; ROOTDIRSECTORS=((BPB_ROOTENTCNT*32)++(BPB_BYTSPERSEC-1))/BPB_BYTSPERSEC
870
; � HL ROOTDIRSECTORS. �᫨ FAT32, � HL=0 �ᥣ��
105 savelij 871
 
164 savelij 872
RDFAT03         PUSH DE                         ; ROOTDIRSECTORS
163 savelij 873
                LD HL,NumSecFAT1
874
                CALL GET_DWORD
875
                LD A,(BUF_512 + _BPB_NumFATs)
876
                LD (NumFATs),A
105 savelij 877
                DEC A
163 savelij 878
                JR Z,.L1
879
                LD HL,FATSize
880
                CALL BCDEHLP
881
                LD (NumSecFAT2),DE
882
                LD (NumSecFAT2 + 2),BC
883
.L1             LD HL,FATSize
884
                CALL BCDEHLP
885
                LD (NumSecRootDir),DE
886
                LD (NumSecRootDir + 2),BC
887
                POP HL
888
; ������塞 ࠧ��� ROOTDIR
889
                ADD HL,DE
105 savelij 890
                EX DE,HL
163 savelij 891
                LD HL,0
892
                ADC HL,BC
105 savelij 893
                LD B,H
894
                LD C,L
163 savelij 895
                LD (FirstSecData),DE
896
                LD (FirstSecData + 2),BC
897
                LD HL,NumsSectorsVol
898
                CALL BCDEHLM
899
                LD A,(SecPerClus)
900
                CALL BCDE_A
901
                LD (NumsClustersVol),DE
902
                LD (NumsClustersVol + 2),BC
105 savelij 903
 
163 savelij 904
                LD A,(FATType)
905
                CP 0xFF
112 savelij 906
                JR NZ,RDFAT04
163 savelij 907
; ��।������ ⨯� FAT �� �����⢨� MBR
908
                LD HL,(BUF_512 + _BPB_FATSz16)
909
                LD A,H
910
                OR L
112 savelij 911
                LD A,2
163 savelij 912
                JR Z,.L2
913
                LD DE,(FATSize - 1)
914
                LD BC,(FATSize + 1)
915
                LD E,0                          ; BCDE = ������⢮ ᥪ�஢ * 0x100
916
                LD HL,NumsClustersVol           ; ������⢮ �����஢ �� FAT
917
                CALL HLBCDEM                    ; ������⢮ �����஢ - (������⢮ ᥪ�஢ * 0x100)
112 savelij 918
                LD A,D
919
                OR C
920
                OR B
163 savelij 921
                LD A,1                          ; FAT16
922
                JR Z,.L2                        ; FAT16 �᫨ 䫠� Z=0
923
                XOR A                           ; ���� FAT12
924
.L2             LD (FATType),A
105 savelij 925
 
163 savelij 926
; ��� FAT12/16 ROOT ������ = 0
927
; ��� FAT32 ��६ �� ᬥ饭�� +44
928
; �� ��室�: BCDE - ������ ROOTDIR �������
929
RDFAT04         XOR A
930
                LD (TEK_LEV),A
931
                LD (BUF_PATH),A
932
;               CALL INIT_PATH
933
                LD A,(FATType)
934
                PUSH AF
105 savelij 935
                AND A
936
                LD DE,0
937
                LD B,D
938
                LD C,E
163 savelij 939
                JR Z,.L1                        ;FAT12-NONE
105 savelij 940
                DEC A
163 savelij 941
                JR Z,.L1                        ;FAT16
942
                LD DE,(BUF_512 + _BPB_RootClus)
943
                LD BC,(BUF_512 + _BPB_RootClus + 2)     ;FAT32
944
.L1             LD (CurrentDIRCluster),DE
945
                LD (CurrentDIRCluster + 2),BC   ; ����� ⥪�饣� ������
946
                LD (RootDIRCluster),DE
947
                LD (RootDIRCluster + 2),BC      ; ����� ��୥���� ������
105 savelij 948
                LD (TEK_LEV),A
163 savelij 949
                POP AF
105 savelij 950
                JP INIRTSC
951
 
165 savelij 952
F_EXT           DZ "MP3MOD"
105 savelij 953
 
954
CP_EXT          PUSH BC
955
                PUSH DE
956
                PUSH HL
957
                LD C,0
958
                LD DE,F_EXT
163 savelij 959
.L3             LD A,(DE)
105 savelij 960
                AND A
163 savelij 961
                JR Z,.L2
105 savelij 962
                INC C
963
                PUSH DE
964
                PUSH HL
965
                CALL COMPARF
966
                POP HL
967
                POP DE
163 savelij 968
                JR Z,.L1
105 savelij 969
                INC DE
970
                INC DE
971
                INC DE
163 savelij 972
                JR .L3
105 savelij 973
 
163 savelij 974
.L1             LD A,C
975
.L2             POP HL
105 savelij 976
                POP DE
977
                POP BC
978
                RET
979
 
980
COMPARF         PUSH DE
981
                LD DE,8
982
                ADD HL,DE
983
                POP DE
984
                LD B,3
163 savelij 985
.L1             LD A,(DE)
105 savelij 986
                CP (HL)
987
                RET NZ
988
                INC HL
989
                INC DE
163 savelij 990
                DJNZ .L1
105 savelij 991
                RET
992
 
165 savelij 993
; ����⨥ 䠩��
994
; �� ��室�:
995
; A - ⨯ 䠩�� (1 � �����)
105 savelij 996
OPENFIL         CALL SET_MP3
997
                CALL GETFZAP
998
                CALL CP_EXT
999
                PUSH AF
163 savelij 1000
                LD DE,0x14
105 savelij 1001
                ADD HL,DE
1002
                LD C,(HL)
1003
                INC HL
1004
                LD B,(HL)
1005
                LD E,5
1006
                ADD HL,DE
1007
                LD E,(HL)
1008
                INC HL
1009
                LD D,(HL)
1010
                LD (TFILCLS),DE
1011
                LD (TFILCLS+2),BC
1012
                INC HL
1013
                LD E,(HL)
1014
                INC HL
1015
                LD D,(HL)
1016
                INC HL
1017
                LD C,(HL)
1018
                INC HL
1019
                LD B,(HL)
1020
                LD A,D
1021
                AND 1
1022
                OR E
1023
                EX AF,AF'
1024
                CALL BCDE200
163 savelij 1025
                LD A,(SecPerClus)
105 savelij 1026
                LD H,A
1027
                DEC A
1028
                AND E
1029
                LD L,A
1030
                EX AF,AF'
163 savelij 1031
                JR Z,.L1
105 savelij 1032
                INC L
163 savelij 1033
.L1             LD A,L
105 savelij 1034
                LD (MPHWOST),A
1035
                LD A,H
1036
                CALL BCDE_A
1037
                LD (KOL_CLS),DE
1038
                LD (KOL_CLS+2),BC
1039
                XOR A
1040
                LD (NUMSECK),A
1041
                POP AF
1042
                RET
1043
 
164 savelij 1044
; ��।�� ⥪�饣� ᥪ�� 䠩�� �� ������� MP3
105 savelij 1045
NEXTSEC         LD HL,KOL_CLS
1046
                LD A,(HL)
1047
                INC HL
1048
                OR (HL)
1049
                INC HL
1050
                OR (HL)
1051
                INC HL
1052
                OR (HL)
1053
                JR Z,LSTCLSF
1054
                LD DE,(TFILCLS)
1055
                LD BC,(TFILCLS+2)
1056
                PUSH DE
1057
                PUSH BC
1058
                CALL REALSEC
1059
                LD HL,(NUMSECK)
1060
                LD H,0
1061
                ADD HL,DE
1062
                EX DE,HL
1063
                LD HL,0
1064
                ADC HL,BC
1065
                LD B,H
1066
                LD C,L
1067
                LD A,9
1068
                CALL COM__SD
1069
                AND A
1070
                JP NZ,ERR_DRV
1071
                POP BC
1072
                POP DE
1073
                LD A,(NUMSECK)
1074
                INC A
1075
                LD H,A
1076
                LD (NUMSECK),A
163 savelij 1077
                LD A,(SecPerClus)
105 savelij 1078
                CP H
163 savelij 1079
                LD A,0                          ; ��室 �� �� �訡��
105 savelij 1080
                RET NZ
1081
                XOR A
1082
                LD (NUMSECK),A
1083
                CALL RDFATZP
1084
                LD (TFILCLS),DE
1085
                LD (TFILCLS+2),BC
1086
                LD HL,KOL_CLS
1087
                LD DE,1
1088
                LD B,D
1089
                LD C,D
1090
                CALL BCDEHLM
1091
                LD (KOL_CLS),DE
1092
                LD (KOL_CLS+2),BC
1093
                XOR A
1094
                INC A
1095
                RET
1096
 
164 savelij 1097
; ��।�� ��᫥����� ᥪ�� 䠩�� �� ������� MP3
105 savelij 1098
LSTCLSF         LD DE,(TFILCLS)
1099
                LD BC,(TFILCLS+2)
1100
                CALL REALSEC
1101
                LD HL,(NUMSECK)
1102
                LD H,0
1103
                ADD HL,DE
1104
                EX DE,HL
1105
                LD HL,0
1106
                ADC HL,BC
1107
                LD B,H
1108
                LD C,L
1109
                LD A,9
1110
                CALL COM__SD
1111
                AND A
1112
                JP NZ,ERR_DRV
1113
                LD A,(NUMSECK)
1114
                INC A
1115
                LD H,A
1116
                LD (NUMSECK),A
1117
                LD A,(MPHWOST)
1118
                AND A
1119
                RET Z
1120
                CP H
1121
                RET
1122
 
163 savelij 1123
; ���樠������ ��६����� ��� ⥪�饣� 䠩��
105 savelij 1124
SET_MP3         LD H,B
1125
                LD L,C
1126
                LD DE,(STR_MP3)
1127
                ADD HL,HL
1128
                ADD HL,HL
1129
                ADD HL,DE
1130
                LD E,(HL)
1131
                INC HL
1132
                LD D,(HL)
1133
                INC HL
1134
                PUSH HL
1135
                EX DE,HL
163 savelij 1136
                LD DE,CurrentDIRCluster
105 savelij 1137
                LDI
1138
                LDI
1139
                LDI
1140
                LDI
163 savelij 1141
                LD DE,(CurrentDIRCluster)
1142
                LD BC,(CurrentDIRCluster+2)
105 savelij 1143
                CALL INIRTSC
1144
                POP HL
1145
                LD E,(HL)
1146
                INC HL
1147
                LD D,(HL)
1148
                LD (TEK_ZAP),DE
1149
                RET
1150
 
163 savelij 1151
; ���室 �� �।����� ��४���
105 savelij 1152
PRVDIR          LD HL,(KOLVDIR)
1153
                LD DE,2
1154
                AND A
1155
                SBC HL,DE
1156
                RET C
1157
                LD HL,(KOLVMP3)
1158
                AND A
1159
                SBC HL,DE
1160
                RET C
1161
                LD H,B
1162
                LD L,C
1163
                LD DE,(STR_MP3)
1164
                ADD HL,HL
1165
                ADD HL,HL
1166
                ADD HL,DE
1167
                PUSH HL
1168
                POP IX
1169
                LD H,B
1170
                LD L,C
1171
                LD BC,(KOLVMP3)
163 savelij 1172
                LD DE,0xFFFC
105 savelij 1173
                EXX
1174
                LD L,(IX+0)
1175
                LD H,(IX+1)
1176
                EXX
1177
                CALL PRVDIR2
1178
                CALL PRVDIR2
1179
                LD DE,4
1180
                JR NXTDIR2
1181
 
1182
PRVDIR2         EXX
1183
                LD D,H
1184
                LD E,L
1185
                LD L,(IX+0)
1186
                LD H,(IX+1)
1187
                AND A
1188
                SBC HL,DE
1189
                EX AF,AF'
1190
                ADD HL,DE
1191
                EX AF,AF'
1192
                EXX
1193
                RET NZ
1194
                LD A,H
1195
                OR L
1196
                JR Z,PRVDIR4
1197
                DEC HL
1198
                ADD IX,DE
1199
                JR PRVDIR2
1200
 
1201
PRVDIR4         LD H,B
1202
                LD L,C
1203
                DEC HL
1204
                ADD HL,HL
1205
                ADD HL,HL
1206
                LD IX,(STR_MP3)
1207
                EX DE,HL
1208
                ADD IX,DE
1209
                EX DE,HL
1210
                LD H,B
1211
                LD L,C
1212
                DEC HL
1213
                JR PRVDIR2
1214
 
163 savelij 1215
; ���室 �� ᫥������ ��४���
105 savelij 1216
NXTDIR          LD HL,(KOLVDIR)
1217
                LD DE,2
1218
                AND A
1219
                SBC HL,DE
1220
                RET C
1221
                LD HL,(KOLVMP3)
1222
                AND A
1223
                SBC HL,DE
1224
                RET C
1225
                LD H,B
1226
                LD L,C
1227
                LD DE,(STR_MP3)
1228
                ADD HL,HL
1229
                ADD HL,HL
1230
                ADD HL,DE
1231
                PUSH HL
1232
                POP IX
1233
                LD H,B
1234
                LD L,C
1235
                LD BC,(KOLVMP3)
1236
                LD DE,4
1237
                EXX
1238
                LD L,(IX+0)
1239
                LD H,(IX+1)
1240
                EXX
1241
NXTDIR2         EXX
1242
                LD D,H
1243
                LD E,L
1244
                LD L,(IX+0)
1245
                LD H,(IX+1)
1246
                AND A
1247
                SBC HL,DE
1248
                EX AF,AF'
1249
                ADD HL,DE
1250
                EX AF,AF'
1251
                EXX
1252
                JR NZ,NXTDIR3
1253
                INC HL
1254
                ADD IX,DE
1255
                AND A
1256
                SBC HL,BC
1257
                EX AF,AF'
1258
                ADD HL,BC
1259
                EX AF,AF'
1260
                JR NZ,NXTDIR2
1261
                LD HL,0
1262
                LD IX,(STR_MP3)
1263
                JR NXTDIR2
1264
 
1265
NXTDIR3         LD B,H
1266
                LD C,L
1267
                RET
1268
 
163 savelij 1269
; ����祭�� ᫥���饩 ��࠭��� �����
1270
SETPAGE         LD HL,BUF_PAG+0xFF
105 savelij 1271
                LD L,(HL)
1272
                LD A,(HL)
1273
                OUT (MPAGEX),A
163 savelij 1274
                LD L,0xFF
105 savelij 1275
                INC (HL)
1276
                RET
1277
 
163 savelij 1278
; ��㧨��� MOD � ������ NEOGS
1279
LOADFIL         LD HL,BUF_PAG+0xFF
105 savelij 1280
                LD (HL),0
1281
                IN A,(GSCFG0)
1282
                SET B_EXPAG,A
1283
                OUT (GSCFG0),A
163 savelij 1284
                LD IY,(SecPerClus)
1285
; LY = ���-�� ᥪ�஢ � ������
105 savelij 1286
                LD A,IYL
163 savelij 1287
                CP 0x20
105 savelij 1288
                JR C,LDMF5
163 savelij 1289
; ����㧪� �����஢ 32 � ����� ᥪ�஢
105 savelij 1290
LD_F5           LD DE,(TFILCLS)
1291
                LD BC,(TFILCLS+2)
1292
                CALL REALSEC
1293
                LD A,IYL
163 savelij 1294
                AND 0xE0
105 savelij 1295
                RLCA
1296
                RLCA
1297
                RLCA
1298
                LD IYH,A
163 savelij 1299
LD_F9           LD A,0x20
105 savelij 1300
                EX AF,AF'
1301
                CALL SETPAGE
1302
                LD A,3
163 savelij 1303
                LD HL,0xC000
105 savelij 1304
                CALL COM__SD
1305
                AND A
1306
                JP NZ,ERR_DRV
163 savelij 1307
                LD HL,0x20
105 savelij 1308
                ADD HL,DE
1309
                EX DE,HL
1310
                LD HL,0
1311
                ADC HL,BC
1312
                LD B,H
1313
                LD C,L
1314
                DEC IYH
1315
                JR NZ,LD_F9
1316
                LD DE,(TFILCLS)
1317
                LD BC,(TFILCLS+2)
1318
                CALL RDFATZP
1319
                CALL LST_CLS
1320
                JR C,LD_E
1321
                LD (TFILCLS+2),BC
1322
                LD (TFILCLS),DE
1323
                JR LD_F5
1324
 
1325
LD_E            IN A,(GSCFG0)
1326
                RES B_EXPAG,A
1327
                OUT (GSCFG0),A
165 savelij 1328
                LD A,(PAGE_PLAYER)
105 savelij 1329
                OUT (MPAG),A
163 savelij 1330
                LD A,(BUF_PAG+0xFF)
105 savelij 1331
                SRL A
1332
                ADC A,0
1333
                RET
1334
 
163 savelij 1335
; ����㧪� �����஢ 16 � ����� ᥪ�஢
105 savelij 1336
LDMF5           CALL SETPAGE
163 savelij 1337
                LD HL,0xC000
105 savelij 1338
LDMF2           LD DE,(TFILCLS)
1339
                LD BC,(TFILCLS+2)
1340
                PUSH HL
1341
                CALL REALSEC
1342
                POP HL
1343
LDMF3           LD A,IYL
1344
                EX AF,AF'
1345
                LD A,3
1346
                CALL COM__SD
1347
                AND A
1348
                JP NZ,ERR_DRV
1349
                PUSH HL
1350
                LD BC,(TFILCLS+2)
1351
                LD DE,(TFILCLS)
1352
                CALL RDFATZP
1353
                CALL LST_CLS
1354
                POP HL
1355
                JR C,LD_E
1356
                LD (TFILCLS+2),BC
1357
                LD (TFILCLS),DE
1358
                LD A,H
1359
                AND A
1360
                JR NZ,LDMF2
1361
                JR LDMF5
1362
 
163 savelij 1363
; ���� ��� ��४�਩ �� FAT
164 savelij 1364
FINDDIR         LD HL,STACK_CURR_DIR
1365
                LD (STACKPREVDIR),HL
105 savelij 1366
                LD DE,STR_DIR
163 savelij 1367
                LD HL,RootDIRCluster
105 savelij 1368
                LDI
1369
                LDI
1370
                LDI
1371
                LDI
164 savelij 1372
                LD (PAGEDIR),DE                 ; �㤠 ᫥���騩 ����� ������ ���� ������
1373
.L72            LD BC,0
105 savelij 1374
                CALL RDDIRSC
163 savelij 1375
                LD DE,0x20
105 savelij 1376
                PUSH HL
1377
                POP IX
1378
                LD A,(HL)
112 savelij 1379
                CP "."
164 savelij 1380
                JR NZ,.L3
1381
                LD A,(IX+1)
112 savelij 1382
                CP "."
164 savelij 1383
                JR Z,.NEXTDIR
105 savelij 1384
                INC BC
1385
                ADD IX,DE
164 savelij 1386
.NEXTDIR        INC BC
105 savelij 1387
                ADD IX,DE
164 savelij 1388
.L3             LD A,IXH
1389
                CP HIGH (BUF_512) + 2
1390
                JR NZ,.L2                       ; ᥪ�� ���稫��?
1391
                CALL RDDIRSC
1392
                JR NZ,.FNDDIR5                  ; ����� DIR
163 savelij 1393
                LD DE,0x20
105 savelij 1394
                PUSH HL
1395
                POP IX
164 savelij 1396
.L2             LD A,(IX+0)
112 savelij 1397
                AND A
164 savelij 1398
                JR Z,.FNDDIR5                   ; ����� DIR?
163 savelij 1399
                CP 0xE5
164 savelij 1400
                JR Z,.NEXTDIR                   ; 䠩� 㤠���?
1401
                LD A,(IX + _DIR_Attr)
1402
                CP M_DIR_AttrLongName
1403
                JR Z,.NEXTDIR                   ; �� ������� ���?
1404
                CP M_DIR_VolumeID
1405
                JR Z,.NEXTDIR                   ; �� ��� ࠧ����?
1406
                BIT 4,(IX + _DIR_Attr)
1407
                JR Z,.NEXTDIR                   ; �� ��४���?
1408
; 㪫���� ����� ������ ��������� DIR
1409
                LD HL,(PAGEDIR)                 ; �㤠 ������
163 savelij 1410
                LD A,(IX+0x1A)
105 savelij 1411
                LD (HL),A
1412
                INC HL
163 savelij 1413
                LD A,(IX+0x1B)
105 savelij 1414
                LD (HL),A
1415
                INC HL
163 savelij 1416
                LD A,(IX+0x14)
105 savelij 1417
                LD (HL),A
1418
                INC HL
163 savelij 1419
                LD A,(IX+0x15)
105 savelij 1420
                LD (HL),A
163 savelij 1421
                INC HL                          ; 㫮���� ����� ������ ��������� DIR
105 savelij 1422
                LD (PAGEDIR),HL
164 savelij 1423
                LD HL,(STACKPREVDIR)
1424
                DEC HL
1425
                LD (HL),B
1426
                DEC HL
1427
                LD (HL),C                       ; ��࠭��� ����� ⥪�饩 ����
1428
                LD (STACKPREVDIR),HL
105 savelij 1429
                LD (TEK_ZAP),BC
1430
                CALL ENT_DIR
164 savelij 1431
                JP .L72
105 savelij 1432
 
164 savelij 1433
; ��室 �� ��४�ਨ � �஢�ઠ ����⪨ ��室� �� ��୥��� ��४�ਨ
1434
.FNDDIR5        LD A,(STACKPREVDIR + 1)
1435
                CP HIGH (STACK_CURR_DIR)
1436
                JR NC,FNDDIR0
105 savelij 1437
                LD BC,0
1438
                CALL RDDIRSC
1439
                PUSH HL
1440
                POP IX
163 savelij 1441
                LD DE,0x20
105 savelij 1442
                LD A,(HL)
112 savelij 1443
                CP "."
164 savelij 1444
                JR NZ,.FNDDI52
105 savelij 1445
                INC HL
1446
                LD A,(HL)
112 savelij 1447
                CP "."
164 savelij 1448
                JR Z,.FNDDI52
105 savelij 1449
                INC BC
1450
                ADD IX,DE
164 savelij 1451
.FNDDI52        LD (TEK_ZAP),BC
1452
                CALL ENT_DIR                    ; ��室 �� ����
1453
                LD HL,(STACKPREVDIR)
1454
                LD C,(HL)
1455
                INC HL
1456
                LD B,(HL)
1457
                INC HL
1458
                LD (STACKPREVDIR),HL
105 savelij 1459
                CALL RDDIRSC
1460
                LD A,C
163 savelij 1461
                AND 0x0F
105 savelij 1462
                LD E,A
1463
                LD D,0
1464
                EX DE,HL
1465
                ADD HL,HL
1466
                ADD HL,HL
1467
                ADD HL,HL
1468
                ADD HL,HL
1469
                ADD HL,HL
1470
                ADD HL,DE
1471
                PUSH HL
1472
                POP IX
163 savelij 1473
                LD DE,0x20
164 savelij 1474
                JP .NEXTDIR
105 savelij 1475
 
163 savelij 1476
; �� DIR �������
105 savelij 1477
FNDDIR0         LD HL,(PAGEDIR)
1478
                LD D,H
1479
                LD E,L
1480
                INC HL
1481
                INC HL
1482
                INC HL
163 savelij 1483
                LD (HL),0xFF
105 savelij 1484
                PUSH HL
1485
                EX DE,HL
1486
                LD DE,STR_DIR
1487
                AND A
1488
                SBC HL,DE
1489
                SRL H
1490
                RR L
1491
                SRL H
1492
                RR L
1493
                LD (KOLVDIR),HL
1494
                EX (SP),HL
1495
                INC HL
1496
                LD (STR_MP3),HL
1497
                POP HL
1498
                RET
1499
 
163 savelij 1500
; �� 䠩�� ������� ��� ������ ���稫���
105 savelij 1501
FNDMP30         LD HL,(PAGEMP3)
1502
                LD DE,(STR_MP3)
1503
                PUSH HL
1504
                POP IX
1505
                LD (HL),0
1506
                INC L
1507
                LD (HL),0
1508
                DEC L
1509
                AND A
1510
                SBC HL,DE
1511
                SRL H
1512
                RR L
1513
                SRL H
1514
                RR L
1515
                LD DE,2
1516
                LD (KOLVMP3),HL
165 savelij 1517
                LD (COUNT_MP3),HL
105 savelij 1518
                AND A
1519
                SBC HL,DE
1520
                EX AF,AF'
1521
                ADD HL,DE
1522
                EX AF,AF'
1523
                RET C
1524
                PUSH HL
1525
                LD IY,1
1526
                LD B,H
1527
                LD C,L
163 savelij 1528
                LD DE,0xFFFC
105 savelij 1529
                ADD IX,DE
1530
                DEC HL
1531
                EXX
1532
                LD L,(IX+0)
1533
                LD H,(IX+1)
1534
                EXX
1535
FNDM030         EXX
1536
                LD D,H
1537
                LD E,L
1538
                LD L,(IX+0)
1539
                LD H,(IX+1)
1540
                AND A
1541
                SBC HL,DE
1542
                EX AF,AF'
1543
                ADD HL,DE
1544
                EX AF,AF'
1545
                EXX
164 savelij 1546
                JR Z,.L1
105 savelij 1547
                INC IY
164 savelij 1548
.L1             LD A,H
105 savelij 1549
                OR L
163 savelij 1550
                JR Z,FNDM033                    ; ������ ���稫���, ��室��
105 savelij 1551
                DEC HL
1552
                ADD IX,DE
1553
                JR FNDM030
1554
 
163 savelij 1555
FNDM033         LD (KOLVDIR),IY                 ; ������⢮ ��������� ��४�਩
105 savelij 1556
                POP HL
1557
                RET
1558
 
163 savelij 1559
; ���� 䠩��� �� ���७��
105 savelij 1560
FINDMP3         LD HL,(STR_MP3)
1561
                LD (PAGEMP3),HL
1562
                LD HL,STR_DIR
1563
                LD (PAGEDIR),HL
164 savelij 1564
.FNDMP37        LD HL,(PAGEDIR)
105 savelij 1565
                LD (TEKNUMC),HL
163 savelij 1566
                LD DE,CurrentDIRCluster
105 savelij 1567
                LDI
1568
                LDI
1569
                LDI
1570
                LDI
1571
                LD (PAGEDIR),HL
1572
                DEC HL
1573
                BIT 7,(HL)
1574
                JP NZ,FNDMP30
163 savelij 1575
                LD DE,(CurrentDIRCluster)
1576
                LD BC,(CurrentDIRCluster+2)
105 savelij 1577
                CALL INIRTSC
1578
                LD BC,0
1579
                CALL RDDIRSC
163 savelij 1580
                LD DE,0x20
105 savelij 1581
                PUSH HL
1582
                POP IX
1583
                LD A,(HL)
112 savelij 1584
                CP "."
164 savelij 1585
                JR NZ,.ROOT
1586
                LD A,(IX+1)
112 savelij 1587
                CP "."
164 savelij 1588
                JR Z,.NEXTFILE
105 savelij 1589
                INC BC
1590
                ADD IX,DE
164 savelij 1591
.NEXTFILE       INC BC
105 savelij 1592
                ADD IX,DE
164 savelij 1593
.ROOT           LD A,IXH
1594
                CP HIGH (BUF_512) + 2
1595
                JR NZ,.FNDMP32
1596
                CALL RDDIRSC
1597
                JP NZ,.FNDMP37
163 savelij 1598
                LD DE,0x20
105 savelij 1599
                PUSH HL
1600
                POP IX
164 savelij 1601
.FNDMP32        LD A,(IX+0)
112 savelij 1602
                AND A
164 savelij 1603
                JP Z,.FNDMP37                   ; ����� DIR?
163 savelij 1604
                CP 0xE5
164 savelij 1605
                JR Z,.NEXTFILE                  ; 䠩� 㤠���?
1606
                LD A,(IX + _DIR_Attr)
1607
                CP M_DIR_AttrLongName
1608
                JR Z,.NEXTFILE                  ; �� ������� ���?
1609
                CP M_DIR_VolumeID
1610
                JR Z,.NEXTFILE                  ; �� ��� ࠧ����?
1611
                BIT 4,(IX + _DIR_Attr)
1612
                JR NZ,.NEXTFILE                 ; �� ��४���?
105 savelij 1613
                EXX
1614
                PUSH IX
1615
                POP HL
163 savelij 1616
                CALL CP_EXT                     ; �஢��塞 ���७�� 䠩��
105 savelij 1617
                EXX
1618
                AND A
164 savelij 1619
                JP Z,.NEXTFILE                  ; �� ᮢ����, �த������
105 savelij 1620
                LD DE,(TEKNUMC)
1621
                LD HL,(PAGEMP3)
163 savelij 1622
; 㪫���� ����⥫� 䠩��
1623
; 2 ���� ���� ������ ����
1624
; 2 ���� "ॠ���" ����� 䠩��
105 savelij 1625
                LD (HL),E
1626
                INC HL
1627
                LD (HL),D
1628
                INC HL
1629
                LD (HL),C
1630
                INC HL
1631
                LD (HL),B
1632
                INC HL
1633
                LD (PAGEMP3),HL
1634
                LD A,H
1635
                AND A
163 savelij 1636
                JP Z,FNDMP30                    ; ������ ���稫���, ��室��
1637
                LD DE,0x20
164 savelij 1638
                JR .NEXTFILE