Subversion Repositories pentevo

Rev

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

Rev 1065 Rev 1186
Line 1... Line 1...
1
 
1
 
2
; LAST UPDATE: 15.02.2023 savelij
2
; LAST UPDATE: 16.02.2025 savelij
3
 
3
 
4
        TITLE "mounter.a80 ROM_RST83"
4
        TITLE "mounter.a80 ROM_RST83"
5
 
5
 
6
MOUNTER         CALL P5_READ_BYTE
6
MOUNTER         CALL P5_READ_BYTE
7
                LD A,(NEXTBYTERST8)
7
                LD A,(NEXTBYTERST8)
Line 38... Line 38...
38
                CALL OPEN_FILE
38
                CALL OPEN_FILE
39
                PUSH HL
39
                PUSH HL
40
                LD DE,SUPPORT_EXT
40
                LD DE,SUPPORT_EXT
41
                CALL CP_EXT
41
                CALL CP_EXT
42
                LD (EXT_TYPE),A
42
                LD (EXT_TYPE),A
43
                LD HL,FILE_SRC
43
                LD HL,FATVAR.FILE_SRC
44
                LD DE,NAME_RAMDISK
44
                LD DE,NAME_RAMDISK
45
                LD BC,0x20
45
                LD BC,0x20
46
                LDIR
46
                LDIR
47
                POP HL
47
                POP HL
48
                CP _TAP
48
                CP _TAP
Line 51... Line 51...
51
                JP Z,LOAD_FDI
51
                JP Z,LOAD_FDI
52
                CP _SCL
52
                CP _SCL
53
                JP Z,LOAD_SCL
53
                JP Z,LOAD_SCL
54
                LD A,RAM_DATARAMD
54
                LD A,RAM_DATARAMD
55
ILD_IMG1        PUSH AF
55
ILD_IMG1        PUSH AF
56
                LD BC,WIN_P5
56
                LD BC,WIN_P1
57
                OUT (C),A
57
                OUT (C),A
58
                LD A,0x20
58
                LD A,0x20
59
                LD HL,CPU5
59
                LD HL,CPU1
60
                CALL READ_FILE
60
                CALL READ_FILE
61
                JR C,ILD_IMG2
61
                JR C,ILD_IMG2
62
                POP AF
62
                POP AF
63
                INC A
63
                INC A
64
                JR ILD_IMG1
64
                JR ILD_IMG1
Line 69... Line 69...
69
ILD_IMG2        POP AF
69
ILD_IMG2        POP AF
70
                LD A,(EXT_TYPE)
70
                LD A,(EXT_TYPE)
71
                SUB _TAP
71
                SUB _TAP
72
                RET Z                                   ; если TAP то на выход
72
                RET Z                                   ; если TAP то на выход
73
; для TRD образа генерация таблицы секторов/дорожек
73
; для TRD образа генерация таблицы секторов/дорожек
74
        EVOPORT WIN_P5,RAM_DATARAMD                     ; нужна страница откуда начинается загруженный образ
74
        EVOPORT WIN_P1,RAM_DATARAMD                     ; нужна страница откуда начинается загруженный образ
75
ILD_IMG3        LD HL,(CPU5+0x8E1)                      ; первый свободный трек сектор
75
ILD_IMG3        LD HL,(CPU1+0x8E1)                      ; первый свободный трек сектор
76
                LD A,L
76
                LD A,L
77
                LD L,H
77
                LD L,H
78
                LD H,0
78
                LD H,0
79
                ADD HL,HL
79
                ADD HL,HL
80
                ADD HL,HL
80
                ADD HL,HL
81
                ADD HL,HL
81
                ADD HL,HL
82
                ADD HL,HL
82
                ADD HL,HL
83
                OR L
83
                OR L
84
                LD L,A                                  ; количество занятых секторов с директорией
84
                LD L,A                                  ; количество занятых секторов с директорией
85
                LD DE,(CPU5+0x8E5)                      ; количество свободных секторов
85
                LD DE,(CPU1+0x8E5)                      ; количество свободных секторов
86
                ADD HL,DE
86
                ADD HL,DE
87
                ADD HL,HL
87
                ADD HL,HL
88
                ADD HL,HL
88
                ADD HL,HL
89
                ADD HL,HL
89
                ADD HL,HL
90
                ADD HL,HL                               ; H=количество дорожек
90
                ADD HL,HL                               ; H=количество дорожек
91
                LD A,H
91
                LD A,H
92
                CP 0xA0
92
                CP 0xA0
93
                JR NC,ELT3
93
                JR NC,ELT3
94
ELT4            LD A,0xA0
94
ELT4            LD A,0xA0
95
ELT3            EX AF,AF'
95
ELT3            EX AF,AF'
96
        EVOPORT WIN_P5,RAM_RAMDISK                      ; нужна страница начала рамдиска, где будет таблица описателей
96
        EVOPORT WIN_P1,RAM_RAMDISK                      ; нужна страница начала рамдиска, где будет таблица описателей
97
                LD HL,CPU5
97
                LD HL,CPU1
98
                PUSH HL
98
                PUSH HL
99
                LD DE,CPU5+1
99
                LD DE,CPU1+1
100
                LD BC,0x3FFF
100
                LD BC,0x3FFF
101
                LD (HL),L
101
                LD (HL),L
102
                LDIR                                    ; очистили страницу
102
                LDIR                                    ; очистили страницу
103
                POP DE                                  ; адрес начала страницы
103
                POP DE                                  ; адрес начала страницы
104
                LD HL,0                                 ; смещение в блоках и страницах
104
                LD HL,0                                 ; смещение в блоках и страницах
Line 119... Line 119...
119
                INC D
119
                INC D
120
                LD A,2
120
                LD A,2
121
                LD (DE),A                               ; размер сектора
121
                LD (DE),A                               ; размер сектора
122
                INC D
122
                INC D
123
                DJNZ ELT1                               ; вносим в таблицу все номера секторов с размерами
123
                DJNZ ELT1                               ; вносим в таблицу все номера секторов с размерами
124
                LD D,HIGH (CPU5)                        ; вернули указатель в начало
124
                LD D,HIGH (CPU1)                        ; вернули указатель в начало
125
                INC E                                   ; для следующей дорожки
125
                INC E                                   ; для следующей дорожки
126
                LD BC,0x40
126
                LD BC,0x40
127
                ADD HL,BC                               ; переход к следующей дорожке
127
                ADD HL,BC                               ; переход к следующей дорожке
128
                EX AF,AF'
128
                EX AF,AF'
129
                DEC A
129
                DEC A
130
                JR NZ,ELT2                              ; повторяем для всех дорожек
130
                JR NZ,ELT2                              ; повторяем для всех дорожек
131
; общий выход из загрузки с возвратом стандартной страницы в окне проецирования 1
131
; общий выход из загрузки с возвратом стандартной страницы в окне проецирования 1
132
ELOAD_IMAGE     LD HL,CPU5+0x3FFF
132
ELOAD_IMAGE     LD HL,CPU1+0x3FFF
133
                LD (HL),"R"
133
                LD (HL),'R'
134
                DEC H
134
                DEC H
135
                LD (HL),"D"
135
                LD (HL),'D'
136
                DEC H
136
                DEC H
137
; перенос имени файла загруженного в рамдиск
137
; перенос имени файла загруженного в рамдиск
138
                LD DE,NAME_RAMDISK
138
                LD DE,NAME_RAMDISK
139
                LD B,8+3
139
                LD B,8+3
140
.L1             LD A,(DE)
140
.L1             LD A,(DE)
Line 144... Line 144...
144
                DJNZ .L1
144
                DJNZ .L1
145
                XOR A
145
                XOR A
146
                RET
146
                RET
147
 
147
 
148
ELT5            POP AF
148
ELT5            POP AF
149
        EVOPORT WIN_P5,RAM_RAMDISK
149
        EVOPORT WIN_P1,RAM_RAMDISK
150
                JR ELOAD_IMAGE
150
                JR ELOAD_IMAGE
151
 
151
 
152
; инфа для создания 9 сектора нового диска
152
; инфа для создания 9 сектора нового диска
153
DSKINFO         DB 0                                    ; +0xE1 номер первого свободного сектора
153
DSKINFO         DB 0                                    ; +0xE1 номер первого свободного сектора
154
                DB 1                                    ; +0xE2 номер первого свободного трека
154
                DB 1                                    ; +0xE2 номер первого свободного трека
155
                DB 0x16                                 ; +0xE3 тип дискеты
155
                DB 0x16                                 ; +0xE3 тип дискеты
156
                DB 0                                    ; +0xE4 количество файлов на дискете
156
                DB 0                                    ; +0xE4 количество файлов на дискете
157
SECFREE         DW 2544                                 ; +0xE5 количество свободных секторов
157
SECFREE         DW 2544                                 ; +0xE5 количество свободных секторов
158
                DB 0x10                                 ; +0xE7 идентификационный код TRDOS
158
                DB 0x10                                 ; +0xE7 идентификационный код TRDOS
159
                DW 0                                    ; +0xE8 2 байта 0
159
                DW 0                                    ; +0xE8 2 байта 0
160
                DUPL 9,0x20                             ; +0xEA 9 байт 0x20
160
                DB 9 DUP 0x20                           ; +0xEA 9 байт 0x20
161
                DB 0                                    ; +0xF3 1 байт 0
161
                DB 0                                    ; +0xF3 1 байт 0
162
                DB 0                                    ; +0xF4 количество удаленных файлов
162
                DB 0                                    ; +0xF4 количество удаленных файлов
163
                DB "RAMDISKO"                           ; +0xF5 имя дискеты
163
                DB "RAMDISKO"                           ; +0xF5 имя дискеты
164
DSK_END
164
DSK_END
165
 
165
 
166
; загрузка SCL образа
166
; загрузка SCL образа
167
LOAD_SCL
167
LOAD_SCL
168
        EVOPORT WIN_P5,RAM_DATARAMD
168
        EVOPORT WIN_P1,RAM_DATARAMD
169
        EVOPORT WIN_P3,RAM_MOUNTER
169
        EVOPORT WIN_P3,RAM_MOUNTER
170
                LD A,RAM_DATARAMD
170
                LD A,RAM_DATARAMD
171
LOAD_IMAGE4     PUSH AF
171
.L4             PUSH AF
172
                LD BC,WIN_P5
172
                LD BC,WIN_P1
173
                OUT (C),A
173
                OUT (C),A
174
                LD HL,CPU5+0x1000
174
                LD HL,CPU1+0x1000
175
                LD A,0x18
175
                LD A,0x18
176
                CALL READ_FILE
176
                CALL READ_FILE
177
                PUSH AF                                 ; сохранили флаг окончания загрузки на случай окончания образа
177
                PUSH AF                                 ; сохранили флаг окончания загрузки на случай окончания образа
178
                LD HL,CPU5
178
                LD HL,CPU1
179
                PUSH HL                                 ; сохранили адрес начала каталога
179
                PUSH HL                                 ; сохранили адрес начала каталога
180
                LD (HL),L
180
                LD (HL),L
181
                LD D,H
181
                LD D,H
182
                LD E,L
182
                LD E,L
183
                INC DE
183
                INC DE
184
                LD BC,0xFFF
184
                LD BC,0xFFF
185
                LDIR                                    ; зачистка области первой дорожки для формирования каталога диска
185
                LDIR                                    ; зачистка области первой дорожки для формирования каталога диска
186
                LD HL,CPU5+0x1008                       ; адрес количества файлов в SCL образе
186
                LD HL,CPU1+0x1008                       ; адрес количества файлов в SCL образе
187
                LD A,(HL)                               ; взяли количество файлов как счетчик
187
                LD A,(HL)                               ; взяли количество файлов как счетчик
188
                INC HL                                  ; перешли на первый описатель файла
188
                INC HL                                  ; перешли на первый описатель файла
189
                EXX
189
                EXX
190
                LD HL,0                                 ; номер абсолютного сектора
190
                LD HL,0                                 ; номер абсолютного сектора
191
                LD D,L                                  ; приращение секторов не может быть более 255 секторов
191
                LD D,L                                  ; приращение секторов не может быть более 255 секторов
192
                LD B,A                                  ; сохранение количества файлов
192
                LD B,A                                  ; сохранение количества файлов
193
                EXX
193
                EXX
194
                POP DE                                  ; вернули адрес начала каталога диска
194
                POP DE                                  ; вернули адрес начала каталога диска
195
LOAD_IMAGE3     EX AF,AF'
195
.L3             EX AF,AF'
196
                LD BC,0x0D
196
                LD BC,0x0D
197
                LDIR                                    ; перенесли 13 байт тела описателя
197
                LDIR                                    ; перенесли 13 байт тела описателя
198
                LD A,(HL)                               ; забрали размер файла в секторах
198
                LD A,(HL)                               ; забрали размер файла в секторах
199
                LDI                                     ; перенесли еще байт
199
                LDI                                     ; перенесли еще байт
200
                EXX
200
                EXX
Line 219... Line 219...
219
                LD (HL),B                               ; уложили после текущего описателя
219
                LD (HL),B                               ; уложили после текущего описателя
220
                INC HL
220
                INC HL
221
                EX DE,HL
221
                EX DE,HL
222
                EX AF,AF'
222
                EX AF,AF'
223
                DEC A
223
                DEC A
224
                JR NZ,LOAD_IMAGE3                       ; если файлы не кончились продолжаем
224
                JR NZ,.L3                               ; если файлы не кончились продолжаем
225
                PUSH HL                                 ; сохранили адрес начала данных
225
                PUSH HL                                 ; сохранили адрес начала данных
226
                LD HL,DSKINFO
226
                LD HL,DSKINFO
227
                LD DE,CPU5+0x8E1
227
                LD DE,CPU1+0x8E1
228
                LD BC,DSK_END-DSKINFO
228
                LD BC,DSK_END-DSKINFO
229
                LDIR
229
                LDIR
230
                EXX
230
                EXX
231
                LD DE,2544                              ; стандартный размер дискеты
231
                LD DE,2544                              ; стандартный размер дискеты
232
                EX DE,HL
232
                EX DE,HL
233
                AND A
233
                AND A
234
                SBC HL,DE
234
                SBC HL,DE
235
                LD (CPU5+0x8E5),HL                      ; количество свободных секторов
235
                LD (CPU1+0x8E5),HL                      ; количество свободных секторов
236
                EX DE,HL
236
                EX DE,HL
237
                LD A,L
237
                LD A,L
238
                ADD HL,HL
238
                ADD HL,HL
239
                ADD HL,HL
239
                ADD HL,HL
240
                ADD HL,HL
240
                ADD HL,HL
241
                ADD HL,HL
241
                ADD HL,HL
242
                INC H
242
                INC H
243
                AND 0x0F
243
                AND 0x0F
244
                LD L,A
244
                LD L,A
245
                LD (CPU5+0x8E1),HL                      ; первый свободный трек и сектор
245
                LD (CPU1+0x8E1),HL                      ; первый свободный трек и сектор
246
                LD A,B
246
                LD A,B
247
                LD (CPU5+0x8E4),A                       ; количество файлов на диске
247
                LD (CPU1+0x8E4),A                       ; количество файлов на диске
248
                EXX
248
                EXX
249
                POP DE                                  ; восстановление адреса начала данных
249
                POP DE                                  ; восстановление адреса начала данных
250
                LD HL,CPU6                              ; конец окна проецирования
250
                LD HL,CPU2                              ; конец окна проецирования
251
                AND A
251
                AND A
252
                SBC HL,DE                               ; получили количество байт для сдвига
252
                SBC HL,DE                               ; получили количество байт для сдвига
253
                LD B,H
253
                LD B,H
254
                LD C,L
254
                LD C,L
255
                LD HL,CPU5+0x1000                       ; начало данных на рамдиске
255
                LD HL,CPU1+0x1000                       ; начало данных на рамдиске
256
                EX DE,HL
256
                EX DE,HL
257
                LDIR                                    ; сдвинули, после переноса DE=адрес куда далее грузить
257
                LDIR                                    ; сдвинули, после переноса DE=адрес куда далее грузить
258
                LD A,D
258
                LD A,D
259
                CP HIGH (CPU6)-2
259
                CP HIGH (CPU2)-2
260
                JR NC,LOAD_IMAGE7
260
                JR NC,.L7
261
                EX DE,HL
261
                EX DE,HL
262
                LD A,HIGH (CPU6)-1
262
                LD A,HIGH (CPU2)-1
263
                SUB H
263
                SUB H
264
                SRL A
264
                SRL A
265
                LD IXL,A
265
                LD IXL,A
266
                CALL READ_FILE
266
                CALL READ_FILE
267
                LD DE,0x8000
267
                LD DE,0x8000
268
                EX DE,HL
268
                EX DE,HL
269
LOAD_IMAGE7     AND A
269
.L7             AND A
270
                SBC HL,DE                               ; получили сколько байт осталось до конца окна
270
                SBC HL,DE                               ; получили сколько байт осталось до конца окна
271
                LD (OST_HWOST),HL
271
                LD (OST_HWOST),HL
272
                LD (KUDA_HWOST),DE
272
                LD (KUDA_HWOST),DE
273
                LD DE,0
273
                LD DE,0
274
                EX DE,HL
274
                EX DE,HL
Line 277... Line 277...
277
                AND H
277
                AND H
278
                LD H,A
278
                LD H,A
279
                LD (NEXT4PAGE),HL
279
                LD (NEXT4PAGE),HL
280
                POP AF                                  ; восстановили флаг последней загрузки
280
                POP AF                                  ; восстановили флаг последней загрузки
281
                JP C,ILD_IMG2                           ; если файл уже кончился, то выход
281
                JP C,ILD_IMG2                           ; если файл уже кончился, то выход
282
                JR LOAD_IMAGE5
282
                JR .L5
283
 
283
 
284
LOAD_IMAGE6     LD DE,CPU5
284
.L6             LD DE,CPU1
285
                LD BC,(NEXT4PAGE)
285
                LD BC,(NEXT4PAGE)
286
                LDIR
286
                LDIR
287
                EX AF,AF'
287
                EX AF,AF'
288
                JP C,ILD_IMG2
288
                JP C,ILD_IMG2
289
                EX DE,HL
289
                EX DE,HL
290
                LD A,0x1F
290
                LD A,0x1F
291
                CALL READ_FILE
291
                CALL READ_FILE
292
                JP C,ILD_IMG2
292
                JP C,ILD_IMG2
293
LOAD_IMAGE5     LD HL,CPU3+BUF_TEMPSEC
293
.L5             LD HL,BUF_512
294
                PUSH HL
294
                PUSH HL
295
                LD A,1
295
                LD A,1
296
                CALL READ_FILE
296
                CALL READ_FILE
297
                EX AF,AF'                               ; спрятали флаг загрузки сектора
297
                EX AF,AF'                               ; спрятали флаг загрузки сектора
298
                POP HL                                  ; восстановили адрес куда сектор в буфер загрузили
298
                POP HL                                  ; восстановили адрес куда сектор в буфер загрузили
Line 300... Line 300...
300
                LD BC,(OST_HWOST)                       ; сколько переносить в конец страницы
300
                LD BC,(OST_HWOST)                       ; сколько переносить в конец страницы
301
                LDIR
301
                LDIR
302
                POP AF
302
                POP AF
303
                INC A
303
                INC A
304
                PUSH AF
304
                PUSH AF
305
                LD BC,WIN_P5
305
                LD BC,WIN_P1
306
                OUT (C),A
306
                OUT (C),A
307
                JR LOAD_IMAGE6
307
                JR .L6
308
 
308
 
309
; загрузка FDI
309
; загрузка FDI
310
LOAD_FDI        LD A,RAM_RAMDISK                        ; страница начала рамдиска
310
LOAD_FDI        LD A,RAM_RAMDISK                        ; страница начала рамдиска
311
                PUSH AF                                 ; сохранили на стеке
311
                PUSH AF                                 ; сохранили на стеке
312
        EVOPORT WIN_P5,RAM_RAMDISK
312
        EVOPORT WIN_P1,RAM_RAMDISK
313
        EVOPORT WIN_P3,RAM_MOUNTER
313
        EVOPORT WIN_P3,RAM_MOUNTER
314
                LD HL,FDI_TABLE_CYL
314
                LD HL,FDI_TABLE_CYL
315
                LD DE,FDI_TABLE_CYL+1
315
                LD DE,FDI_TABLE_CYL+1
316
                LD BC,0x3FFF
316
                LD BC,0x3FFF
317
                LD (HL),0
317
                LD (HL),0
Line 324... Line 324...
324
                JR Z,LOADFDI1
324
                JR Z,LOADFDI1
325
                ADD A,A                                 ; если сторон 2, то умножили количество дорожек на 2
325
                ADD A,A                                 ; если сторон 2, то умножили количество дорожек на 2
326
LOADFDI1        LD C,A                                  ; количество дорожек
326
LOADFDI1        LD C,A                                  ; количество дорожек
327
                LD HL,(CPU3+0x0A)
327
                LD HL,(CPU3+0x0A)
328
                LD (START_DATA),HL
328
                LD (START_DATA),HL
329
                LD DE,CPU5                              ; адрес буфера начала описателей дорожек
329
                LD DE,CPU1                              ; адрес буфера начала описателей дорожек
330
                LD HL,CPU3+0x0F                         ; адрес начала выборки описателей дорожек в FDI заголовке
330
                LD HL,CPU3+0x0F                         ; адрес начала выборки описателей дорожек в FDI заголовке
331
LOADFDI3        BIT 1,H
331
LOADFDI3        BIT 1,H
332
                CALL NZ,LOAD1SECFDI                     ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер
332
                CALL NZ,LOAD1SECFDI                     ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер
333
                LD A,(HL)                               ; биты 8-15 смещения дорожки от начала
333
                LD A,(HL)                               ; биты 8-15 смещения дорожки от начала
334
                AND 0x3F                                ; взяли для 8-13 биты-смещение в блоках в странице
334
                AND 0x3F                                ; взяли для 8-13 биты-смещение в блоках в странице
Line 428... Line 428...
428
                LD (NACH_SECT),HL                       ; сколько байт перенести из начала сектора в буфере в конец страницы
428
                LD (NACH_SECT),HL                       ; сколько байт перенести из начала сектора в буфере в конец страницы
429
                POP HL                                  ; восстановили сдрес начала секторов, далее загрузка всех секторов в память
429
                POP HL                                  ; восстановили сдрес начала секторов, далее загрузка всех секторов в память
430
LOADFDI5        POP AF
430
LOADFDI5        POP AF
431
                INC A
431
                INC A
432
                PUSH BC
432
                PUSH BC
433
                LD BC,WIN_P5
433
                LD BC,WIN_P1
434
                OUT (C),A
434
                OUT (C),A
435
                POP BC
435
                POP BC
436
                PUSH AF
436
                PUSH AF
437
                BIT 1,H
437
                BIT 1,H
438
                CALL NZ,LOAD1SECFDI
438
                CALL NZ,LOAD1SECFDI
439
                EX AF,AF'
439
                EX AF,AF'
440
                LD DE,CPU5
440
                LD DE,CPU1
441
                LD BC,(NACH_SECT)
441
                LD BC,(NACH_SECT)
442
                LDIR
442
                LDIR
443
                EX AF,AF'
443
                EX AF,AF'
444
                JP C,ELT5
444
                JP C,ELT5
445
                EX DE,HL
445
                EX DE,HL
Line 456... Line 456...
456
                LD BC,(OSTAT_SECT)
456
                LD BC,(OSTAT_SECT)
457
                LDIR
457
                LDIR
458
                JR LOADFDI5
458
                JR LOADFDI5
459
 
459
 
460
LOADFDI_ERR     POP AF
460
LOADFDI_ERR     POP AF
461
        EVOPORT WIN_P5,RAM_RAMDISK
461
        EVOPORT WIN_P1,RAM_RAMDISK
462
                CALL FORMAT_RAMDISK
462
                CALL FORMAT_RAMDISK
463
                LD IX,LDFDIERROR
463
                LD IX,LDFDIERROR
464
                SCF
464
                SCF
465
                RET
465
                RET
466
 
466
 
467
FORMAT_RAMDISK
467
FORMAT_RAMDISK
468
        EVOPORT WIN_P5,RAM_DATARAMD
468
        EVOPORT WIN_P1,RAM_DATARAMD
469
                LD HL,CPU5
469
                LD HL,CPU1
470
                LD DE,CPU5+1
470
                LD DE,CPU1+1
471
                LD BC,0xFFF
471
                LD BC,0xFFF
472
                LD (HL),L
472
                LD (HL),L
473
                LDIR
473
                LDIR
474
                LD HL,DSKINFO
474
                LD HL,DSKINFO
475
                LD DE,CPU5+0x8E1
475
                LD DE,CPU1+0x8E1
476
                LD BC,DSK_END-DSKINFO
476
                LD BC,DSK_END-DSKINFO
477
                LDIR
477
                LDIR
478
                JP ILD_IMG3
478
                JP ILD_IMG3
479
 
479
 
480
; загрузка следующего сектора заголовка FDI
480
; загрузка следующего сектора заголовка FDI
Line 495... Line 495...
495
 
495
 
496
; монтирование образа
496
; монтирование образа
497
OPEN_MOUNT      LD A,(RREG_A)
497
OPEN_MOUNT      LD A,(RREG_A)
498
OPEN_MOUNT_INT  LD (MOUNT_SYM),A                        ; номер монтирумого диска
498
OPEN_MOUNT_INT  LD (MOUNT_SYM),A                        ; номер монтирумого диска
499
                LD IYL,INTERNAL
499
                LD IYL,INTERNAL
500
        EVOPORT WIN_P5,RAM_MOUNTER                      ; включили страницу с описателями примонтированных файлов
500
        EVOPORT WIN_P1,RAM_MOUNTER                      ; включили страницу с описателями примонтированных файлов
501
                LD A,(MOUNT_SYM)                        ; номер монтирумого диска
501
                LD A,(MOUNT_SYM)                        ; номер монтирумого диска
502
                ADD A,HIGH (BUF_PATHMOUNT+CPU5)
502
                ADD A,HIGH (BUF_PATHMOUNT+CPU1)
503
                LD D,A
503
                LD D,A
504
                LD E,0                                  ; DE=адрес буфера путей примонтированных файлов
504
                LD E,0                                  ; DE=адрес буфера путей примонтированных файлов
505
                LD A,(SETDVOL)                          ; номер текущего устройства
505
                LD A,(DEVMAN_VARS.SETDVOL)              ; номер текущего устройства
506
                ADD A,HIGH (TEK_BUFPATH+CPU5)+4
506
                ADD A,HIGH (BUF_CURRPATH+CPU1)+4
507
                LD H,A
507
                LD H,A
508
                LD L,E                                  ; HL=адрес пути на текущем устройстве
508
                LD L,E                                  ; HL=адрес пути на текущем устройстве
509
                LD BC,0x100
509
                LD BC,0x100
510
                PUSH DE
510
                PUSH DE
511
                LDIR                                    ; перенесли путь
511
                LDIR                                    ; перенесли путь
512
                CALL READ_DIR                           ; прочитали описатель монтируемого файла
512
                CALL READ_DIR                           ; прочитали описатель монтируемого файла
513
                POP DE
513
                POP DE
514
                PUSH HL
514
                PUSH HL
515
OPENMOUNT05     LD A,(DE)
515
.L05            LD A,(DE)
516
                INC DE
516
                INC DE
517
                AND A
517
                AND A
518
                JR NZ,OPENMOUNT05
518
                JR NZ,.L05
519
                DEC DE
519
                DEC DE
520
                LD BC,0x8FF
520
                LD BC,0x8FF
521
OPENMOUNT01     LDI
521
.L01            LDI
522
                LD A,(HL)
522
                LD A,(HL)
523
                CP "!"
523
                CP '!'
524
                JR C,OPENMOUNT03
524
                JR C,.L03
525
                DJNZ OPENMOUNT01
525
                DJNZ .L01
526
                LD A,"."
526
                LD A,'.'
527
                LD (DE),A
527
                LD (DE),A
528
                INC DE
528
                INC DE
529
                JR OPENMOUNT06
529
                JR .L06
530
 
530
 
531
OPENMOUNT03     INC HL
531
.L03            INC HL
532
                DJNZ OPENMOUNT03
532
                DJNZ .L03
533
                DEC HL
533
                DEC HL
534
                LD A,"."
534
                LD A,'.'
535
                LD (DE),A
535
                LD (DE),A
536
                INC DE
536
                INC DE
537
OPENMOUNT06     LD B,3
537
.L06            LD B,3
538
OPENMOUNT02     LDI
538
.L02            LDI
539
                LD A,(HL)
539
                LD A,(HL)
540
                CP "!"
540
                CP '!'
541
                JR C,OPENMOUNT04
541
                JR C,.L04
542
                DJNZ OPENMOUNT02
542
                DJNZ .L02
543
OPENMOUNT04     XOR A
543
.L04            XOR A
544
                LD (DE),A
544
                LD (DE),A
545
                POP HL
545
                POP HL
546
                LD A,(MOUNT_SYM)                        ; номер монтирумого диска
546
                LD A,(MOUNT_SYM)                        ; номер монтирумого диска
547
                PUSH HL
547
                PUSH HL
548
                LD B,A
548
                LD B,A
549
                RRCA
549
                RRCA
550
                RRCA
550
                RRCA
551
                LD E,A
551
                LD E,A
552
                LD A,B
552
                LD A,B
553
                LD D,HIGH (MOUNT_DRIVES)
553
                LD D,HIGH (BUF_MOUNTDRIVES)
554
                LD IXH,D
554
                LD IXH,D
555
                LD IXL,E                                ; IX=адрес описателя примонтированного файла
555
                LD IXL,E                                ; IX=адрес описателя примонтированного файла
556
                LD (IX+_MOUNT_Mount_Num),B              ; номер монтируемого дисковода
556
                LD (IX+_MOUNT_Mount_Num),B              ; номер монтируемого дисковода
557
                LD BC,0x20
557
                LD BC,0x20
558
                LDIR
558
                LDIR
559
                INC A
559
                INC A
560
                LD H,%11110111
560
                LD H,%11110111
561
OPENMOUNT1      RLC H
561
.L1             RLC H
562
                DEC A
562
                DEC A
563
                JR NZ,OPENMOUNT1
563
                JR NZ,.L1
564
                LD A,(CPU2+VIRT_BITS)
564
                LD A,(CPU2+VIRT_BITS)
565
                AND H
565
                AND H
566
                LD L,A
566
                LD L,A
567
                LD A,H
567
                LD A,H
568
                CPL
568
                CPL
569
                OR L
569
                OR L
570
                CALL WR_VIRT_BITS
570
                CALL WR_VIRT_BITS
571
        EVOPORT WIN_P5,RAM_MOUNTER                      ; включили страницу с описателями примонтированных файлов
571
        EVOPORT WIN_P1,RAM_MOUNTER                      ; включили страницу с описателями примонтированных файлов
572
                POP HL
572
                POP HL
573
; HL=адрес описателя монтируемого файла
573
; HL=адрес описателя монтируемого файла
574
IOPEN_MOUNT     LD DE,FILE_EXT
574
IOPEN_MOUNT     LD DE,FILE_EXT
575
                CALL CP_EXT
575
                CALL CP_EXT
576
                LD (IX+_MOUNT_Ext_Type),C               ; тип образа по расширению
576
                LD (IX+_MOUNT_Ext_Type),A               ; тип образа по расширению
577
                CALL ICOM_DEV
577
                CALL ICOM_DEV
578
                DB _KOL_VOL
578
                DB _KOL_VOL
579
                LD (IX+_MOUNT_Vol_Type),A               ; тип раздела
579
                LD (IX+_MOUNT_Vol_Type),A               ; тип раздела
580
                LD (IX+_MOUNT_Vol_Num),D                ; номер выбранного раздела
580
                LD (IX+_MOUNT_Vol_Num),D                ; номер выбранного раздела
581
                LD L,D
581
                LD L,D
582
                LD H,0
582
                LD H,0
583
                ADD HL,HL
583
                ADD HL,HL
584
                ADD HL,HL
584
                ADD HL,HL
585
                ADD HL,HL
585
                ADD HL,HL
586
                LD DE,BUF_TABLVOL                       ; адрес таблицы найденных разделов
586
                LD DE,BUF_VOLUMES;BUF_TABLVOL                   ; адрес таблицы найденных разделов
587
                ADD HL,DE
587
                ADD HL,DE
588
                LD A,(HL)
588
                LD A,(HL)
589
                CP _SD_SDZ
589
                CP _SD_SDZ
590
                LD HL,COMSDZ
590
                LD HL,COMSDZ
591
                JR Z,OPENMOUNT6
591
                JR Z,.L6
592
                CP _SD_SDG
592
                CP _SD_SDG
593
                LD HL,COMSDG
593
                LD HL,COMSDG
594
                JR Z,OPENMOUNT6
594
                JR Z,.L6
595
                LD HL,COMHDDN
595
                LD HL,COMHDDN
596
OPENMOUNT6      LD (IX+_MOUNT_Adr_Mnt_Drv),L
596
.L6             LD (IX+_MOUNT_Adr_Mnt_Drv),L
597
                LD (IX+_MOUNT_Adr_Mnt_Drv+1),H          ; адрес драйвера монтируемого образа
597
                LD (IX+_MOUNT_Adr_Mnt_Drv+1),H          ; адрес драйвера монтируемого образа
598
 
598
 
599
                LD E,(IX+_MOUNT_FileSize+1)
599
                LD E,(IX+_MOUNT_FileSize+1)
600
                LD D,(IX+_MOUNT_FileSize+2)
600
                LD D,(IX+_MOUNT_FileSize+2)
601
                LD L,(IX+_MOUNT_FileSize+3)             ; LDE=размер файла/256
601
                LD L,(IX+_MOUNT_FileSize+3)             ; LDE=размер файла/256
602
                LD A,(SecPerClus)
602
                LD A,(FATVAR.SecPerClus)
603
                LD H,A
603
                LD H,A
604
OPENMOUNT3      SRL L
604
.L3             SRL L
605
                RR D
605
                RR D
606
                RR E
606
                RR E
607
                RRCA
607
                RRCA
608
                JR NC,OPENMOUNT3                        ; LDE=количество кластеров
608
                JR NC,.L3                               ; LDE=количество кластеров
609
; A00 секторов (256 байт) -> 500 секторов (512 байт)
609
; A00 секторов (256 байт) -> 500 секторов (512 байт)
610
; кластер=1 сектор      1280/8 байт     шаг=8
610
; кластер=1 сектор      1280/8 байт     шаг=8
611
; кластер=2 сектора     640/4 байт      шаг=4
611
; кластер=2 сектора     640/4 байт      шаг=4
612
; кластер=4 сектора     320/2 байт      шаг=2
612
; кластер=4 сектора     320/2 байт      шаг=2
613
; кластер=8 секторов    160 байт        шаг=1
613
; кластер=8 секторов    160 байт        шаг=1
Line 616... Line 616...
616
; кластер=64 сектора    20 байт         шаг=1
616
; кластер=64 сектора    20 байт         шаг=1
617
; кластер=128 секторов  10 байт         шаг=1
617
; кластер=128 секторов  10 байт         шаг=1
618
                LD IY,1<<8+INTERNAL
618
                LD IY,1<<8+INTERNAL
619
                LD A,H
619
                LD A,H
620
                CP 8
620
                CP 8
621
                JR NC,OPENMOUNT5
621
                JR NC,.L5
622
                LD IYH,8
622
                LD IYH,8
623
                RRCA
623
                RRCA
624
                JR C,OPENMOUNT5
624
                JR C,.L5
625
                LD IYH,4
625
                LD IYH,4
626
                RRCA
626
                RRCA
627
                JR C,OPENMOUNT5
627
                JR C,.L5
628
                LD IYH,2
628
                LD IYH,2
629
OPENMOUNT5      LD A,IYH
629
.L5             LD A,IYH
630
                LD (IX+_MOUNT_Cls_Step),A               ; шаг кластеров
630
                LD (IX+_MOUNT_Cls_Step),A               ; шаг кластеров
631
                LD A,(IX+_MOUNT_Mount_Num)              ; номер монтируемого дисковода
631
                LD A,(IX+_MOUNT_Mount_Num)              ; номер монтируемого дисковода
632
                ADD A,A
632
                ADD A,A
633
                ADD A,A
633
                ADD A,A
634
                ADD A,HIGH (MOUNT_CLS+CPU5)
634
                ADD A,HIGH (MOUNT_CLS+CPU1)
635
                LD H,A
635
                LD H,A
636
                LD L,0
636
                LD L,0
637
                LD C,(IX+_MOUNT_FstClusHI)
637
                LD C,(IX+_MOUNT_FstClusHI)
638
                LD B,(IX+_MOUNT_FstClusHI+1)
638
                LD B,(IX+_MOUNT_FstClusHI+1)
639
                LD E,(IX+_MOUNT_FstClusLO)
639
                LD E,(IX+_MOUNT_FstClusLO)
640
                LD D,(IX+_MOUNT_FstClusLO+1)
640
                LD D,(IX+_MOUNT_FstClusLO+1)
641
                JR OPENMOUNT9
641
                JR .L9
642
 
642
 
643
OPENMOUNT7      DEC IYH
643
.L7             DEC IYH
644
                JR NZ,OPENMOUNT8
644
                JR NZ,.L8
645
OPENMOUNT9      LD A,(IX+_MOUNT_Cls_Step)               ; шаг кластеров
645
.L9             LD A,(IX+_MOUNT_Cls_Step)               ; шаг кластеров
646
                LD IYH,A
646
                LD IYH,A
647
                LD (HL),E
647
                LD (HL),E
648
                INC H
648
                INC H
649
                LD (HL),D
649
                LD (HL),D
650
                INC H
650
                INC H
Line 653... Line 653...
653
                LD (HL),B
653
                LD (HL),B
654
                DEC H
654
                DEC H
655
                DEC H
655
                DEC H
656
                DEC H
656
                DEC H
657
                INC L
657
                INC L
658
OPENMOUNT8      PUSH HL
658
.L8             PUSH HL
659
                CALL RDFATZP
659
                CALL RDFATZP
660
                CALL LST_CLS
660
                CALL LST_CLS
661
                POP HL
661
                POP HL
662
                JR NC,OPENMOUNT7
662
                JR NC,.L7
663
                RET
663
                RET
664
 
664
 
665
FILE_EXT        DZ "TRD"
665
FILE_EXT        DZ "TRD"
666
 
666
 
667
; чтение/запись примонтированного образа
667
; чтение/запись примонтированного образа
Line 671... Line 671...
671
RDWR_MOUNT      LD A,(RREG_A)
671
RDWR_MOUNT      LD A,(RREG_A)
672
                AND 3
672
                AND 3
673
                RRCA
673
                RRCA
674
                RRCA
674
                RRCA
675
                LD IXL,A
675
                LD IXL,A
676
                LD IXH,HIGH (MOUNT_DRIVES)              ; IX=описатель дисководов A-D
676
                LD IXH,HIGH (BUF_MOUNTDRIVES)           ; IX=описатель дисководов A-D
677
                LD IYL,INTERNAL
677
                LD IYL,INTERNAL
678
        EVOPORT WIN_P5,RAM_FATVARS
678
        EVOPORT WIN_P1,RAM_FATVARS
679
                LD A,(SETDVOL)
679
                LD A,(DEVMAN_VARS.SETDVOL)
680
                ADD A,HIGH (CPU5+BUF_ALLVOL)+4
680
                ADD A,HIGH (CPU1+BUF_ALLVOL)+4
-
 
681
                LD HL,BUF_CURRFATVAR
681
                LD D,A
682
                LD D,A
682
                LD E,0
683
                LD E,0
683
                LD HL,BUF_TEKVOL
684
                LD BC,BUF_CURRFATVAR_Size
684
                LD BC,0x100
-
 
685
                LDIR
685
                LDIR
686
                LD A,(IX+_MOUNT_Vol_Num)
686
                LD A,(IX+_MOUNT_Vol_Num)
687
                ADD A,HIGH (CPU5+BUF_ALLVOL)+4
687
                ADD A,HIGH (CPU1+BUF_ALLVOL)+4
688
                LD H,A
688
                LD H,A
689
                LD L,0
689
                LD L,0
690
                LD DE,BUF_TEKVOL
690
                LD DE,BUF_CURRFATVAR
691
                LD BC,0x100
691
                LD BC,BUF_CURRFATVAR_Size
692
                LDIR
692
                LDIR
693
                EVOPORT WIN_P5,RAM_MOUNTER
693
        EVOPORT WIN_P1,RAM_MOUNTER
694
                LD HL,(GO_DEV)
694
                LD HL,(DEVMAN_VARS.GO_DEV)
695
                LD (IX+_MOUNT_Adr_Sel_Drv),L
695
                LD (IX+_MOUNT_Adr_Sel_Drv),L
696
                LD (IX+_MOUNT_Adr_Sel_Drv+1),H
696
                LD (IX+_MOUNT_Adr_Sel_Drv+1),H
697
                LD L,(IX+_MOUNT_Adr_Mnt_Drv)
697
                LD L,(IX+_MOUNT_Adr_Mnt_Drv)
698
                LD H,(IX+_MOUNT_Adr_Mnt_Drv+1)
698
                LD H,(IX+_MOUNT_Adr_Mnt_Drv+1)
699
                LD (GO_DEV),HL
699
                LD (DEVMAN_VARS.GO_DEV),HL
700
                LD HL,(RREG_E)
700
                LD HL,(RREG_E)
701
                DEC L
701
                DEC L
702
                LD E,L
702
                LD E,L
703
                LD L,H
703
                LD L,H
704
                LD H,0
704
                LD H,0
Line 707... Line 707...
707
                ADD HL,HL
707
                ADD HL,HL
708
                ADD HL,HL
708
                ADD HL,HL
709
                ADD HL,HL
709
                ADD HL,HL
710
                ADD HL,DE                               ; HL=номер сектора в файле (256 байт)
710
                ADD HL,DE                               ; HL=номер сектора в файле (256 байт)
711
                PUSH HL
711
                PUSH HL
712
                LD A,(SecPerClus)
712
                LD A,(FATVAR.SecPerClus)
713
RDWRMOUNT1      SRL H
713
.L1             SRL H
714
                RR L
714
                RR L
715
                RRCA
715
                RRCA
716
                JR NC,RDWRMOUNT1                        ; HL=номер кластера
716
                JR NC,.L1                               ; HL=номер кластера
717
; 0xA00 секторов (256 байт) -> 0x500 секторов (512 байт)
717
; 0xA00 секторов (256 байт) -> 0x500 секторов (512 байт)
718
; кластер=1 сектор      1280/8 байт     шаг=8
718
; кластер=1 сектор      1280/8 байт     шаг=8
719
; кластер=2 сектора     640/4 байт      шаг=4
719
; кластер=2 сектора     640/4 байт      шаг=4
720
; кластер=4 сектора     320/2 байт      шаг=2
720
; кластер=4 сектора     320/2 байт      шаг=2
721
; кластер=8 секторов    160 байт        шаг=1
721
; кластер=8 секторов    160 байт        шаг=1
Line 725... Line 725...
725
; кластер=128 секторов  10 байт         шаг=1
725
; кластер=128 секторов  10 байт         шаг=1
726
                LD A,L
726
                LD A,L
727
                EX AF,AF'
727
                EX AF,AF'
728
                LD A,(IX+_MOUNT_Cls_Step)
728
                LD A,(IX+_MOUNT_Cls_Step)
729
                DEC A
729
                DEC A
730
                JR Z,RDWRMOUNT6
730
                JR Z,.L6
731
                INC A
731
                INC A
732
                ADD HL,HL
732
                ADD HL,HL
733
RDWRMOUNT2      SRL H
733
.L2             SRL H
734
                RR L
734
                RR L
735
                RRCA
735
                RRCA
736
                JR NC,RDWRMOUNT2
736
                JR NC,.L2
737
RDWRMOUNT6      LD A,(RREG_A)                           ; номер дисковода
737
.L6             LD A,(RREG_A)                           ; номер дисковода
738
                ADD A,A
738
                ADD A,A
739
                ADD A,A
739
                ADD A,A
740
                ADD A,HIGH (MOUNT_CLS+CPU5)
740
                ADD A,HIGH (MOUNT_CLS+CPU1)
741
                LD H,A
741
                LD H,A
742
                LD E,(HL)
742
                LD E,(HL)
743
                INC H
743
                INC H
744
                LD D,(HL)
744
                LD D,(HL)
745
                INC H
745
                INC H
Line 747... Line 747...
747
                INC H
747
                INC H
748
                LD B,(HL)                               ; BCDE=номер кластера
748
                LD B,(HL)                               ; BCDE=номер кластера
749
; TODO: проверка номера кластера на 0 и 0xFFFFFFFF и возврат ошибки чтения/записи по надобности
749
; TODO: проверка номера кластера на 0 и 0xFFFFFFFF и возврат ошибки чтения/записи по надобности
750
                LD A,(IX+_MOUNT_Cls_Step)               ; шаг кластеров
750
                LD A,(IX+_MOUNT_Cls_Step)               ; шаг кластеров
751
                DEC A
751
                DEC A
752
                JR Z,RDWRMOUNT3                         ; шаг кластеров =1
752
                JR Z,.L3                                ; шаг кластеров =1
753
                LD B,A                                  ; маска смещения в таблице кластеров
753
                LD B,A                                  ; маска смещения в таблице кластеров
754
                EX AF,AF'
754
                EX AF,AF'
755
                AND B                                   ; A=смещение в таблице кластеров
755
                AND B                                   ; A=смещение в таблице кластеров
756
                LD B,(HL)                               ; восстановление номера кластера
756
                LD B,(HL)                               ; восстановление номера кластера
757
                JR Z,RDWRMOUNT3
757
                JR Z,.L3
758
RDWRMOUNT4      PUSH AF
758
.L4             PUSH AF
759
                CALL RDFATZP
759
                CALL RDFATZP
760
                POP AF
760
                POP AF
761
                DEC A
761
                DEC A
762
                JR NZ,RDWRMOUNT4
762
                JR NZ,.L4
763
RDWRMOUNT3      CALL REALSEC                            ; конверсия номера кластера в номер сектора
763
.L3             CALL REALSEC                            ; конверсия номера кластера в номер сектора
764
                POP HL
764
                POP HL
765
                PUSH HL
765
                PUSH HL
766
                SRL L
766
                SRL L
767
                LD A,(SecPerClus)
767
                LD A,(FATVAR.SecPerClus)
768
                DEC A
768
                DEC A
769
                JR Z,RDWRMOUNT5
769
                JR Z,.L5
770
                AND L
770
                AND L
771
                LD L,A
771
                LD L,A
772
                LD H,0
772
                LD H,0
773
                ADD HL,DE
773
                ADD HL,DE
774
                EX DE,HL
774
                EX DE,HL
775
                LD HL,0
775
                LD HL,0
776
                ADC HL,BC
776
                ADC HL,BC
777
                LD B,H
777
                LD B,H
778
                LD C,L
778
                LD C,L
779
RDWRMOUNT5      CALL LOADLST                            ; чтение сектора в буфер
779
.L5             CALL LOADLST                            ; чтение сектора в буфер
780
                POP BC
780
                POP BC
781
                LD A,C
781
                LD A,C
782
                AND 1
782
                AND 1
783
                ADD A,H
783
                ADD A,H
784
                LD H,A
784
                LD H,A
Line 790... Line 790...
790
                CALL NZ,LSTSAVE
790
                CALL NZ,LSTSAVE
791
                LD HL,RREG_H
791
                LD HL,RREG_H
792
                INC (HL)
792
                INC (HL)
793
                LD L,(IX+_MOUNT_Adr_Sel_Drv)
793
                LD L,(IX+_MOUNT_Adr_Sel_Drv)
794
                LD H,(IX+_MOUNT_Adr_Sel_Drv+1)
794
                LD H,(IX+_MOUNT_Adr_Sel_Drv+1)
795
                LD (GO_DEV),HL
795
                LD (DEVMAN_VARS.GO_DEV),HL
796
        EVOPORT WIN_P5,RAM_FATVARS
796
        EVOPORT WIN_P1,RAM_FATVARS
797
                LD A,(SETDVOL)
797
                LD A,(DEVMAN_VARS.SETDVOL)
798
                ADD A,HIGH (CPU5+BUF_ALLVOL)+4
798
                ADD A,HIGH (CPU1+BUF_ALLVOL)+4
799
                LD H,A
799
                LD H,A
800
                LD DE,BUF_TEKVOL
800
                LD DE,BUF_CURRFATVAR
801
                LD BC,0x100
801
                LD BC,0x100
802
                LD L,C
802
                LD L,C
803
                LDIR
803
                LDIR
804
                LD (NumSec2Buf + 2),HL
804
                LD (FATVAR.NumSec2Buf + 2),HL
805
                RET
805
                RET
806
 
806
 
807
LDIR_SEC        EX DE,HL                                ; адрес буфера сохранили в DE
807
LDIR_SEC        EX DE,HL                                ; адрес буфера сохранили в DE
808
                LD HL,(RREG_L)                          ; HL=адрес в основной памяти
808
                LD HL,(RREG_L)                          ; HL=адрес в основной памяти
809
                CALL RESETUP_WINS                       ; переконфигурация окон проецирования
809
                CALL RESETUP_WINS                       ; переконфигурация окон проецирования
810
                ADD HL,BC                               ; изменили адрес чтения/записи
810
                ADD HL,BC                               ; изменили адрес чтения/записи
811
                EX DE,HL                                ; HL=адрес буфера, DE=адрес в основной памяти
811
                EX DE,HL                                ; HL=адрес буфера, DE=адрес в основной памяти
812
                LD A,(RREG_A-CPU5)                      ; чтение или запись
812
                LD A,(RREG_A-CPU1)                      ; чтение или запись
813
                AND 0x80
813
                AND 0x80
814
                JR Z,LDIRSEC6
814
                JR Z,LDIRSEC6
815
                EX DE,HL                                ; для записи меняем напраление переноса
815
                EX DE,HL                                ; для записи меняем напраление переноса
816
LDIRSEC6        LD BC,0x100
816
LDIRSEC6        LD BC,0x100
817
                LDIR
817
                LDIR
818
                LD HL,CPU5
818
                LD HL,CPU1
819
                ADD HL,SP
819
                ADD HL,SP
820
                LD SP,HL                                ; вернули адрес стека в окно 2
820
                LD SP,HL                                ; вернули адрес стека в окно 2
821
        ATMPORT WIN_A3,0x7F                             ; убрали возможную зависимость в окне 3 от порта 7FFD
821
        ATMPORT WIN_A3,0x7F                             ; убрали возможную зависимость в окне 3 от порта 7FFD
822
                LD B,HIGH (WIN_A6)
822
                LD B,HIGH (WIN_A2)
823
                OUT (C),A                               ; убрали возможную зависимость в окне 2 от порта 7FFD
823
                OUT (C),A                               ; убрали возможную зависимость в окне 2 от порта 7FFD
824
                XOR A
824
                XOR A
825
                LD B,HIGH (WIN_P6)
825
                LD B,HIGH (WIN_P2)
826
                OUT (C),A                               ; вернули страницу переменных в окно 2
826
                OUT (C),A                               ; вернули страницу переменных в окно 2
827
                RET
827
                RET
828
 
828
 
829
TXT_MOUNTER     DZ "IMAGE.MNT"                          ; имя для поиска текстового файла с указанием к монтированию TRD
829
TXT_MOUNTER     DZ "IMAGE.MNT"                          ; имя для поиска текстового файла с указанием к монтированию TRD
830
ETXT_MOUNTER
830
ETXT_MOUNTER
831
 
831
 
832
FIND_MOUNTED    LD A,(KOLDVOL)
832
FIND_MOUNTED    LD A,(DEVMAN_VARS.KOLDVOL)
833
                AND A
833
                AND A
834
                JR NZ,FINDMNTD09
834
                JR NZ,.L09
835
                LD IX,MOUNT_DRIVES
835
                LD IX,BUF_MOUNTDRIVES
836
                LD DE,0x40
836
                LD DE,0x40
837
                LD B,4
837
                LD B,4
838
FINDMNTD10      LD (IX+_MOUNT_Name),D
838
.L10            LD (IX+_MOUNT_Name),D
839
                ADD IX,DE
839
                ADD IX,DE
840
                DJNZ FINDMNTD10
840
                DJNZ .L10
841
                RET
841
                RET
842
 
842
 
843
FINDMNTD09      LD A,(SETDVOL)
843
.L09            LD A,(DEVMAN_VARS.SETDVOL)
844
                LD (SAVE_TEK_VOL),A                     ; сохранили текущее устройство
844
                LD (DEVMAN_VARS.SAVE_TEK_VOL),A         ; сохранили текущее устройство
845
                CALL SAVE_FNDVOL                        ; сохранили переменные текущего устройства
845
                CALL SAVE_FNDVOL                        ; сохранили переменные текущего устройства
846
                LD H,CMOS_BYTE_01
846
                LD H,CMOS.BYTE_01
847
        ROMCALL READCMOS,ROM_RST82
847
        ROMCALL READCMOS,ROM_RST82
848
                LD A,L
848
                LD A,L
849
                AND M_AUTOMOUNT                         ; определение нужно ли искать файл IMAGE.MNT
849
                AND CMOS_EC.M_AUTOMOUNT                         ; определение нужно ли искать файл IMAGE.MNT
850
                JP Z,FINDMNTD01
850
                JP Z,.L01
851
; ищем файл IMAGE.MNT для автомонтирования
851
; ищем файл IMAGE.MNT для автомонтирования
852
                LD IYL,INTERNAL
852
                LD IYL,INTERNAL
853
                LD A,(KOLDVOL)
853
                LD A,(DEVMAN_VARS.KOLDVOL)
854
                DEC A                                   ; искать будем на последнем найденном разделе
854
                DEC A                                   ; искать будем на последнем найденном разделе
855
                CALL SET_VOL_MNT                        ; переключилсь на выбранное устройство
855
                CALL SET_VOL_MNT                        ; переключилсь на выбранное устройство
856
                LD HL,(RootDIRCluster)
856
                LD HL,(FATVAR.RootDIRCluster)
857
                LD (CurrentDIRCluster),HL
857
                LD (FATVAR.CurrentDIRCluster),HL
858
                LD HL,(RootDIRCluster + 2)
858
                LD HL,(FATVAR.RootDIRCluster + 2)
859
                LD (CurrentDIRCluster + 2),HL           ; выбрали корневой каталог выбранного устройства
859
                LD (FATVAR.CurrentDIRCluster + 2),HL            ; выбрали корневой каталог выбранного устройства
860
                CALL INIRTSC                            ; инициализировали его переменные на ROOTDIR
860
                CALL INIRTSC                            ; инициализировали его переменные на ROOTDIR
861
                LD HL,TXT_MOUNTER
861
                LD HL,TXT_MOUNTER
862
                LD DE,BUF_256
862
                LD DE,BUF_MOVE256;BUF_256
863
                LD BC,ETXT_MOUNTER-TXT_MOUNTER
863
                LD BC,ETXT_MOUNTER-TXT_MOUNTER
864
                LDIR                                    ; перенесли имя файла для поиска
864
                LDIR                                    ; перенесли имя файла для поиска
865
                CALL ICOM_FAT
865
                CALL ICOM_FAT
866
                DB _FIND_NAME
866
                DB _FIND_NAME
867
                JP C,FINDMNTD01                         ; файл IMAGE.MNT не найден
867
                JP C,.L01                               ; файл IMAGE.MNT не найден
868
; файл найден
868
; файл найден
869
                CALL OPEN_FILE                          ; открываем файл
869
                CALL OPEN_FILE                          ; открываем файл
870
                LD HL,FILE_SRC+0x1F
870
                LD HL,FATVAR.FILE_SRC+0x1F
871
                LD A,(HL)
871
                LD A,(HL)
872
                DEC HL
872
                DEC HL
873
                OR (HL)
873
                OR (HL)
874
                JP NZ,FINDMNTD01                        ; файл не должен быть более 512 байт
874
                JP NZ,.L01                      ; файл не должен быть более 512 байт
875
                DEC HL
875
                DEC HL
876
                LD A,(HL)
876
                LD A,(HL)
877
                CP 2
877
                CP 2
878
                JP NC,FINDMNTD01                        ; файл не должен быть более 512 байт
878
                JP NC,.L01                      ; файл не должен быть более 512 байт
879
                LD A,1                                  ; читать будем 1 сектор из найденного файла
879
                LD A,1                                  ; читать будем 1 сектор из найденного файла
880
                LD B,(HL)
880
                LD B,(HL)
881
                DEC HL
881
                DEC HL
882
                LD C,(HL)                               ; взяли длину файла в байтах
882
                LD C,(HL)                               ; взяли длину файла в байтах
883
                PUSH BC                                 ; сохранили для дальнейшего использования
883
                PUSH BC                                 ; сохранили для дальнейшего использования
884
                LD IYL,INTERNAL
884
                LD IYL,INTERNAL
885
                LD HL,OFFSET_BUFSYM+CPU6
885
                LD HL,OFFSET_BUFSYM+CPU2
886
                PUSH HL
886
                PUSH HL
887
                CALL READ_FILE                          ; прочитали 1 сектор из файла
887
                CALL READ_FILE                          ; прочитали 1 сектор из файла
888
        EVOPORT WIN_P5,RAM_MOUNTER
888
        EVOPORT WIN_P1,RAM_MOUNTER
889
                POP HL
889
                POP HL
890
                POP BC
890
                POP BC
891
                ADD HL,BC
891
                ADD HL,BC
892
                LD (HL),0                               ; установили признак конца файла в 0
892
                LD (HL),0                               ; установили признак конца файла в 0
893
                SBC HL,BC
893
                SBC HL,BC
894
FINDMNTD04      LD A,(HL)
894
.L04            LD A,(HL)
895
                AND A
895
                AND A
896
                JR Z,FINDMNTD01                         ; выходим если файл кончился
896
                JR Z,.L01                               ; выходим если файл кончился
897
                INC HL
897
                INC HL
898
                CP "!"
898
                CP '!'
899
                JR C,FINDMNTD04                         ; если строка кончилась переносим эту строку в буфер поиска 
899
                JR C,.L04                               ; если строка кончилась переносим эту строку в буфер поиска 
900
                DEC HL
900
                DEC HL
901
                PUSH HL
901
                PUSH HL
902
                INC HL
902
                INC HL
903
                CP "a"                                  ; первый символ строки буква устройства
903
                CP 'a'                                  ; первый символ строки буква устройства
904
                JR C,FINDMNTD06                         ; должна быть только символ от "A"
904
                JR C,.L06                               ; должна быть только символ от "A"
905
                CP 'z'+1
905
                CP 'z'+1
906
                JR NC,FINDMNTD06                        ; до "Z"
906
                JR NC,.L06                              ; до "Z"
907
                AND 0xDF                                ; перевели букву устройства в верхний регистр, если нужно
907
                AND 0xDF                                ; перевели букву устройства в верхний регистр, если нужно
908
FINDMNTD06      SUB "E"                                 ; FAT устройства начинаются с буквы "E"
908
.L06            SUB 'E'                                 ; FAT устройства начинаются с буквы "E"
909
                JR C,FINDMNTD02
909
                JR C,.L02
910
                EXX
910
                EXX
911
                LD C,A                                  ; номер устройства где искать файл
911
                LD C,A                                  ; номер устройства где искать файл
912
                LD A,(KOLDVOL)                          ; количество найденных разделов
912
                LD A,(DEVMAN_VARS.KOLDVOL)              ; количество найденных разделов
913
                CP C
913
                CP C
914
                EXX
914
                EXX
915
                JR C,FINDMNTD02
915
                JR C,.L02
916
                LD A,(HL)
916
                LD A,(HL)
917
                INC HL
917
                INC HL
918
                CP ":"                                  ; разделитель обязателен
918
                CP ':'                                  ; разделитель обязателен
919
                JR NZ,FINDMNTD02
919
                JR NZ,.L02
920
                LD A,(HL)
920
                LD A,(HL)
921
                INC HL
921
                INC HL
922
                CP "/"                                  ; разделитель обязателен
922
                CP '/'                                  ; разделитель обязателен
923
                JR NZ,FINDMNTD02
923
                JR NZ,.L02
924
FINDMNTD07      LD A,(HL)
924
.L07            LD A,(HL)
925
                INC HL
925
                INC HL
926
                CP "!"
926
                CP '!'
927
                JR NC,FINDMNTD07                        ; ищем конец строки
927
                JR NC,.L07                              ; ищем конец строки
928
                LD A,(HL)                               ; буква дисковода на которую монтировать
928
                LD A,(HL)                               ; буква дисковода на которую монтировать
929
                INC HL
929
                INC HL
930
                CP "a"
930
                CP 'a'
931
                JR C,FINDMNTD08
931
                JR C,.L08
932
                CP 'z'+1
932
                CP 'z'+1
933
                JR NC,FINDMNTD08
933
                JR NC,.L08
934
                AND 0xDF                                ; переводи в верхний регистр, если нужно
934
                AND 0xDF                                ; переводи в верхний регистр, если нужно
935
FINDMNTD08      SUB "A"
935
.L08            SUB 'A'
936
                JR C,FINDMNTD02
936
                JR C,.L02
937
                CP 4
937
                CP 4
938
                JR NC,FINDMNTD02
938
                JR NC,.L02
939
                EXX
939
                EXX
940
                LD B,A                                  ; номер дисковода на который монтировать
940
                LD B,A                                  ; номер дисковода на который монтировать
941
                EXX
941
                EXX
942
                LD A,(HL)
942
                LD A,(HL)
943
                INC HL
943
                INC HL
944
                CP ":"
944
                CP ':'
945
                JR NZ,FINDMNTD02
945
                JR NZ,.L02
946
                LD D,H
946
                LD D,H
947
                LD E,L
947
                LD E,L
948
                EX (SP),HL
948
                EX (SP),HL
949
                EX DE,HL
949
                EX DE,HL
950
                SCF
950
                SCF
Line 953... Line 953...
953
                LD C,L
953
                LD C,L
954
                EX DE,HL
954
                EX DE,HL
955
                EXX
955
                EXX
956
                LD A,B
956
                LD A,B
957
                EXX
957
                EXX
958
                ADD A,HIGH (BUF_PATHMOUNT+CPU5)
958
                ADD A,HIGH (BUF_PATHMOUNT+CPU1)
959
                LD D,A
959
                LD D,A
960
                LD E,0                                  ; DE=адрес буфера текстовой строки монтируемого дисковода
960
                LD E,0                                  ; DE=адрес буфера текстовой строки монтируемого дисковода
961
                DEC BC
961
                DEC BC
962
                DEC BC
962
                DEC BC
963
                LDIR                                    ; перенесли строку
963
                LDIR                                    ; перенесли строку
964
                XOR A
964
                XOR A
965
                LD (DE),A                               ; принудительное завершение строки монтирования
965
                LD (DE),A                               ; принудительное завершение строки монтирования
966
                POP HL
966
                POP HL
967
                JR FINDMNTD04
967
                JR .L04
968
 
968
 
969
FINDMNTD02      LD A,(HL)
969
.L02            LD A,(HL)
970
                INC HL
970
                INC HL
971
                AND A
971
                AND A
972
                JR Z,FINDMNTD01
972
                JR Z,.L01
973
                CP " "
973
                CP ' '
974
                JR NC,FINDMNTD02
974
                JR NC,.L02
975
                POP DE
975
                POP DE
976
                JR FINDMNTD04
976
                JR .L04
977
 
977
 
978
FINDMNTD01
978
.L01
979
        EVOPORT WIN_P5,RAM_MOUNTER
979
        EVOPORT WIN_P1,RAM_MOUNTER
980
                LD BC,0x400
980
                LD BC,0x400
981
                LD IX,MOUNT_DRIVES                      ; буфер описателей монтируемых файлов
981
                LD IX,BUF_MOUNTDRIVES                   ; буфер описателей монтируемых файлов
982
FINDMNTD2       PUSH BC
982
.L2             PUSH BC
983
                CALL FINDMNTD0                          ; ищем указанный файл для монтирования
983
                CALL FINDMNTD0                          ; ищем указанный файл для монтирования
984
                JR NC,FINDMNT5
984
                JR NC,.L5
985
                LD (IX+_MOUNT_Name),0                   ; если файл не найден, то принудительно демонтируем образ
985
                LD (IX+_MOUNT_Name),0                   ; если файл не найден, то принудительно демонтируем образ
986
FINDMNT5        LD BC,0x40
986
.L5             LD BC,0x40
987
                ADD IX,BC                               ; следующий описатель монтируемого файла
987
                ADD IX,BC                               ; следующий описатель монтируемого файла
988
                POP BC
988
                POP BC
989
                DJNZ FINDMNTD2
989
                DJNZ .L2
990
                LD A,IYH
990
                LD A,IYH
991
                AND 0xF0                                ; старшие 4 бита примонтированные файлы
991
                AND 0xF0                                ; старшие 4 бита примонтированные файлы
992
                LD D,A
992
                LD D,A
993
                LD A,(CPU2+VIRT_BITS)
993
                LD A,(CPU2+VIRT_BITS)
994
                AND 0x0F                                ; младшие 4 бита реальный и виртуальные приводы
994
                AND 0x0F                                ; младшие 4 бита реальный и виртуальные приводы
995
                OR D                                    ; совместили для записи обратно
995
                OR D                                    ; совместили для записи обратно
996
                CALL WR_VIRT_BITS
996
                CALL WR_VIRT_BITS
997
                LD A,(SAVE_TEK_VOL)
997
                LD A,(DEVMAN_VARS.SAVE_TEK_VOL)
998
                PUSH IY
998
                PUSH IY
999
                LD IYL,INTERNAL
999
                LD IYL,INTERNAL
1000
                CALL SET_VOL_MNT                        ; восстановили текущее выбранное устройство
1000
                CALL SET_VOL_MNT                        ; восстановили текущее выбранное устройство
1001
                CALL INIRTSC                            ; проинитили его переменные
1001
                CALL INIRTSC                            ; проинитили его переменные
1002
                POP IY
1002
                POP IY
Line 1027... Line 1027...
1027
                LD IYH,A
1027
                LD IYH,A
1028
                RET
1028
                RET
1029
 
1029
 
1030
; сохранение текущего пути
1030
; сохранение текущего пути
1031
STORE_PATH      PUSH AF
1031
STORE_PATH      PUSH AF
1032
        EVOPORT WIN_P5,RAM_MOUNTER
1032
        EVOPORT WIN_P1,RAM_MOUNTER
1033
                LD A,(SETDVOL)                          ; номер текущего устройства
1033
                LD A,(DEVMAN_VARS.SETDVOL)              ; номер текущего устройства
1034
                ADD A,HIGH (TEK_BUFPATH+CPU5)+4         ; +старший байт адреса пути
1034
                ADD A,HIGH (BUF_CURRPATH+CPU1)+4        ; +старший байт адреса пути
1035
                LD H,A
1035
                LD H,A
1036
                LD DE,BUF_256
1036
                LD DE,BUF_MOVE256
1037
                LD BC,0x100
1037
                LD BC,0x100
1038
                LD L,C
1038
                LD L,C
1039
                LDIR
1039
                LDIR
1040
STOREPATH1      POP AF
1040
STOREPATH1      POP AF
1041
                RET
1041
                RET
1042
 
1042
 
1043
; восстановление текущего пути
1043
; восстановление текущего пути
1044
RESTORE_PATH    PUSH AF
1044
RESTORE_PATH    PUSH AF
1045
        EVOPORT WIN_P5,RAM_MOUNTER
1045
        EVOPORT WIN_P1,RAM_MOUNTER
1046
                LD A,(SETDVOL)                          ; номер текущего устройства
1046
                LD A,(DEVMAN_VARS.SETDVOL)              ; номер текущего устройства
1047
                ADD A,HIGH (TEK_BUFPATH+CPU5)+4         ; +старший байт адреса пути
1047
                ADD A,HIGH (BUF_CURRPATH+CPU1)+4        ; +старший байт адреса пути
1048
                LD D,A
1048
                LD D,A
1049
                LD HL,BUF_256
1049
                LD HL,BUF_MOVE256
1050
                LD BC,0x100
1050
                LD BC,0x100
1051
                LD E,C
1051
                LD E,C
1052
                LDIR
1052
                LDIR
1053
RESTOREPATH1    POP AF
1053
RESTOREPATH1    POP AF
1054
                RET
1054
                RET
Line 1056... Line 1056...
1056
; поиск монтируемого файла
1056
; поиск монтируемого файла
1057
FINDMNTD1       LD A,IXL
1057
FINDMNTD1       LD A,IXL
1058
                RLCA
1058
                RLCA
1059
                RLCA
1059
                RLCA
1060
                AND 3
1060
                AND 3
1061
                ADD A,HIGH (BUF_PATHMOUNT+CPU5)
1061
                ADD A,HIGH (BUF_PATHMOUNT+CPU1)
1062
                LD D,A
1062
                LD D,A
1063
                LD E,0                                  ; DE=адрес буфера строки описателя монтирумого файла
1063
                LD E,0                                  ; DE=адрес буфера строки описателя монтирумого файла
1064
                LD A,(DE)                               ; взяли букву устройства где файл искать
1064
                LD A,(DE)                               ; взяли букву устройства где файл искать
1065
                INC DE
1065
                INC DE
1066
                INC DE
1066
                INC DE
1067
                INC DE
1067
                INC DE
1068
                AND A
1068
                AND A
1069
                SCF
1069
                SCF
1070
                RET Z
1070
                RET Z
1071
                SUB "E"                                 ; конверсия буквы в номер
1071
                SUB 'E'                                 ; конверсия буквы в номер
1072
                PUSH DE
1072
                PUSH DE
1073
                CALL SET_VOL_MNT                        ; переключились на это устройство
1073
                CALL SET_VOL_MNT                        ; переключились на это устройство
1074
                CALL STORE_PATH                         ; сохранили текущий путь
1074
                CALL STORE_PATH                         ; сохранили текущий путь
1075
                LD HL,(RootDIRCluster)
1075
                LD HL,(FATVAR.RootDIRCluster)
1076
                LD (CurrentDIRCluster),HL
1076
                LD (FATVAR.CurrentDIRCluster),HL
1077
                LD HL,(RootDIRCluster + 2)
1077
                LD HL,(FATVAR.RootDIRCluster + 2)
1078
                LD (CurrentDIRCluster + 2),HL           ; перешли в корень устройства
1078
                LD (FATVAR.CurrentDIRCluster + 2),HL    ; перешли в корень устройства
1079
                CALL INIRTSC                            ; инициализация его переменных
1079
                CALL INIRTSC                            ; инициализация его переменных
1080
        EVOPORT WIN_P5,RAM_MOUNTER
1080
        EVOPORT WIN_P1,RAM_MOUNTER
1081
                POP HL
1081
                POP HL
1082
                CALL FNDBUF                             ; распаковка текстовой строки
1082
                CALL FNDBUF                             ; распаковка текстовой строки
1083
FINDMNTD13      PUSH HL
1083
FINDMNTD13      PUSH HL
1084
                CALL POSTF02                            ; сброс текущего номера файла в 0
1084
                CALL POSTF02                            ; сброс текущего номера файла в 0
1085
                CALL FINDMNTD3                          ; поиск в текущей директории
1085
                CALL FINDMNTD3                          ; поиск в текущей директории
1086
                POP DE
1086
                POP DE
1087
                JP C,RESTORE_PATH                       ; восстановили текущий путь
1087
                JP C,RESTORE_PATH                       ; восстановили текущий путь
1088
                LD BC,0x0B
1088
                LD BC,_DIR_Attr
1089
                ADD HL,BC
1089
                ADD HL,BC
1090
                LD A,(HL)
1090
                LD A,(HL)
1091
                SBC HL,BC
1091
                SBC HL,BC
1092
                AND 0x10
1092
                AND M_DIR_Directory
1093
                JR Z,FINDMNTD23                         ; если это файл найден, то он найден
1093
                JR Z,FINDMNTD23                         ; если это файл найден, то он найден
1094
                PUSH DE
1094
                PUSH DE
1095
                CALL ENTER_DIR                          ; иначе входим в директорию
1095
                CALL ENTER_DIR                          ; иначе входим в директорию
1096
                CALL POSTF02                            ; сброс текущего ноиера файла в 0
1096
                CALL POSTF02                            ; сброс текущего ноиера файла в 0
1097
                POP HL
1097
                POP HL
Line 1129... Line 1129...
1129
                JR NZ,FINDMNTD4
1129
                JR NZ,FINDMNTD4
1130
                SCF
1130
                SCF
1131
                RET
1131
                RET
1132
 
1132
 
1133
; получение описателя файла загруженного в рамдиск
1133
; получение описателя файла загруженного в рамдиск
1134
REST_NAMELOAD   LD HL,NAME_RAMDISK-CPU6
1134
REST_NAMELOAD   LD HL,NAME_RAMDISK-CPU2
1135
                LD DE,(RREG_L)
1135
                LD DE,(RREG_L)
1136
                LD BC,0x20
1136
                LD BC,0x20
1137
                JP LDIR_BYTES
1137
                JP LDIR_BYTES
1138
 
1138
 
1139
;STOR_NAMELOAD  LD HL,(RREG_L)
1139
;STOR_NAMELOAD  LD HL,(RREG_L)
1140
;               LD DE,NAME_RAMDISK-CPU6
1140
;               LD DE,NAME_RAMDISK-CPU2
1141
;               LD BC,0x20
1141
;               LD BC,0x20
1142
;               JP LDIR_BYTES
1142
;               JP LDIR_BYTES
1143
 
1143
 
1144
GET_MOUNTED
1144
GET_MOUNTED
1145
        EVOPORT WIN_P5,RAM_MOUNTER
1145
        EVOPORT WIN_P1,RAM_MOUNTER
1146
                LD HL,MOUNT_DRIVES-CPU6
1146
                LD HL,BUF_MOUNTDRIVES & 0x3FFF
1147
                LD DE,(RREG_L)
1147
                LD DE,(RREG_L)
1148
                LD BC,0x100
1148
                LD BC,0x100
1149
                JP LDIR_BYTES
1149
                JP LDIR_BYTES
1150
 
1150
 
1151
CMP_DRIVE
1151
CMP_DRIVE
1152
        EVOPORT WIN_P5,RAM_MOUNTER
1152
        EVOPORT WIN_P1,RAM_MOUNTER
1153
                LD A,(RREG_A)
1153
                LD A,(RREG_A)
1154
                AND 3
1154
                AND 3
1155
                RLCA
1155
                RLCA
1156
                RLCA
1156
                RLCA
1157
                LD L,A
1157
                LD L,A
1158
                LD H,HIGH (MOUNT_DRIVES)
1158
                LD H,HIGH (BUF_MOUNTDRIVES)
1159
                LD A,(HL)
1159
                LD A,(HL)
1160
                AND A                                   ; если не примонтирован,
1160
                AND A                                   ; если не примонтирован,
1161
                SCF                                     ; то диска нет
1161
                SCF                                     ; то диска нет
1162
                JR Z,CMP_DRIVE1
1162
                JR Z,CMP_DRIVE1
1163
                XOR A
1163
                XOR A
Line 1166... Line 1166...
1166
                LD (RREG_F),HL
1166
                LD (RREG_F),HL
1167
                RET
1167
                RET
1168
 
1168
 
1169
; демонтирование образа
1169
; демонтирование образа
1170
CLOSEMOUNT
1170
CLOSEMOUNT
1171
        EVOPORT WIN_P5,RAM_MOUNTER
1171
        EVOPORT WIN_P1,RAM_MOUNTER
1172
                LD A,(RREG_A)
1172
                LD A,(RREG_A)
1173
                LD B,A
1173
                LD B,A
1174
                RRCA
1174
                RRCA
1175
                RRCA
1175
                RRCA
1176
                LD L,A
1176
                LD L,A
1177
                LD H,HIGH (MOUNT_DRIVES)
1177
                LD H,HIGH (BUF_MOUNTDRIVES)
1178
                LD (HL),0
1178
                LD (HL),0
1179
                LD A,B
1179
                LD A,B
1180
                ADD A,HIGH (BUF_PATHMOUNT+CPU5)
1180
                ADD A,HIGH (BUF_PATHMOUNT+CPU1)
1181
                LD H,A
1181
                LD H,A
1182
                LD L,0
1182
                LD L,0
1183
                LD (HL),L
1183
                LD (HL),L
1184
                INC B
1184
                INC B
1185
                LD A,%11110111
1185
                LD A,%11110111
Line 1194... Line 1194...
1194
; HL = адрес текстовой строки
1194
; HL = адрес текстовой строки
1195
FNDBUF          LD BC,0x0802
1195
FNDBUF          LD BC,0x0802
1196
                LD DE,FB_EXT
1196
                LD DE,FB_EXT
1197
FNDBUF4         LD A,(HL)
1197
FNDBUF4         LD A,(HL)
1198
                INC HL
1198
                INC HL
1199
                CP "."
1199
                CP '.'
1200
                JR Z,FNDBUF2
1200
                JR Z,FNDBUF2
1201
                CP "/"
1201
                CP '/'
1202
                JR Z,FNDBUF5
1202
                JR Z,FNDBUF5
1203
                LD (DE),A
1203
                LD (DE),A
1204
                INC DE
1204
                INC DE
1205
                DJNZ FNDBUF4
1205
                DJNZ FNDBUF4
1206
                LD A,(HL)
1206
                LD A,(HL)
Line 1213... Line 1213...
1213
                AND A
1213
                AND A
1214
                RET Z
1214
                RET Z
1215
FNDBUF2         LD A,B
1215
FNDBUF2         LD A,B
1216
                AND A
1216
                AND A
1217
                JR Z,FNDBUF3
1217
                JR Z,FNDBUF3
1218
                LD A," "
1218
                LD A,' '
1219
                LD (DE),A
1219
                LD (DE),A
1220
                INC DE
1220
                INC DE
1221
                DJNZ $-2
1221
                DJNZ $-2
1222
FNDBUF3         LD B,3
1222
FNDBUF3         LD B,3
1223
                DEC C
1223
                DEC C
1224
                DEC HL
1224
                DEC HL
1225
                LD A,(HL)
1225
                LD A,(HL)
1226
                CP "/"
1226
                CP '/'
1227
                JR Z,FNDBUF4
1227
                JR Z,FNDBUF4
1228
                INC HL
1228
                INC HL
1229
                JR FNDBUF4
1229
                JR FNDBUF4
1230
 
1230
 
1231
; получение текущего состояния битов смонтированных дисководов и рамдиска 
1231
; получение текущего состояния битов смонтированных дисководов и рамдиска 
1232
GET_VIRT_BITS   LD HL,MOUNT_DRIVES
1232
GET_VIRT_BITS   LD HL,BUF_MOUNTDRIVES
1233
                LD E,0                          ; здесь будут биты смонтированных дисководов
1233
                LD E,0                          ; здесь будут биты смонтированных дисководов
1234
.L2             LD A,(HL)
1234
.L2             LD A,(HL)
1235
                AND A
1235
                AND A
1236
                JR Z,.L1
1236
                JR Z,.L1
1237
                SET 4,E
1237
                SET 4,E
Line 1269... Line 1269...
1269
                OR L
1269
                OR L
1270
                LD (B_PORT_VIRT),A
1270
                LD (B_PORT_VIRT),A
1271
        EVOPORT WIN_P2,RAM_EVODOS
1271
        EVOPORT WIN_P2,RAM_EVODOS
1272
                LD A,H
1272
                LD A,H
1273
                LD (CPU2 + COPY_VIRT_BITS),A    ; копия переменной флагов для эмуля
1273
                LD (CPU2 + COPY_VIRT_BITS),A    ; копия переменной флагов для эмуля
1274
                LD A,VIRT_REAL_DRIVE
1274
                LD A,CMOS.VIRT_REAL_DRIVE
1275
                LD BC,CMOSD_SET_ADR
1275
                LD BC,CMOSD_SET_ADR
1276
                OUT (C),A
1276
                OUT (C),A
1277
                LD BC,CMOSD_RD_WR
1277
                LD BC,CMOSD_RD_WR
1278
                IN L,(C)
1278
                IN L,(C)
1279
                LD A,L
1279
                LD A,L
Line 1321... Line 1321...
1321
        ENDIF
1321
        ENDIF
1322
 
1322
 
1323
; установка номера в реальный и виртуальный дисковод
1323
; установка номера в реальный и виртуальный дисковод
1324
; A = 0..3 - номер дисковода для установки
1324
; A = 0..3 - номер дисковода для установки
1325
SET_VIRTREAL    LD A,(RREG_A)
1325
SET_VIRTREAL    LD A,(RREG_A)
1326
                LD E,A
1326
.NUMDRV         LD E,A
1327
                CALL GET_VIRTREAL
1327
                CALL GET_VIRTREAL
1328
                AND %11110000
1328
                AND %11110000
1329
                LD D,A
1329
                LD D,A
1330
                LD A,E
1330
                LD A,E
1331
                AND 3
1331
                AND 3
Line 1361... Line 1361...
1361
                LD A,E
1361
                LD A,E
1362
                AND 3
1362
                AND 3
1363
                OR D
1363
                OR D
1364
                JR SET_VIRTREAL.L1
1364
                JR SET_VIRTREAL.L1
1365
 
1365
 
1366
GET_VIRTREAL    LD H,VIRT_REAL_DRIVE
1366
GET_VIRTREAL    LD H,CMOS.VIRT_REAL_DRIVE
1367
        ROMCALL READCMOS,ROM_RST82
1367
        ROMCALL READCMOS,ROM_RST82
1368
                AND 0x0F
1368
                AND 0x0F
1369
                RET
1369
                RET