Subversion Repositories pentevo

Rev

Rev 1010 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1010 Rev 1028
Line 1... Line 1...
1
 
1
 
2
; LAST UPDATE: 19.07.2022 savelij
2
; LAST UPDATE: 13.10.2022 savelij
3
 
3
 
4
COM_FAT         EX AF,AF'
4
COM_FAT         EX AF,AF'
5
                CALL P5_READ_BYTE
5
                CALL P5_READ_BYTE
6
                LD A,(NEXTBYTERST8)
6
                LD A,(NEXTBYTERST8)
7
                PUSH IX
7
                PUSH IX
Line 41... Line 41...
41
ERR_DRV         LD SP,(ERORDRV)
41
ERR_DRV         LD SP,(ERORDRV)
42
EXITDRV         POP IY
42
EXITDRV         POP IY
43
                POP IX
43
                POP IX
44
                RET
44
                RET
45
 
45
 
46
TABLFAT         DW INIT_FATVARS                 ;00 ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ FAT
46
TABLFAT         DW INIT_FATVARS                 ; инициализация переменных FAT
47
                DW READ_DIR                     ;01 ПОЛУЧЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
47
                DW READ_DIR                     ; получение описателя файла
48
                DW ENTER_DIR                    ;02 ВХОД/ВЫХОД В ДИР
48
                DW ENTER_DIR                    ; вход/выход в дир
49
                DW GET_PATH                     ;03 ПОЛУЧЕНИЕ ТЕКУЩЕГО ПУТИ
49
                DW GET_PATH                     ; получение текущего пути
50
                DW GET_LONGNAME                 ;04 ПОЛУЧЕНИЕ ДЛИННОГО ИМЕНИ ФАЙЛА
50
                DW GET_LONGNAME                 ; получение длинного имени файла
51
                DW FIND_NAME                    ;05 ПОИСК ПО ИМЕНИ
51
                DW FIND_NAME                    ; поиск по имени
52
                DW FIND_FILEITEM                ;06 ПОИСК ВСЕХ ОПИСАТЕЛЕЙ С ВЫДАЧЕЙ НОМЕРОВ НАЙДЕННОГО
52
                DW FIND_FILEITEM                ; поиск всех описателей с выдачей номеров найденного
53
                DW SET_MASK_EXT                 ;07 УСТАНОВКА МАСКИ РАСШИРЕНИЙ ДЛЯ ПОИСКА
53
                DW SET_MASK_EXT                 ; установка маски расширений для поиска
54
                DW OPEN_FILE                    ;08 ОТКРЫТИЕ ФАЙЛА
54
                DW OPEN_FILE                    ; открытие файла
55
                DW READ_FILE                    ;09 ПОСЛЕДОВАТЕЛЬНОЕ ЧТЕНИЕ ФАЙЛА
55
                DW READ_FILE                    ; последовательное чтение файла
56
                DW INIT_TEKDIR                  ;0A СОЗДАНИЕ ТАБЛИЦЫ КЛАСТЕРОВ ТЕКУЩЕЙ ДИРЕКТОРИИ
56
                DW INIT_TEKDIR                  ; создание таблицы кластеров текущей директории
57
                DW POS_FILES                    ;0B РАБОТА С ТЕКУЩЕЙ ПОЗИЦИЕЙ
57
                DW POS_FILES                    ; работа с текущей позицией
58
                DW ROOTDIR                      ;0C ВЫХОД В КОРНЕВУЮ ДИРЕКТОРИЮ
58
                DW ROOTDIR                      ; выход в корневую директорию
59
 
59
 
60
ROOTDIR         PUSH IY
60
ROOTDIR         PUSH IY
61
                LD IYL,INTERNAL
61
                LD IYL,INTERNAL
62
                LD A,(SETDVOL)
62
                LD A,(SETDVOL)
63
                LD D,A
63
                LD D,A
Line 108... Line 108...
108
                AND A
108
                AND A
109
                JR Z,RDFAT07
109
                JR Z,RDFAT07
110
                SCF
110
                SCF
111
                RET
111
                RET
112
 
112
 
113
RDFAT07
-
 
114
                LD A,(BUF_512 + _BPB_SecPerClus)
113
RDFAT07         LD A,(BUF_512 + _BPB_SecPerClus)
115
                LD (SecPerClus),A
114
                LD (SecPerClus),A
116
                LD HL,(BUF_512 + _BPB_RsvdSecCnt)
115
                LD HL,(BUF_512 + _BPB_RsvdSecCnt)
117
                ADD HL,DE
116
                ADD HL,DE
118
                LD (NumSecFAT1),HL
117
                LD (NumSecFAT1),HL
119
                LD HL,0
118
                LD HL,0
Line 123... Line 122...
123
                LD DE,(BUF_512 + _BPB_FATSz16)
122
                LD DE,(BUF_512 + _BPB_FATSz16)
124
                LD A,D
123
                LD A,D
125
                OR E
124
                OR E
126
                JR NZ,RDFAT01                   ; если не FAT12/16 (_BPB_FATSz16 == 0)
125
                JR NZ,RDFAT01                   ; если не FAT12/16 (_BPB_FATSz16 == 0)
127
                LD DE,(BUF_512 + _BPB_FATSz32)
126
                LD DE,(BUF_512 + _BPB_FATSz32)
128
                LD HL,(BUF_512 + _BPB_FATSz32 + 2)      ; ТО БЕРЕМ ИЗ СМЕЩЕНИЯ +36
127
                LD HL,(BUF_512 + _BPB_FATSz32 + 2)      ; то берем из смещения +36
129
RDFAT01         LD (FATSize),DE
128
RDFAT01         LD (FATSize),DE
130
                LD (FATSize + 2),HL             ;ЧИСЛО СЕКТОРОВ НА FAT-ТАБЛИЦУ
129
                LD (FATSize + 2),HL             ; число секторов на FAT таблицу
131
 
130
 
132
                LD HL,0
131
                LD HL,0
133
                LD DE,(BUF_512 + _BPB_TotSec16)
132
                LD DE,(BUF_512 + _BPB_TotSec16)
134
                LD A,D
133
                LD A,D
135
                OR E
134
                OR E
136
                JR NZ,.L1                       ;ЕСЛИ НЕ FAT12/16 (BPB_TOTSEC16=0)
135
                JR NZ,.L1                       ; если не FAT12/16 (BPB_TOTSEC16=0)
137
                LD DE,(BUF_512 + _BPB_TotSec32)
136
                LD DE,(BUF_512 + _BPB_TotSec32)
138
                LD HL,(BUF_512 + _BPB_TotSec32+2)
137
                LD HL,(BUF_512 + _BPB_TotSec32+2)
139
                                                ;ТО БЕРЕМ ИЗ СМЕЩЕНИЯ +32
138
                                                ; то берем из смещения +32
140
.L1             LD (NumsSectorsVol + 2),HL
139
.L1             LD (NumsSectorsVol + 2),HL
141
                LD (NumsSectorsVol),DE          ;К-ВО СЕКТОРОВ НА ДИСКЕ/РАЗДЕЛЕ
140
                LD (NumsSectorsVol),DE          ; к-во секторов на диске/разделе
142
 
141
 
143
; вычисляем ROOTDIRSECTORS
142
; вычисляем ROOTDIRSECTORS
144
                LD DE,(BUF_512 + _BPB_RootEntCnt)
143
                LD DE,(BUF_512 + _BPB_RootEntCnt)
145
                LD BC,0
144
                LD BC,0
146
                LD A,D
145
                LD A,D
147
                OR E
146
                OR E
148
                JR Z,RDFAT03
147
                JR Z,RDFAT03
149
                LD A,0X10
148
                LD A,0x10
150
                CALL BCDE_A
149
                CALL BCDE_A
151
 
150
 
152
;ЭТО РЕАЛИЗОВАНА ФОРМУЛА
151
; это реализована формула
153
;ROOTDIRSECTORS=((BPB_ROOTENTCNT*32)++(BPB_BYTSPERSEC-1))/BPB_BYTSPERSEC
152
; ROOTDIRSECTORS = ((BPB_ROOTENTCNT * 32) + (BPB_BYTSPERSEC - 1)) / BPB_BYTSPERSEC
154
;В HL ROOTDIRSECTORS. ЕСЛИ FAT32, ТО HL=0 ВСЕГДА
153
; в HL ROOTDIRSECTORS. если FAT32, то HL = 0 всегда
155
 
154
 
156
RDFAT03         PUSH DE                         ;ROOTDIRSECTORS
155
RDFAT03         PUSH DE                         ; ROOTDIRSECTORS
157
                LD HL,NumSecFAT1
156
                LD HL,NumSecFAT1
158
                CALL LOADZP
157
                CALL LOADZP
159
                LD A,(BUF_512 + _BPB_NumFATs)
158
                LD A,(BUF_512 + _BPB_NumFATs)
Line 184... Line 183...
184
                CALL BCDE_A
183
                CALL BCDE_A
185
                LD (NumsClustersVol),DE
184
                LD (NumsClustersVol),DE
186
                LD (NumsClustersVol + 2),BC
185
                LD (NumsClustersVol + 2),BC
187
 
186
 
188
                LD A,(FATType)
187
                LD A,(FATType)
189
                CP 0XFF
188
                CP 0xFF
190
                JR NZ,.L4
189
                JR NZ,.L4
191
; определение типа FAT при отсуствии MBR
190
; определение типа FAT при отсуствии MBR
-
 
191
                LD HL,(BUF_512 + _BPB_FATSz16)
-
 
192
                LD A,H
-
 
193
                OR L
-
 
194
                LD A,2
-
 
195
                JR Z,.L2
192
                LD DE,(FATSize - 1)
196
                LD DE,(FATSize - 1)
193
                LD BC,(FATSize + 1)
197
                LD BC,(FATSize + 1)
194
                LD E,0                          ; BCDE = количество секторов * 0x100
198
                LD E,0                          ; BCDE = количество секторов * 0x100
195
                PUSH BC
-
 
196
                PUSH DE                         ; сохранили
-
 
197
                SRL B
-
 
198
                RR C
-
 
199
                RR D
-
 
200
                RR E                            ; BCDE = количество секторов * 0x80
-
 
201
                LD HL,NumsClustersVol           ; количество кластеров на FAT
199
                LD HL,NumsClustersVol           ; количество кластеров на FAT
202
                PUSH HL                         ; сохранили
-
 
203
                CALL HLBCDEM                    ; количество кластеров - (количество секторов * 0x80)
-
 
204
                LD A,E
-
 
205
                AND 0x80                        ; количество менее 128 кластеров в секторе для FAT32
-
 
206
                OR D
-
 
207
                OR C
-
 
208
                OR B
-
 
209
                LD A,2                          ; FAT32
-
 
210
                POP HL
-
 
211
                POP DE
-
 
212
                POP BC
-
 
213
                JR Z,.L2                        ; FAT32 если флаг Z=0
-
 
214
                CALL HLBCDEM                    ; количество кластеров - (количество секторов * 0x100)
200
                CALL HLBCDEM                    ; количество кластеров - (количество секторов * 0x100)
215
                LD A,D
201
                LD A,D
216
                OR C
202
                OR C
217
                OR B
203
                OR B
218
                LD A,1                          ; FAT16
204
                LD A,1                          ; FAT16
Line 294... Line 280...
294
                CALL SAVEZP
280
                CALL SAVEZP
295
                CALL POSTF02
281
                CALL POSTF02
296
                POP AF
282
                POP AF
297
                RET
283
                RET
298
 
284
 
299
;ЧТЕНИЕ СЛЕДУЮЩЕГО НОМЕРА КЛАСТЕРА
285
; чтение следующего номера кластера
300
RDFATZP         LD A,(FATType)
286
RDFATZP         LD A,(FATType)
301
                AND A
287
                AND A
302
                JR Z,RDFATS0
288
                JR Z,RDFATS0
303
                DEC A
289
                DEC A
304
                JR Z,RDFATS1
290
                JR Z,RDFATS1
Line 381... Line 367...
381
        REPT 4
367
        REPT 4
382
                SRL D
368
                SRL D
383
                RR E
369
                RR E
384
        ENDM
370
        ENDM
385
RDFATS3         LD A,D
371
RDFATS3         LD A,D
386
                AND 0X0F
372
                AND 0x0F
387
                LD D,A
373
                LD D,A
388
                RET
374
                RET
389
 
375
 
390
; вычисление номера реального сектора
376
; вычисление номера реального сектора
391
; На входе: BCDE = номер кластера FAT
377
; На входе: BCDE = номер кластера FAT
Line 397... Line 383...
397
                JR NZ,REALSE1
383
                JR NZ,REALSE1
398
                LD DE,(NumSecRootDir)
384
                LD DE,(NumSecRootDir)
399
                LD BC,(NumSecRootDir + 2)
385
                LD BC,(NumSecRootDir + 2)
400
                RET
386
                RET
401
 
387
 
402
REALSE1         LD HL,0XFFFE
388
REALSE1         LD HL,0xFFFE
403
                EX DE,HL
389
                EX DE,HL
404
                ADD HL,DE
390
                ADD HL,DE
405
                EX DE,HL
391
                EX DE,HL
406
                INC HL
392
                INC HL
407
                ADC HL,BC                       ;НОМЕР КЛАСТЕРА-2
393
                ADC HL,BC                       ; номер кластера-2
408
                LD A,(SecPerClus)
394
                LD A,(SecPerClus)
409
                JR REALSE2
395
                JR REALSE2
410
 
396
 
411
REALSE3         SLA E
397
REALSE3         SLA E
412
                RL D
398
                RL D
413
                RL L
399
                RL L
414
                RL H
400
                RL H
415
REALSE2         RRCA
401
REALSE2         RRCA
416
                JR NC,REALSE3                   ;УМНОЖИЛИ НА РАЗМЕР КЛАСТЕРА
402
                JR NC,REALSE3                   ; умножили на размер кластера
417
                LD B,H
403
                LD B,H
418
                LD C,L
404
                LD C,L
419
                LD HL,FirstSecData
405
                LD HL,FirstSecData
420
                JP BCDEHLP                      ;ПРИБАВИЛИ СМЕЩЕНИЕ ОТ НАЧАЛА РАЗДЕЛА
406
                JP BCDEHLP                      ; прибавили смещение от начала раздела
421
 
407
 
422
;СОХРАНЯЕМ СЕКТОР ЗАГРУЖЕННЫЙ В БУФЕР
408
; сохраняем сектор загруженный в буфер
423
LSTSAVE         LD DE,(NumSec2Buf)
409
LSTSAVE         LD DE,(NumSec2Buf)
424
                LD BC,(NumSec2Buf + 2)
410
                LD BC,(NumSec2Buf + 2)
425
                LD HL,BUF_512
411
                LD HL,BUF_512
426
                LD A,1
412
                LD A,1
427
                CALL TO_DRV
413
                CALL TO_DRV
428
                DB _DEV_WRITE
414
                DB _DEV_WRITE
429
                AND A
415
                AND A
430
                JP NZ,ERR_DRV
416
                JP NZ,ERR_DRV
431
                RET
417
                RET
432
 
418
 
433
;ЗАГРУЖАЕМ СЕКТОР В БУФЕР
419
; загружаем сектор в буфер
434
LOADLST         CALL CPNUMSC
420
LOADLST         CALL CPNUMSC
435
                JR NZ,LOADLS1
421
                JR NZ,LOADLS1
436
                LD HL,BUF_512
422
                LD HL,BUF_512
437
                RET
423
                RET
438
 
424
 
Line 464... Line 450...
464
                RET NZ
450
                RET NZ
465
                LD A,(HL)
451
                LD A,(HL)
466
                CP B
452
                CP B
467
                RET
453
                RET
468
 
454
 
469
;ПРОВЕРКА НА ПОСЛЕДНИЙ КЛАСТЕР
455
; проверка на последний кластер
470
LST_CLS         LD A,(FATType)                  ;ВЗЯЛИ ТИП FAT
456
LST_CLS         LD A,(FATType)                  ; взяли тип FAT
471
                AND A
457
                AND A
472
                JR NZ,LST_CL1
458
                JR NZ,LST_CL1
473
                LD HL,0X0FF7                    ;ДЛЯ FAT12
459
                LD HL,0x0FF7                    ; для FAT12
474
                SBC HL,DE
460
                SBC HL,DE
475
                RET
461
                RET
476
 
462
 
477
LST_CL1         DEC A
463
LST_CL1         DEC A
478
                JR NZ,LST_CL2
464
                JR NZ,LST_CL2
479
                LD HL,0XFFF7                    ;ДЛЯ FAT16
465
                LD HL,0xFFF7                    ; для FAT16
480
                SBC HL,DE
466
                SBC HL,DE
481
                RET
467
                RET
482
 
468
 
483
LST_CL2         LD HL,0X0FFF
469
LST_CL2         LD HL,0x0FFF
484
                SBC HL,BC
470
                SBC HL,BC
485
                RET NZ
471
                RET NZ
486
                LD HL,0XFFF7
472
                LD HL,0xFFF7
487
                SBC HL,DE
473
                SBC HL,DE
488
                RET
474
                RET
489
 
475
 
490
;ПОЛУЧИТЬ ОПИСАТЕЛЬ ТЕКУЩЕГО ФАЙЛА
476
; получить описатель текущего файла
491
READ_DIR        LD A,IYL
477
READ_DIR        LD A,IYL
492
                AND A
478
                AND A
493
                JR NZ,GETFZA3
479
                JR NZ,GETFZA3
494
                PUSH IY
480
                PUSH IY
495
                LD IYL,INTERNAL
481
                LD IYL,INTERNAL
496
                PUSH HL
482
                PUSH HL
497
                LD HL,(RREG_C)
483
                LD HL,(RREG_C)
498
                LD (TEK_ZAP),HL
484
                LD (TEK_ZAP),HL
499
                LD HL,GETFZA4
485
                LD HL,GETFZA4
500
                EX (SP),HL
486
                EX (SP),HL
501
GETFZA3         LD BC,(TEK_ZAP)                 ;ТЕКУЩИЙ НОМЕР ОПИСАТЕЛЯ
487
GETFZA3         LD BC,(TEK_ZAP)                 ; текущий номер описателя
502
                LD A,B
488
                LD A,B
503
                OR C
489
                OR C
504
                JR Z,GETRZAP                    ;ЕСЛИ НОМЕР =0, ТО ПРЕДЫДУЩИЙ НОМЕР НЕ ПРОВЕРЯЕМ
490
                JR Z,GETRZAP                    ; если номер =0, то предыдущий номер не проверяем
505
                PUSH BC                         ;СОХРАНИЛИ ТЕКУЩИЙ НОМЕР
491
                PUSH BC                         ; сохранили текущий номер
506
                DEC BC                          ;НУЖНО ПРОВЕРИТЬ ПРЕДЫДУЩИЙ НОМЕР
492
                DEC BC                          ; нужно проверить предыдущий номер
507
                CALL GETRZAP                    ;ПРОВЕРЯЕМ
493
                CALL GETRZAP                    ; проверяем
508
                POP BC                          ;ВЕРНУЛИ ТЕКУЩИЙ НОМЕР
494
                POP BC                          ; вернули текущий номер
509
                LD E,A                          ;ИЗ ПРЕДЫДУЩЕГО ОПИСАТЕЛЯ НУЖЕН ТОЛЬКО ФЛАГОВЫЙ БАЙТ
495
                LD E,A                          ; из предыдущего описателя нужен только флаговый байт
510
GETRZAP         PUSH DE
496
GETRZAP         PUSH DE
511
                CALL RDDIRSC                    ;ЧИТАЕМ СЕКТОР С ТЕКУЩИМ НОМЕРОМ
497
                CALL RDDIRSC                    ; читаем сектор с текущим номером
512
                POP DE                          ;ВЕРНУЛИ РЕГИСТР E
498
                POP DE                          ; вернули регистр E
513
                INC A
499
                INC A
514
                LD A,E                          ;ВЕРНУЛИ НАЛИЧИЕ/ОТСУСТВИЕ ДЛИННОГО ИМЕНИ
500
                LD A,E                          ; вернули наличие/отсуствие длинного имени
515
                RET Z                           ;ВЫХОДИМ ЕСЛИ ВЫЛЕТЕЛИ ЗА ПРЕДЕЛЫ СУЩЕСТВУЮЩЕЙ ДИРЫ
501
                RET Z                           ; выходим если вылетели за пределы существующей диры
516
                EX AF,AF'                      
502
                EX AF,AF'                      
517
GETFZA1         LD A,C
503
GETFZA1         LD A,C
518
                AND 0X0F                        ;ПОЛУЧИЛИ НОМЕР ОПИСАТЕЛЯ В ЗАГРУЖЕННОМ СЕКТОРЕ ДИРЫ
504
                AND 0x0F                        ; получили номер описателя в загруженном секторе диры
519
                LD E,A
505
                LD E,A
520
                LD D,0
506
                LD D,0
521
                EX DE,HL
507
                EX DE,HL
522
                ADD HL,HL
508
                ADD HL,HL
523
                ADD HL,HL
509
                ADD HL,HL
524
                ADD HL,HL
510
                ADD HL,HL
525
                ADD HL,HL
511
                ADD HL,HL
526
                ADD HL,HL
512
                ADD HL,HL
527
                ADD HL,DE                       ;ВЫЧИСЛИЛИ АДРЕС ВЫБРАННОГО ОПИСАТЕЛЯ
513
                ADD HL,DE                       ; вычислили адрес выбранного описателя
528
                LD DE,0X0B
514
                LD DE,0x0B
529
                LD A,(HL)                       ;ВЗЯЛИ ФЛАГОВЫЙ БАЙТ ТЕКУЩЕГО ОПИСАТЕЛЯ
515
                LD A,(HL)                       ; взяли флаговый байт текущего описателя
530
                EX DE,HL
516
                EX DE,HL
531
                ADD HL,DE
517
                ADD HL,DE
532
                LD L,(HL)                       ;ВЗЯЛИ ПЕРВЫЙ БАЙТ ИМЕНИ
518
                LD L,(HL)                       ; взяли первый байт имени
533
                LD H,A                          ;ПОЛОЖИЛИ ФЛАГОВЫЙ БАЙТ ЭТОГО ОПИСАТЕЛЯ
519
                LD H,A                          ; положили флаговый байт этого описателя
534
                EX DE,HL
520
                EX DE,HL
535
                CALL CP_TWOT                    ;ПРОВЕРКА НА НАЛИЧИЕ В ИМЕНИ ".." 
521
                CALL CP_TWOT                    ; проверка на наличие в имени ".." 
536
                LD D,0                          ;БУДЕМ ВХОДИТЬ В ДИРЕКТОРИЮ
522
                LD D,0                          ; будем входить в директорию
537
                JR NZ,GETFZA2
523
                JR NZ,GETFZA2
538
                LD D,0X80                       ;БУДЕМ ВЫХОДИТЬ В ПРЕДЫДУЩУЮ ДИРЕКТОРИЮ
524
                LD D,0x80                       ; будем выходить в предыдущую директорию
539
GETFZA2         EX AF,AF'
525
GETFZA2         EX AF,AF'
540
                CP 0X0F                         ;ПРОВЕРЯЕМ ФЛАГОВЫЙ БАЙТ ПРЕДЫДУЩЕГО ОПИСАТЕЛЯ
526
                CP 0x0F                         ; проверяем флаговый байт предыдущего описателя
541
                LD A,E                          ;ВЗЯЛИ ФЛАГОВЫЙ БАЙТ ТЕКУЩЕГО ОПИСАТЕЛЯ
527
                LD A,E                          ; взяли флаговый байт текущего описателя
542
                LD E,D                          ;ВЫСТАВИЛИ НАПРАВЛЕНИЕ ДВИЖЕНИЯ В ДИРАХ
528
                LD E,D                          ; выставили направление движения в дирах
543
                RET NZ
529
                RET NZ
544
                INC E                           ;УСТАНОВКА НАЛИЧИЯ ДЛИННОГО ИМЕНИ
530
                INC E                           ; установка наличия длинного имени
545
                RET
531
                RET
546
 
532
 
547
GETFZA4         PUSH AF
533
GETFZA4         PUSH AF
548
                PUSH HL
534
                PUSH HL
549
                PUSH DE
535
                PUSH DE
550
                LD DE,CPU6
536
                LD DE,CPU6
551
                ADD HL,DE
537
                ADD HL,DE
552
                LD DE,(RREG_L)
538
                LD DE,(RREG_L)
553
                LD BC,0X20
539
                LD BC,0x20
554
                CALL LDIR_BYTES
540
                CALL LDIR_BYTES
555
                POP DE
541
                POP DE
556
                POP HL
542
                POP HL
557
                POP AF
543
                POP AF
558
                POP IY
544
                POP IY
Line 562... Line 548...
562
; На выходе: A = 0xFF - выход за пределы DIR
548
; На выходе: A = 0xFF - выход за пределы DIR
563
RDDIRSC         PUSH BC
549
RDDIRSC         PUSH BC
564
                LD D,B
550
                LD D,B
565
                LD E,C
551
                LD E,C
566
                LD BC,0
552
                LD BC,0
567
                LD A,0X10
553
                LD A,0x10
568
                CALL BCDE_A
554
                CALL BCDE_A
569
                LD A,E
555
                LD A,E
570
                PUSH AF
556
                PUSH AF
571
                LD A,(SecPerClus)
557
                LD A,(SecPerClus)
572
                PUSH AF
558
                PUSH AF
573
                CALL BCDE_A
559
                CALL BCDE_A
574
                LD HL,BUF_TDIRCLS;TDIRCLS
560
                LD HL,BUF_TDIRCLS
575
                EX DE,HL
561
                EX DE,HL
576
                ADD HL,HL
562
                ADD HL,HL
577
                ADD HL,HL
563
                ADD HL,HL
578
                ADD HL,DE
564
                ADD HL,DE
579
                CALL LOADZP
565
                CALL LOADZP
Line 603... Line 589...
603
                CALL LOADLST
589
                CALL LOADLST
604
                POP BC
590
                POP BC
605
                XOR A
591
                XOR A
606
                RET
592
                RET
607
 
593
 
608
;ПРОВЕРКА НА 1 ТОЧКУ
594
; проверка на 1 точку
609
CP_ONET         LD A,(HL)
595
CP_ONET         LD A,(HL)
610
                CP "."
596
                CP "."
611
                RET NZ
597
                RET NZ
612
                INC HL
598
                INC HL
613
                LD A,(HL)
599
                LD A,(HL)
Line 615... Line 601...
615
                CP " "
601
                CP " "
616
                RET NZ
602
                RET NZ
617
                XOR A
603
                XOR A
618
                RET
604
                RET
619
 
605
 
620
;ПРОВЕРКА НА 2 ТОЧКИ
606
; проверка на 2 точки
621
CP_TWOT         LD A,(HL)
607
CP_TWOT         LD A,(HL)
622
                CP "."
608
                CP "."
623
                RET NZ
609
                RET NZ
624
                INC HL
610
                INC HL
625
                LD A,(HL)
611
                LD A,(HL)
Line 654... Line 640...
654
                INC HL
640
                INC HL
655
                LD D,(HL)
641
                LD D,(HL)
656
                EX DE,HL
642
                EX DE,HL
657
                JP (HL)
643
                JP (HL)
658
 
644
 
659
TPOSITF         DW POSTF00                      ;СОХРАНЕНИЕ ТЕКУЩЕЙ ПОЗИЦИИ ФАЙЛА
645
TPOSITF         DW POSTF00                      ; сохранение текущей позиции файла
660
                DW POSTF01                      ;ВОССТАНОВЛЕНИЕ ТЕКУЩЕЙ ПОЗИЦИИ ФАЙЛА
646
                DW POSTF01                      ; восстановление текущей позиции файла
661
                DW POSTF02                      ;СБРОС ТЕКУЩЕЙ ПОЗИЦИИ В 0 И ПОИСК ПЕРВОЙ "ЛЕГАЛЬНОЙ" ЗАПИСИ
647
                DW POSTF02                      ; сброс текущей позиции в 0 и поиск первой "легальной" записи
662
                DW POSTF03                      ;ПЕРЕМОТАТЬ НА "B" ФАЙЛОВ НАЗАД
648
                DW POSTF03                      ; перемотать на "B" файлов назад
663
                DW POSTF04                      ;ПЕРЕМОТАТЬ НА "B" ФАЙЛОВ ВПЕРЕД
649
                DW POSTF04                      ; перемотать на "B" файлов вперед
664
                DW POSTF05                      ;ПОДСЧЕТ КОЛИЧЕСТВА "ЛЕГАЛЬНЫХ" ЗАПИСЕЙ
650
                DW POSTF05                      ; подсчет количества "легальных" записей
665
                DW POSTF06                      ;УСТАНОВИТЬ НОМЕР "ЛЕГАЛЬНОЙ" ЗАПИСИ ИЗ "BC"
651
                DW POSTF06                      ; установить номер "легальной" записи из "BC"
666
                DW POSTF07                      ;ВЕРНУТЬ В "BC" ТЕКУЩИЙ НОМЕР "ЛЕГАЛЬНОЙ" ЗАПИСИ
652
                DW POSTF07                      ; вернуть в "BC" текущий номер "легальной" записи
667
ENDTPOS
653
ENDTPOS
668
 
654
 
669
;СОХРАНЕНИЕ ТЕКУЩЕЙ ПОЗИЦИИ ФАЙЛА
655
; сохранение текущей позиции файла
670
POSTF00         LD HL,(TEK_ZAP)
656
POSTF00         LD HL,(TEK_ZAP)
671
                LD (SAVEZAP),HL
657
                LD (SAVEZAP),HL
672
                RET
658
                RET
673
 
659
 
674
;ВОССТАНОВЛЕНИЕ ТЕКУЩЕЙ ПОЗИЦИИ ФАЙЛА
660
; восстановление текущей позиции файла
675
POSTF01         LD HL,(SAVEZAP)
661
POSTF01         LD HL,(SAVEZAP)
676
                LD (TEK_ZAP),HL
662
                LD (TEK_ZAP),HL
677
                RET
663
                RET
678
 
664
 
679
;ПЕРЕМОТАТЬ НА "B" ФАЙЛОВ НАЗАД
665
; перемотать на "B" файлов назад
680
POSTF03         LD A,B
666
POSTF03         LD A,B
681
                AND A
667
                AND A
682
                RET Z
668
                RET Z
683
.L1             PUSH BC
669
.L1             PUSH BC
684
                CALL PRVLEGZ
670
                CALL PRVLEGZ
685
                POP BC
671
                POP BC
686
                DJNZ .L1
672
                DJNZ .L1
687
                RET
673
                RET
688
 
674
 
689
;ПЕРЕМОТАТЬ НА "B" ФАЙЛОВ ВПЕРЕД
675
; перемотать на "B" файлов вперед
690
POSTF04         LD A,B
676
POSTF04         LD A,B
691
                AND A
677
                AND A
692
                RET Z
678
                RET Z
693
.L1             PUSH BC
679
.L1             PUSH BC
694
                CALL NXTLEGZ
680
                CALL NXTLEGZ
695
                POP BC
681
                POP BC
696
                DJNZ .L1
682
                DJNZ .L1
697
                RET
683
                RET
698
 
684
 
699
;ПОДСЧЕТ КОЛИЧЕСТВА "ЛЕГАЛЬНЫХ" ЗАПИСЕЙ
685
; подсчет количества "легальных" записей
700
POSTF05         LD BC,0
686
POSTF05         LD BC,0
701
                PUSH BC
687
                PUSH BC
702
                EXX
688
                EXX
703
                POP BC
689
                POP BC
704
                EXX
690
                EXX
Line 733... Line 719...
733
                ADD HL,DE
719
                ADD HL,DE
734
                LD A,(HL)
720
                LD A,(HL)
735
                AND A
721
                AND A
736
                SBC HL,DE
722
                SBC HL,DE
737
                LD E,_DIR_StructSize
723
                LD E,_DIR_StructSize
738
                CP 0X0F                 ; длинное имя?
724
                CP 0x0F                         ; длинное имя?
739
                JR Z,.L1
725
                JR Z,.L1
740
                CP 8                    ; имя раздела?
726
                CP 8                            ; имя раздела?
741
                JR Z,.L1
727
                JR Z,.L1
742
                LD A,(HL)
728
                LD A,(HL)
743
                CP 0XE5                 ; удаленный файл?
729
                CP 0xE5                         ; удаленный файл?
744
                JR Z,.L1
730
                JR Z,.L1
745
                AND A
731
                AND A
746
                JR Z,.L3
732
                JR Z,.L3
747
                EXX
733
                EXX
748
                INC BC
734
                INC BC
Line 756... Line 742...
756
                EXX
742
                EXX
757
                POP BC
743
                POP BC
758
                XOR A
744
                XOR A
759
                RET
745
                RET
760
 
746
 
761
;УСТАНОВИТЬ НОМЕР "ЛЕГАЛЬНОЙ" ЗАПИСИ ИЗ "BC"
747
; установить номер "легальной" записи из "BC"
762
POSTF06         LD (TEK_ZAP),BC
748
POSTF06         LD (TEK_ZAP),BC
763
                RET
749
                RET
764
 
750
 
765
;ВЕРНУТЬ В "BC" ТЕКУЩИЙ НОМЕР "ЛЕГАЛЬНОЙ" ЗАПИСИ
751
; вернуть в "BC" текущий номер "легальной" записи
766
POSTF07         LD BC,(TEK_ZAP)
752
POSTF07         LD BC,(TEK_ZAP)
767
                RET
753
                RET
768
 
754
 
769
CPTEKZP         CALL RDDIRSC
755
CPTEKZP         CALL RDDIRSC
770
                RET M
756
                RET M
771
                LD A,C
757
                LD A,C
772
                AND 0X0F
758
                AND 0x0F
773
                LD L,A
759
                LD L,A
774
                LD H,0
760
                LD H,0
775
                LD DE,BUF_512
761
                LD DE,BUF_512
776
                ADD HL,HL
762
                ADD HL,HL
777
                ADD HL,HL
763
                ADD HL,HL
778
                ADD HL,HL
764
                ADD HL,HL
779
                ADD HL,HL
765
                ADD HL,HL
780
                ADD HL,HL
766
                ADD HL,HL
781
                ADD HL,DE
767
                ADD HL,DE
782
                LD DE,0X0B
768
                LD DE,0x0B
783
                ADD HL,DE
769
                ADD HL,DE
784
                LD A,(HL)
770
                LD A,(HL)
785
                SBC HL,DE
771
                SBC HL,DE
786
                LD E,(HL)
772
                LD E,(HL)
787
                AND A
773
                AND A
Line 799... Line 785...
799
                JR NXTLEG1+1
785
                JR NXTLEG1+1
800
 
786
 
801
NXTLEGZ         LD BC,(TEK_ZAP)
787
NXTLEGZ         LD BC,(TEK_ZAP)
802
NXTLEG1         INC BC
788
NXTLEG1         INC BC
803
                CALL CPTEKZP
789
                CALL CPTEKZP
804
                CP 0XFF
790
                CP 0xFF
805
                RET Z
791
                RET Z
806
                CP 0X0F
792
                CP 0x0F
807
                JR Z,NXTLEG1
793
                JR Z,NXTLEG1
808
                CP 8
794
                CP 8
809
                JR Z,NXTLEG1
795
                JR Z,NXTLEG1
810
                LD A,E
796
                LD A,E
811
                AND A
797
                AND A
812
                RET Z
798
                RET Z
813
                CP 0XE5
799
                CP 0xE5
814
                JR Z,NXTLEG1
800
                JR Z,NXTLEG1
815
                LD (TEK_ZAP),BC
801
                LD (TEK_ZAP),BC
816
                RET
802
                RET
817
 
803
 
818
PRVLEGZ         LD BC,(TEK_ZAP)
804
PRVLEGZ         LD BC,(TEK_ZAP)
819
                CALL CPTEKZP
805
                CALL CPTEKZP
820
                CALL CP_TWOT
806
                CALL CP_TWOT
821
                RET Z
807
                RET Z
822
PRVLEG1         DEC BC
808
PRVLEG1         DEC BC
823
                CALL CPTEKZP
809
                CALL CPTEKZP
824
                CP 0X0F
810
                CP 0x0F
825
                JR Z,PRVLEG1
811
                JR Z,PRVLEG1
826
                CP 8
812
                CP 8
827
                JR Z,PRVLEG1
813
                JR Z,PRVLEG1
828
                LD A,E
814
                LD A,E
829
                CP 0XE5
815
                CP 0xE5
830
                JR Z,PRVLEG1
816
                JR Z,PRVLEG1
831
                LD (TEK_ZAP),BC
817
                LD (TEK_ZAP),BC
832
                RET
818
                RET
833
 
819
 
834
SAVEZP          LD (HL),E
820
SAVEZP          LD (HL),E
Line 927... Line 913...
927
                EX DE,HL
913
                EX DE,HL
928
                LD BC,0
914
                LD BC,0
929
                ADC HL,BC
915
                ADC HL,BC
930
                RET
916
                RET
931
 
917
 
-
 
918
INIT_PATH
932
INIT_PATH       EVOPORT WIN_P5,RAM_MOUNTER
919
        EVOPORT WIN_P5,RAM_MOUNTER
933
                LD A,(SETDVOL)
920
                LD A,(SETDVOL)
934
                LD D,A
921
                LD D,A
935
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
922
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
936
                LD H,A
923
                LD H,A
937
                LD L,0
924
                LD L,0
Line 944... Line 931...
944
                LD (HL),"/"
931
                LD (HL),"/"
945
                INC L
932
                INC L
946
                LD (HL),0
933
                LD (HL),0
947
                INC L
934
                INC L
948
                LD A,L
935
                LD A,L
949
                LD L,0XFF
936
                LD L,0xFF
950
                LD (HL),A
937
                LD (HL),A
951
                RET
938
                RET
952
 
939
 
-
 
940
RENEW_PATH
953
RENEW_PATH      EVOPORT WIN_P5,RAM_MOUNTER
941
        EVOPORT WIN_P5,RAM_MOUNTER
954
                BIT 7,E
942
                BIT 7,E
955
                JR NZ,MINUS_PATH
943
                JR NZ,MINUS_PATH
956
;ДОБАВЛЕНИЕ ДИРЕКТОРИИ К ТЕКУЩЕМУ ПУТИ (ВХОД В ДИРЕКТОРИЮ)
944
; добавление директории к текущему пути (вход в директорию)
957
                EX DE,HL
945
                EX DE,HL
958
                LD A,(SETDVOL)
946
                LD A,(SETDVOL)
959
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
947
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
960
                LD H,A
948
                LD H,A
961
                LD L,0XFF
949
                LD L,0xFF
962
                LD L,(HL)
950
                LD L,(HL)
963
                EX DE,HL
951
                EX DE,HL
964
                DEC DE
952
                DEC DE
965
                LD BC,8
953
                LD BC,8
966
                LDIR
954
                LDIR
Line 992... Line 980...
992
                LD (HL),"/"
980
                LD (HL),"/"
993
                INC L
981
                INC L
994
                LD (HL),0
982
                LD (HL),0
995
                INC L
983
                INC L
996
                LD A,L
984
                LD A,L
997
                LD L,0XFF
985
                LD L,0xFF
998
                LD (HL),A
986
                LD (HL),A
999
                RET
987
                RET
1000
 
988
 
1001
;УКОРОЧЕНИЕ ТЕКУЩЕГО ПУТИ (ВЫХОД В ПРЕДЫДУЩУЮ ДИРЕКТОРИЮ)
989
; укорочение текущего пути (выход в предыдущую директорию)
1002
MINUS_PATH      LD A,(SETDVOL)
990
MINUS_PATH      LD A,(SETDVOL)
1003
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
991
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
1004
                LD H,A
992
                LD H,A
1005
                LD L,0XFF
993
                LD L,0xFF
1006
                LD L,(HL)
994
                LD L,(HL)
1007
                DEC L
995
                DEC L
1008
                DEC L
996
                DEC L
1009
MINUS_PATH1     DEC L
997
MINUS_PATH1     DEC L
1010
                LD A,(HL)
998
                LD A,(HL)
Line 1012... Line 1000...
1012
                JR NZ,MINUS_PATH1
1000
                JR NZ,MINUS_PATH1
1013
                INC L
1001
                INC L
1014
                LD (HL),0
1002
                LD (HL),0
1015
                INC L
1003
                INC L
1016
                LD A,L
1004
                LD A,L
1017
                LD L,0XFF
1005
                LD L,0xFF
1018
                LD (HL),A
1006
                LD (HL),A
1019
                RET
1007
                RET
1020
 
1008
 
1021
;ПОЛУЧЕНИЕ ТЕКУЩЕГО ПУТИ
1009
; получение текущего пути
-
 
1010
GET_PATH
1022
GET_PATH        EVOPORT WIN_P5,RAM_MOUNTER
1011
        EVOPORT WIN_P5,RAM_MOUNTER
1023
                LD A,IYL
1012
                LD A,IYL
1024
                AND A
1013
                AND A
1025
                JR NZ,GETPATH1
1014
                JR NZ,GETPATH1
1026
                LD A,(SETDVOL)
1015
                LD A,(SETDVOL)
1027
                LD D,A
1016
                LD D,A
1028
                ADD A,HIGH (TEK_BUFPATH+CPU5)+4
1017
                ADD A,HIGH (TEK_BUFPATH+CPU5)+4
1029
                LD H,A
1018
                LD H,A
1030
                LD L,0XFF
1019
                LD L,0xFF
1031
                LD A,(HL)
1020
                LD A,(HL)
1032
                LD DE,BUF_256
1021
                LD DE,BUF_256
1033
                LD BC,0X100
1022
                LD BC,0x100
1034
                LD L,C
1023
                LD L,C
1035
                LDIR
1024
                LDIR
1036
                LD C,A                          ;BC=СКОЛЬКО БАЙТ ПЕРЕНОСИТЬ В АДРЕС ПО ЗАПРОСУ
1025
                LD C,A                          ; BC=сколько байт переносить в адрес по запросу
1037
                LD A,HIGH (CPU6) - 1
1026
                LD A,HIGH (CPU6) - 1
1038
                ADD A,D
1027
                ADD A,D
1039
                LD H,A
1028
                LD H,A
1040
                LD DE,(RREG_L)                  ;КУДА ПЕРЕНОСИТЬ ПУТЬ
1029
                LD DE,(RREG_L)                  ; куда переносить путь
1041
                JP LDIR_BYTES
1030
                JP LDIR_BYTES
1042
 
1031
 
1043
GETPATH1        PUSH HL
1032
GETPATH1        PUSH HL
1044
                PUSH HL
1033
                PUSH HL
1045
                LD A,(SETDVOL)
1034
                LD A,(SETDVOL)
1046
                LD D,A
1035
                LD D,A
1047
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
1036
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
1048
                LD H,A
1037
                LD H,A
1049
                LD L,0XFF
1038
                LD L,0xFF
1050
                LD A,(HL)
1039
                LD A,(HL)
1051
                POP DE
1040
                POP DE
1052
                LD BC,0X100
1041
                LD BC,0x100
1053
                LD L,C
1042
                LD L,C
1054
                LDIR
1043
                LDIR
1055
                POP HL
1044
                POP HL
1056
                RET
1045
                RET
1057
 
1046
 
1058
;ОТДАЧА КОРОТКОГО ИМЕНИ ФАЙЛА, ЕСЛИ ДЛИННОЕ ОТСУСТВУЕТ
1047
; отдача короткого имени файла, если длинное отсуствует
1059
NO_LNG          POP DE
1048
NO_LNG          POP DE
1060
                LD BC,8
1049
                LD BC,8
1061
                LDIR
1050
                LDIR
1062
                EX DE,HL
1051
                EX DE,HL
1063
NO_LNG2         DEC HL
1052
NO_LNG2         DEC HL
Line 1085... Line 1074...
1085
 
1074
 
1086
GETLNG8         POP IY
1075
GETLNG8         POP IY
1087
                LD DE,CPU6
1076
                LD DE,CPU6
1088
                ADD HL,DE
1077
                ADD HL,DE
1089
                LD DE,(RREG_L)
1078
                LD DE,(RREG_L)
1090
                LD BC,0X100
1079
                LD BC,0x100
1091
                JP LDIR_BYTES
1080
                JP LDIR_BYTES
1092
 
1081
 
1093
;ОТДАЧА ДЛИННОГО ИМЕНИ ФАЙЛА
1082
; отдача длинного имени файла
1094
GET_LONGNAME    LD A,IYL
1083
GET_LONGNAME    LD A,IYL
1095
                AND A
1084
                AND A
1096
                JR NZ,GETLNG9
1085
                JR NZ,GETLNG9
1097
                PUSH IY
1086
                PUSH IY
1098
                LD IYL,INTERNAL
1087
                LD IYL,INTERNAL
Line 1159... Line 1148...
1159
                RET Z
1148
                RET Z
1160
                LD A,E
1149
                LD A,E
1161
                AND A
1150
                AND A
1162
                JR NZ,GETLNG3
1151
                JR NZ,GETLNG3
1163
                LD A,D
1152
                LD A,D
1164
                CP 0X80
1153
                CP 0x80
1165
                JR C,GETLNG5
1154
                JR C,GETLNG5
1166
                LD D,0X5F
1155
                LD D,0x5F
1167
                JR GETLNG5
1156
                JR GETLNG5
1168
 
1157
 
1169
GETLNG3         CP 4
1158
GETLNG3         CP 4
1170
                LD A,0X5F
1159
                LD A,0x5F
1171
                JR NZ,GETLNG5
1160
                JR NZ,GETLNG5
1172
                LD A,D
1161
                LD A,D
1173
                LD E,0XEF
1162
                LD E,0xEF
1174
                LD D,0X5F
1163
                LD D,0x5F
1175
                CP 1
1164
                CP 1
1176
                JR Z,GETLNG4
1165
                JR Z,GETLNG4
1177
                LD E,0XA0
1166
                LD E,0xA0
1178
                CP 0X51
1167
                CP 0x51
1179
                JR Z,GETLNG4
1168
                JR Z,GETLNG4
1180
                SUB 0X10
1169
                SUB 0x10
1181
                LD E,0X80
1170
                LD E,0x80
1182
                JR NC,GETLNG6
1171
                JR NC,GETLNG6
1183
                LD A,D
1172
                LD A,D
1184
                JR GETLNG5
1173
                JR GETLNG5
1185
 
1174
 
1186
GETLNG6         CP 0X30
1175
GETLNG6         CP 0x30
1187
                JR C,GETLNG4
1176
                JR C,GETLNG4
1188
                LD E,0XB0
1177
                LD E,0xB0
1189
                CP 0X40
1178
                CP 0x40
1190
                JR C,GETLNG4
1179
                JR C,GETLNG4
1191
                LD A,D
1180
                LD A,D
1192
                JR GETLNG5
1181
                JR GETLNG5
1193
 
1182
 
1194
GETLNG4         ADD A,E
1183
GETLNG4         ADD A,E
Line 1199... Line 1188...
1199
                EXX
1188
                EXX
1200
                RET Z
1189
                RET Z
1201
                JR GETLNG1 + 3
1190
                JR GETLNG1 + 3
1202
;401,410-44F,451
1191
;401,410-44F,451
1203
 
1192
 
1204
;НА ВХОДЕ:   DE=СПИСОК РАСШИРЕНИЙ
1193
; на входе:  DE = список расширений
1205
;            HL=АДРЕС ОПИСАТЕЛЯ ФАЙЛА
1194
;            HL = адрес описателя файла
1206
;НА ВЫХОДЕ:  A=НОМЕР РАСШИРЕНИЯ
1195
; на выходе:  A = номер расширения
1207
CP_EXT          LD C,0
1196
CP_EXT          LD C,0
1208
CPETR2          LD A,(DE)
1197
CPETR2          LD A,(DE)
1209
                AND A
1198
                AND A
1210
                JR Z,CPETR1
1199
                JR Z,CPETR1
1211
                INC C
1200
                INC C
Line 1246... Line 1235...
1246
                LD IYL,INTERNAL
1235
                LD IYL,INTERNAL
1247
                CALL INIRTSC
1236
                CALL INIRTSC
1248
                EVOPORT WIN_P3,RAM_TEMP2
1237
        EVOPORT WIN_P3,RAM_TEMP2
1249
                LD HL,CPU3
1238
                LD HL,CPU3
1250
                LD DE,CPU3+1
1239
                LD DE,CPU3+1
1251
                LD BC,0X3FFF
1240
                LD BC,0x3FFF
1252
                LD (HL),L
1241
                LD (HL),L
1253
                LDIR
1242
                LDIR
1254
                LD HL,0
1243
                LD HL,0
1255
                LD (KOLFIND),HL                 ;НАЙДЕННЫХ ФАЙЛОВ
1244
                LD (KOLFIND),HL                 ; найденных файлов
1256
                LD HL,CPU3
1245
                LD HL,CPU3
1257
                LD (ADR_SKLAD),HL               ;АДРЕС СКЛАДИРОВАНИЯ
1246
                LD (ADR_SKLAD),HL               ; адрес складирования
1258
                LD HL,CPU3+0X1000
1247
                LD HL,CPU3+0x1000
1259
                LD (ADR_SKLAD_NAME),HL          ;АДРЕС СКЛАДИРОВАНИЯ ПЕРВОГО СИМВОЛА ИМЕНИ НАЙДЕННОГО И ЕГО ФЛАГА
1248
                LD (ADR_SKLAD_NAME),HL          ; адрес складирования первого символа имени найденного и его флага
1260
                LD BC,0XFFFF
1249
                LD BC,0xFFFF
1261
                EXX
1250
                EXX
1262
                LD BC,0
1251
                LD BC,0
1263
                LD A,(TEK_LVL)
1252
                LD A,(TEK_LVL)
1264
                AND A
1253
                AND A
1265
                EXX
1254
                EXX
Line 1271... Line 1260...
1271
                LD BC,(ROOTZAP)
1260
                LD BC,(ROOTZAP)
1272
                EXX
1261
                EXX
1273
FINDF2          INC BC
1262
FINDF2          INC BC
1274
                CALL RDDIRSC
1263
                CALL RDDIRSC
1275
                LD A,C
1264
                LD A,C
1276
                AND 0X0F
1265
                AND 0x0F
1277
        REPT 4
1266
        REPT 4
1278
                ADD A,A
1267
                ADD A,A
1279
        ENDM
1268
        ENDM
1280
                LD E,A
1269
                LD E,A
1281
                LD D,0
1270
                LD D,0
Line 1296... Line 1285...
1296
                INC HL
1285
                INC HL
1297
                LD A,(HL)
1286
                LD A,(HL)
1298
                DEC HL
1287
                DEC HL
1299
                CP " "
1288
                CP " "
1300
                JR Z,FINDF2
1289
                JR Z,FINDF2
1301
FINDF21         CP 0XE5                         ;ЕСЛИ УДАЛЕНО
1290
FINDF21         CP 0xE5                         ; если удалено
1302
                JR Z,FINDF2                     ;ТО ПЕРЕХОДИМ НА СЛЕДУЮЩИЙ ОПИСАТЕЛЬ
1291
                JR Z,FINDF2                     ; то переходим на следующий описатель
1303
                LD DE,0X0B                      ;НУЖЕН ФЛАГОВЫЙ БАЙТ ОПИСАТЕЛЯ
1292
                LD DE,0x0B                      ; нужен флаговый байт описателя
1304
                ADD HL,DE                       ;ПОЛУЧИЛИ АДРЕС ФЛАГОВОГО БАЙТА
1293
                ADD HL,DE                       ; получили адрес флагового байта
1305
                LD A,(HL)                       ;ВЗЯЛИ ФЛАГОВЫЙ БАЙТ
1294
                LD A,(HL)                       ; взяли флаговый байт
1306
                SBC HL,DE
1295
                SBC HL,DE
1307
                CP 0X0F
1296
                CP 0x0F
1308
                JR Z,FINDF2
1297
                JR Z,FINDF2
1309
                AND 0X10                        ;ПРОВЕРКА ЭТО ФАЙЛ ИЛИ ДИРА
1298
                AND 0x10                        ; проверка это файл или дира
1310
                JR NZ,FINDF1
1299
                JR NZ,FINDF1
1311
                LD A,(EXT4FOUND)
1300
                LD A,(EXT4FOUND)
1312
                AND A
1301
                AND A
1313
                PUSH DE
1302
                PUSH DE
1314
                LD DE,EXT4FOUND
1303
                LD DE,EXT4FOUND
Line 1319... Line 1308...
1319
                JR NZ,FINDF4
1308
                JR NZ,FINDF4
1320
FINDF1          EX DE,HL
1309
FINDF1          EX DE,HL
1321
                ADD HL,DE
1310
                ADD HL,DE
1322
                LD A,(HL)
1311
                LD A,(HL)
1323
                EX AF,AF'
1312
                EX AF,AF'
1324
                LD HL,(ADR_SKLAD)               ;ДЛЯ ДИРЫ ПРОВЕРЯТЬ БОЛЬШЕ НЕ НАДО
1313
                LD HL,(ADR_SKLAD)               ; для диры проверять больше не надо
1325
                LD (HL),C
1314
                LD (HL),C
1326
                INC HL
1315
                INC HL
1327
                LD (HL),B                       ;ПОЛОЖИЛИ НОМЕР ДИРЫ В ТАБЛИЧКУ
1316
                LD (HL),B                       ; положили номер диры в табличку
1328
                INC HL
1317
                INC HL
1329
                LD (ADR_SKLAD),HL
1318
                LD (ADR_SKLAD),HL
1330
                LD HL,(KOLFIND)
1319
                LD HL,(KOLFIND)
1331
                INC HL                          ;+1 НАЙДЕННЫХ ФАЙЛОВ
1320
                INC HL                          ; +1 найденных файлов
1332
                LD (KOLFIND),HL
1321
                LD (KOLFIND),HL
1333
                LD HL,(ADR_SKLAD_NAME)
1322
                LD HL,(ADR_SKLAD_NAME)
1334
                EX AF,AF'
1323
                EX AF,AF'
1335
                LD (HL),A
1324
                LD (HL),A
1336
                INC HL
1325
                INC HL
1337
                LD A,(DE)
1326
                LD A,(DE)
1338
                LD (HL),A
1327
                LD (HL),A
1339
                INC HL
1328
                INC HL
1340
                LD (ADR_SKLAD_NAME),HL
1329
                LD (ADR_SKLAD_NAME),HL
1341
FINDF4          LD A,(ADR_SKLAD + 1)
1330
FINDF4          LD A,(ADR_SKLAD + 1)
1342
                CP HIGH (CPU3) + 0X10
1331
                CP HIGH (CPU3) + 0x10
1343
                JR C,FINDF2                     ;НЕ БОЛЕЕ 2048 ДИРОВ/ФАЙЛОВ В ТЕКУЩЕЙ ДИРЕКТОРИИ
1332
                JR C,FINDF2                     ; не более 2048 диров/файлов в текущей директории
1344
FINDF3          LD HL,(KOLFIND)
1333
FINDF3          LD HL,(KOLFIND)
1345
                POP IY
1334
                POP IY
1346
                LD A,IYL
1335
                LD A,IYL
1347
                AND A
1336
                AND A
1348
                JR NZ,FINDF5
1337
                JR NZ,FINDF5
Line 1361... Line 1350...
1361
                LD (EXT4FOUND),A
1350
                LD (EXT4FOUND),A
1362
                RET
1351
                RET
1363
 
1352
 
1364
SET_MASK_EXT1   LD HL,(RREG_L)
1353
SET_MASK_EXT1   LD HL,(RREG_L)
1365
                LD DE,BUF_256 - CPU6
1354
                LD DE,BUF_256 - CPU6
1366
                LD BC,0X10 * 3 + 1
1355
                LD BC,0x10 * 3 + 1
1367
                CALL LDIR_BYTES
1356
                CALL LDIR_BYTES
1368
                LD HL,BUF_256
1357
                LD HL,BUF_256
1369
                LD DE,EXT4FOUND
1358
                LD DE,EXT4FOUND
1370
                LD BC,0X10FF
1359
                LD BC,0x10FF
1371
SET_MASK_EXT2   LD A,(HL)
1360
SET_MASK_EXT2   LD A,(HL)
1372
                AND A
1361
                AND A
1373
                JR Z,SET_MASK_EXT3
1362
                JR Z,SET_MASK_EXT3
1374
                LDI
1363
                LDI
1375
                LDI
1364
                LDI
Line 1385... Line 1374...
1385
LD_FILE8        EXX
1374
LD_FILE8        EXX
1386
                LD (SAVE_IY),DE         ;IY
1375
                LD (SAVE_IY),DE                 ; IY
1387
                EXX
1376
                EXX
1388
                RET
1377
                RET
1389
 
1378
 
1390
;IXL-L-КОЛИЧЕСТВО СЕКТОРОВ ДЛЯ ЗАГРУЗКИ
1379
; IXL - L - количество секторов для загрузки
1391
;IXH-H-РАЗМЕР КЛАСТЕРА
1380
; IXH - H - размер кластера
1392
;IYL-E-
1381
; IYL - E -
1393
;IYH-D-СМЕЩЕНИЕ В КЛАСТЕРЕ
1382
; IYH - D - смещение в кластере
1394
READ_FILE       EX AF,AF'
1383
READ_FILE       EX AF,AF'
1395
                LD A,IYL
1384
                LD A,IYL
1396
                DEC A
1385
                DEC A
1397
                JR Z,LD_FILE00
1386
                JR Z,LD_FILE00
1398
                LD IYL,INT4EXT
1387
                LD IYL,INT4EXT
1399
                LD HL,LD_FILE6
1388
                LD HL,LD_FILE6
1400
                PUSH HL
1389
                PUSH HL
1401
                LD HL,(RREG_L)                  ;АДРЕС ЗАГРУЗКИ
1390
                LD HL,(RREG_L)                  ; адрес загрузки
1402
                EXX
1391
                EXX
1403
                LD DE,(SAVE_IY)                 ;СМЕЩЕНИЕ В КЛАСТЕРЕ
1392
                LD DE,(SAVE_IY)                 ; смещение в кластере
1404
                LD A,(SecPerClus)
1393
                LD A,(SecPerClus)
1405
                LD H,A                          ;КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ
1394
                LD H,A                          ; количество секторов в кластере
1406
                LD A,(RREG_A)
1395
                LD A,(RREG_A)
1407
                LD L,A                          ;КОЛИЧЕСТВО СЕКТОРОВ ДЛЯ ЗАГРУЗКИ
1396
                LD L,A                          ; количество секторов для загрузки
1408
                EXX
1397
                EXX
1409
                JR LD_FILE0
1398
                JR LD_FILE0
1410
 
1399
 
1411
LD_FILE00       EXX
1400
LD_FILE00       EXX
1412
                LD DE,(SAVE_IY)                 ;СМЕЩЕНИЕ В КЛАСТЕРЕ
1401
                LD DE,(SAVE_IY)                 ; смещение в кластере
1413
                LD HL,LD_FILE8
1402
                LD HL,LD_FILE8
1414
                PUSH HL
1403
                PUSH HL
1415
                LD A,(SecPerClus)               ;КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ
1404
                LD A,(SecPerClus)               ; КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ
1416
                LD H,A                          ;КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ
1405
                LD H,A
1417
                EX AF,AF'
1406
                EX AF,AF'
1418
                LD L,A                          ;КОЛИЧЕСТВО СЕКТОРОВ ДЛЯ ЗАГРУЗКИ
1407
                LD L,A                          ; количество секторов для загрузки
1419
                EXX
1408
                EXX
1420
;IXL-L-КОЛИЧЕСТВО СЕКТОРОВ ДЛЯ ЗАГРУЗКИ
1409
; IXL - L - количество секторов для загрузки
1421
;IXH-H-РАЗМЕР КЛАСТЕРА
1410
; IXH - H - размер кластера
1422
;IYL-E-
1411
; IYL - E -
1423
;IYH-D-СМЕЩЕНИЕ В КЛАСТЕРЕ
1412
; IYH - D - смещение в кластере
1424
LD_FILE0        LD DE,(AFILCLS)
1413
LD_FILE0        LD DE,(AFILCLS)
1425
                LD BC,(AFILCLS+2)               ;ТЕКУЩИЙ НОМЕР КЛАСТЕРА
1414
                LD BC,(AFILCLS+2)               ; текущий номер кластера
1426
                PUSH BC
1415
                PUSH BC
1427
                PUSH DE
1416
                PUSH DE
1428
                PUSH HL
1417
                PUSH HL
1429
                CALL REALSEC                    ;ПЕРЕВЕЛИ НОМЕР КЛАСТЕРА В НОМЕР СЕКТОРА
1418
                CALL REALSEC                    ; перевели номер кластера в номер сектора
1430
                EXX
1419
                EXX
1431
                LD A,D                  ;IYH
1420
                LD A,D                  ; IYH
1432
                EXX
1421
                EXX
1433
                LD L,A
1422
                LD L,A
1434
                LD H,0
1423
                LD H,0
1435
                ADD HL,DE
1424
                ADD HL,DE
1436
                EX DE,HL
1425
                EX DE,HL
1437
                JR NC,LD_FILE1
1426
                JR NC,LD_FILE1
1438
                INC BC                          ;BCDE=НОМЕР СЕКТОРА ОТКУДА ГРУЗИТЬ
1427
                INC BC                          ; BCDE=номер сектора откуда грузить
1439
LD_FILE1        EXX
1428
LD_FILE1        EXX
1440
                LD A,L                  ;IXL
1429
                LD A,L                  ; IXL
1441
                CP H                    ;IXH
1430
                CP H                    ; IXH
1442
                JP C,LD_FILE2
1431
                JP C,LD_FILE2
1443
                LD A,H                  ;IXH
1432
                LD A,H                  ; IXH
Line 1445... Line 1434...
1445
                CP H                    ;IXH
1434
                CP H                    ; IXH
1446
                LD A,L                  ;IXL
1435
                LD A,L                  ; IXL
1447
                JP C,LD_FILE5
1436
                JP C,LD_FILE5
1448
                LD A,H                  ;IXH
1437
                LD A,H                  ; IXH
1449
                SUB D                   ;IYH
1438
                SUB D                   ; IYH
1450
LD_FILE5        LD E,A                  ;IYL,A  ;СКОЛЬКО СЕКТОРОВ СЕЙЧАС ГРУЗИМ
1439
LD_FILE5        LD E,A                  ; IYL,A ; сколько секторов сейчас грузим
1451
                EXX
1440
                EXX
1452
                POP HL                          ;ВОССТАНОВИЛИ АДРЕС ЗАГРУЗКИ
1441
                POP HL                          ; восстановили адрес загрузки
1453
;               LD IYL,INT4EXT
1442
;               LD IYL,INT4EXT
1454
                CALL TO_DRV
1443
                CALL TO_DRV
1455
                DB _DEV_READ
1444
                DB _DEV_READ
1456
                LD A,IYL
1445
                LD A,IYL
1457
                DEC A
1446
                DEC A
1458
                JR Z,LD_FILE7
1447
                JR Z,LD_FILE7
1459
                LD (RREG_L),HL
1448
                LD (RREG_L),HL
1460
LD_FILE7        POP DE
1449
LD_FILE7        POP DE
1461
                POP BC                          ;ВОССТАНОВИЛИ НОМЕР КЛАСТЕРА
1450
                POP BC                          ; восстановили номер кластера
1462
                EXX
1451
                EXX
1463
                LD A,D                  ;IYH
1452
                LD A,D                  ; IYH
1464
                ADD A,E                 ;IYL
1453
                ADD A,E                 ; IYL
1465
                CP H                    ;IXH
1454
                CP H                    ; IXH
1466
                JP C,LD_FILE3
1455
                JP C,LD_FILE3
1467
                SUB H                   ;IXH
1456
                SUB H                   ; IXH
1468
LD_FILE3        LD D,A                  ;IYH,A
1457
LD_FILE3        LD D,A                  ; IYH,A
1469
                EXX
1458
                EXX
1470
                JP C,LD_FILE4
1459
                JP C,LD_FILE4
1471
                PUSH HL                         ;СОХРАНИЛИ АДРЕС ЗАГРУЗКИ
1460
                PUSH HL                         ; сохранили адрес загрузки
1472
                PUSH IY
1461
                PUSH IY
1473
                LD IYL,INTERNAL
1462
                LD IYL,INTERNAL
1474
                CALL RDFATZP                    ;ПРОЧИТАЛИ НОМЕР СЛЕДУЮЩЕГО КЛАСТЕРА
1463
                CALL RDFATZP                    ; прочитали номер следующего кластера
1475
                POP IY
1464
                POP IY
1476
                LD (AFILCLS),DE
1465
                LD (AFILCLS),DE
1477
                LD (AFILCLS + 2),BC
1466
                LD (AFILCLS + 2),BC
1478
                CALL LST_CLS                    ;ПРОВЕРИЛИ, А МОЖЕТ ЭТО ПОСЛЕДНИЙ КЛАСТЕР?
1467
                CALL LST_CLS                    ; проверили, а может это последний кластер?
1479
                POP HL                          ;ВОССТАНОВИЛИ АДРЕС ЗАГРУЗКИ
1468
                POP HL                          ; восстановили адрес загрузки
1480
                RET C                           ;ЕСЛИ ПОСЛЕДНИЙ, ВЫХОДИМ
1469
                RET C                           ; если последний, выходим
1481
LD_FILE4        EXX
1470
LD_FILE4        EXX
1482
                LD A,L                  ;IXL
1471
                LD A,L                  ; IXL
1483
                SUB E                   ;IYL
1472
                SUB E                   ; IYL
1484
                EXX
1473
                EXX
1485
                RET Z
1474
                RET Z
Line 1502... Line 1491...
1502
                PUSH DE
1491
                PUSH DE
1503
                LDIR
1492
                LDIR
1504
                LD HL,0
1493
                LD HL,0
1505
                LD A,(FATType)
1494
                LD A,(FATType)
1506
                CP 2
1495
                CP 2
1507
                JR C,OPENFILE2                  ;ЕСЛИ ЭТО НЕ FAT32 ТО СТАРШИЕ 16 БИТ ОБНУЛЯЕМ
1496
                JR C,OPENFILE2                  ; если это не FAT32 то старшие 16 бит обнуляем
1508
                LD HL,(FILE_SRC + _DIR_FstClusHI)
1497
                LD HL,(FILE_SRC + _DIR_FstClusHI)
1509
OPENFILE2       LD (AFILCLS + 2),HL
1498
OPENFILE2       LD (AFILCLS + 2),HL
1510
                LD HL,(FILE_SRC + _DIR_FstClusLO)
1499
                LD HL,(FILE_SRC + _DIR_FstClusLO)
1511
                LD (AFILCLS),HL
1500
                LD (AFILCLS),HL
1512
                LD HL,(TEK_ZAP)
1501
                LD HL,(TEK_ZAP)
Line 1535... Line 1524...
1535
                AND A
1524
                AND A
1536
                JR NZ,FINDNAME01
1525
                JR NZ,FINDNAME01
1537
                PUSH HL
1526
                PUSH HL
1538
                LD HL,(RREG_L)
1527
                LD HL,(RREG_L)
1539
                LD DE,BUF_256 - CPU6
1528
                LD DE,BUF_256 - CPU6
1540
                LD BC,0X10
1529
                LD BC,0x10
1541
                CALL LDIR_BYTES
1530
                CALL LDIR_BYTES
1542
                LD HL,EFINDNAME
1531
                LD HL,EFINDNAME
1543
                EX (SP),HL
1532
                EX (SP),HL
1544
FINDNAME01      PUSH IY
1533
FINDNAME01      PUSH IY
1545
                LD IYL,INTERNAL
1534
                LD IYL,INTERNAL
1546
                LD HL,BUF_256
1535
                LD HL,BUF_256
1547
                LD DE,FB_EXT
1536
                LD DE,FB_EXT
1548
                LD BC,0X8FF
1537
                LD BC,0x8FF
1549
                LD A,(HL)
1538
                LD A,(HL)
1550
                CP "."
1539
                CP "."
1551
                JR NZ,FINDNAME02
1540
                JR NZ,FINDNAME02
1552
                LDI
1541
                LDI
1553
                LDI
1542
                LDI
Line 1597... Line 1586...
1597
                SCF
1586
                SCF
1598
FINDNAME13      POP IY
1587
FINDNAME13      POP IY
1599
                RET
1588
                RET
1600
 
1589
 
1601
CMP_NAME        LD DE,FB_EXT
1590
CMP_NAME        LD DE,FB_EXT
1602
ICMP_NAME       LD B,0X0B
1591
ICMP_NAME       LD B,0x0B
1603
CMP_NAME_B      LD A,(DE)
1592
CMP_NAME_B      LD A,(DE)
1604
                CP "a"
1593
                CP "a"
1605
                JR C,CMPNAME01
1594
                JR C,CMPNAME01
1606
                CP "{"
1595
                CP "{"
1607
                JR NC,CMPNAME01
1596
                JR NC,CMPNAME01
Line 1612... Line 1601...
1612
                INC HL
1601
                INC HL
1613
                DJNZ CMP_NAME_B
1602
                DJNZ CMP_NAME_B
1614
                XOR A
1603
                XOR A
1615
                RET
1604
                RET
1616
 
1605
 
1617
;ВХОЖДЕНИЕ В DIR
1606
; вхождение в dir
1618
ENTER_DIR       LD IYL,INTERNAL
1607
ENTER_DIR       LD IYL,INTERNAL
1619
                CALL READ_DIR
1608
                CALL READ_DIR
1620
                PUSH AF
1609
                PUSH AF
1621
                PUSH DE
1610
                PUSH DE
1622
                PUSH HL
1611
                PUSH HL
Line 1653... Line 1642...
1653
                JR ENT_DI1
1642
                JR ENT_DI1
1654
 
1643
 
1655
ENT_DI2         LD HL,TEK_LEV
1644
ENT_DI2         LD HL,TEK_LEV
1656
                LD A,(HL)
1645
                LD A,(HL)
1657
                INC A
1646
                INC A
1658
                CP 0X10
1647
                CP 0x10
1659
                EXX
1648
                EXX
1660
                RET Z
1649
                RET Z
1661
                EXX
1650
                EXX
1662
                LD (HL),A
1651
                LD (HL),A
1663
                DEC A
1652
                DEC A