]> cloudbase.mooo.com Git - z180-stamp.git/blame - Z180/r3init.180
ROM files in Z180 dir
[z180-stamp.git] / Z180 / r3init.180
CommitLineData
a16ba2b0
L
1 page 255\r
2 .z80\r
3\r
4 extrn ddtz,bpent\r
5 extrn $stack\r
6 extrn $coninit,$cists,$ci\r
7\r
8 extrn romend\r
9\r
10\r
11 global isv_sw\r
12\r
13 include config.inc\r
14 include z180reg.inc\r
15 include z180.lib\r
16 \r
17CR equ 0dh\r
18\r
19\r
20\r
21;----------------------------------------------------------------------\r
22\r
23 cseg\r
24\r
25 jp start \r
26\r
27; restart vectors\r
28\r
29rsti defl 1\r
30 rept 7\r
31 db 0, 0, 0, 0, 0\r
32 jp bpent\r
33rsti defl rsti+1\r
34 endm\r
35\r
36;----------------------------------------------------------------------\r
37\r
38 if ROMSYS\r
39$crom: defb c$rom ;\r
40 else\r
41 db 0 ;\r
42 endif\r
43\r
44dmclrt: ;clear ram per dma\r
45 db dmct_e-dmclrt-2 ;\r
46 db sar0l ;first port\r
47 dw nullbyte ;src (fixed) \r
48nullbyte:\r
49 db 000h ;src\r
50 dw romend ;dst (inc), start after "rom" code\r
51 db 00h ;dst\r
52 dw 0-romend ;count (64k)\r
53dmct_e:\r
54\r
55\r
56INIWAITS defl CWAITIO\r
57 if ROMSYS\r
58INIWAITS defl INIWAITS+CWAITROM\r
59 endif\r
60\r
61hwini0:\r
62 db 3 ;count\r
63 db rcr,CREFSH ;configure DRAM refresh\r
64 db dcntl,INIWAITS ;wait states\r
65 db cbar,SYS$CBAR\r
66\r
67;----------------------------------------------------------------------\r
68\r
69start:\r
70 push af ;003c\r
71 in0 a,(itc) ;003d Illegal opcode trap?\r
72 jp p,??st01 ;0040\r
73 pop af ;0043\r
74 jp bpent ;0044 yes, handle\r
75\r
76??st01:\r
77 ld a,i ;0047 I register == 0 ? \r
78 jr z,??st02 ;004b yes, harware reset\r
79 pop af ;004d \r
80 jp bpent ;004e no, allready set up\r
81\r
82??st02:\r
83 di ;0058\r
84 ld a,CREFSH\r
85 out0 (rcr),a ; configure DRAM refresh\r
86 ld a,CWAITIO\r
87 out0 (dcntl),a ; wait states\r
88\r
89; search warm start mark\r
90\r
91 ld ix,mark_55AA ;00b8 ; top of common area\r
92 ld a,SYS$CBAR ;\r
93 out0 (cbar),a ;\r
94 ld a,071h ;00bc\r
95 ex af,af' ;00be ;for cbr = 0x70 downto 0x40\r
96swsm_l:\r
97 ex af,af' ;00bf \r
98 dec a ;00c0\r
99 cp 03fh ;00c1\r
100 jr z,kstart ;00c3 ; break (mark not found)\r
101 out0 (cbr),a ;00c5\r
102 ex af,af' ;00c8\r
103 ld a,0aah ;00c9\r
104 cp (ix+000h) ;00cb\r
105 jr nz,swsm_l ;00ce\r
106 cp (ix+002h) ;00d0\r
107 jr nz,swsm_l ;00d3\r
108 cpl ;00d5\r
109 cp (ix+001h) ;00d6\r
110 jr nz,swsm_l ;00d9\r
111 cp (ix+003h) ;00db\r
112 jr nz,swsm_l ;00de\r
113 ld sp,$stack ;00e0 mark found, check\r
114 call checkcrc_alv ;00e3\r
115 jp z,wstart ;00e6 check ok,\r
116\r
117;\r
118; ram not ok, initialize -- kstart --\r
119\r
120kstart:\r
121\r
122 ld a,088h ;00e9 0000-7fff: common 0\r
123 out0 (cbar),a ;00eb 8000-ffff: common 1\r
124 ld ix,08000h ;00f3\r
125 ld a,0 ;00f1 start at 008000 (2. phys. 32k block)\r
126??f_0:\r
127 out0 (cbr),a ;00f9\r
128\r
129 ld (ix+0),a ;0103 \r
130 cpl\r
131 ld (ix+1),a ;0103 \r
132 cpl\r
133 add a,8 ;010a next 'bank'\r
134 cp 078h ;010c stop at 078000\r
135 jr nz,??f_0 ;010e\r
136\r
137 ld de,8000h ;0114 first block not tested, but mark as ok\r
138 ld a,0 ;00f1 start at 008000 (2. phys. 32k block)\r
139??cp_0:\r
140 out0 (cbr),a ;011c\r
141 ld c,a\r
142 xor (ix+0)\r
143 ld b,a\r
144 ld a,c\r
145 cpl\r
146 xor (ix+1)\r
147 or b\r
148 jr nz,??cp_1\r
149 scf\r
150??cp_1:\r
151 rr d\r
152 rr e\r
153 ld a,c\r
154 add a,8\r
155 cp 078h ; stop at 078000\r
156 jr nz,??cp_0\r
157 \r
158;\r
159; ram test found 1 or more error free blocks (32k)\r
160;\r
161\r
162ramok:\r
163 ld a,SYS$CBAR ;01c8\r
164 out0 (cbar),a ;01ca\r
165 ld h,d\r
166 ld l,e\r
167 ld c,070h ;01ce highest block\r
168 ld b,15 ;01d0\r
169??sr_1:\r
170 add hl,hl\r
171 jr c,alloc ;01d4 highest "error free" block\r
172 ld a,c ;01d6\r
173 sub 008h ;01d7\r
174 ld c,a ;01d9\r
175 djnz ??sr_1 ;01da\r
176\r
177 slp ;01dc should never be reached\r
178\r
179alloc:\r
180 out0 (cbr),c ;01de\r
181 ld sp,$stack ;01e1\r
182 \r
183; Clear RAM using DMA0\r
184\r
185 ld hl,dmclrt ;load DMA registers\r
186 call io.ini.m\r
187 ld a,0cbh ;01ef dst +1, src fixed, burst\r
188 out0 (dmode),a ;01f1\r
189\r
190 ld b,512/64\r
191 ld a,062h ;01f4 enable dma0, \r
192??cl_1:\r
193 out0 (dstat),a ;01f9 clear (up to) 64k\r
194 djnz ??cl_1 ; end of RAM?\r
195 \r
196; Init bank manager\r
197 \r
198 ld hl,banktabsys ;020f\r
199 ld (hl),c ; Common area\r
200 inc hl ;0213\r
201 ld (hl),c ; System work area\r
202 inc hl ;0215 Point to bank 0 entry\r
203 ld b,BANKS ;0216\r
204l0218h:\r
205 ld (hl),0ffh ;0218 Mark all banks as unassigned\r
206 inc hl ;021a\r
207 djnz l0218h ;021b\r
208\r
209 ld hl,memalv ;\r
210 ld b,8 ; 8*4k ie. first 32k\r
211??a_0:\r
212 ld (hl),0e0h ; mark as sys ("rom"/monitor)\r
213 inc hl\r
214 djnz ??a_0\r
215 \r
216 rr d ; shift out bit for block 0\r
217 rr e ;\r
218 ld c,15 ;022c 15*32k remaining blocks\r
219l022eh:\r
220 ld a,0feh ; 0xfe == block with error(s)\r
221 rr d ;\r
222 rr e\r
223 adc a,0 ; ==> 0xff : block ok\r
224 ld b,32/4 ; 32k == 8 * 4k \r
225l0236h:\r
226 ld (hl),a ;\r
227 inc hl ;\r
228 djnz l0236h ;\r
229 dec c ;\r
230 jr nz,l022eh ;next 32k block\r
231 \r
232 ld hl,memalv+0ch ;memalv+0ch\r
233 ld a,(banktabsys) ;\r
234 call add_hl_a\r
235 ld b,3 ;\r
236l024ah:\r
237 ld (hl),0ech ;alloc system ram\r
238 inc hl ;\r
239 djnz l024ah ;\r
240 ld (hl),0efh ;alloc common\r
241 call gencrc_alv\r
242\r
243 ld hl,0000h ;bank # \r
244 ld bc,0f0fh ; size (?) (4k blocks)\r
245 xor a ;\r
246 call sub_0420h ;alloc mem for bank 0\r
247 ld c,l ;\r
248 or a ;\r
249 call z,sub_04b5h ;\r
250\r
251 ld hl,0101h ;\r
252 ld bc,0f0fh ;\r
253 xor a ;\r
254 call sub_0420h ;\r
255 ld c,l ;\r
256 or a ;\r
257 call z,sub_04b5h ;\r
258\r
259 ld hl,055AAh ;set warm start mark\r
260 ld (mark_55AA),hl ;\r
261 ld (mark_55AA+2),hl;\r
262\r
263;\r
264; crc ok -- wstart --\r
265;\r
266wstart:\r
267 call sysram_init ;027f\r
268 call ivtab_init\r
269\r
270 call prt0_init\r
271\r
272\r
273 call bufferinit\r
274\r
275\r
276 call $coninit\r
277\r
278\r
279\r
280\r
281 im 2 ;?030e\r
282 ei ;0282\r
283\r
284 call $cists ;0284\r
285 call $cists ;0287\r
286 or a ;028a\r
287 call nz,$ci ;028d\r
288 \r
289 ld a,(banktab) ; \r
290 ld e,a ; \r
291 jp ddtz ;0290\r
292 \r
293\r
294;\r
295;----------------------------------------------------------------------\r
296;\r
297\r
298 extrn msginit,msg.sout,msg_fifo\r
299 extrn tx.buf,rx.buf\r
300\r
301\r
302;TODO: Make a ringbuffer module.\r
303\r
304 global buf.init\r
305 \r
306buf.init:\r
307 ld (ix+o.in_idx),0\r
308 ld (ix+o.out_idx),0\r
309 ld (ix+o.mask),a\r
310 ret\r
311\r
312;----------------------------------------------------------------------\r
313\r
314bufferinit:\r
315 call msginit\r
316 \r
317 ld hl,buffers\r
318 ld bc,0300h\r
319bfi_1:\r
320 ld e,(hl)\r
321 inc hl\r
322 ld d,(hl)\r
323 inc hl\r
324 push hl\r
325 in0 a,cbr\r
326 call log2phys\r
327 ld (bufdat+1),hl\r
328 ld (bufdat+3),a\r
329 ld a,c\r
330 ld (bufdat+0),a\r
331 ld hl,inimsg\r
332 call msg.sout\r
333 pop hl\r
334 inc c\r
335 djnz bfi_1\r
336 ret\r
337\r
338 rept 20\r
339 db 0\r
340 endm\r
341 \r
342buffers:\r
343 dw msg_fifo\r
344 dw tx.buf\r
345 dw rx.buf\r
346 \r
347inimsg: \r
348 db inimsg_e - $ -2\r
349 db PMSG\r
350 db 81h\r
351 db inimsg_e - $ -1\r
352 db 0\r
353bufdat:\r
354 db 0\r
355 dw 0\r
356 db 0\r
357inimsg_e\r
358\r
359;\r
360;----------------------------------------------------------------------\r
361;\r
362\r
363sysram_init:\r
364 ld hl,sysramw\r
365 ld de,topcodsys\r
366 ld bc,sysrame-sysramw\r
367 ldir\r
368\r
369 ret\r
370\r
371;----------------------------------------------------------------------\r
372\r
373ivtab_init:\r
374 ld hl,ivtab ;\r
375 ld a,h ;\r
376 ld i,a ;\r
377 out0 (il),l ;\r
378\r
379; Let all vectors point to spurious int routines.\r
380\r
381 ld d,high sp.int0\r
382 ld a,low sp.int0\r
383 ld b,9\r
384ivt_i1: \r
385 ld (hl),a\r
386 inc l\r
387 ld (hl),d\r
388 inc l\r
389 add a,sp.int.len\r
390 djnz ivt_i1\r
391 ret\r
392\r
393\r
394prt0_init:\r
395 ld a,i\r
396 ld h,a\r
397 in0 a,(il)\r
398 and 0E0h\r
399 or IV$PRT0\r
400 ld l,a\r
401 ld (hl),low iprt0\r
402 inc hl\r
403 ld (hl),high iprt0\r
404 ld hl,prt0itab\r
405 call io.ini.m\r
406 ret\r
407 \r
408prt0itab:\r
409 db prt0it_e-prt0itab-2\r
410 db tmdr0l\r
411 dw PRT_TC10MS\r
412 dw PRT_TC10MS\r
413 db M_TIE0+M_TDE0 ;enable timer 0 interrupt and down count.\r
414prt0it_e:\r
415\r
416;\r
417;----------------------------------------------------------------------\r
418;\r
419\r
420io.ini:\r
421 push bc\r
422 ld b,0 ;high byte port adress\r
423 ld a,(hl) ;count\r
424 inc hl\r
425ioi_1:\r
426 ld c,(hl) ;port address\r
427 inc hl\r
428 outi\r
429 inc b ;outi decrements b\r
430 dec a\r
431 jr nz,ioi_1\r
432 pop bc\r
433 ret\r
434\r
435io.ini.m:\r
436 push bc\r
437 ld b,(hl)\r
438 inc hl\r
439 ld c,(hl)\r
440 inc hl\r
441 otimr \r
442 pop bc \r
443 ret\r
444 \r
445io.ini.l:\r
446;\r
447\r
448;----------------------------------------------------------------------\r
449;\r
450\r
451; compute crc\r
452; hl: start adr\r
453; bc: len\r
454; bc returns crc val\r
455\r
456do_crc16:\r
457 ld de,0FFFFh\r
458crc1:\r
459 ld a,(hl)\r
460 xor e\r
461 ld e,a\r
462 rrca\r
463 rrca\r
464 rrca\r
465 rrca\r
466 and 0Fh\r
467 xor e\r
468 ld e,a\r
469 rrca\r
470 rrca\r
471 rrca\r
472 push af\r
473 and 1Fh\r
474 xor d\r
475 ld d,a\r
476 pop af\r
477 push af\r
478 rrca\r
479 and 0F0h\r
480 xor d\r
481 ld d,a\r
482 pop af\r
483 and 0E0h\r
484 xor e\r
485 ld e,d\r
486 ld d,a\r
487 cpi\r
488 jp pe,crc1\r
489 or e ;z-flag\r
490 ret\r
491\r
492\r
493gencrc_alv:\r
494 push hl ;03f6\r
495 push de ;03f7\r
496 push bc\r
497 push af ;03f8\r
498 ld hl,banktabsys ;03f9\r
499 ld bc,crc_len ;03fc\r
500 call do_crc16 ;03ff\r
501 ld (hl),e\r
502 inc hl\r
503 ld (hl),d\r
504 pop af ;0406\r
505 pop bc\r
506 pop de ;0407\r
507 pop hl ;0408\r
508 ret ;0409\r
509\r
510checkcrc_alv:\r
511 push hl ;040a\r
512 push de\r
513 push bc ;040b\r
514 ld hl,banktabsys ;040d\r
515 ld bc,crc_len+2 ;0410\r
516 call do_crc16 ;0413\r
517 pop bc ;041d\r
518 pop de\r
519 pop hl ;041e\r
520 ret ;041f\r
521\r
522;\r
523; alloc\r
524;\r
525; h: max bank #\r
526; l: min bank #\r
527; b: max size\r
528; c: min size\r
529;\r
530; ret:\r
531; a: 0 == ok\r
532; 1 == \r
533; 2 == no bank # in requested range\r
534; ff == crc error\r
535;\r
536\r
537sub_0420h:\r
538 call checkcrc_alv ;0420\r
539 jr nz,l049ch ;0424 crc error, tables corrupt\r
540 \r
541 call sub_049dh ;0427 bank # in req. range available?\r
542 jr c,l0499h ;042a\r
543 push ix ;042c\r
544 push iy ;042e\r
545 push de ;0430\r
546 push hl ;0431\r
547 push bc ;0432\r
548 ld c,b ;0433\r
549 ld b,alv_len+1 ;0434\r
550 ld d,0 ;0436\r
551 ld hl,memalv-1 ;0438\r
552 jr l0441h ;043b\r
553\r
554; find free blocks\r
555\r
556l043dh:\r
557 ld a,(hl) ;043d\r
558 inc a ;043e free blocks are marked 0ffh\r
559 jr z,l0446h ;043f\r
560l0441h:\r
561 inc hl ;0441\r
562 djnz l043dh ;0442\r
563 jr l0464h ;0444\r
564l0446h:\r
565 push hl ;0446 \r
566 pop ix ;0447 free blocks start here\r
567 ld e,000h ;0449\r
568 jr l0451h ;044b\r
569l044dh: ; count free blocks\r
570 ld a,(hl) ;044d\r
571 inc a ;044e\r
572 jr nz,l0457h ;044f\r
573l0451h:\r
574 inc e ;0451\r
575 inc hl ;0452\r
576 djnz l044dh ;0453\r
577 jr l0464h ;0455\r
578\r
579; end of free blocks run. \r
580\r
581l0457h:\r
582 ld a,d ;0457\r
583 cp e ;0458 nr of blocks >= requested ?\r
584 jr nc,l0441h ;0459 \r
585\r
586 ld d,e ;045b\r
587 push ix ;045c\r
588 pop iy ;045e\r
589 ld a,d ;0460\r
590 cp c ;0461\r
591 jr c,l0441h ;0462\r
592l0464h:\r
593 pop bc ;0464\r
594 ld a,d ;0465\r
595 cp b ;0466\r
596 jr c,l046ch ;0467\r
597 ld d,b ;0469\r
598 jr l0471h ;046a\r
599l046ch:\r
600 cp c ;046c\r
601 jr nc,l0471h ;046d\r
602 ld d,000h ;046f\r
603l0471h:\r
604 ld a,d ;0471\r
605 push iy ;0472\r
606 pop hl ;0474\r
607 ld de,memalv ;0475\r
608 or a ;0478\r
609 sbc hl,de ;0479\r
610 ld b,l ;047b\r
611 ld c,a ;047c\r
612 pop hl ;047d\r
613l047eh:\r
614 or a ;047e\r
615 jr z,l0489h ;047f\r
616 ld (iy+0),l ;0481\r
617 inc iy ;0484\r
618 dec a ;0486\r
619 jr l047eh ;0487\r
620l0489h:\r
621 pop de ;0489\r
622 pop iy ;048a\r
623 pop ix ;048c\r
624 call gencrc_alv ;048e\r
625 ld a,c ;0491\r
626 or a ;0492\r
627 ld a,000h ;0493\r
628 ret nz ;0495\r
629 or 001h ;0496\r
630 ret ;0498\r
631\r
632l0499h:\r
633 ld a,2 ;0499\r
634l049ch:\r
635 or a\r
636 ret ;049c\r
637\r
638\r
639; search a free bank number in range\r
640; h: max #\r
641; l: min #\r
642; ret:\r
643; l: bank number available\r
644; nc, if found, bank nr. in l\r
645; cy, if none found\r
646\r
647sub_049dh:\r
648 push de ;049d\r
649 push bc ;049e\r
650 ex de,hl ;049f\r
651 dec e ;04a0\r
652l04a1h:\r
653 inc e ;04a1 test next #\r
654 ld a,d ;04a2\r
655 cp e ;04a3\r
656 jr c,l04b1h ;04a4 \r
657 ld a,e ;04a6\r
658 ld hl,memalv ;04a7\r
659 ld bc,alv_len ;04aa\r
660 cpir ;04ad bank# allready allocated?\r
661 jr z,l04a1h ;04af if yes, search for next\r
662l04b1h:\r
663 ex de,hl ;04b1\r
664 pop bc ;04b2\r
665 pop de ;04b3\r
666 ret ;04b4\r
667\r
668\r
669sub_04b5h:\r
670 ld a,l ;04b5\r
671 cp 012h ;04b6\r
672 ccf ;04b8\r
673 ret c ;04b9\r
674 push hl ;04ba\r
675 ld hl,banktab ;04bb\r
676 call add_hl_a\r
677 ld (hl),b ;04c3\r
678 call gencrc_alv ;04c4\r
679 pop hl ;04c7\r
680 or a ;04c8 clear carry\r
681 ret ;04c9\r
682\r
683\r
684;--------------------------------------------------------------\r
685;\r
686; de: Log. Address\r
687; a: Bank number\r
688;\r
689;out ahl: Phys. (linear) Address\r
690\r
691\r
692bnk2phys:\r
693 push hl\r
694 ld hl,banktab\r
695 call add_hl_a\r
696 ld a,(hl)\r
697 pop hl\r
698\r
699 ; fall thru\r
700;--------------------------------------------------------------\r
701;\r
702; de: Log. Address\r
703; a: Bank (bbr)\r
704;\r
705; OP: ahl = (a<<12) + (d<<8) + e\r
706;\r
707;out ehl: Phys. (linear) Address\r
708\r
709\r
710log2phys:\r
711 push bc ;\r
712 ld c,a ;\r
713 ld b,16 ;\r
714 mlt bc ;bc = a<<4\r
715 ld l,d ;\r
716 ld h,0 ;\r
717 add hl,bc ;bc + d == a<<4 + d \r
718 ld a,h ;\r
719 ld h,l ;\r
720 ld l,e ;\r
721 pop bc ;\r
722 ret ;\r
723\r
724\r
725;--------------------------------------------------------------\r
726;\r
727;return:\r
728; hl = hl + a\r
729; Flags undefined\r
730;\r
731\r
732add_hl_a:\r
733 add a,l \r
734 ld l,a \r
735 ret nc \r
736 inc h \r
737 ret \r
738\r
739; ---------------------------------------------------------\r
740\r
741sysramw:\r
742\r
743 .phase isvsw_loc\r
744topcodsys:\r
745\r
746; Trampoline for interrupt routines in banked ram.\r
747; Switch stack pointer to "system" stack in top ram\r
748; Save cbar\r
749 \r
750isv_sw: ;\r
751 ex (sp),hl ; save hl, return adr in hl\r
752 push de ;\r
753 push af ;\r
754 ex de,hl ;\r
755 ld hl,0 ;\r
756 add hl,sp ;\r
757 ld a,h ;\r
758 cp 0f8h ;\r
759 jr nc,isw_1 ;\r
760 ld sp,$stack ;\r
761isw_1:\r
762 push hl ;\r
763 in0 h,(cbar) ;\r
764 push hl ;\r
765 ld a,SYS$CBAR ;\r
766 out0 (cbar),a ;\r
767 ex de,hl ;\r
768 ld e,(hl) ;\r
769 inc hl ;\r
770 ld d,(hl) ;\r
771 ex de,hl ;\r
772 push bc ;\r
773 call jphl ;\r
774\r
775 pop bc ;\r
776 pop hl ;\r
777 out0 (cbar),h ;\r
778 pop hl ;\r
779 ld sp,hl ;\r
780 pop af ;\r
781 pop de ;\r
782 pop hl ;\r
783 ei ;\r
784 ret ;\r
785jphl:\r
786 jp (hl) ;\r
787\r
788; ---------------------------------------------------------\r
789\r
790iprt0:\r
791 push af\r
792 push hl\r
793 in0 a,(tcr)\r
794 in0 a,(tmdr0l)\r
795 in0 a,(tmdr0h)\r
796 ld a,(tim_ms)\r
797 inc a\r
798 cp 100\r
799 jr nz,iprt_1\r
800 xor a\r
801 ld hl,(tim_s)\r
802 inc hl\r
803 ld (tim_s),hl\r
804iprt_1:\r
805 ld (tim_ms),a\r
806 pop hl\r
807 pop af\r
808 ei\r
809 ret\r
810\r
811; ---------------------------------------------------------\r
812\r
813sp.int0:\r
814 ld a,0d0h\r
815 jr sp.i.1\r
816sp.int.len equ $-sp.int0\r
817 ld a,0d1h\r
818 jr sp.i.1\r
819 ld a,0d2h\r
820 jr sp.i.1\r
821 ld a,0d3h\r
822 jr sp.i.1\r
823 ld a,0d4h\r
824 jr sp.i.1\r
825 ld a,0d5h\r
826 jr sp.i.1\r
827 ld a,0d6h\r
828 jr sp.i.1\r
829 ld a,0d7h\r
830 jr sp.i.1\r
831 ld a,0d8h\r
832sp.i.1:\r
833; out (80h),a\r
834 halt\r
835\r
836curph defl $\r
837 .dephase\r
838sysrame:\r
839 .phase curph\r
840tim_ms: db 0\r
841tim_s: dw 0\r
842 .dephase\r
843 \r
844;-----------------------------------------------------\r
845\r
846 dseg\r
847\r
848 ds 1\r
849banktabsys:\r
850 ds 1 ;0c001h\r
851 ds 1 ;0c002h\r
852banktab:\r
853 ds BANKS ;0c003h\r
854memalv:\r
855 ds 512/4 ;Number of 4k blocks\r
856alv_len equ $-memalv\r
857crc_len equ $-banktabsys\r
858\r
859crc_memalv: \r
860 ds 2 ;\r
861\r
862 cseg\r
863\r
864 ;.phase 0ffc0h\r
865;ivtab equ 0ffc0h ; 0ffc0h ;int vector table\r
866 ;.dephase\r
867\r
868 ;.phase 0fffch\r
869mark_55AA equ 0fffch\r
870 ;ds 4 ; 0fffch\r
871 ;.dephase\r
872\r
873\r
874 end\r
875\r