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 |