Rev 1120 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1120 | Rev 1186 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | 1 | ||
2 | ; LAST UPDATE: 14.10.2023 savelij |
2 | ; LAST UPDATE: 16.02.2025 savelij |
3 | 3 | ||
4 | PAGE |
4 | PAGE |
5 | TITLE "rst8service.a80 ROM_RST83" |
5 | TITLE "rst8service.a80 ROM_RST83" |
6 | 6 | ||
7 | include ../../macros.a80 |
7 | include macros.a80 |
8 | include ../../define.a80 |
8 | include define.a80 |
9 | include ../../global_vars.a80 |
9 | include global_vars.a80 |
10 | include ../../ports_ide.a80 |
10 | include ports_ide.a80 |
11 | include ../../ports_ngs.a80 |
11 | include ports_ngs.a80 |
12 | include ../../sdcomand.a80 |
12 | include sdcomand.a80 |
13 | - | ||
14 | INIT_VAR BUF_TEKVOL |
- | |
15 | include ../../fat_vars.a80 |
- | |
16 | - | ||
17 | include ../../bootsecfat.a80 |
13 | include bootsecfat.a80 |
18 | include ../../evodos_vars.a80 |
14 | include evodos_vars.a80 |
19 | include ../../tmpkeys.a80 |
15 | include tmpkeys.a80 |
20 | include ../../nums_devices.a80 |
16 | include nums_devices.a80 |
21 | include ../../version.a80 |
17 | include version.a80 |
22 | include ../../cmd_cdhdd.a80 |
18 | include cmd_cdhdd.a80 |
23 | include ../../fat_dir.a80 |
19 | include fat_dir.a80 |
24 | include fat/sl811_equ.a80 |
20 | include fat/sl811_equ.a80 |
25 | include struct_mount.a80 |
21 | include struct_mount.a80 |
- | 22 | FATVAR |
|
- | 23 | _INIT_VAR BUF_CURRFATVAR |
|
- | 24 | include fat_vars.a80 |
|
26 | 25 | ||
27 | USB_ENABLE EQU 0 |
26 | USB_ENABLE EQU 0 |
28 | 27 | ||
29 | CPU5 EQU CPU1 |
- | |
30 | CPU6 EQU CPU2 |
- | |
31 | WIN_A5 EQU WIN_A1 |
- | |
32 | WIN_A6 EQU WIN_A2 |
- | |
33 | WIN_P5 EQU WIN_P1 |
- | |
34 | WIN_P6 EQU WIN_P2 |
- | |
35 | - | ||
36 | _CMP_FONT EQU 0 |
28 | _CMP_FONT EQU 0 |
37 | TXTMODE_DEBUG EQU 0 |
29 | TXTMODE_DEBUG EQU 0 |
38 | 30 | ||
- | 31 | TXT |
|
39 | H_FILES EQU 60 |
32 | .H_FILES EQU 60 |
40 | V_FILES EQU 25 |
33 | .V_FILES EQU 25 |
- | 34 | ZX |
|
- | 35 | .H_FILES EQU 32 |
|
- | 36 | .V_FILES EQU 24 |
|
41 | 37 | ||
42 | MAGIC_COLOR EQU BLUE << 3 + WHITE + BR_INK |
38 | MAGIC_COLOR EQU BLUE << 3 + WHITE + BR_INK |
43 | 39 | ||
44 | PHASE 0 |
40 | PHASE 0 |
45 | JP $ ; 0000 |
41 | JP $ ; 0000 |
46 | 42 | ||
47 | DUPL 0x0008-$,0xFF |
43 | DB 0x0008-$ DUP 0xFF |
48 | JP $ ; 0008 |
44 | JP $ ; 0008 |
49 | 45 | ||
50 | DUPL 0x0010-$,0xFF |
46 | DB 0x0010-$ DUP 0xFF |
51 | JP $ ; 0010 |
47 | JP $ ; 0010 |
52 | 48 | ||
53 | DUPL ADR_SEL_ROM-$,0xFF |
49 | DB ADR_SEL_ROM-$ DUP 0xFF |
54 | OUT (C),A ; 0014 |
50 | OUT (C),A ; 0014 |
55 | NOP |
51 | NOP |
56 | RET |
52 | RET |
57 | 53 | ||
58 | DUPL 0x0018-$,0xFF |
54 | DB 0x0018-$ DUP 0xFF |
59 | JP $ ; 0018 |
55 | JP $ ; 0018 |
60 | 56 | ||
61 | DUPL 0x001C-$,0xFF |
57 | DB 0x001C-$ DUP 0xFF |
62 | JP RST8_DOS |
58 | JP RST8_DOS |
63 | 59 | ||
64 | DUPL 0x0020-$,0xFF |
60 | DB 0x0020-$ DUP 0xFF |
65 | JP CALL2RAMPAGE ; 0020 |
61 | JP CALL2RAMPAGE ; 0020 |
66 | 62 | ||
67 | DUPL 0x0024-$,0xFF |
63 | DB 0x0024-$ DUP 0xFF |
68 | JP RST8PAGE0 ; 0024 |
64 | JP RST8PAGE0 ; 0024 |
69 | 65 | ||
70 | DUPL 0x0028-$,0xFF |
66 | DB 0x0028-$ DUP 0xFF |
71 | JP $ ; 0028 |
67 | JP $ ; 0028 |
72 | 68 | ||
73 | DUPL CONT_RST8-$,0xFF ; 002C |
69 | DB CONT_RST8-$ DUP 0xFF ; 002C |
74 | JP NEXT_RST8 |
70 | JP NEXT_RST8 |
75 | 71 | ||
76 | ; переход в страницу 4 с возвратом |
72 | ; переход в страницу 4 с возвратом |
77 | DUPL 0x0030-$,0xFF |
73 | DB 0x0030-$ DUP 0xFF |
78 | JP CALL2PAGE ; 0030 |
74 | JP CALL2PAGE ; 0030 |
79 | 75 | ||
80 | ; продолжение обработки нажатия MAGIC |
76 | ; продолжение обработки нажатия MAGIC |
81 | DUPL CONTINUE_MAGIC-$,0xFF ; 0034 |
77 | DB CONTINUE_MAGIC-$ DUP 0xFF ; 0034 |
82 | JP CONT_MAGIC |
78 | JP CONT_MAGIC |
83 | 79 | ||
84 | DUPL 0x0038-$,0xFF ; 0038 |
80 | DB 0x0038-$ DUP 0xFF ; 0038 |
85 | ; PUSH HL ; 11 |
81 | ; PUSH HL ; 11 |
86 | ; LD HL,(ADR_INT) ; 16 |
82 | ; LD HL,(ADR_INT) ; 16 |
87 | ; EX (SP),HL ; 19 |
83 | ; EX (SP),HL ; 19 |
88 | ; RET ; 10=56 |
84 | ; RET ; 10=56 |
89 | 85 | ||
90 | EI ; 4 |
86 | EI ; 4 |
91 | RET ; 10=14 |
87 | RET ; 10=14 |
92 | 88 | ||
93 | DUPL 0x003E-$,0xFF |
89 | DB 0x003E-$ DUP 0xFF |
94 | EI |
90 | EI |
95 | RET |
91 | RET |
96 | 92 | ||
97 | ; выход из RST8 |
93 | ; выход из RST8 |
98 | EXIT_RST8 LD BC,P4_EXIT_RST8 ; адрес возврата в последней странице RAM |
94 | EXIT_RST8 LD BC,P4_EXIT_RST8 ; адрес возврата в последней странице RAM |
Line 109... | Line 105... | ||
109 | ERST8_DOS LD BC,WIN_A0 |
105 | ERST8_DOS LD BC,WIN_A0 |
110 | LD A,6 |
106 | LD A,6 |
111 | JP ADR_SEL_ROM |
107 | JP ADR_SEL_ROM |
112 | 108 | ||
113 | ; обработчик MAGIC |
109 | ; обработчик MAGIC |
114 | DUPL 0x0066-$,0xFF |
110 | DB 0x0066-$ DUP 0xFF |
115 | NOP |
111 | NOP |
116 | CONT_MAGIC NOP |
112 | CONT_MAGIC NOP |
117 | DI |
113 | DI |
118 | LD HL,N_77 |
114 | LD HL,N_77 |
119 | CALL CONVERT_BPORT |
115 | CALL CONVERT_BPORT |
120 | CALL STORE_AY ; сохранение состояния регистров и заглушение AY |
116 | CALL STORE_AY ; сохранение состояния регистров и заглушение AY |
121 | LD A,(CPU6+DEBUG_ONOFF) |
117 | LD A,(CPU2 + DEBUG_ONOFF) |
122 | BIT B_TRACE_DBG,A |
118 | BIT DEBUGGER.B_TRACE,A |
123 | JP NZ,DEBUGGER ; если активен отладчик, то переход на его запуск |
119 | JP NZ,NMI_DEBUG ; если активен отладчик, то переход на его запуск |
124 | LD A,(N_BF) |
120 | LD A,(N_BF) |
125 | AND M_BREAK_BF |
121 | AND M_BREAK_BF |
126 | JP Z,CONT_MAGIC2 |
122 | JP Z,CONT_MAGIC2 |
127 | LD HL,(NADRRET_L) |
123 | LD HL,(NADRRET_L) |
128 | LD A,H |
124 | LD A,H |
Line 131... | Line 127... | ||
131 | LD A,L |
127 | LD A,L |
132 | CP 0x6C |
128 | CP 0x6C |
133 | JP NC,CONT_MAGIC2 |
129 | JP NC,CONT_MAGIC2 |
134 | CP 0x67 |
130 | CP 0x67 |
135 | JP C,CONT_MAGIC2 |
131 | JP C,CONT_MAGIC2 |
136 | - | ||
137 | CALL MAINPAGE3_TAP |
132 | CALL MAINPAGE3_TAP |
138 | LD HL,(NREG_IXL) |
133 | LD HL,(NREG_IXL) |
139 | LD (RREG_IXL),HL |
134 | LD (RREG_IXL),HL |
140 | LD HL,(NREG_E) |
135 | LD HL,(NREG_E) |
141 | LD (RREG_E),HL |
136 | LD (RREG_E),HL |
Line 150... | Line 145... | ||
150 | LD (NADRRET_L),HL |
145 | LD (NADRRET_L),HL |
151 | LD HL,(RREG_F) |
146 | LD HL,(RREG_F) |
152 | LD (NREG_F),HL |
147 | LD (NREG_F),HL |
153 | JP CONTMAGIC3 |
148 | JP CONTMAGIC3 |
154 | 149 | ||
155 | DUPL 0x00FF-$,0xFF |
150 | DB 0x00FF - $ DUP 0xFF |
156 | DW 0x0038 |
151 | DW 0x0038 |
157 | 152 | ||
158 | ; таблица переходов для RST 8 |
153 | ; таблица переходов для RST 8 |
159 | CODE_TABL DW AY_PRN_INIT_ ; 40 |
154 | CODE_TABL DW AY_PRN_INIT_ ; 40 |
160 | DW AY_PRN_A__ ; 41 |
155 | DW AY_PRN_A__ ; 41 |
Line 168... | Line 163... | ||
168 | DW SCRUP_ ; 49 |
163 | DW SCRUP_ ; 49 |
169 | DW SCRDN_ ; 4A |
164 | DW SCRDN_ ; 4A |
170 | DW SET_MODE_ ; 4B |
165 | DW SET_MODE_ ; 4B |
171 | DW MATH ; 4C |
166 | DW MATH ; 4C |
172 | DW VERSION_ ; 4D |
167 | DW VERSION_ ; 4D |
173 | DW RESERVED ; 4E |
168 | DW EXT_FILE_BROWSER_ ; 4E |
174 | DW RESERVED ; 4F |
169 | DW NMI_FB_BLOCK_ ; 4F |
175 | DW COM_DEV ; 50 |
170 | DW COM_DEV ; 50 |
176 | DW COM_FAT ; 51 |
171 | DW COM_FAT ; 51 |
177 | DW SORT_FINDFILES ; 52 |
172 | DW SORT_FINDFILES ; 52 |
178 | DW MOUNTER ; 53 |
173 | DW MOUNTER ; 53 |
179 | DW INST_FATBOOT_ ; 54 |
174 | DW INST_FATBOOT_ ; 54 |
Line 184... | Line 179... | ||
184 | 179 | ||
185 | ;=============== |
180 | ;=============== |
186 | 181 | ||
187 | ; вход в основное меню MAGIC если не перехвачено отладчиком |
182 | ; вход в основное меню MAGIC если не перехвачено отладчиком |
188 | CONT_MAGIC2 LD BC,CONF_128 |
183 | CONT_MAGIC2 LD BC,CONF_128 |
189 | ; LD A,(N_7FFD) |
- | |
190 | READ_7FFD |
184 | READ_7FFD |
191 | AND M_ZX_SCREEN ! 0xFF |
185 | AND M_ZX_SCREEN ! 0xFF |
192 | OUT (C),A ; включение отображения экрана 0 |
186 | OUT (C),A ; включение отображения экрана 0 |
193 | LD A,(N_77) |
187 | LD A,(N_77) |
194 | CALL CMP_SCRMODE ; проверка видеорежима прерванной программы |
188 | CALL CMP_SCRMODE ; проверка видеорежима прерванной программы |
Line 203... | Line 197... | ||
203 | RLA |
197 | RLA |
204 | LD (CMP_FONT_FLAG),A |
198 | LD (CMP_FONT_FLAG),A |
205 | ENDIF |
199 | ENDIF |
206 | ;==========времянка |
200 | ;==========времянка |
207 | ROMCALL MAGIC_FONT,ROM_RST82 ; установка временного шрифта для MAGIC режима |
201 | ROMCALL MAGIC_FONT,ROM_RST82 ; установка временного шрифта для MAGIC режима |
208 | CONT_MAGIC1 LD A,(CPU6+DEBUG_ONOFF) |
202 | LD A,(CPU2 + DEBUG_ONOFF) |
209 | BIT B_DBG_ACTIV,A |
203 | BIT DEBUGGER.B_ACTIV,A |
210 | JP NZ,DEBUGGER ; если активен отладчик, то переход на его запуск |
204 | JP NZ,NMI_DEBUG ; если активен отладчик, то переход на его запуск |
- | 205 | ROMCALL STORE_FATVARS,ROM_RST82 ; сохранили переменные FAT внешнего софта |
|
211 | JP RESTART_NMI |
206 | RESTART_NMI |
- | 207 | ROMCALL CLS_TXTMODE8,ROM_RST82 ; очистка текстмодного экрана |
|
- | 208 | EVOPORT WIN_A1,ROM_RST83 ; включение этой страницы ROM в 1 окно проецирования |
|
- | 209 | LD HL,CPU1 + TEXT_PORTREGS |
|
- | 210 | ROMCALL PRTT_MSG,ROM_RST82 ; печать текста |
|
- | 211 | LD A,(SYSFLAGS) |
|
- | 212 | AND SYSFLAGS.M_NMI_FB_BLOCK |
|
- | 213 | JR Z,.L3 |
|
- | 214 | LD HL,CPU1 + TXT_FB_BLOCKED |
|
- | 215 | ROMCALL PRTT_MSG,ROM_RST82 ; печать текста |
|
- | 216 | .L3 |
|
- | 217 | ROMCALL PRT_PORTREGS,ROM_RST82 ; печать содержимого портов считанной конфигурации |
|
- | 218 | ;==========времянка |
|
- | 219 | IF _CMP_FONT=1 |
|
- | 220 | LD HL,CPU1 + TXT_VERIFY_FONT |
|
- | 221 | ROMCALL PRTT_MSG,ROM_RST82 ; печать текста о проверке шрифта |
|
- | 222 | LD A,(CMP_FONT_FLAG) |
|
- | 223 | RRA |
|
- | 224 | LD HL,CPU1 + TXT_VERIFY_OK ; текст если все совпало |
|
- | 225 | JR NC,.L1 |
|
- | 226 | LD HL,CPU1 + TXT_VERIFY_ERR ; текст если не совпало |
|
- | 227 | .L1 |
|
- | 228 | ROMCALL PRTT_MSG,ROM_RST82 ; печать об ошибке |
|
- | 229 | ENDIF |
|
- | 230 | ;==========времянка |
|
- | 231 | EVOPORT WIN_A1,ROM_RST81 ; включение дополнений в 1 окно проецирования |
|
- | 232 | LD IX,MAIN_MENU |
|
- | 233 | ROMCALL SETUP4SEL,ROM_RST82 |
|
- | 234 | ROMCALL INT_TXT_WINDOW,ROM_RST82 ; вывод окна на текстмодный экран |
|
- | 235 | ROMCALL ITSELECTOR,ROM_RST82 |
|
- | 236 | ; восстановление буферов FAT внешнего софта |
|
- | 237 | AND A |
|
- | 238 | JP Z,.L2 |
|
- | 239 | DEC A |
|
- | 240 | JP Z,RESTART_NMI ; нажат BREAK, перезапускаемся |
|
- | 241 | DEC A |
|
- | 242 | JP Z,CONTMAGIC3 |
|
- | 243 | ; выход из MAGIC |
|
- | 244 | .L2 XOR A |
|
- | 245 | IN A,(0xFE) |
|
- | 246 | CPL |
|
- | 247 | AND 0x1F |
|
- | 248 | JR NZ,.L2 ; ждем отпускания кнопок клавиатуры |
|
- | 249 | ROMCALL RESTORE_TXTMODE,ROM_RST82 ; восстановление текстмодного экрана |
|
- | 250 | ROMCALL RESTORE_FONT,ROM_RST82 ; восстановление шрифта |
|
- | 251 | ROMCALL RESTORE_PAL,ROM_RST82 ; восстановление палитры |
|
- | 252 | CONTMAGIC3 |
|
- | 253 | ; CALL RESTORE_AY ; восстановление рагистров AY |
|
- | 254 | ROMCALL RESTORE_FATVARS,ROM_RST82 ; восстановили переменные FAT внешнего софта |
|
- | 255 | LD BC,EXITNMISERVICE |
|
- | 256 | PUSH BC |
|
- | 257 | LD BC,WIN_P0 |
|
- | 258 | XOR A |
|
- | 259 | JP ADR_SEL_ROM |
|
212 | 260 | ||
213 | VERSION_ LD HL,VERSBIN >> 16 |
261 | VERSION_ LD HL,VERSBIN >> 16 |
214 | LD (RREG_C),HL |
262 | LD (RREG_C),HL |
215 | LD HL,VERSBIN & 0xFFFF |
263 | LD HL,VERSBIN & 0xFFFF |
216 | LD (RREG_E),HL |
264 | LD (RREG_E),HL |
Line 230... | Line 278... | ||
230 | .L1 LD A,L |
278 | .L1 LD A,L |
231 | LD (RREG_A),A ; выставили в A что получилось |
279 | LD (RREG_A),A ; выставили в A что получилось |
232 | OUT (C),H ; восстановили текщее значение порта |
280 | OUT (C),H ; восстановили текщее значение порта |
233 | RET |
281 | RET |
234 | 282 | ||
- | 283 | NMI_FB_BLOCK_ LD A,(RREG_A) |
|
- | 284 | LD HL,SYSFLAGS |
|
- | 285 | RES SYSFLAGS.B_NMI_FB_BLOCK,(HL) |
|
- | 286 | AND A |
|
- | 287 | RET Z |
|
- | 288 | SET SYSFLAGS.B_NMI_FB_BLOCK,(HL) |
|
- | 289 | RET |
|
- | 290 | ||
- | 291 | EXT_FILE_BROWSER_ |
|
- | 292 | ROMCALL EXT_FILE_BROWSER,ROM_RST82 |
|
- | 293 | RET |
|
- | 294 | ||
235 | SETUP_FONT_ |
295 | SETUP_FONT_ |
236 | ROMCALL SETUP_FONT,ROM_RST81 |
296 | ROMCALL SETUP_FONT,ROM_RST81 |
237 | RET |
297 | RET |
238 | 298 | ||
239 | SET_MAP_ |
299 | SET_MAP_ |
Line 267... | Line 327... | ||
267 | TAPE_EMUL_ |
327 | TAPE_EMUL_ |
268 | ROMCALL TAPE_EMUL,ROM_RST82 |
328 | ROMCALL TAPE_EMUL,ROM_RST82 |
269 | RET |
329 | RET |
270 | 330 | ||
271 | WINW_ |
331 | WINW_ |
272 | ROMCALL WINW,ROM_RST82 |
332 | ROMCALL EXT_ZX_WINDOW,ROM_RST82 |
273 | RET |
333 | RET |
274 | 334 | ||
275 | PRINT_MESSAGE_ |
335 | PRINT_MESSAGE_ |
276 | ROMCALL PRINT_MESSAGE,ROM_RST82 |
336 | ROMCALL PRINT_MESSAGE,ROM_RST82 |
277 | RET |
337 | RET |
Line 308... | Line 368... | ||
308 | ERST8PAGE0 LD BC,WIN_A0 |
368 | ERST8PAGE0 LD BC,WIN_A0 |
309 | XOR A |
369 | XOR A |
310 | JP ADR_SEL_ROM |
370 | JP ADR_SEL_ROM |
311 | 371 | ||
312 | SELECT_MAPPER |
372 | SELECT_MAPPER |
313 | ; LD A,(R_7FFD) |
- | |
314 | READ_7FFD |
373 | READ_7FFD |
315 | AND 0x10 |
374 | AND 0x10 |
316 | RET NZ |
375 | RET NZ |
317 | LD A,-8 |
376 | LD A,-8 |
318 | ADD A,L |
377 | ADD A,L |
319 | LD L,A |
378 | LD L,A |
320 | RET |
379 | RET |
321 | 380 | ||
322 | RESTART_NMI |
- | |
323 | ROMCALL CLS_TXTMODE8,ROM_RST82 ; очистка текстмодного экрана |
- | |
324 | EVOPORT WIN_A5,ROM_RST83 ; включение этой страницы ROM во 2 окно проецирования |
- | |
325 | LD HL,CPU5+TEXT_PORTREGS |
- | |
326 | ROMCALL PRTT_MSG,ROM_RST82 ; печать текста |
- | |
327 | ROMCALL PRT_PORTREGS,ROM_RST82 ; печать содержимого портов считанной конфигурации |
- | |
328 | ;==========времянка |
- | |
329 | IF _CMP_FONT=1 |
- | |
330 | LD HL,CPU5+TXT_VERIFY_FONT |
- | |
331 | ROMCALL PRTT_MSG,ROM_RST82 ; печать текста о проверке шрифта |
- | |
332 | LD A,(CMP_FONT_FLAG) |
- | |
333 | RRA |
- | |
334 | LD HL,CPU5+TXT_VERIFY_OK ; текст если все совпало |
- | |
335 | JR NC,CONTMAGIC3_ |
- | |
336 | LD HL,CPU5+TXT_VERIFY_ERR ; текст если не совпало |
- | |
337 | CONTMAGIC3_ |
- | |
338 | ROMCALL PRTT_MSG,ROM_RST82 ; печать об ошибке |
- | |
339 | ENDIF |
- | |
340 | ;==========времянка |
- | |
341 | EVOPORT WIN_A5,ROM_RST81 ; включение дополнений в 1 окно проецирования |
- | |
342 | LD IX,MAIN_MENU |
- | |
343 | ROMCALL SETUP4SEL,ROM_RST82 |
- | |
344 | ROMCALL ITWINW,ROM_RST82 ; вывод окна на текстмодный экран |
- | |
345 | ROMCALL ITSELECTOR,ROM_RST82 |
- | |
346 | AND A |
- | |
347 | JR Z,CONTMAGIC2 |
- | |
348 | DEC A |
- | |
349 | JR Z,RESTART_NMI |
- | |
350 | DEC A |
- | |
351 | JR Z,CONTMAGIC3 |
- | |
352 | CONTMAGIC2 XOR A |
- | |
353 | IN A,(0xFE) |
- | |
354 | CPL |
- | |
355 | AND 0x1F |
- | |
356 | JR NZ,CONTMAGIC2 ; ждем отпускания кнопок клавиатуры |
- | |
357 | ROMCALL RESTORE_TXTMODE,ROM_RST82 ; восстановление текстмодного экрана |
- | |
358 | ROMCALL RESTORE_FONT,ROM_RST82 ; восстановление шрифта |
- | |
359 | ROMCALL RESTORE_PAL,ROM_RST82 ; восстановление палитры |
- | |
360 | CONTMAGIC3 |
- | |
361 | ; CALL RESTORE_AY ; восстановление рагистров AY |
- | |
362 | LD BC,EXITNMISERVICE |
- | |
363 | PUSH BC |
- | |
364 | LD BC,WIN_P0 |
- | |
365 | XOR A |
- | |
366 | JP ADR_SEL_ROM |
- | |
367 | - | ||
368 | ; продолжение обработки RST8 |
381 | ; продолжение обработки RST8 |
369 | NEXT_RST8 LD HL,EXIT_RST8 |
382 | NEXT_RST8 LD HL,EXIT_RST8 |
370 | NEXT_RST PUSH HL |
383 | NEXT_RST PUSH HL |
371 | LD (INTERNAL_SP),SP |
384 | LD (INTERNAL_SP),SP |
372 | LD HL,R_77 |
385 | LD HL,R_77 |
Line 398... | Line 411... | ||
398 | JP (HL) |
411 | JP (HL) |
399 | 412 | ||
400 | ; переконфигурация окон проецирования |
413 | ; переконфигурация окон проецирования |
401 | ; страница переменных в окно 1, основная память в зависимости от адреса в окна 2 и 3 |
414 | ; страница переменных в окно 1, основная память в зависимости от адреса в окна 2 и 3 |
402 | RESETUP_WINS EXX |
415 | RESETUP_WINS EXX |
403 | LD BC,WIN_P5 |
- | |
404 | XOR A |
- | |
405 | OUT (C),A ; страница переменных в окно 1 |
416 | EVOPORT WIN_P1,RAM_NMI ; страница переменных в окно 1 |
406 | LD HL,CPU3 |
417 | LD HL,CPU3 |
407 | ADD HL,SP |
418 | ADD HL,SP |
408 | LD SP,HL ; стек тоже в окно 1 |
419 | LD SP,HL ; стек тоже в окно 1 |
409 | LD HL,B1_CPU0-CPU5 ; для 0 маппера |
420 | LD HL,B1_CPU0-CPU1 ; для 0 маппера |
410 | CALL SELECT_MAPPER |
421 | CALL SELECT_MAPPER |
411 | RESETUPWINS1 EXX |
422 | RESETUPWINS1 EXX |
412 | LD BC,CPU6 ; адрес чтения/записи на 0x8000 выше |
423 | LD BC,CPU2 ; адрес чтения/записи на 0x8000 выше |
413 | LD A,H ; проверка старшего байта адреса |
424 | LD A,H ; проверка старшего байта адреса |
414 | EXX |
425 | EXX |
415 | CP 0x40 |
426 | CP 0x40 |
416 | JR C,RESETUPWINS2 ; установка для окон 0,1 |
427 | JR C,RESETUPWINS2 ; установка для окон 0,1 |
417 | INC HL |
428 | INC HL |
418 | INC HL |
429 | INC HL |
419 | EXX |
430 | EXX |
420 | LD BC,CPU5 ; адрес чтения/записи на 0x4000 выше |
431 | LD BC,CPU1 ; адрес чтения/записи на 0x4000 выше |
421 | EXX |
432 | EXX |
422 | CP 0x80 |
433 | CP 0x80 |
423 | JR C,RESETUPWINS2 ; установка для окон 1,2 |
434 | JR C,RESETUPWINS2 ; установка для окон 1,2 |
424 | INC HL |
435 | INC HL |
425 | INC HL |
436 | INC HL |
Line 431... | Line 442... | ||
431 | INC HL |
442 | INC HL |
432 | INC HL |
443 | INC HL |
433 | EXX |
444 | EXX |
434 | LD BC,CPU3 ; адрес чтения/записи на 0x4000 ниже |
445 | LD BC,CPU3 ; адрес чтения/записи на 0x4000 ниже |
435 | EXX |
446 | EXX |
436 | LD B,HIGH (WIN_A6) ; старший байт адреса порта окна 2 |
447 | LD B,HIGH (WIN_A2) ; старший байт адреса порта окна 2 |
437 | CALL RESETUPWINS4 |
448 | CALL RESETUPWINS4 |
438 | LD DE,0xFFF8 |
449 | LD DE,0xFFF8 |
439 | ADD HL,DE ; адрес где конфиг страниц основной памяти лежит |
450 | ADD HL,DE ; адрес где конфиг страниц основной памяти лежит |
440 | JR RESETUPWINS5 |
451 | JR RESETUPWINS5 |
441 | 452 | ||
442 | RESETUPWINS2 LD B,HIGH (WIN_A6) ; старший байт адреса порта окна 2 |
453 | RESETUPWINS2 LD B,HIGH (WIN_A2) ; старший байт адреса порта окна 2 |
443 | CALL RESETUPWINS4 |
454 | CALL RESETUPWINS4 |
444 | RESETUPWINS5 LD B,HIGH (WIN_A3) ; старший байт адреса порта окна 3 |
455 | RESETUPWINS5 LD B,HIGH (WIN_A3) ; старший байт адреса порта окна 3 |
445 | CALL RESETUPWINS4 |
456 | CALL RESETUPWINS4 |
446 | EXX |
457 | EXX |
447 | RET |
458 | RET |
Line 473... | Line 484... | ||
473 | LD HL,B1_CPU0 ; байты и адреса портов 0 маппера |
484 | LD HL,B1_CPU0 ; байты и адреса портов 0 маппера |
474 | CALL SELECT_MAPPER |
485 | CALL SELECT_MAPPER |
475 | READ_CPU0_01 LD D,(HL) ; байт для записи в порт |
486 | READ_CPU0_01 LD D,(HL) ; байт для записи в порт |
476 | INC HL |
487 | INC HL |
477 | LD A,(HL) ; старший байт адреса порта нужной страницы |
488 | LD A,(HL) ; старший байт адреса порта нужной страницы |
478 | AND HIGH (WIN_A5) |
489 | AND HIGH (WIN_A1) |
479 | OR HIGH (WIN_P5) ; преобразовали старший байт адреса для включения в 1 окне |
490 | OR HIGH (WIN_P1) ; преобразовали старший байт адреса для включения в 1 окне |
480 | LD B,A |
491 | LD B,A |
481 | LD C,LOW (WIN_A0) ; BC = адрес порта |
492 | LD C,LOW (WIN_A0) ; BC = адрес порта |
482 | LD A,(R_77) |
493 | LD A,(R_77) |
483 | LD E,0x3F |
494 | LD E,0x3F |
484 | AND 0x10 ; определяем DOS или не DOS |
495 | AND 0x10 ; определяем DOS или не DOS |
485 | JR Z,READ_CPU0_02 |
496 | JR Z,READ_CPU0_02 |
486 | DEC E |
497 | DEC E |
487 | READ_CPU0_02 LD A,D |
498 | READ_CPU0_02 LD A,D |
488 | AND E |
499 | AND E |
489 | OUT (C),A ; включаем пагу BASIC или DOS |
500 | OUT (C),A ; включаем пагу BASIC или DOS |
490 | LD DE,CPU5 ; смещение до 1 окна проецирования |
501 | LD DE,CPU1 ; смещение до 1 окна проецирования |
491 | LD HL,(RADRRET_L) ; адрес откуда читать |
502 | LD HL,(RADRRET_L) ; адрес откуда читать |
492 | ADD HL,DE ; читать через 1 окно проецирования |
503 | ADD HL,DE ; читать через 1 окно проецирования |
493 | LD A,(HL) ; прочитали байт |
504 | LD A,(HL) ; прочитали байт |
494 | SBC HL,DE ; вернули адрес байта |
505 | SBC HL,DE ; вернули адрес байта |
495 | INC HL ; увеличили адрес возврата |
506 | INC HL ; увеличили адрес возврата |
Line 509... | Line 520... | ||
509 | LD D,0 ; DE = смещение в таблице байта и старшего байта страницы чтения |
520 | LD D,0 ; DE = смещение в таблице байта и старшего байта страницы чтения |
510 | ADD HL,DE |
521 | ADD HL,DE |
511 | LD D,(HL) ; байт для записи в порт |
522 | LD D,(HL) ; байт для записи в порт |
512 | INC HL |
523 | INC HL |
513 | LD A,(HL) |
524 | LD A,(HL) |
514 | AND HIGH (WIN_A5) |
525 | AND HIGH (WIN_A1) |
515 | OR HIGH (WIN_P5) |
526 | OR HIGH (WIN_P1) |
516 | LD B,A |
527 | LD B,A |
517 | LD C,LOW (WIN_A5) ; BC = адрес порта для 1 окна проецирования |
528 | LD C,LOW (WIN_A1) ; BC = адрес порта для 1 окна проецирования |
518 | LD HL,(RADRRET_L) ; адрес откуда читать |
529 | LD HL,(RADRRET_L) ; адрес откуда читать |
519 | OUT (C),D ; включили страницу для чтения байта |
530 | OUT (C),D ; включили страницу для чтения байта |
520 | LD E,L ; младший байт адреса чтения |
531 | LD E,L ; младший байт адреса чтения |
521 | LD A,H |
532 | LD A,H |
522 | AND HIGH (WIN_A5) |
533 | AND HIGH (WIN_A1) |
523 | OR HIGH (CPU5) |
534 | OR HIGH (CPU1) |
524 | LD D,A ; старший байт адреса чтения |
535 | LD D,A ; старший байт адреса чтения |
525 | LD A,(DE) ; прочитали байт |
536 | LD A,(DE) ; прочитали байт |
526 | INC HL ; увеличили адрес возврата |
537 | INC HL ; увеличили адрес возврата |
527 | LD (RADRRET_L),HL ; вернули адрес возврата |
538 | LD (RADRRET_L),HL ; вернули адрес возврата |
528 | READBYTE_02 LD (NEXTBYTERST8),A ; положили прочитанный байт |
539 | READBYTE_02 LD (NEXTBYTERST8),A ; положили прочитанный байт |
Line 632... | Line 643... | ||
632 | LD BC,8 |
643 | LD BC,8 |
633 | LD A,C ; конвертить 8 байт |
644 | LD A,C ; конвертить 8 байт |
634 | ADD HL,BC |
645 | ADD HL,BC |
635 | LD BC,B0_CPU0 |
646 | LD BC,B0_CPU0 |
636 | LD IYL,HIGH (WIN_A3)&0xF8 |
647 | LD IYL,HIGH (WIN_A3) & 0xF8 |
637 | CBPORT03 EX AF,AF' |
648 | .L3 EX AF,AF' |
638 | LD A,(HL) |
649 | LD A,(HL) |
639 | CP 0xC0 |
650 | CP 0xC0 |
640 | JR NC,CBPORT01 |
651 | JR NC,.L1 |
641 | ; если число менее, то восстанавливать в порты x7F7 |
652 | ; если число менее, то восстанавливать в порты x7F7 |
642 | LD (BC),A ; номер страницы для записи в порт при восстановлении |
653 | LD (BC),A ; номер страницы для записи в порт при восстановлении |
643 | INC BC |
654 | INC BC |
644 | LD A,IYL |
655 | LD A,IYL |
645 | ADD A,0x40 |
656 | ADD A,0x40 |
Line 647... | Line 658... | ||
647 | AND 0xF0 |
658 | AND 0xF0 |
648 | SRL E |
659 | SRL E |
649 | SRL D |
660 | SRL D |
650 | LD (BC),A ; старший байт адреса порта |
661 | LD (BC),A ; старший байт адреса порта |
651 | INC BC |
662 | INC BC |
652 | JR CBPORT02 |
663 | JR .L2 |
653 | 664 | ||
654 | ; если число больше, то восстанавливать в порты xFF7 |
665 | ; если число больше, то восстанавливать в порты xFF7 |
655 | CBPORT01 LD A,(HL) |
666 | .L1 LD A,(HL) |
656 | RLCA |
667 | RLCA |
657 | RLCA |
668 | RLCA |
658 | SRL D |
669 | SRL D |
659 | RRA |
670 | RRA |
660 | SRL E |
671 | SRL E |
Line 664... | Line 675... | ||
664 | LD A,IYL |
675 | LD A,IYL |
665 | ADD A,0x40 |
676 | ADD A,0x40 |
666 | LD IYL,A |
677 | LD IYL,A |
667 | LD (BC),A ; старший байт адреса порта |
678 | LD (BC),A ; старший байт адреса порта |
668 | INC BC |
679 | INC BC |
669 | CBPORT02 DEC HL |
680 | .L2 DEC HL |
670 | EX AF,AF' |
681 | EX AF,AF' |
671 | DEC A |
682 | DEC A |
672 | JR NZ,CBPORT03 |
683 | JR NZ,.L3 |
673 | POP HL |
684 | POP HL |
674 | LD L,0xBC |
685 | LD L,0xBC |
675 | LD A,H |
686 | LD A,H |
676 | AND 0x0F |
687 | AND 0x0F |
677 | OR 0xA0 |
688 | OR 0xA0 |
Line 749... | Line 760... | ||
749 | ; OUTI |
760 | ; OUTI |
750 | ; DEC A |
761 | ; DEC A |
751 | ; JP P,.L2 |
762 | ; JP P,.L2 |
752 | ; RET |
763 | ; RET |
753 | 764 | ||
754 | SYMS4SORT DB ".!#$%&'()-0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`{}~",0x7F |
- | |
755 | DB "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁ",0 |
- | |
756 | - | ||
757 | X_OFFSET EQU 63 |
765 | X_OFFSET EQU 63 |
758 | Y_OFFSET EQU 2 |
766 | Y_OFFSET EQU 2 |
759 | TEXT_PORTREGS DB 0x17,MAGIC_COLOR |
767 | TEXT_PORTREGS DB 0x17,MAGIC_COLOR |
760 | DB 0x16,Y_OFFSET+0x01,X_OFFSET+0,"SP: PC:" |
768 | DB 0x16,Y_OFFSET+0x01,X_OFFSET+0,"SP: PC:" |
761 | DB 0x16,Y_OFFSET+0x02,X_OFFSET+0,"IR:" |
769 | DB 0x16,Y_OFFSET+0x02,X_OFFSET+0,"IR:" |
Line 775... | Line 783... | ||
775 | DB 0x16,Y_OFFSET+0x12,X_OFFSET+0," 77: 5F:" |
783 | DB 0x16,Y_OFFSET+0x12,X_OFFSET+0," 77: 5F:" |
776 | DB 0x16,Y_OFFSET+0x13,X_OFFSET+0," BF: 3F:" |
784 | DB 0x16,Y_OFFSET+0x13,X_OFFSET+0," BF: 3F:" |
777 | DB 0x16,Y_OFFSET+0x14,X_OFFSET+0," DOS: 1F:" |
785 | DB 0x16,Y_OFFSET+0x14,X_OFFSET+0," DOS: 1F:" |
778 | DB 0x16,Y_OFFSET+0x15,X_OFFSET+0,"BREAK: " |
786 | DB 0x16,Y_OFFSET+0x15,X_OFFSET+0,"BREAK: " |
779 | DB 0x16,Y_OFFSET+0x16,X_OFFSET+0,"TURBO: " |
787 | DB 0x16,Y_OFFSET+0x16,X_OFFSET+0,"TURBO: " |
780 | DB 0x16,1,0x10,0x17,0x32," EVO Magic Service beta ",0 |
788 | DB 0x16,1,0x10,0x17,%00110010," EVO Magic Service v" |
- | 789 | DB VERSBIOS,"beta ",0 |
|
781 | 790 | ||
782 | TXT_VERIFY_FONT DB 0x16,0x18,0,0x17,0x22," VERIFY READING FONT ",0 |
791 | TXT_VERIFY_FONT DB "\x16\x18\x00\x17\x22 VERIFY READING FONT ",0 |
783 | TXT_VERIFY_OK DB " OK ",0 |
792 | TXT_VERIFY_OK DZ " OK " |
784 | TXT_VERIFY_ERR DB "ERROR ",0 |
793 | TXT_VERIFY_ERR DZ "ERROR " |
- | 794 | TXT_FB_BLOCKED DZ "\x16\x17\x08\x17\xBA File Browser is blocked " |
|
785 | 795 | ||
786 | ; проверка считанного фонта |
796 | ; проверка считанного фонта |
787 | IF _CMP_FONT=1 |
797 | IF _CMP_FONT=1 |
788 | CMP_FONT LD H,CMOS_BYTE_00 |
798 | CMP_FONT LD H,CMOS_BYTE_00 |
789 | ROMCALL READCMOS,ROM_RST82 |
799 | ROMCALL READCMOS,ROM_RST82 |
790 | AND M_TYPE_FONT |
800 | AND M_TYPE_FONT |
791 | LD HL,CP866_FONT |
801 | LD HL,CP866_FONT |
792 | JR NZ,CMPFONT1 |
802 | JR NZ,.L1 |
793 | LD HL,ATM_FONT |
803 | LD HL,ATM_FONT |
794 | CMPFONT1 LD DE,CPU1+OFFSET_BUFSYM |
804 | .L1 LD DE,CPU1 + OFFSET_BUFSYM |
795 | PUSH DE |
805 | PUSH DE |
796 | ROMCALL UNPACK,ROM_RST80 |
806 | ROMCALL UNPACK,ROM_RST80 |
797 | POP DE |
807 | POP DE |
798 | INC D |
808 | INC D |
799 | LD BC,0x700 |
809 | LD BC,0x700 |
800 | LD HL,CPU1+OFFSET_FNTSAVE+0x100 |
810 | LD HL,CPU1 + OFFSET_FNTSAVE + 0x100 |
801 | CMPFONT2 LD A,(DE) |
811 | .L2 LD A,(DE) |
802 | INC DE |
812 | INC DE |
803 | CP (HL) |
813 | CP (HL) |
804 | SCF |
814 | SCF |
805 | RET NZ |
815 | RET NZ |
806 | CPI |
816 | CPI |
807 | JP PE,CMPFONT2 |
817 | JP PE,.L2 |
808 | XOR A |
818 | XOR A |
809 | RET |
819 | RET |
810 | ENDIF |
820 | ENDIF |
811 | 821 | ||
812 | CMP_SCRMODE LD HL,FLAGS |
822 | CMP_SCRMODE LD HL,SYSFLAGS |
813 | RES B_VIDEO_MODE,(HL) |
823 | RES SYSFLAGS.B_VIDEO_MODE,(HL) |
814 | AND 7 |
824 | AND 7 |
815 | CP 3 |
825 | CP 3 |
816 | RET Z |
826 | RET Z |
817 | SET B_VIDEO_MODE,(HL) |
827 | SET SYSFLAGS.B_VIDEO_MODE,(HL) |
818 | RET |
828 | RET |
819 | 829 | ||
820 | SD_CARD_LOST LD HL,FLAGS_DRV |
830 | SD_CARD_LOST LD HL,DEVMAN_VARS.FLAGS_DRV |
821 | LD A,B_NEW_SD |
831 | LD A,B_NEW_SD |
822 | OR (HL) |
832 | OR (HL) |
823 | LD (HL),A |
833 | LD (HL),A |
824 | PEC_ON M_SHADOW_BF |
834 | PEC_ON M_SHADOW_BF |
825 | CALL MAIN_MEM13 |
835 | CALL MAIN_MEM13 |
826 | LD IX,SDCARD_LOST |
836 | LD IX,SDCARD_LOST |
827 | ROMCALL IWINW,ROM_RST82 |
837 | ROMCALL INT_ZX_WINDOW,ROM_RST82 |
828 | JR $ |
838 | JR $ |
829 | 839 | ||
830 | include math.a80 |
840 | include math.a80 |
831 | include sortfiles.a80 |
841 | include sortfiles.a80 |
832 | 842 | ||
833 | FREE_MAIN EQU 0x3FF6-$ |
843 | FREE_MAIN EQU 0x3FF6-$ |
834 | 844 | ||
835 | DUPL FREE_MAIN,0xFF |
845 | DB FREE_MAIN DUP 0xFF |
836 | DW FREE_MAIN ; размер свободного места |
846 | DW FREE_MAIN ; размер свободного места |
837 | DB "RST_08" |
847 | DB "RST_08" |
838 | DW DATA_VERS |
848 | DW DATA_VERS |
839 | DEPHASE |
849 | DEPHASE |
840 | 850 |