]> cloudbase.mooo.com Git - z180-stamp.git/blame - z180/init.180
Remove memory test and bank manager.
[z180-stamp.git] / z180 / init.180
CommitLineData
a16ba2b0
L
1 page 255\r
2 .z80\r
3\r
4 extrn ddtz,bpent\r
5 extrn $stack\r
30d1329e 6 extrn charini,?const,?conin\r
8df5b655 7 extrn ?cono,?conos\r
a16ba2b0
L
8\r
9 extrn romend\r
10\r
11\r
12 global isv_sw\r
13\r
14 include config.inc\r
fecee241
L
15 if CPU_Z180\r
16 include z180reg.inc\r
17 include z180.lib\r
18 endif\r
815c1735 19\r
a16ba2b0
L
20\r
21\r
22\r
23;----------------------------------------------------------------------\r
24\r
25 cseg\r
8df5b655 26romstart equ $\r
a16ba2b0 27\r
8df5b655 28 org romstart+0\r
815c1735 29 jp start\r
a16ba2b0 30\r
8df5b655 31iobyte: db 0\r
a16ba2b0
L
32; restart vectors\r
33\r
34rsti defl 1\r
35 rept 7\r
8df5b655 36 org 8*rsti + romstart\r
fecee241
L
37 jp bpent\r
38rsti defl rsti+1\r
a16ba2b0
L
39 endm\r
40\r
41;----------------------------------------------------------------------\r
fecee241
L
42; Config space\r
43;\r
44\r
8df5b655 45 org romstart+40h\r
349c01b1
L
46\r
47 dw 0\r
48 db 0\r
49\r
a16ba2b0 50\r
fecee241
L
51 if ROMSYS\r
52$crom: defb c$rom ;\r
53 else\r
54 db 0 ;\r
55 endif\r
a16ba2b0 56\r
8df5b655 57INIWAITS defl CWAITIO\r
fecee241 58 if ROMSYS\r
8df5b655 59INIWAITS defl INIWAITS+CWAITROM\r
fecee241 60 endif\r
8df5b655
L
61\r
62;----------------------------------------------------------------------\r
63\r
64 org romstart+50h\r
65start:\r
66 jp cstart\r
67 jp wstart\r
68 jp ?const\r
69 jp ?conin\r
70 jp ?cono\r
71 jp ?conos\r
72 jp charini\r
73\r
74;----------------------------------------------------------------------\r
75\r
fecee241
L
76hwini0:\r
77 if CPU_Z180\r
78\r
79 db 3 ;count\r
80 db rcr,CREFSH ;configure DRAM refresh\r
81 db dcntl,INIWAITS ;wait states\r
82 db cbar,SYS$CBAR\r
83 else\r
84 db 0\r
85 endif\r
86\r
87 if CPU_Z180\r
a16ba2b0
L
88dmclrt: ;clear ram per dma\r
89 db dmct_e-dmclrt-2 ;\r
90 db sar0l ;first port\r
815c1735 91 dw nullbyte ;src (fixed)\r
a16ba2b0
L
92nullbyte:\r
93 db 000h ;src\r
94 dw romend ;dst (inc), start after "rom" code\r
95 db 00h ;dst\r
96 dw 0-romend ;count (64k)\r
97dmct_e:\r
fecee241
L
98 endif\r
99\r
a16ba2b0 100\r
8df5b655 101cstart:\r
fecee241 102 if CPU_Z180\r
a16ba2b0 103\r
30d1329e
L
104 push af\r
105 in0 a,(itc) ;Illegal opcode trap?\r
106 jp m,??st01\r
107 ld a,i ;I register == 0 ?\r
fecee241 108 jr z,hw_reset ; yes, harware reset\r
a16ba2b0
L
109\r
110??st01:\r
fecee241 111 ; TODO: SYS$CBR\r
30d1329e
L
112 ld a,(syscbr)\r
113 out0 (cbr),a\r
114 pop af ;restore registers\r
30d1329e 115 jp bpent ;\r
a16ba2b0 116\r
fecee241 117hw_reset:\r
a16ba2b0
L
118 di ;0058\r
119 ld a,CREFSH\r
120 out0 (rcr),a ; configure DRAM refresh\r
121 ld a,CWAITIO\r
122 out0 (dcntl),a ; wait states\r
123\r
815c1735
L
124 ld a,M_NCD ;No Clock Divide\r
125 out0 (ccr),a\r
bad2d92d
L
126; ld a,M_X2CM ;X2 Clock Multiplier\r
127; out0 (cmr),a\r
fecee241 128 else\r
8df5b655
L
129 di\r
130 xor a\r
131 ld (@cbnk),a\r
fecee241 132 endif\r
815c1735 133\r
fecee241 134; check warm start mark\r
a16ba2b0 135\r
8df5b655
L
136 ld ix,mark_55AA ; top of common area\r
137 ld a,0aah ;\r
138 cp (ix+000h) ;\r
139 jr nz,kstart ;\r
140 cp (ix+002h) ;\r
141 jr nz,kstart ;\r
142 cpl ;\r
143 cp (ix+001h) ;\r
144 jr nz,kstart ;\r
145 cp (ix+003h) ;\r
146 jr nz,kstart ;\r
147 ld sp,$stack ; mark found, check\r
148 jp z,wstart ; check ok,\r
fecee241 149\r
a16ba2b0
L
150; ram not ok, initialize -- kstart --\r
151\r
152kstart:\r
fecee241
L
153 if CPU_Z180\r
154 ld a,SYS$CBAR\r
155 out0 (cbar),a\r
156 ld a,SYS$CBR\r
8df5b655 157 out0 (cbr),a\r
fecee241 158 endif\r
a16ba2b0 159\r
a16ba2b0 160 ld sp,$stack ;01e1\r
815c1735 161\r
a16ba2b0
L
162; Clear RAM using DMA0\r
163\r
fecee241
L
164 if CPU_Z180\r
165 if 0\r
8df5b655 166 \r
a16ba2b0
L
167 ld hl,dmclrt ;load DMA registers\r
168 call io.ini.m\r
169 ld a,0cbh ;01ef dst +1, src fixed, burst\r
170 out0 (dmode),a ;01f1\r
171\r
172 ld b,512/64\r
815c1735 173 ld a,062h ;01f4 enable dma0,\r
a16ba2b0
L
174??cl_1:\r
175 out0 (dstat),a ;01f9 clear (up to) 64k\r
176 djnz ??cl_1 ; end of RAM?\r
8df5b655 177 \r
fecee241
L
178 endif\r
179 endif\r
a16ba2b0
L
180\r
181 ld hl,055AAh ;set warm start mark\r
fecee241
L
182 ld (mark_55AA),hl\r
183 ld (mark_55AA+2),hl\r
184\r
185; -- wstart --\r
a16ba2b0 186\r
a16ba2b0
L
187wstart:\r
188 call sysram_init ;027f\r
189 call ivtab_init\r
fecee241
L
190 if CPU_Z180\r
191 call prt0_init\r
192 endif\r
a16ba2b0 193\r
30d1329e 194 call charini\r
bad2d92d 195 call bufferinit\r
a16ba2b0 196\r
fecee241
L
197 if CPU_Z80\r
198 ld a,0\r
199 call selbnk\r
200 endif\r
a16ba2b0
L
201\r
202 im 2 ;?030e\r
203 ei ;0282\r
204\r
30d1329e
L
205 call ?const ;0284\r
206 call ?const ;0287\r
a16ba2b0 207 or a ;028a\r
30d1329e 208 call nz,?conin ;028d\r
815c1735 209\r
fecee241
L
210 if CPU_Z180\r
211 ld e,0 ;Sys$Bank\r
212 else\r
8df5b655 213; TODO:\r
fecee241 214 endif\r
a16ba2b0 215 jp ddtz ;0290\r
815c1735 216\r
30d1329e 217\r
fecee241 218 if CPU_Z180\r
8df5b655 219; TODO: SYS$CBR\r
30d1329e 220syscbr: db 1\r
fecee241 221 endif\r
30d1329e 222\r
a16ba2b0
L
223;\r
224;----------------------------------------------------------------------\r
225;\r
226\r
a16ba2b0
L
227;TODO: Make a ringbuffer module.\r
228\r
229 global buf.init\r
815c1735 230\r
a16ba2b0
L
231buf.init:\r
232 ld (ix+o.in_idx),0\r
233 ld (ix+o.out_idx),0\r
234 ld (ix+o.mask),a\r
235 ret\r
236\r
237;----------------------------------------------------------------------\r
6a4e9540 238if 0\r
bad2d92d
L
239 extrn msginit,msg_tx_fifo,msg_rx_fifo\r
240 extrn msg.sout\r
349c01b1
L
241\r
242bufferinit:\r
349c01b1 243\r
bad2d92d 244 ld de,msg_tx_fifo\r
349c01b1
L
245 in0 a,cbr\r
246 call log2phys\r
247 ld (40h+0),hl\r
248 ld (40h+2),a\r
bad2d92d 249\r
6a4e9540
L
250; ld (bufdat+1),hl\r
251; ld (bufdat+3),a\r
252; ld a,1\r
253; ld (bufdat+0),a\r
254; ld hl,inimsg\r
255; call msg.sout\r
349c01b1 256\r
bad2d92d
L
257 ld de,msg_rx_fifo\r
258 in0 a,cbr\r
259 call log2phys\r
260 ld (bufdat+1),hl\r
261 ld (bufdat+3),a\r
6a4e9540 262 ld a,2\r
bad2d92d
L
263 ld (bufdat+0),a\r
264 ld hl,inimsg\r
265 call msg.sout\r
349c01b1 266\r
bad2d92d 267 ret\r
a16ba2b0 268\r
349c01b1 269inimsg:\r
bad2d92d 270 db inimsg_e - $ - 1\r
3531528e 271 db 0AEh\r
bad2d92d 272 db inimsg_e - $ - 1\r
349c01b1
L
273 db 0\r
274bufdat:\r
275 db 0\r
276 dw 0\r
277 db 0\r
278inimsg_e:\r
bad2d92d 279\r
6a4e9540 280endif\r
fecee241 281\r
349c01b1 282;----------------------------------------------------------------------\r
4caee1ec 283\r
6a4e9540
L
284 extrn msginit,msg.sout\r
285 extrn mtx.fifo,mrx.fifo\r
286 extrn co.fifo,ci.fifo\r
4caee1ec
L
287\r
288\r
a16ba2b0 289bufferinit:\r
fecee241
L
290 if CPU_Z180\r
291 call msginit\r
815c1735 292\r
a16ba2b0 293 ld hl,buffers\r
6a4e9540 294 ld b,buftablen\r
a16ba2b0 295bfi_1:\r
6a4e9540
L
296 ld a,(hl)\r
297 inc hl\r
298 ld (bufdat+0),a\r
a16ba2b0
L
299 ld e,(hl)\r
300 inc hl\r
301 ld d,(hl)\r
302 inc hl\r
303 push hl\r
6a4e9540
L
304\r
305 or a\r
306 jr nz,bfi_2\r
8df5b655 307 call hw_log2phys\r
6a4e9540
L
308 ld (40h+0),hl\r
309 ld (40h+2),a\r
310 out0 (AVRINT5),a\r
311 jr bfi_3 \r
312bfi_2:\r
8df5b655 313 call hw_log2phys\r
a16ba2b0
L
314 ld (bufdat+1),hl\r
315 ld (bufdat+3),a\r
a16ba2b0
L
316 ld hl,inimsg\r
317 call msg.sout\r
6a4e9540 318bfi_3:\r
a16ba2b0 319 pop hl\r
a16ba2b0
L
320 djnz bfi_1\r
321 ret\r
fecee241
L
322\r
323 else\r
324\r
325 call msginit\r
8df5b655
L
326\r
327 ld hl,buffers\r
328 ld b,buftablen\r
329bfi_1:\r
330 ld a,(hl)\r
331 inc hl\r
332 ld (bufdat+0),a\r
333 ld e,(hl)\r
334 inc hl\r
335 ld d,(hl)\r
336 inc hl\r
337 ex de,hl\r
338\r
339 or a\r
340 jr nz,bfi_2\r
341\r
342 ld a,(@cbnk)\r
343 call bnk2phys\r
344\r
345 ld (40h+0),hl\r
346 ld (40h+2),a\r
347 out (AVRINT5),a\r
348 jr bfi_3\r
349bfi_2:\r
350\r
351 ld a,(@cbnk)\r
352 call bnk2phys\r
353\r
354 ld (bufdat+1),hl\r
355 ld (bufdat+3),a\r
356 ld hl,inimsg\r
357 call msg.sout\r
358bfi_3:\r
359 ex de,hl\r
360 djnz bfi_1\r
361 ret\r
fecee241 362 endif\r
a16ba2b0 363\r
a16ba2b0 364buffers:\r
6a4e9540
L
365 db 0\r
366 dw mtx.fifo\r
367 db 1\r
368 dw mrx.fifo\r
369 db 2\r
370 dw co.fifo\r
371 db 3\r
372 dw ci.fifo\r
373buftablen equ ($ - buffers)/3\r
815c1735
L
374\r
375inimsg:\r
6a4e9540 376 db inimsg_e - $ -1\r
3531528e 377 db 0AEh\r
a16ba2b0
L
378 db inimsg_e - $ -1\r
379 db 0\r
380bufdat:\r
381 db 0\r
382 dw 0\r
383 db 0\r
e598b357 384inimsg_e:\r
a16ba2b0 385\r
4caee1ec 386\r
a16ba2b0
L
387;\r
388;----------------------------------------------------------------------\r
389;\r
390\r
391sysram_init:\r
392 ld hl,sysramw\r
393 ld de,topcodsys\r
394 ld bc,sysrame-sysramw\r
395 ldir\r
396\r
397 ret\r
398\r
399;----------------------------------------------------------------------\r
400\r
401ivtab_init:\r
402 ld hl,ivtab ;\r
403 ld a,h ;\r
404 ld i,a ;\r
fecee241 405 if CPU_Z180\r
a16ba2b0 406 out0 (il),l ;\r
fecee241 407 endif\r
a16ba2b0
L
408\r
409; Let all vectors point to spurious int routines.\r
410\r
411 ld d,high sp.int0\r
412 ld a,low sp.int0\r
413 ld b,9\r
815c1735 414ivt_i1:\r
a16ba2b0
L
415 ld (hl),a\r
416 inc l\r
417 ld (hl),d\r
418 inc l\r
419 add a,sp.int.len\r
420 djnz ivt_i1\r
421 ret\r
422\r
4caee1ec 423;----------------------------------------------------------------------\r
a16ba2b0 424\r
fecee241 425 if CPU_Z180\r
a16ba2b0
L
426prt0_init:\r
427 ld a,i\r
428 ld h,a\r
429 in0 a,(il)\r
430 and 0E0h\r
431 or IV$PRT0\r
432 ld l,a\r
433 ld (hl),low iprt0\r
434 inc hl\r
435 ld (hl),high iprt0\r
436 ld hl,prt0itab\r
437 call io.ini.m\r
438 ret\r
815c1735 439\r
a16ba2b0
L
440prt0itab:\r
441 db prt0it_e-prt0itab-2\r
442 db tmdr0l\r
443 dw PRT_TC10MS\r
444 dw PRT_TC10MS\r
445 db M_TIE0+M_TDE0 ;enable timer 0 interrupt and down count.\r
446prt0it_e:\r
fecee241 447 endif\r
a16ba2b0 448\r
4caee1ec 449\r
a16ba2b0
L
450;\r
451;----------------------------------------------------------------------\r
452;\r
453\r
454io.ini:\r
455 push bc\r
fecee241 456 if CPU_Z180\r
8df5b655 457\r
a16ba2b0
L
458 ld b,0 ;high byte port adress\r
459 ld a,(hl) ;count\r
460 inc hl\r
8df5b655
L
461 or a\r
462 jr z,ioi_e\r
a16ba2b0
L
463ioi_1:\r
464 ld c,(hl) ;port address\r
465 inc hl\r
466 outi\r
467 inc b ;outi decrements b\r
468 dec a\r
469 jr nz,ioi_1\r
fecee241
L
470ioi_e: \r
471 else\r
8df5b655
L
472 jr ioi_nxt\r
473ioi_l:\r
474 ld c,(hl) ;port address\r
475 inc hl\r
476 otir\r
477ioi_nxt:\r
478 ld b,(hl) ;count\r
479 inc hl\r
480 inc b\r
481 djnz ioi_l\r
fecee241 482 endif\r
a16ba2b0
L
483 pop bc\r
484 ret\r
485\r
fecee241 486 if CPU_Z180\r
a16ba2b0
L
487io.ini.m:\r
488 push bc\r
489 ld b,(hl)\r
490 inc hl\r
491 ld c,(hl)\r
492 inc hl\r
815c1735
L
493 otimr\r
494 pop bc\r
a16ba2b0 495 ret\r
fecee241 496 endif\r
815c1735 497\r
a16ba2b0
L
498io.ini.l:\r
499;\r
500\r
a16ba2b0 501\r
a16ba2b0 502\r
4caee1ec 503;----------------------------------------------------------------------\r
a16ba2b0 504;\r
fecee241 505 if CPU_Z180\r
a16ba2b0 506\r
fecee241
L
507; a: Bank number\r
508;\r
509; out a: bbr value\r
a16ba2b0 510\r
fecee241
L
511bnk2log:\r
512 push bc\r
513 ld b,a\r
514 ld c,CA\r
515 mlt bc\r
516 add a,10h\r
517 pop bc\r
518 ret\r
a16ba2b0 519\r
a16ba2b0
L
520; de: Log. Address\r
521; a: Bank number\r
522;\r
523;out ahl: Phys. (linear) Address\r
524\r
525\r
526bnk2phys:\r
fecee241 527 call bnk2log\r
a16ba2b0
L
528\r
529 ; fall thru\r
530;--------------------------------------------------------------\r
531;\r
532; de: Log. Address\r
fecee241 533; a: Bank base (bbr)\r
a16ba2b0
L
534;\r
535; OP: ahl = (a<<12) + (d<<8) + e\r
536;\r
4caee1ec 537;out ahl: Phys. (linear) Address\r
a16ba2b0
L
538\r
539\r
540log2phys:\r
541 push bc ;\r
542 ld c,a ;\r
543 ld b,16 ;\r
fecee241
L
544 mlt bc ; bc = a<<4\r
545 ld l,d ;4\r
546 ld h,0 ;6\r
547 add hl,bc ;7 bc + d == a<<4 + d\r
548 ld a,h ;4\r
549 ld h,l ;4\r
550 ld l,e ;4\r
a16ba2b0
L
551 pop bc ;\r
552 ret ;\r
553\r
fecee241
L
554 if 0\r
555 \r
556log2phys:\r
557 push bc ;\r
558 ld b,a ;\r
559 ld c,16 ;\r
560 mlt bc ; bc = a<<4\r
561 ld a,c ;4\r
562 add a,h ;4\r
563 ld h,a ;4\r
564 ld a,b ;4\r
565 adc a,0 ;6\r
566 pop bc ;\r
567 ret ;\r
568\r
569 endif\r
8df5b655
L
570;--------------------------------------------------------------\r
571;\r
572; de: Log. Address\r
573; \r
574;\r
575; OP: ahl = (bankbase<<12) + (d<<8) + e\r
576;\r
577;out ahl: Phys. (linear) Address\r
578\r
579\r
580hw_log2phys:\r
581 push bc ;\r
582 in0 c,(cbar)\r
583 ld a,d\r
584 or 00fh\r
585 cp c\r
586 jr c,hlp_1\r
587 in0 c,(cbr)\r
588 jr hlp_e\r
589hlp_1:\r
590 ld b,16\r
591 mlt bc\r
592 ld a,d\r
593 cp c\r
594 ld c,0\r
595 jr c,hlp_e\r
596 in0 c,(bbr)\r
597hlp_e: \r
598 ld b,16 ;\r
599 mlt bc ;bc = a<<4\r
600 ld l,d ;\r
601 ld h,0 ;\r
602 add hl,bc ;bc + d == a<<4 + d\r
603 ld a,h ;\r
604 ld h,l ;\r
605 ld l,e ;\r
606 pop bc ;\r
607 ret ;\r
608\r
fecee241 609 else\r
8df5b655
L
610\r
611;\r
612;----------------------------------------------------------------------\r
613;\r
614\r
615bnk2phys:\r
616 sla h\r
617 jr nc,b2p_1 ;A15=1 --> common\r
618 ld a,3\r
619b2p_1:\r
620 srl a\r
621 rr h\r
622 ret\r
623\r
fecee241 624 endif\r
a16ba2b0
L
625\r
626;--------------------------------------------------------------\r
627;\r
628;return:\r
629; hl = hl + a\r
630; Flags undefined\r
631;\r
632\r
633add_hl_a:\r
815c1735
L
634 add a,l\r
635 ld l,a\r
636 ret nc\r
637 inc h\r
638 ret\r
a16ba2b0
L
639\r
640; ---------------------------------------------------------\r
641\r
642sysramw:\r
643\r
644 .phase isvsw_loc\r
645topcodsys:\r
646\r
647; Trampoline for interrupt routines in banked ram.\r
648; Switch stack pointer to "system" stack in top ram\r
649; Save cbar\r
815c1735 650\r
a16ba2b0
L
651isv_sw: ;\r
652 ex (sp),hl ; save hl, return adr in hl\r
653 push de ;\r
654 push af ;\r
655 ex de,hl ;\r
656 ld hl,0 ;\r
657 add hl,sp ;\r
658 ld a,h ;\r
659 cp 0f8h ;\r
660 jr nc,isw_1 ;\r
661 ld sp,$stack ;\r
662isw_1:\r
663 push hl ;\r
664 in0 h,(cbar) ;\r
665 push hl ;\r
666 ld a,SYS$CBAR ;\r
667 out0 (cbar),a ;\r
668 ex de,hl ;\r
669 ld e,(hl) ;\r
670 inc hl ;\r
671 ld d,(hl) ;\r
672 ex de,hl ;\r
673 push bc ;\r
674 call jphl ;\r
675\r
676 pop bc ;\r
677 pop hl ;\r
678 out0 (cbar),h ;\r
679 pop hl ;\r
680 ld sp,hl ;\r
681 pop af ;\r
682 pop de ;\r
683 pop hl ;\r
684 ei ;\r
685 ret ;\r
686jphl:\r
687 jp (hl) ;\r
688\r
689; ---------------------------------------------------------\r
690\r
fecee241 691 if CPU_Z180\r
4caee1ec 692\r
a16ba2b0
L
693iprt0:\r
694 push af\r
695 push hl\r
696 in0 a,(tcr)\r
697 in0 a,(tmdr0l)\r
698 in0 a,(tmdr0h)\r
699 ld a,(tim_ms)\r
700 inc a\r
701 cp 100\r
702 jr nz,iprt_1\r
703 xor a\r
704 ld hl,(tim_s)\r
705 inc hl\r
706 ld (tim_s),hl\r
707iprt_1:\r
708 ld (tim_ms),a\r
709 pop hl\r
710 pop af\r
711 ei\r
712 ret\r
713\r
fecee241 714 endif\r
8df5b655 715\r
a16ba2b0
L
716; ---------------------------------------------------------\r
717\r
718sp.int0:\r
719 ld a,0d0h\r
720 jr sp.i.1\r
721sp.int.len equ $-sp.int0\r
722 ld a,0d1h\r
723 jr sp.i.1\r
724 ld a,0d2h\r
725 jr sp.i.1\r
726 ld a,0d3h\r
727 jr sp.i.1\r
728 ld a,0d4h\r
729 jr sp.i.1\r
730 ld a,0d5h\r
731 jr sp.i.1\r
732 ld a,0d6h\r
733 jr sp.i.1\r
734 ld a,0d7h\r
735 jr sp.i.1\r
736 ld a,0d8h\r
737sp.i.1:\r
738; out (80h),a\r
739 halt\r
740\r
8df5b655
L
741; ---------------------------------------------------------\r
742\r
fecee241 743 if CPU_Z80\r
8df5b655
L
744\r
745; Get IFF2\r
746; This routine may not be loaded in page zero\r
747;\r
748; return Carry clear, if INTs are enabled.\r
749;\r
750 global getiff\r
751getiff:\r
752 xor a ;clear accu and carry\r
753 push af ;stack bottom := 00xxh\r
754 pop af\r
755 ld a,i ;P flag := IFF2\r
756 ret pe ;exit carry clear, if enabled\r
757 dec sp\r
758 dec sp ;has stack bottom been overwritten?\r
759 pop af\r
760 and a ;if not 00xxh, INTs were\r
761 ret nz ;actually enabled\r
762 scf ;Otherwise, they really are disabled\r
763 ret\r
764\r
765;----------------------------------------------------------------------\r
766\r
767 global selbnk\r
768\r
769; a: bank (0..2)\r
770\r
771selbnk:\r
772 push bc\r
773 ld c,a\r
774 call getiff\r
775 push af\r
776\r
777 ld a,c\r
778 di\r
779 ld (@cbnk),a\r
780 ld a,5\r
781 out (SIOAC),a\r
782 ld a,(mm_sio0)\r
783 rla\r
784 srl c\r
785 rra\r
786 out (SIOAC),a\r
787 ld (mm_sio0),a\r
788\r
789 ld a,5\r
790 out (SIOBC),a\r
791 ld a,(mm_sio1)\r
792 rla\r
793 srl c\r
794 rra\r
795 out (SIOBC),a\r
796 ld (mm_sio1),a\r
797 pop af\r
798 pop bc\r
799 ret c ;INTs were disabled\r
800 ei\r
801 ret\r
802\r
803;----------------------------------------------------------------------\r
804\r
805; c: bank (0..2)\r
806\r
fecee241 807 if 0\r
8df5b655
L
808\r
809selbnk:\r
810 ld a,(@cbnk)\r
811 xor c\r
812 and 3\r
813 ret z ;no change\r
814\r
815 call getiff\r
816 push af\r
817 ld a,c\r
818 di\r
819 ld (@cbnk),a\r
820 ld a,5\r
821 out (SIOAC),a\r
822 ld a,(mm_sio0)\r
823 rla\r
824 srl c\r
825 rra\r
826 out (SIOAC),a\r
827 ld (mm_sio0),a\r
828\r
829 ld a,5\r
830 out (SIOBC),a\r
831 ld a,(mm_sio1)\r
832 rla\r
833 srl c\r
834 rra\r
835 out (SIOBC),a\r
836 ld (mm_sio1),a\r
837 pop af\r
838 ret nc ;INTs were disabled\r
839 ei\r
840 ret\r
841\r
fecee241 842 endif\r
8df5b655
L
843\r
844;----------------------------------------------------------------------\r
845\r
fecee241 846 if 0\r
8df5b655
L
847 ex af,af'\r
848 push af\r
849 ex af,af'\r
850\r
851 rra\r
852 jr nc,stbk1\r
853 ex af,af'\r
854 ld a,5\r
855 out (SIOAC),a\r
856 ld a,(mm_sio0)\r
857 rla\r
858 srl c\r
859 rra\r
860 out (SIOAC),a\r
861 ld (mm_sio1),a\r
862 ex af,af'\r
863\r
864stbk1:\r
865 rra\r
866 jr nc,stbk2\r
867 ex af,af'\r
868 ld a,5\r
869 out (SIOBC),a\r
870 ld a,(mm_sio1)\r
871 rla\r
872 srl c\r
873 rra\r
874 out (SIOBC),a\r
875 ld (mm_sio1),a\r
876 ex af,af'\r
877\r
878stbk2:\r
fecee241 879 endif\r
8df5b655
L
880\r
881 global @cbnk\r
882 global mm_sio0, mm_sio1\r
883\r
884@cbnk: db 0 ; current bank (0..2)\r
885mm_sio0:\r
886 ds 1\r
887mm_sio1:\r
888 ds 1\r
889\r
890\r
fecee241 891 endif\r
8df5b655
L
892\r
893;----------------------------------------------------------------------\r
894\r
a16ba2b0
L
895curph defl $\r
896 .dephase\r
897sysrame:\r
898 .phase curph\r
899tim_ms: db 0\r
900tim_s: dw 0\r
901 .dephase\r
815c1735 902\r
a16ba2b0
L
903;-----------------------------------------------------\r
904\r
8df5b655 905\r
a16ba2b0
L
906 cseg\r
907\r
908 ;.phase 0ffc0h\r
909;ivtab equ 0ffc0h ; 0ffc0h ;int vector table\r
910 ;.dephase\r
911\r
fecee241
L
912 ;.phase 0fffah\r
913mark_55AA equ 0 - 2 - 4 ;2 byte for trap stack\r
914 ;ds 4\r
a16ba2b0
L
915 ;.dephase\r
916\r
917\r
918 end\r
919\r