X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/6dc26e92c20eedcfcba9e0b75a015a5b160748c5..cb52e1e0dbfdf6c6defe20b3711e0c50285748f5:/z180/r3init.180 diff --git a/z180/r3init.180 b/z180/r3init.180 index 0d3e5be..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 @@ -73,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 @@ -94,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 @@ -189,6 +192,8 @@ ramok: alloc: out0 (cbr),c ;01de + ld a,c + ld (syscbr),a ld sp,$stack ;01e1 ; Clear RAM using DMA0 @@ -280,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 + ; ;---------------------------------------------------------------------- ; @@ -318,100 +325,105 @@ buf.init: ;---------------------------------------------------------------------- if 0 - extrn msginit,msg.sout,msg_fifo - extrn tx.buf,rx.buf - + extrn msginit,msg_tx_fifo,msg_rx_fifo + extrn msg.sout bufferinit: - call msginit - ld hl,buffers - ld bc,0300h -bfi_1: - ld e,(hl) - inc hl - ld d,(hl) - inc hl - push hl + ld de,msg_tx_fifo in0 a,cbr call log2phys ld (40h+0),hl ld (40h+2),a - ld a,c + +; 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 - pop hl - inc c - djnz bfi_1 - ret - rept 20 - db 0 - endm - -buffers: - dw msg_fifo - dw tx.buf - dw rx.buf + ret inimsg: - db inimsg_e - $ -2 - db PMSG - db 81h - db inimsg_e - $ -1 + db inimsg_e - $ - 1 + db 0AEh + db inimsg_e - $ - 1 db 0 bufdat: db 0 dw 0 db 0 inimsg_e: + endif ;---------------------------------------------------------------------- ; -if 0 - extrn msginit,msg.sout,msg_fifo - extrn tx.buf,rx.buf + 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: @@ -420,7 +432,6 @@ bufdat: db 0 inimsg_e: -endif ; ;----------------------------------------------------------------------