""
),
CMD_TBL_ITEM(
- connect, 1, 1, do_console,
+ connect, 1, 0, do_console,
"Connect to CPU console i/o",
""
),
SRC = init.180
SRC += ddtz.180
-#SRC += fifoio.180 msgbuf.180 asci1-i.180 console.180
-SRC += msgbuf-a.180 conbuf-a.180 asci1-i.180 bioscio.180 chario.180
+#SRC += fifoio.180 msgbuf.180 asci-p.180 console.180
+SRC += msgbuf-a.180 conbuf-a.180 asci-p.180 bioscio.180 chario.180
# serial (asci1) console only:
#SRC += asci1-i.180 console.180
SRC += romend.180
--- /dev/null
+ page 200\r
+\r
+ extrn ioiniml\r
+\r
+ global as0init\r
+ global as0ista,as0inp\r
+ global as0osta,as0out\r
+ global as1init\r
+ global as1ista,as1inp\r
+ global as1osta,as1out\r
+\r
+ include config.inc\r
+ include z180reg.inc\r
+\r
+\r
+;-----------------------------------------------------\r
+;\r
+;\r
+; TC = (f PHI /(2*baudrate*Clock_mode)) - 2\r
+;\r
+; TC = (f PHI / (32 * baudrate)) - 2\r
+;\r
+\r
+ cseg\r
+;\r
+; Init Serial I/O for console input and output (ASCI1)\r
+;\r
+ \r
+\r
+\r
+as0init:\r
+ ld hl,initab0\r
+ jp ioiniml\r
+\r
+as1init:\r
+ ld hl,initab1\r
+ jp ioiniml\r
+\r
+ \r
+ ld a,M_MPBT \r
+ out0 (cntlb1),a\r
+ ld a,M_RE + M_TE + M_MOD2 ;Rx/Tx enable \r
+ out0 (cntla1),a\r
+ ld a,M_RIE\r
+ out0 (stat1),a ;Enable rx interrupts\r
+\r
+ ret ;\r
+\r
+\r
+initab0:\r
+ db 1,stat0,0 ;Disable rx/tx interrupts\r
+ ;Enable baud rate generator\r
+ db 1,asext0,M_BRGMOD+M_DCD0DIS+M_CTS0DIS\r
+ db 2,astc0l,low 28, high 28\r
+ db 1,cntlb0,M_MPBT ;No MP Mode, X16\r
+ db 1,cntla0,M_RE+M_TE+M_MOD2 ;Rx/Tx enable, 8N1\r
+ db 0\r
+\r
+initab1:\r
+ db 1,stat1,0 ;Disable rx/tx ints, disable CTS1\r
+ db 1,asext1,M_BRGMOD ;Enable baud rate generator\r
+ db 2,astc1l,low 3, high 3\r
+ db 1,cntlb1,M_MPBT ;No MP Mode, X16\r
+ db 1,cntla1,M_RE+M_TE+M_MOD2 ;Rx/Tx enable, 8N1\r
+ db 0\r
+\r
+\r
+\r
+as0ista:\r
+ in0 a,(stat0)\r
+ and M_RDRF\r
+ ret z\r
+ or 0ffh\r
+ ret\r
+ \r
+as1ista:\r
+ in0 a,(stat1)\r
+ and M_RDRF\r
+ ret z\r
+ or 0ffh\r
+ ret\r
+ \r
+\r
+as0inp:\r
+ in0 a,(stat0)\r
+ rlca\r
+ jr nc,as0inp\r
+ in0 a,rdr0\r
+ ret\r
+\r
+as1inp:\r
+ in0 a,(stat1)\r
+ rlca\r
+ jr nc,as1inp\r
+ in0 a,rdr1\r
+ ret\r
+\r
+\r
+\r
+as0osta:\r
+ in0 a,(stat0)\r
+ and M_TDRE\r
+ ret z\r
+ or 0ffh\r
+ ret\r
+\r
+as1osta:\r
+ in0 a,(stat1)\r
+ and M_TDRE\r
+ ret z\r
+ or 0ffh\r
+ ret\r
+\r
+\r
+as0out:\r
+ in0 a,(stat0)\r
+ and M_TDRE\r
+ jr z,as0out\r
+ out0 (tdr0),c\r
+ ld a,c\r
+ ret\r
+\r
+as1out:\r
+ in0 a,(stat1)\r
+ and M_TDRE\r
+ jr z,as1out\r
+ out0 (tdr1),c\r
+ ld a,c\r
+ ret\r
+\r
+ end\r
+\r
+\r
jp p,c$init$loop\r
\r
; ld hl,1000000000000000b ; assign console to HOST\r
- ld hl,0100000000000000b ; assign console to ASCI1\r
+ ld hl,0010000000000000b ; assign console to ASCI1\r
ld (@civec),hl\r
ld (@covec),hl\r
ld hl,0000000000000000b ; assign auxiliary to nothing\r
public @ctbl\r
\r
extrn ff.init,ff.i.st,ff.in,ff.o.st,ff.out\r
- extrn ser.init,ser.ist,ser.in,ser.ost,ser.out\r
+ extrn as0init,as0ista,as0inp,as0osta,as0out\r
+ extrn as1init,as1ista,as1inp,as1osta,as1out\r
\r
include config.inc\r
include z180reg.inc\r
include modebaud.inc ; define mode bits and baud eqautes\r
\r
\r
-max$device equ 2\r
+max$device equ 3\r
\r
cseg\r
\r
ld b,c\r
call vector$io\r
dw ff.init\r
- dw ser.init\r
+ dw as0init\r
+ dw as1init\r
dw rret\r
\r
; b = device, c = output char, a = input char\r
?ci: ; character input\r
call vector$io\r
dw ff.in\r
- dw ser.in\r
+ dw as0inp\r
+ dw as1inp\r
dw null$input\r
\r
?cist: ; character input status\r
call vector$io\r
dw ff.i.st\r
- dw ser.ist\r
+ dw as0ista\r
+ dw as1ista\r
dw null$status\r
\r
?co: ; character output\r
call vector$io\r
dw ff.out\r
- dw ser.out\r
+ dw as0out\r
+ dw as1out\r
dw rret\r
\r
?cost: ; character output status\r
call vector$io\r
dw ff.o.st\r
- dw ser.ost\r
+ dw as0osta\r
+ dw as1osta\r
dw ret$true\r
\r
vector$io:\r
\r
@ctbl:\r
db 'HOST ' ; device 0\r
- db mb$output\r
+ db mb$in$out\r
db baud$none\r
\r
- db 'ASCI1 ' ; device 0\r
+ db 'ASCI1 ' ; device 1\r
+ db mb$in$out+mb$serial+mb$soft$baud\r
+ser0$baud:\r
+ db baud$19200\r
+\r
+ db 'ASCI1 ' ; device 2\r
db mb$in$out+mb$serial+mb$soft$baud\r
ser1$baud:\r
db baud$19200\r
extrn $stack\r
extrn charini,?const,?conin\r
extrn ?cono,?conos\r
-\r
extrn romend\r
\r
\r
\r
hwini0:\r
if CPU_Z180\r
-\r
db 3 ;count\r
db rcr,CREFSH ;configure DRAM refresh\r
db dcntl,INIWAITS ;wait states\r
db cbar,SYS$CBAR\r
- else\r
- db 0\r
endif\r
+ db 0\r
\r
if CPU_Z180\r
dmclrt: ;clear ram per dma\r
db 00h ;dst\r
dw 0-romend ;count (64k)\r
dmct_e:\r
+ db 0\r
endif\r
\r
\r
if 0\r
\r
ld hl,dmclrt ;load DMA registers\r
- call io.ini.m\r
+ call ioiniml\r
ld a,0cbh ;01ef dst +1, src fixed, burst\r
out0 (dmode),a ;01f1\r
\r
inc hl\r
ld (hl),high iprt0\r
ld hl,prt0itab\r
- call io.ini.m\r
+ call ioiniml\r
ret\r
\r
prt0itab:\r
dw PRT_TC10MS\r
db M_TIE0+M_TDE0 ;enable timer 0 interrupt and down count.\r
prt0it_e:\r
+ db 0\r
endif\r
\r
\r
;----------------------------------------------------------------------\r
;\r
\r
+ if CPU_Z180\r
io.ini:\r
+ if 0\r
push bc\r
- if CPU_Z180\r
-\r
ld b,0 ;high byte port adress\r
+ioi_nxt:\r
ld a,(hl) ;count\r
inc hl\r
or a\r
jr z,ioi_e\r
-ioi_1:\r
+\r
ld c,(hl) ;port address\r
inc hl\r
+ioi_r:\r
outi\r
inc b ;outi decrements b\r
dec a\r
- jr nz,ioi_1\r
+ jr nz,ioi_r\r
+ jr ioi_nxt\r
ioi_e: \r
+ pop bc\r
+ ret\r
+ \r
+ else ;(if 1/0)\r
+ \r
+ push bc\r
+ jr ioi_nxt\r
+ioi_l:\r
+ ld c,(hl) ;port address\r
+ inc hl\r
+ inc c\r
+ioi_r:\r
+ dec c ;otim increments c\r
+ otim\r
+ jr z,ioi_r\r
+ioi_nxt:\r
+ ld b,(hl) ;count\r
+ inc hl\r
+ inc b ;stop if count == 0\r
+ djnz ioi_l\r
+ pop bc\r
+ ret\r
+ \r
+ endif ;(1/0)\r
+\r
else\r
+\r
+io.ini:\r
+ push bc\r
jr ioi_nxt\r
ioi_l:\r
ld c,(hl) ;port address\r
pop bc\r
ret\r
\r
+;----------------------------------------------------------------------\r
+\r
if CPU_Z180\r
-io.ini.m:\r
+\r
+ global ioiniml\r
+\r
+ioiniml:\r
push bc\r
+ xor a\r
+ioml_lp:\r
ld b,(hl)\r
inc hl\r
+ cp b\r
+ jr z,ioml_e\r
+ \r
ld c,(hl)\r
inc hl\r
otimr\r
+ jr ioml_lp\r
+ioml_e:\r
pop bc\r
- ret\r
+ ret z\r
endif\r
\r
io.ini.l:\r
\r
asext0 equ IOBASE+12h ;ASCI Extension Control Register\r
asext1 equ IOBASE+13h ;ASCI Extension Control Register\r
+ b2m DCD0DIS,6 ;DCD0 Disable\r
+ b2m CTS0DIS,5 ;CTS0 Disable\r
+ b2m X1,4 ;CKA * 1 Clock/Samle Rate Divider\r
+ b2m BRGMOD,3 ;BRG Mode (Baud rate generator)\r
+ b2m BREAKEN,2 ;Break Enable\r
+ b2m BREAK,1 ;Break detected\r
+ b2m SENDBREAK,0 ;Send Break\r
\r
tmdr1l equ IOBASE+14h ;Timer Data Register Channel 1\r
tmdr1h equ IOBASE+15h ;\r