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 | ||