\r
hwini0:\r
if CPU_Z180\r
- db 3 ;count\r
+ db ;count\r
db rcr,CREFSH ;configure DRAM refresh\r
db dcntl,INIWAITS ;wait states\r
+ db cbr,SYS$CBR\r
db cbar,SYS$CBAR\r
endif\r
db 0\r
\r
kstart:\r
if CPU_Z180\r
+ ld a,SYS$CBR ;TODO:\r
+ out0 (cbr),a\r
ld a,SYS$CBAR\r
out0 (cbar),a\r
- ld a,SYS$CBR\r
- out0 (cbr),a\r
endif\r
\r
ld sp,$stack ;01e1\r
\r
if CPU_Z180\r
if 0\r
- \r
+\r
ld hl,dmclrt ;load DMA registers\r
call ioiniml\r
ld a,0cbh ;01ef dst +1, src fixed, burst\r
??cl_1:\r
out0 (dstat),a ;01f9 clear (up to) 64k\r
djnz ??cl_1 ; end of RAM?\r
- \r
+\r
endif\r
endif\r
\r
; -- wstart --\r
\r
wstart:\r
- call sysram_init ;027f\r
+ call sysram_init\r
call ivtab_init\r
if CPU_Z180\r
- call prt0_init\r
+; call prt0_init\r
endif\r
\r
+ call msginit\r
call charini\r
- call bufferinit\r
\r
if CPU_Z80\r
ld a,0\r
call selbnk\r
endif\r
\r
- im 2 ;?030e\r
- ei ;0282\r
+ ld a,INIDONEVAL ;tell others (CP/M) that hardware and fifos\r
+ ld (INIDONE),a ; are allready initialized\r
+\r
+ im 2\r
+ ei\r
\r
- call ?const ;0284\r
- call ?const ;0287\r
- or a ;028a\r
- call nz,?conin ;028d\r
+ call ?const\r
+ call ?const\r
+ or a\r
+ call nz,?conin\r
\r
if CPU_Z180\r
ld e,0 ;Sys$Bank\r
else\r
; TODO:\r
endif\r
- jp ddtz ;0290\r
+ jp ddtz\r
\r
\r
if CPU_Z180\r
; TODO: SYS$CBR\r
-syscbr: db 1\r
+syscbr: db 0\r
endif\r
\r
;\r
;----------------------------------------------------------------------\r
;\r
\r
-;TODO: Make a ringbuffer module.\r
-\r
- global buf.init\r
+ global bufinit\r
\r
-buf.init:\r
- ld (ix+o.in_idx),0\r
+bufinit:\r
+ ld (ix+o.in_idx),0 ;reset pointers (empty fifo)\r
ld (ix+o.out_idx),0\r
- ld (ix+o.mask),a\r
+ ld a,(ix+o.id)\r
+ ld hl,fifolst\r
+ ld e,a\r
+ ld d,0\r
+ add hl,de\r
+ add hl,de\r
+ push ix\r
+ pop de\r
+ cp 4\r
+ jr nc,bfi_skip\r
+\r
+ ld (hl),e\r
+ inc hl\r
+ ld (hl),d\r
+\r
+bfi_skip:\r
+ ex de,hl\r
+ call hwl2phy ;get phys. address of fifo\r
+ ld c,a\r
+ ld a,(ix+o.id) ;fifo id\r
+ or a ;test if fifo 0\r
+ ret z\r
+\r
+ ld b,a\r
+ push bc ;c: bank-addr, b: ignored\r
+ push hl ;address\r
+ ld c,0\r
+ push bc ;c: function, b:subf\r
+ ld b,5\r
+ ld h,c\r
+ ld l,c\r
+ add hl,sp\r
+ call msg.sm\r
+ pop hl\r
+ pop hl\r
+ pop hl\r
ret\r
\r
+ public fifolst\r
+fifolst :\r
+ rept 4\r
+ dw 0\r
+ endm\r
+\r
;----------------------------------------------------------------------\r
\r
+ extrn msg.sm\r
extrn msginit,msg.sout\r
extrn mtx.fifo,mrx.fifo\r
- extrn co.fifo,ci.fifo\r
+ extrn ff.init,co.fifo,ci.fifo\r
\r
\r
-bufferinit:\r
+fifoinit:\r
if CPU_Z180\r
- call msginit\r
-\r
- ld hl,buffers\r
- ld b,buftablen\r
-bfi_1:\r
- ld a,(hl)\r
- inc hl\r
- ld (bufdat+0),a\r
- ld e,(hl)\r
- inc hl\r
- ld d,(hl)\r
- inc hl\r
- ex de,hl\r
\r
- or a\r
- jr nz,bfi_2\r
- call hwl2phy\r
- ld (40h+0),hl\r
- ld (40h+2),a\r
- out (AVRINT5),a\r
- jr bfi_3 \r
-bfi_2:\r
- call hwl2phy\r
- ld (bufdat+1),hl\r
- ld (bufdat+3),a\r
- ld hl,inimsg\r
- call msg.sout\r
-bfi_3:\r
- ex de,hl\r
- djnz bfi_1\r
ret\r
\r
else ;CPU_Z180\r
ret\r
endif\r
\r
-buffers:\r
- db 0\r
- dw mtx.fifo\r
- db 1\r
- dw mrx.fifo\r
- db 2\r
- dw co.fifo\r
- db 3\r
- dw ci.fifo\r
-buftablen equ ($ - buffers)/3\r
-\r
-inimsg:\r
- db inimsg_e - $ -1\r
- db 0AEh\r
- db inimsg_e - $ -1\r
- db 0\r
-bufdat:\r
- db 0\r
- dw 0\r
- db 0\r
-inimsg_e:\r
+\r
\r
\r
;\r
\r
;----------------------------------------------------------------------\r
\r
+; Reload value for 10 ms Int. (0.1KHz):\r
+; tc10ms = phi/prescale/0.1KHz = phi / (prescale/10)\r
+\r
+PRT_TC10MS equ 18432 / (PRT_PRE/10)\r
+\r
+\r
if CPU_Z180\r
prt0_init:\r
ld a,i\r
dec a\r
jr nz,ioi_r\r
jr ioi_nxt\r
-ioi_e: \r
+ioi_e:\r
pop bc\r
ret\r
- \r
+\r
else ;(if 1/0)\r
- \r
+\r
push bc\r
jr ioi_nxt\r
ioi_l:\r
djnz ioi_l\r
pop bc\r
ret\r
- \r
+\r
endif ;(1/0)\r
\r
else\r
inc hl\r
cp b\r
jr z,ioml_e\r
- \r
+\r
ld c,(hl)\r
inc hl\r
otimr\r
;\r
;out ahl: Phys. (linear) Address\r
\r
+ public hwl2phy\r
\r
hwl2phy:\r
push bc ;\r
\r
\r
end\r
-\r