Rev 698 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
627 | savelij | 1 | |
1120 | savelij | 2 | ; LAST UPDATE: 18.10.2023 savelij |
627 | savelij | 3 | |
4 | include ../../macros.a80 |
||
5 | include ../../global_vars.a80 |
||
6 | |||
7 | include all_vars.a80 |
||
8 | |||
9 | VERSBIOS EQU "1.07.15pe" |
||
10 | |||
11 | ORG 0 |
||
12 | DI |
||
13 | JP $;H_INIT |
||
14 | |||
15 | PM_RUN_4000 OUT (C),E |
||
16 | |||
17 | DUPL 8-$,0 |
||
18 | JP RST8 |
||
19 | |||
20 | DUPL 0X0C-$,0 |
||
21 | JP PENTEVO_START |
||
22 | |||
23 | DUPL 0X14-$,0 |
||
24 | OUT (C),A |
||
25 | NOP |
||
26 | RET |
||
27 | |||
28 | DUPL 0X18-$,0 |
||
691 | DimkaM | 29 | DI |
30 | PUSH BC |
||
31 | LD B,(IX-_MEMDSP) |
||
627 | savelij | 32 | JP SET_PG |
33 | |||
34 | DUPL 0X20-$,0 |
||
35 | JP CONOUT |
||
36 | |||
37 | DUPL 0X38-$,0 |
||
38 | JP DO_INT |
||
39 | |||
40 | PAL_MN DB 0XFF,0XEC,0XBD,0X8D,0X0C,0XFF,0XEC,0XCF,0X4C,0XCC,0X6F,0X4E,0XBD,0X9C,0X2D,0X0C |
||
41 | |||
42 | ; CONVERT PAGE NUMBER |
||
43 | ED_PG ADD A,6 |
||
44 | RET |
||
45 | |||
46 | ; SET PAGE NUMBER |
||
691 | DimkaM | 47 | SET_PG LD (MEMDSP),A |
627 | savelij | 48 | PUSH BC |
49 | CPL |
||
691 | DimkaM | 50 | LD BC,WIN_P3 |
627 | savelij | 51 | OUT (C),A |
52 | POP AF |
||
691 | DimkaM | 53 | POP BC |
627 | savelij | 54 | RET |
55 | |||
56 | ENTRY: LD SP,SYS_SP ; MUST BE CPSYS |
||
57 | IM 1 |
||
58 | LD HL,(TST_1RUN) |
||
59 | LD DE,55AAH |
||
60 | XOR A |
||
61 | SBC HL,DE |
||
62 | LD (TST_1RUN),DE |
||
63 | JR Z,ALL_INIT |
||
64 | LD (IX-_TST_IS1),-1 |
||
65 | ALL_INIT LD A,0X11 |
||
66 | CALL C_INIT |
||
67 | CALL M_INIT |
||
68 | LD A,0X11 |
||
69 | CALL C_INIT |
||
70 | CALL M_INIT |
||
71 | LD A,0X55 |
||
72 | IN A,(0XFE) |
||
73 | LD A,1 |
||
74 | IN A,(0XFE) |
||
75 | LD A,0X55 |
||
76 | IN A,(0XFE) |
||
77 | LD A,8 |
||
78 | IN A,(0XFE) |
||
79 | XOR A |
||
80 | IN A,(0XFE) |
||
81 | EI |
||
82 | LD HL,PAL_MN |
||
83 | CALL SP_DIR |
||
84 | LD SP,0B000H |
||
85 | LD A,3 |
||
86 | RST 0X18 |
||
87 | ;--------------------------------- |
||
88 | ; MAIN MENU MANAGER. |
||
89 | ; |
||
90 | ; IN: A - 1 FOR RU7, 0 FOR RU5 |
||
91 | ; E - IBMPC KEYBOARD LOCKS STATUS |
||
92 | ; OUT: A - SELECTION (0-CP/M,1-TR-DOS,2-S128,3-S48) |
||
93 | ; D - 1 FOR 'TURBO' MODE, 0 IN OTHER CASE |
||
94 | ; E - IBMPC KEYBOARD LOCKS STATUS |
||
95 | ; L - 1 FOR IMBPC KEYBOARD, 0 FOR SPECTRUM KEYBOARD |
||
96 | LD E,(IX-_KS_SHIFTS) |
||
97 | DI |
||
98 | XOR A |
||
99 | LD DE,0X100 |
||
100 | PUSH AF |
||
101 | LD IX,IX_BASE |
||
102 | LD (IX-_KS_SHIFTS),E |
||
103 | DEC D |
||
104 | JR NZ,_NO_TUR |
||
105 | SET 3,(IX-_SYS_P) |
||
106 | _NO_TUR LD A,0X55 |
||
107 | IN A,(0XFE) |
||
108 | LD A,8 |
||
109 | IN A,(0XFE) |
||
110 | LD A,0X8A |
||
111 | IN A,(0XFE) |
||
112 | LD A,0X55 |
||
113 | IN A,(0XFE) |
||
114 | LD A,1 |
||
115 | IN A,(0XFE) |
||
116 | EX AF,AF' |
||
117 | LD A,0X55 |
||
118 | IN A,(0XFE) |
||
119 | LD A,8 |
||
120 | IN A,(0XFE) |
||
121 | XOR A |
||
122 | IN A,(0XFE) |
||
123 | EX AF,AF' |
||
124 | CP 0X0A |
||
125 | JR NC,ALLINIT2 |
||
126 | LD A,0X55 |
||
127 | IN A,(0XFE) |
||
128 | LD A,7 |
||
129 | IN A,(0XFE) |
||
130 | LD HL,IBMKEYB_T |
||
131 | JR ALLINIT3 |
||
132 | |||
133 | ALLINIT2 LD HL,SPKEYB_T |
||
134 | ALLINIT3 LD DE,KEYBOARD |
||
135 | LD BC,6*3 |
||
136 | DI |
||
137 | LDIR |
||
138 | EI |
||
139 | LD A,3 |
||
140 | RST 0X18 |
||
141 | CALL SP_DEF |
||
142 | POP AF |
||
143 | CALL CI_INIT |
||
144 | LD SP,SYS_SP |
||
145 | CALL PRN |
||
146 | DB 0X1B,0X5F,0 |
||
147 | CALL MEM_SIZE |
||
148 | CALL CPM_LOAD |
||
149 | CALL CFG_LOAD |
||
150 | JP ENTR1 |
||
151 | |||
152 | DO_INT PUSH AF ; TEST TRDOS ACTIVITY |
||
153 | PUSH BC |
||
154 | PUSH DE |
||
155 | PUSH HL |
||
156 | EX AF,AF' |
||
157 | EXX |
||
158 | PUSH AF |
||
159 | PUSH BC |
||
160 | PUSH DE |
||
161 | PUSH HL |
||
162 | PUSH IX |
||
163 | LD IX,IX_BASE |
||
164 | LD A,1 |
||
165 | RST 18H |
||
166 | PUSH AF |
||
167 | LD HL,TIME_C |
||
168 | LD B,4 |
||
169 | TM_L: INC (HL) |
||
170 | INC HL |
||
171 | JR NZ,TM_DN |
||
172 | DJNZ TM_L |
||
173 | TM_DN: CALL CUR_IN |
||
174 | CALL KEYBOARD |
||
175 | POP AF |
||
176 | RST 18H |
||
177 | POP IX |
||
178 | POP HL |
||
179 | POP DE |
||
180 | POP BC |
||
181 | POP AF |
||
182 | EXX |
||
183 | EX AF,AF' |
||
184 | POP HL |
||
185 | POP DE |
||
186 | POP BC |
||
187 | POP AF |
||
188 | EI |
||
189 | RET |
||
190 | |||
191 | ;--------------------------- |
||
192 | ; MULTYPLEXOR CALL |
||
193 | ; |
||
194 | DO_MUX: EI |
||
195 | PUSH HL |
||
196 | PUSH DE |
||
197 | PUSH AF |
||
198 | LD A,MUX_LNG-1 |
||
199 | CP C |
||
200 | JR NC,MUX_OK |
||
201 | POP AF |
||
202 | LD A,0FFH |
||
203 | POP DE |
||
204 | POP HL |
||
205 | RET |
||
206 | |||
207 | MUX_OK: LD A,C |
||
208 | LD HL,MUX_TBL |
||
209 | CALL _IND |
||
210 | POP AF |
||
211 | POP DE |
||
212 | EX (SP),HL |
||
213 | RET |
||
214 | |||
215 | MUX_TBL DW R_VER |
||
216 | DW CPM_L |
||
217 | DW SET_RST ; FUNC 0,1,2 |
||
218 | DW READA_KNW ; (3) READ KEY (NO WAIT) (SEE SCANKEY) |
||
219 | DW KB_TYP ; (4) READ KEYB TYPE (L) & FLAGS (D) |
||
220 | DW G_TIME ; (5) GET CURRENT TIME |
||
221 | DW WR_FE ; (6) WRITE TO 'FE' PORT |
||
222 | DW ADR_FE |
||
223 | DW WR_SYS |
||
224 | DW ADR_SYS |
||
225 | DW PAGE_MAN |
||
226 | ; DW ADR_FE ; (7) GET ADDRESS & DEFAULT OF 'FE' PORT |
||
227 | ; DW WR_SYS ; (8) WRITE TO SYS PORT ('TON' & 'TNAB' BITS) |
||
228 | ; DW ADR_SYS ; (9) GET ADDRESS & DEFAULT OF SYS PORT |
||
229 | ;!!!!!!!!!!!!!!!!!!!!!!! |
||
230 | ; DW TST_RT ; RET HL & RTIME |
||
231 | ; DW SIGN ; D - CONST |
||
232 | ; RET - HL |
||
233 | ;!!!!!!!!!!!!!!!!!!!!!!! |
||
234 | MUX_LNG EQU ($-MUX_TBL)/2 |
||
235 | |||
236 | |||
237 | R_VER: LD HL,107H ; MUX FUNC 0 - GET VERSION (HL-VERSION) |
||
238 | LD DE,-1 |
||
239 | XOR A |
||
240 | RET |
||
241 | |||
242 | CPM_L: LD BC,1600H; MUX FUNC 1 - LOAD CPM IMAGE |
||
243 | CALL CPM_L1 |
||
244 | XOR A |
||
245 | RET |
||
246 | |||
247 | SET_RST:LD DE,(ENT_ADR) ; MUX FUNC 2 - SET RESTART ADRESS |
||
248 | LD (ENT_ADR),HL ; HL - ADRESS FOR RESTART (RET IN HL OLD) |
||
249 | EX DE,HL |
||
250 | XOR A |
||
251 | RET |
||
252 | |||
253 | G_TIME: LD DE,(TIME_C) ; MUX FUNC 5 - GET TIME INTO HL:DE |
||
254 | LD HL,(TIME_C+2) |
||
255 | XOR A |
||
256 | RET |
||
257 | |||
258 | ADR_SYS |
||
259 | WR_SYS |
||
260 | ADR_FE |
||
261 | WR_FE |
||
262 | ERR_FF LD A,0XFF |
||
263 | RET |
||
264 | |||
265 | CHK_SUM |
||
266 | ; IF HACK_RBIOS=0 |
||
267 | ; LD HL,0XC000 |
||
268 | ; ELSE |
||
269 | RET |
||
270 | DW 0XC000 |
||
271 | ; ENDIF |
||
272 | XOR A |
||
273 | CS_LP ADD A,(HL) |
||
274 | ADC A,0 |
||
275 | INC HL |
||
276 | BIT 7,H |
||
277 | JR NZ,CS_LP |
||
278 | DEC A |
||
279 | RET Z |
||
280 | JP PROT |
||
281 | |||
282 | ;--------------------------------------- |
||
283 | ; PAGE MANIPULATION |
||
284 | PAGE_MAN LD A,E |
||
285 | CP 7 |
||
286 | JR Z,PM_TST_RU5 |
||
287 | JR NC,PM_ERR_1 |
||
288 | PM_2 LD (TMP_W),HL |
||
289 | LD HL,PM_ROM_TAB |
||
290 | CP 4 |
||
291 | JR NC,PM_1 |
||
292 | LD HL,PM_RAM_RU5 |
||
293 | BIT 0,(IX-_FLAG) |
||
294 | JR NZ,PM_1 |
||
295 | LD HL,PM_RAM_RU7 |
||
296 | PM_1 BIT 0,A |
||
297 | JR Z,PM_3 |
||
298 | LD A,6 |
||
299 | CALL ADD_HL_A |
||
300 | PM_3 LD A,B |
||
301 | CALL _VJMP |
||
302 | DB 4 |
||
303 | DW ERR_FF |
||
304 | DW PM_GET_INF |
||
305 | DW PM_SET_PG |
||
306 | DW PM_GO |
||
307 | PM_TST_RU5 BIT 0,(IX-_FLAG) |
||
308 | JR Z,PM_2 |
||
309 | PM_ERR_1 LD A,1 |
||
310 | RET |
||
311 | |||
312 | PM_ERR_2 LD A,2 |
||
313 | RET |
||
314 | |||
315 | PM_ERR_3 LD A,3 |
||
316 | RET |
||
317 | |||
318 | PM_GET_INF LD A,D |
||
319 | CP 6 |
||
320 | JR NC,PM_ERR_2 |
||
321 | CALL ADD_HL_A |
||
322 | LD D,(HL) |
||
323 | XOR A |
||
324 | RET |
||
325 | |||
326 | PM_GO LD A,D |
||
327 | PUSH HL |
||
328 | POP IY |
||
329 | INC HL |
||
330 | EXX |
||
331 | LD HL,PM_GO_TAB |
||
332 | CP 3 |
||
333 | JR NC,PM_ERR_3 |
||
334 | CALL _IND |
||
335 | LD DE,4004H |
||
336 | LD BC,32-4 |
||
337 | LDIR |
||
338 | LD E,(IX-_SYS_P) |
||
339 | DI |
||
340 | IM 0 |
||
341 | LD BC,0C077H |
||
342 | XOR A |
||
343 | OUT (C),A |
||
344 | LD BC,CONF_128 |
||
345 | OUT (C),A |
||
346 | LD A,(IY+4) |
||
347 | RCALL PM_SET |
||
348 | LD A,10H |
||
349 | LD BC,CONF_128 |
||
350 | OUT (C),A |
||
351 | LD A,(IY+0) |
||
352 | RCALL PM_SET |
||
353 | LD BC,0C077H |
||
354 | LD A,6 |
||
355 | OUT (C),A |
||
356 | LD A,(IY+5) |
||
357 | RCALL PM_SET |
||
358 | XOR A |
||
359 | LD BC,CONF_128 |
||
360 | OUT (C),A |
||
361 | LD A,(IY+5) |
||
362 | RCALL PM_SET |
||
363 | LD BC,0FF77H |
||
364 | LD A,E |
||
365 | AND 0F8H |
||
366 | OR 3 |
||
367 | LD E,A |
||
368 | JP PM_RUN_4000 |
||
369 | |||
370 | PM_SET EXX |
||
371 | LD E,L |
||
372 | LD D,H |
||
373 | LD BC,0F7H |
||
374 | JR PM_S_1 |
||
375 | |||
376 | PAGE_L1 LD A,(DE) |
||
377 | INC DE |
||
378 | PM_S_1 XOR 80H |
||
379 | CPL |
||
380 | OUT (C),A |
||
381 | LD A,B |
||
382 | ADD A,40H |
||
383 | LD B, A |
||
384 | JR NC,PAGE_L1 |
||
385 | EXX |
||
386 | RET |
||
387 | |||
388 | MON_IMG include mon.a80 |
||
389 | |||
390 | CH1: ; EDISK RU7 |
||
391 | DB 0XFF ;0FFH ;+ |
||
392 | DB 4 ;2 ;+ |
||
393 | DB 0 ;0 ;+ |
||
394 | DB 0 ;1 ;- |
||
395 | DB 5 ;1 ;+ |
||
396 | DB 0 ;0 ;+ |
||
397 | DW 0X96 ;1AH ;+ |
||
398 | DB 0X11 ;128 ;+ |
||
399 | DW 0X200 ;128 ;+ |
||
400 | DB 1 ;1 ;+ |
||
401 | DW 0 ;0 ;+ |
||
402 | DW 0XC5E4 ;3328 ;+ |
||
403 | DW 0X44 ;128 ;+ |
||
404 | DW 0X2EE ;1AH ;+ |
||
405 | DB 8 ;8 ;+ |
||
406 | DW 0X80 ;128 ;+ |
||
407 | DB 2 |
||
408 | DB 2 |
||
409 | DB 2 |
||
410 | DW 0 |
||
411 | DB 0XFF |
||
412 | DB 2 |
||
413 | DB 0X50 |
||
414 | DW 0X50 |
||
415 | DW 0 |
||
416 | |||
417 | CH1_5: ; EDISK RU5 (ROM) |
||
418 | DB 0FFH ;+ |
||
419 | DB 2 ;+ |
||
420 | DB 0 ;+ |
||
421 | DB 1 ;- |
||
698 | dimkam | 422 | DB 1 ;+ |
627 | savelij | 423 | DB 0 ;+ |
698 | dimkam | 424 | DW 160 ;3H ;+ |
691 | DimkaM | 425 | DB 16 ;+ |
426 | DW 256 ;+ |
||
427 | DB 2 ;+ |
||
627 | savelij | 428 | DW 0 ;+ |
691 | DimkaM | 429 | DW 5120 ; 384 ;+ |
430 | DW 32 ;+ |
||
431 | DW 160 ;3H ;+ |
||
627 | savelij | 432 | DB 8 ;+ |
433 | DW 128 ;+ |
||
434 | |||
435 | include conio.a80 |
||
436 | include scankey.a80 |
||
437 | include textio.a80 |
||
438 | include hex.a80 |
||
439 | include disk.a80 |
||
440 | include fdc_wd.a80 |
||
441 | include ed_drv.a80 |
||
442 | include hddrv.a80 |
||
443 | include config.a80 |
||
444 | |||
445 | CPM_IMG binclude cpm.img |
||
446 | include bios.a80 |
||
447 | CPM_SIZE EQU $-CPM_IMG |
||
448 | |||
449 | VAR1_I |
||
450 | ; IN VALUE |
||
451 | RQCHAN_ DB 0 ; DM RQCHAN 1 ; |
||
452 | RQCOM_ DB 0 ; DM RQCOM 1 ; |
||
453 | RQBLN_ DB 0 ; DM RQBLN 1 ; |
||
454 | RQTRACK_ DW 0 ; DM RQTRACK 2 ; |
||
455 | RQBLOCK_ DW 0X4F00 ; DM RQBLOCK 2 ; |
||
456 | RQBADR_ DW 0X18 ; DM RQBADR 2 ; |
||
457 | |||
458 | ; WORK VALUE |
||
459 | RQHEAD_ DB 7 ; DM RQHEAD 1 ; |
||
460 | RQCYL_ DW 0 ; DM RQCYL 2 ; |
||
461 | RQDEV_ DB 0 ; DM RQDEV 1 ; |
||
462 | LOCBUF_ DW 0 ; DM LOCBUF 2 ; |
||
463 | RQSECT_ DB 7 ; DM RQSECT 1 ; |
||
464 | ;DM DCSEGM 2 ;
|
||
465 | DCBUF_ DW 0X300 ; DM DCBUF 2 ; |
||
466 | REP_ DB 1 ; DM REP 1 ; |
||
467 | |||
468 | ;
|
||
469 | FD_TRKS_ DB 0X0A,7,8,0 ; DM FD_TRKS 4 ; |
||
470 | |||
471 | ;
|
||
472 | BUFT_ DB 0 ; DM BUFT 1 ; |
||
473 | BUFTRK_ DW 0X1001 ; DM BUFTRK 2 ; |
||
474 | BUFSEC_ DB 0X3F ; DM BUFSEC 1 ; |
||
475 | |||
476 | DB 0XFE,0,0XA6 |
||
477 | DUPL 0X0C,0 |
||
478 | DB 0XFF,0X0F,5,0,8,0X60,4,0X3F,0XC9,0,0 |
||
479 | |||
480 | VAR1_S EQU $-VAR1_I |
||
481 | |||
482 | PALN DB 0FFH,0FEH,0FDH,0FCH,0EFH,0EEH,0EDH,0ECH,0FFH,0DEH,0BDH,09CH,06FH,04EH,02DH,00CH |
||
483 | |||
484 | include init.a80 |
||
485 | include ve31.a80 |
||
486 | include ci.a80 |
||
487 | |||
1120 | savelij | 488 | IF MOMPASS = 1 |
489 | HZ EQU $ |
||
490 | ENDIF |
||
491 | |||
627 | savelij | 492 | ; IF HACK_RBIOS=0 |
493 | ; ELSE |
||
1120 | savelij | 494 | DUPL 0x3E20 - $ |
627 | savelij | 495 | WR_MAS_SLA LD BC,HD_HEAD;0XCF |
496 | LD A,(IY+2) |
||
497 | AND 1 |
||
498 | RRCA |
||
499 | RRCA |
||
500 | RRCA |
||
501 | RRCA |
||
502 | OR 0XA0 |
||
503 | OUT (C),A |
||
504 | LD BC,HD_CYLHI;0XAF |
||
505 | RET |
||
506 | |||
507 | GET_MAS_SLA LD C,A |
||
508 | LD A,(IY+2) |
||
509 | AND 1 |
||
510 | RRCA |
||
511 | RRCA |
||
512 | RRCA |
||
513 | RRCA |
||
514 | OR C |
||
515 | LD BC,HD_HEAD;0XCF |
||
516 | RET |
||
517 | ; ENDIF |
||
518 | |||
519 | DUPL 0X3EFF-$,0 |
||
520 | MY_R_ADR: DEFW PTST_1 |
||
521 | |||
522 | PM_ROM_TAB: |
||
523 | DB 64H,5,2,0, 66H,65H |
||
524 | DB 64H,5,2,80H,66H,65H |
||
525 | PM_RAM_RU5: |
||
526 | DB 6, 5,2,0, 6,7 |
||
527 | DB 6, 5,2,80H,6,7 |
||
528 | PM_RAM_RU7: |
||
529 | DB 1CH,5,2,0, 1DH,1EH |
||
530 | DB 1CH,5,2,80H,1DH,1EH |
||
531 | |||
532 | PM_GO_TAB: |
||
533 | DW PM_GO_S48 |
||
534 | DW PM_GO_S128 |
||
535 | DW PM_GO_TRDOS |
||
536 | |||
537 | PM_GO_S48: |
||
538 | OUT (C),E |
||
539 | NOP |
||
540 | LD A,30H |
||
541 | LD BC,CONF_128 |
||
542 | OUT (C),A |
||
543 | RST 0 |
||
544 | |||
545 | PM_GO_S128: |
||
546 | OUT (C),E |
||
547 | NOP |
||
548 | XOR A |
||
549 | LD BC,CONF_128 |
||
550 | OUT (C),A |
||
551 | RST 0 |
||
552 | |||
553 | PM_GO_TRDOS: |
||
554 | OUT (C),E |
||
555 | NOP |
||
556 | LD BC,CONF_128 |
||
557 | LD A,30H |
||
558 | OUT (C),A |
||
559 | LD BC,0 |
||
560 | PUSH BC |
||
561 | JP 3D2FH |
||
562 | |||
563 | ; DUPL 0X3FFE-$,0 |
||
564 | ; DB 0XB2 |
||
565 | |||
1120 | savelij | 566 | IF MOMPASS = 1 |
567 | ; ssss |
||
568 | ENDIF |
||
569 | |||
627 | savelij | 570 | DUPL 0X3FF8-$,0 |
571 | DB "ATMCPM" |
||
572 | DW DATA_VERS |