Subversion Repositories pentevo

Rev

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

Rev 1120 Rev 1186
Line 1... Line 1...
1
 
1
 
2
; LAST UPDATE: 10.02.2024 savelij
2
; LAST UPDATE: 07.02.2025 savelij
3
 
3
 
4
                include macros.a80
4
                include macros.a80
5
                include define.a80
5
                include define.a80
6
                include global_vars.a80
6
                include global_vars.a80
7
                include ports_ngs.a80
7
                include ports_ngs.a80
Line 10... Line 10...
10
                include nums_devices.a80
10
                include nums_devices.a80
11
                include fat_dir.a80
11
                include fat_dir.a80
12
 
12
 
13
 INIT_VAR DRV_VAR
13
 INIT_VAR DRV_VAR
14
 SETVAR BUF_512_,       0x200                           ; буфер сектора
14
 SETVAR BUF_512_,       0x200                           ; буфер сектора
-
 
15
FATVAR
-
 
16
 _INIT_VAR INITVAR      ; базовый адрес для переменых FAT
15
                include ../../fat_vars.a80
17
                include fat_vars.a80
16
 SETVAR_ALIGN
18
 SETVAR_ALIGN
17
 SUBVAR (WORD + WORD + BYTE + BYTE)
19
 SUBVAR (WORD + WORD + BYTE + BYTE)
18
 SETVAR LENGHT,         WORD                            ; длина файла в байтах
20
 SETVAR LENGHT,         WORD                            ; длина файла в байтах
19
 SETVAR LOADSCS1,       WORD                            ; адрес вызываемого драйвера
21
 SETVAR LOADSCS1,       WORD                            ; адрес вызываемого драйвера
20
 SETVAR MAS_SLA,        BYTE                            ; маска для MASTER/SLAVE
22
 SETVAR MAS_SLA,        BYTE                            ; маска для MASTER/SLAVE
Line 49... Line 51...
49
                AND A
51
                AND A
50
                LD A,0xE0
52
                LD A,0xE0
51
                JR Z,SETMASL
53
                JR Z,SETMASL
52
                LD A,0xF0
54
                LD A,0xF0
53
SETMASL         LD (MAS_SLA),A
55
SETMASL         LD (MAS_SLA),A
54
                LD BC,(FILE_SRC + _DIR_FstClusHI)
56
                LD BC,(FATVAR.FILE_SRC + _DIR_FstClusHI)
55
                LD (AFILCLS+2),BC
57
                LD (FATVAR.AFILCLS+2),BC
56
                LD DE,(FILE_SRC + _DIR_FstClusLO)
58
                LD DE,(FATVAR.FILE_SRC + _DIR_FstClusLO)
57
                LD (AFILCLS),DE
59
                LD (FATVAR.AFILCLS),DE
58
                LD A,(FILE_SRC + _DIR_Ext + 1)
60
                LD A,(FATVAR.FILE_SRC + _DIR_Ext + 1)
59
                CP "P"
61
                CP 'P'
60
                JP Z,RUNSPG2                            ; переход на запуск SPG файла
62
                JP Z,RUNSPG2                            ; переход на запуск SPG файла
61
                CP "N"
63
                CP 'N'
62
                JP Z,RUNSNA                             ; переход на запуск SNA файла
64
                JP Z,RUNSNA                             ; переход на запуск SNA файла
63
                CALL REALSEC                            ; преобразовали в номер сектора
65
                CALL REALSEC                            ; преобразовали в номер сектора
64
                CALL LOADLST                            ; загрузили в буфер
66
                CALL LOADLST                            ; загрузили в буфер
65
                EXX
67
                EXX
66
                LD HL,(BUF_512_ + _DIR_Ext + 1)
68
                LD HL,(BUF_512_ + _DIR_Ext + 1)
Line 90... Line 92...
90
                ADD HL,DE                               ; далее грузить со следующего сектора 
92
                ADD HL,DE                               ; далее грузить со следующего сектора 
91
                EX DE,HL
93
                EX DE,HL
92
                JR NC,READ04
94
                JR NC,READ04
93
                INC BC                                  ; BCDE = BCDE + 1
95
                INC BC                                  ; BCDE = BCDE + 1
94
READ04          POP HL                                  ; в HL адрес для продолжения загрузки
96
READ04          POP HL                                  ; в HL адрес для продолжения загрузки
95
                LD IY,(SecPerClus)                      ; LY = количество секторов в кластере
97
                LD IY,(FATVAR.SecPerClus)               ; LY = количество секторов в кластере
96
                LD A,IXL
98
                LD A,IXL
97
                CP IYL                                  ; секторов осталось меньше чем в кластере
99
                CP IYL                                  ; секторов осталось меньше чем в кластере
98
                JR C,READ02                             ; переход на дозагрузку остатка секторов
100
                JR C,READ02                             ; переход на дозагрузку остатка секторов
99
                INC IXL
101
                INC IXL
100
                LD A,IYL
102
                LD A,IYL
Line 102... Line 104...
102
                JR C,READ07
104
                JR C,READ07
103
                DEC A
105
                DEC A
104
                JR READ05
106
                JR READ05
105
 
107
 
106
READ07          PUSH HL
108
READ07          PUSH HL
107
                LD DE,(AFILCLS)
109
                LD DE,(FATVAR.AFILCLS)
108
                LD BC,(AFILCLS + 2)
110
                LD BC,(FATVAR.AFILCLS + 2)
109
                CALL RD_NEXT_CLUSTER                    ; получить номер следующего кластера
111
                CALL RD_NEXT_CLUSTER                    ; получить номер следующего кластера
110
                LD (AFILCLS),DE
112
                LD (FATVAR.AFILCLS),DE
111
                LD (AFILCLS + 2),BC
113
                LD (FATVAR.AFILCLS + 2),BC
112
                CALL CHECK_LAST_CLUSTER                 ; проверка на окончание FAT цепочки
114
                CALL CHECK_LAST_CLUSTER                 ; проверка на окончание FAT цепочки
113
                POP HL
115
                POP HL
114
                JR C,RUNLOAD                            ; если кластера закончились, то запуск загруженного
116
                JR C,RUNLOAD                            ; если кластера закончились, то запуск загруженного
115
                PUSH HL
117
                PUSH HL
116
                CALL REALSEC                            ; преобразование номера кластера в номер сектора
118
                CALL REALSEC                            ; преобразование номера кластера в номер сектора
Line 205... Line 207...
205
; IYH - смещение в кластере
207
; IYH - смещение в кластере
206
LOAD_FILE       PUSH BC                                 ; старшие 16 бит номера кластера
208
LOAD_FILE       PUSH BC                                 ; старшие 16 бит номера кластера
207
                PUSH DE                                 ; младшие 16 бит номера кластера
209
                PUSH DE                                 ; младшие 16 бит номера кластера
208
                PUSH HL                                 ; сохранили адрес загрузки
210
                PUSH HL                                 ; сохранили адрес загрузки
209
                CALL REALSEC                            ; перевели номер кластера в номер сектора
211
                CALL REALSEC                            ; перевели номер кластера в номер сектора
210
                LD IX,(SecPerClus)
212
                LD IX,(FATVAR.SecPerClus)
211
                LD A,IYH                                ; смещение в кластере
213
                LD A,IYH                                ; смещение в кластере
212
                LD L,A
214
                LD L,A
213
                LD H,0
215
                LD H,0
214
                ADD HL,DE
216
                ADD HL,DE
215
                EX DE,HL
217
                EX DE,HL
Line 249... Line 251...
249
                JP NZ,LOAD_FILE
251
                JP NZ,LOAD_FILE
250
                RET
252
                RET
251
 
253
 
252
; проверка номера кластера
254
; проверка номера кластера
253
CHECK_LAST_CLUSTER
255
CHECK_LAST_CLUSTER
254
                LD A,(FATType)
256
                LD A,(FATVAR.FATType)
255
                AND A
257
                AND A
256
                JR NZ,.L1
258
                JR NZ,.L1
257
                LD HL,0x0FF7
259
                LD HL,0x0FF7
258
                SBC HL,DE
260
                SBC HL,DE
259
                RET
261
                RET
Line 270... Line 272...
270
                LD HL,0xFFF7
272
                LD HL,0xFFF7
271
                SBC HL,DE
273
                SBC HL,DE
272
                RET
274
                RET
273
 
275
 
274
; чтение следующего кластера
276
; чтение следующего кластера
275
RD_NEXT_CLUSTER LD A,(FATType)
277
RD_NEXT_CLUSTER LD A,(FATVAR.FATType)
276
                AND A
278
                AND A
277
                JR Z,.L1
279
                JR Z,.L1
278
                DEC A
280
                DEC A
279
                JR Z,.L2
281
                JR Z,.L2
280
                EX DE,HL
282
                EX DE,HL
Line 299... Line 301...
299
                LD A,E
301
                LD A,E
300
                LD E,D
302
                LD E,D
301
                LD D,C
303
                LD D,C
302
.L3             PUSH AF
304
.L3             PUSH AF
303
                PUSH BC
305
                PUSH BC
304
                LD HL,NumSecFAT1
306
                LD HL,FATVAR.NumSecFAT1
305
                CALL BCDEHLP
307
                CALL BCDEHLP
306
                CALL LOADLST
308
                CALL LOADLST
307
                POP BC
309
                POP BC
308
                POP AF
310
                POP AF
309
                LD E,A
311
                LD E,A
Line 327... Line 329...
327
                LD B,D
329
                LD B,D
328
                LD C,D
330
                LD C,D
329
                SRL E
331
                SRL E
330
                PUSH AF
332
                PUSH AF
331
                PUSH HL
333
                PUSH HL
332
                LD DE,(NumSecFAT1)
334
                LD DE,(FATVAR.NumSecFAT1)
333
                LD BC,(NumSecFAT1 + 2)
335
                LD BC,(FATVAR.NumSecFAT1 + 2)
334
                CALL LOADLST
336
                CALL LOADLST
335
                POP BC
337
                POP BC
336
                LD A,B
338
                LD A,B
337
                AND 1
339
                AND 1
338
                LD B,A
340
                LD B,A
339
                ADD HL,BC
341
                ADD HL,BC
340
                LD B,(HL)
342
                LD B,(HL)
341
                INC HL
343
                INC HL
342
                LD A,H
344
                LD A,H
343
                CP HIGH (BUF_512) + 2
345
                CP HIGH (BUF_512_) + 2
344
                JR NZ,.L4
346
                JR NZ,.L4
345
                PUSH BC
347
                PUSH BC
346
                LD BC,0
348
                LD BC,0
347
                INC DE
349
                INC DE
348
                CALL LOADLST
350
                CALL LOADLST
Line 369... Line 371...
369
REALSEC         LD A,B
371
REALSEC         LD A,B
370
                OR C
372
                OR C
371
                OR D
373
                OR D
372
                OR E
374
                OR E
373
                JR NZ,REALSE1
375
                JR NZ,REALSE1
374
                LD DE,(NumSecRootDir)
376
                LD DE,(FATVAR.NumSecRootDir)
375
                LD BC,(NumSecRootDir + 2)
377
                LD BC,(FATVAR.NumSecRootDir + 2)
376
                RET
378
                RET
377
 
379
 
378
REALSE1         LD HL,0xFFFE
380
REALSE1         LD HL,0xFFFE
379
                EX DE,HL
381
                EX DE,HL
380
                ADD HL,DE
382
                ADD HL,DE
381
                EX DE,HL
383
                EX DE,HL
382
                INC HL
384
                INC HL
383
                ADC HL,BC                               ; номер кластера - 2
385
                ADC HL,BC                               ; номер кластера - 2
384
                LD A,(SecPerClus)
386
                LD A,(FATVAR.SecPerClus)
385
                JR REALSE2
387
                JR REALSE2
386
 
388
 
387
REALSE3         SLA E
389
REALSE3         SLA E
388
                RL D
390
                RL D
389
                RL L
391
                RL L
390
                RL H
392
                RL H
391
REALSE2         RRCA
393
REALSE2         RRCA
392
                JR NC,REALSE3                           ; умножили на размер кластера
394
                JR NC,REALSE3                           ; умножили на размер кластера
393
                LD B,H
395
                LD B,H
394
                LD C,L
396
                LD C,L
395
                LD HL,FirstSecData
397
                LD HL,FATVAR.FirstSecData
396
                JP BCDEHLP                              ; прибавили смещение от начала раздела
398
                JP BCDEHLP                              ; прибавили смещение от начала раздела
397
 
399
 
398
; BCDE / 512
400
; BCDE / 512
399
BCDE200         LD E,D
401
BCDE200         LD E,D
400
                LD D,C
402
                LD D,C