X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/e598b357f1cdfa103c2dc9985321f8c4e11d49ee..cd5ee5442821f283f6661befb24b885d944e4c5e:/z180/r3init.180 diff --git a/z180/r3init.180 b/z180/r3init.180 index 8599349..8156ed7 100644 --- a/z180/r3init.180 +++ b/z180/r3init.180 @@ -13,7 +13,7 @@ include config.inc include z180reg.inc include z180.lib - + ;CR equ 0dh @@ -22,7 +22,7 @@ cseg - jp start + jp start ; restart vectors @@ -44,7 +44,7 @@ $crom: defb c$rom ; dmclrt: ;clear ram per dma db dmct_e-dmclrt-2 ; db sar0l ;first port - dw nullbyte ;src (fixed) + dw nullbyte ;src (fixed) nullbyte: db 000h ;src dw romend ;dst (inc), start after "rom" code @@ -73,9 +73,9 @@ start: jp bpent ;0044 yes, handle ??st01: - ld a,i ;0047 I register == 0 ? + ld a,i ;0047 I register == 0 ? jr z,??st02 ;004b yes, harware reset - pop af ;004d + pop af ;004d jp bpent ;004e no, allready set up ??st02: @@ -85,6 +85,11 @@ start: ld a,CWAITIO out0 (dcntl),a ; wait states + ld a,M_NCD ;No Clock Divide + out0 (ccr),a + ld a,M_X2CM ;X2 Clock Multiplier + out0 (cmr),a + ; search warm start mark ld ix,mark_55AA ;00b8 ; top of common area @@ -93,7 +98,7 @@ start: ld a,071h ;00bc ex af,af' ;00be ;for cbr = 0x70 downto 0x40 swsm_l: - ex af,af' ;00bf + ex af,af' ;00bf dec a ;00c0 cp 03fh ;00c1 jr z,kstart ;00c3 ; break (mark not found) @@ -125,9 +130,9 @@ kstart: ??f_0: out0 (cbr),a ;00f9 - ld (ix+0),a ;0103 + ld (ix+0),a ;0103 cpl - ld (ix+1),a ;0103 + ld (ix+1),a ;0103 cpl add a,8 ;010a next 'bank' cp 078h ;010c stop at 078000 @@ -153,7 +158,7 @@ kstart: add a,8 cp 078h ; stop at 078000 jr nz,??cp_0 - + ; ; ram test found 1 or more error free blocks (32k) ; @@ -178,7 +183,7 @@ ramok: alloc: out0 (cbr),c ;01de ld sp,$stack ;01e1 - + ; Clear RAM using DMA0 ld hl,dmclrt ;load DMA registers @@ -187,13 +192,13 @@ alloc: out0 (dmode),a ;01f1 ld b,512/64 - ld a,062h ;01f4 enable dma0, + ld a,062h ;01f4 enable dma0, ??cl_1: out0 (dstat),a ;01f9 clear (up to) 64k djnz ??cl_1 ; end of RAM? - + ; Init bank manager - + ld hl,banktabsys ;020f ld (hl),c ; Common area inc hl ;0213 @@ -211,7 +216,7 @@ l0218h: ld (hl),0e0h ; mark as sys ("rom"/monitor) inc hl djnz ??a_0 - + rr d ; shift out bit for block 0 rr e ; ld c,15 ;022c 15*32k remaining blocks @@ -220,14 +225,14 @@ l022eh: rr d ; rr e adc a,0 ; ==> 0xff : block ok - ld b,32/4 ; 32k == 8 * 4k + ld b,32/4 ; 32k == 8 * 4k l0236h: ld (hl),a ; inc hl ; djnz l0236h ; dec c ; jr nz,l022eh ;next 32k block - + ld hl,memalv+0ch ;memalv+0ch ld a,(banktabsys) ; call add_hl_a @@ -239,7 +244,7 @@ l024ah: ld (hl),0efh ;alloc common call gencrc_alv - ld hl,0000h ;bank # + ld hl,0000h ;bank # ld bc,0f0fh ; size (?) (4k blocks) xor a ; call sub_0420h ;alloc mem for bank 0 @@ -269,7 +274,7 @@ wstart: call prt0_init - call bufferinit +;;; call bufferinit call $coninit @@ -284,24 +289,20 @@ wstart: call $cists ;0287 or a ;028a call nz,$ci ;028d - - ld a,(banktab) ; - ld e,a ; + + ld a,(banktab) ; + ld e,a ; jp ddtz ;0290 - + ; ;---------------------------------------------------------------------- ; - extrn msginit,msg.sout,msg_fifo - extrn tx.buf,rx.buf - - ;TODO: Make a ringbuffer module. global buf.init - + buf.init: ld (ix+o.in_idx),0 ld (ix+o.out_idx),0 @@ -310,9 +311,15 @@ buf.init: ;---------------------------------------------------------------------- +.comment * + + extrn msginit,msg.sout,msg_fifo + extrn tx.buf,rx.buf + + bufferinit: call msginit - + ld hl,buffers ld bc,0300h bfi_1: @@ -337,13 +344,13 @@ bfi_1: rept 20 db 0 endm - + buffers: dw msg_fifo dw tx.buf dw rx.buf - -inimsg: + +inimsg: db inimsg_e - $ -2 db PMSG db 81h @@ -355,6 +362,8 @@ bufdat: db 0 inimsg_e: + * + ; ;---------------------------------------------------------------------- ; @@ -380,7 +389,7 @@ ivtab_init: ld d,high sp.int0 ld a,low sp.int0 ld b,9 -ivt_i1: +ivt_i1: ld (hl),a inc l ld (hl),d @@ -389,6 +398,7 @@ ivt_i1: djnz ivt_i1 ret +;---------------------------------------------------------------------- prt0_init: ld a,i @@ -403,7 +413,7 @@ prt0_init: ld hl,prt0itab call io.ini.m ret - + prt0itab: db prt0it_e-prt0itab-2 db tmdr0l @@ -412,6 +422,7 @@ prt0itab: db M_TIE0+M_TDE0 ;enable timer 0 interrupt and down count. prt0it_e: + ; ;---------------------------------------------------------------------- ; @@ -437,10 +448,10 @@ io.ini.m: inc hl ld c,(hl) inc hl - otimr - pop bc + otimr + pop bc ret - + io.ini.l: ; @@ -518,6 +529,8 @@ checkcrc_alv: pop hl ;041e ret ;041f +;---------------------------------------------------------------------- + ; ; alloc ; @@ -528,7 +541,7 @@ checkcrc_alv: ; ; ret: ; a: 0 == ok -; 1 == +; 1 == ; 2 == no bank # in requested range ; ff == crc error ; @@ -536,7 +549,7 @@ checkcrc_alv: sub_0420h: call checkcrc_alv ;0420 jr nz,l049ch ;0424 crc error, tables corrupt - + call sub_049dh ;0427 bank # in req. range available? jr c,l0499h ;042a push ix ;042c @@ -561,7 +574,7 @@ l0441h: djnz l043dh ;0442 jr l0464h ;0444 l0446h: - push hl ;0446 + push hl ;0446 pop ix ;0447 free blocks start here ld e,000h ;0449 jr l0451h ;044b @@ -575,12 +588,12 @@ l0451h: djnz l044dh ;0453 jr l0464h ;0455 -; end of free blocks run. +; end of free blocks run. l0457h: ld a,d ;0457 cp e ;0458 nr of blocks >= requested ? - jr nc,l0441h ;0459 + jr nc,l0441h ;0459 ld d,e ;045b push ix ;045c @@ -652,7 +665,7 @@ l04a1h: inc e ;04a1 test next # ld a,d ;04a2 cp e ;04a3 - jr c,l04b1h ;04a4 + jr c,l04b1h ;04a4 ld a,e ;04a6 ld hl,memalv ;04a7 ld bc,alv_len ;04aa @@ -703,7 +716,7 @@ bnk2phys: ; ; OP: ahl = (a<<12) + (d<<8) + e ; -;out ehl: Phys. (linear) Address +;out ahl: Phys. (linear) Address log2phys: @@ -713,7 +726,7 @@ log2phys: mlt bc ;bc = a<<4 ld l,d ; ld h,0 ; - add hl,bc ;bc + d == a<<4 + d + add hl,bc ;bc + d == a<<4 + d ld a,h ; ld h,l ; ld l,e ; @@ -729,11 +742,11 @@ log2phys: ; add_hl_a: - add a,l - ld l,a - ret nc - inc h - ret + add a,l + ld l,a + ret nc + inc h + ret ; --------------------------------------------------------- @@ -745,7 +758,7 @@ topcodsys: ; Trampoline for interrupt routines in banked ram. ; Switch stack pointer to "system" stack in top ram ; Save cbar - + isv_sw: ; ex (sp),hl ; save hl, return adr in hl push de ; @@ -786,6 +799,7 @@ jphl: ; --------------------------------------------------------- + iprt0: push af push hl @@ -839,7 +853,7 @@ sysrame: tim_ms: db 0 tim_s: dw 0 .dephase - + ;----------------------------------------------------- dseg @@ -855,7 +869,7 @@ memalv: alv_len equ $-memalv crc_len equ $-banktabsys -crc_memalv: +crc_memalv: ds 2 ; cseg