X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/815c173542f40f3bcfac050831454d86633b555a..cb52e1e0dbfdf6c6defe20b3711e0c50285748f5:/z180/r3init.180 diff --git a/z180/r3init.180 b/z180/r3init.180 index 8156ed7..9edeaf2 100644 --- a/z180/r3init.180 +++ b/z180/r3init.180 @@ -3,7 +3,7 @@ extrn ddtz,bpent extrn $stack - extrn $coninit,$cists,$ci + extrn charini,?const,?conin extrn romend @@ -32,8 +32,15 @@ rsti defl 1 jp bpent rsti defl rsti+1 endm + db 0, 0, 0, 0, 0 ;---------------------------------------------------------------------- + + ;org 40h + + dw 0 + db 0 + if ROMSYS $crom: defb c$rom ; @@ -66,17 +73,20 @@ hwini0: ;---------------------------------------------------------------------- start: - push af ;003c - in0 a,(itc) ;003d Illegal opcode trap? - jp p,??st01 ;0040 - pop af ;0043 - jp bpent ;0044 yes, handle + ld (tmpstack),sp + ld sp,tmpstack + push af + in0 a,(itc) ;Illegal opcode trap? + jp m,??st01 + ld a,i ;I register == 0 ? + jr z,??st02 ; yes, harware reset ??st01: - ld a,i ;0047 I register == 0 ? - jr z,??st02 ;004b yes, harware reset - pop af ;004d - jp bpent ;004e no, allready set up + ld a,(syscbr) + out0 (cbr),a + pop af ;restore registers + ld sp,(tmpstack) ; + jp bpent ; ??st02: di ;0058 @@ -87,8 +97,8 @@ start: ld a,M_NCD ;No Clock Divide out0 (ccr),a - ld a,M_X2CM ;X2 Clock Multiplier - out0 (cmr),a +; ld a,M_X2CM ;X2 Clock Multiplier +; out0 (cmr),a ; search warm start mark @@ -182,6 +192,8 @@ ramok: alloc: out0 (cbr),c ;01de + ld a,c + ld (syscbr),a ld sp,$stack ;01e1 ; Clear RAM using DMA0 @@ -273,28 +285,30 @@ wstart: call prt0_init + call charini -;;; call bufferinit - - - call $coninit - + call bufferinit im 2 ;?030e ei ;0282 - call $cists ;0284 - call $cists ;0287 + call ?const ;0284 + call ?const ;0287 or a ;028a - call nz,$ci ;028d + call nz,?conin ;028d ld a,(banktab) ; ld e,a ; jp ddtz ;0290 + ds 8 +tmpstack: + dw 2 +syscbr: db 1 + ; ;---------------------------------------------------------------------- ; @@ -310,50 +324,106 @@ buf.init: ret ;---------------------------------------------------------------------- +if 0 + extrn msginit,msg_tx_fifo,msg_rx_fifo + extrn msg.sout -.comment * +bufferinit: - extrn msginit,msg.sout,msg_fifo - extrn tx.buf,rx.buf + ld de,msg_tx_fifo + in0 a,cbr + call log2phys + ld (40h+0),hl + ld (40h+2),a + +; ld (bufdat+1),hl +; ld (bufdat+3),a +; ld a,1 +; ld (bufdat+0),a +; ld hl,inimsg +; call msg.sout + + ld de,msg_rx_fifo + in0 a,cbr + call log2phys + ld (bufdat+1),hl + ld (bufdat+3),a + ld a,2 + ld (bufdat+0),a + ld hl,inimsg + call msg.sout + + ret + +inimsg: + db inimsg_e - $ - 1 + db 0AEh + db inimsg_e - $ - 1 + db 0 +bufdat: + db 0 + dw 0 + db 0 +inimsg_e: + +endif +;---------------------------------------------------------------------- +; + + extrn msginit,msg.sout + extrn mtx.fifo,mrx.fifo + extrn co.fifo,ci.fifo bufferinit: call msginit ld hl,buffers - ld bc,0300h + ld b,buftablen bfi_1: + ld a,(hl) + inc hl + ld (bufdat+0),a ld e,(hl) inc hl ld d,(hl) inc hl push hl + + or a + jr nz,bfi_2 + in0 a,cbr + call log2phys + ld (40h+0),hl + ld (40h+2),a + out0 (AVRINT5),a + jr bfi_3 +bfi_2: in0 a,cbr call log2phys ld (bufdat+1),hl ld (bufdat+3),a - ld a,c - ld (bufdat+0),a ld hl,inimsg call msg.sout +bfi_3: pop hl - inc c djnz bfi_1 ret - rept 20 - db 0 - endm - buffers: - dw msg_fifo - dw tx.buf - dw rx.buf + db 0 + dw mtx.fifo + db 1 + dw mrx.fifo + db 2 + dw co.fifo + db 3 + dw ci.fifo +buftablen equ ($ - buffers)/3 inimsg: - db inimsg_e - $ -2 - db PMSG - db 81h + db inimsg_e - $ -1 + db 0AEh db inimsg_e - $ -1 db 0 bufdat: @@ -362,7 +432,6 @@ bufdat: db 0 inimsg_e: - * ; ;----------------------------------------------------------------------