X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp-cpm3.git/blobdiff_plain/12f14a43cd375975cc2872b018e361e471a9fc09..e8a98308cd28da296993a9085df28dc5957de86d:/cbios/chario.180 diff --git a/cbios/chario.180 b/cbios/chario.180 index 931b35b..7133b77 100644 --- a/cbios/chario.180 +++ b/cbios/chario.180 @@ -4,28 +4,19 @@ - public ?cinit,?ci,?co,?cist,?cost + public ?cinit,ioctl,?ci,?co,?cist,?cost public @ctbl - - extrn ff.init,ff.ist,ff.in,ff.ost,ff.out - extrn as0init,as0ista,as0inp,as0osta,as0out - extrn as1init,as1ista,as1inp,as1osta,as1out + extrn ff_dev + extrn as0_dev,as1_dev extrn _b0call - include config.inc - include z180reg.inc + maclib z180reg.inc + maclib config.inc - include modebaud.inc ; define mode bits and baud equates + maclib modebaud.inc ; define mode bits and baud equates -max$devices equ 3 -O_CISTF equ 0 -O_CIF equ 2 -O_COSTF equ 4 -O_COF equ 6 -O_INITF equ 8 -O_CTBL equ 10 ;-------------------------------------------------------------- @@ -41,53 +32,37 @@ O_CTBL equ 10 db 'ASCI1 ' ; device 2 db mb$in$out+mb$serial+mb$soft$baud - db baud$19200 + db baud$134 db 0 ; table terminator +;-------------------------------------------------------------- + +O_COF equ -10 +O_COSTF equ -8 +O_CIF equ -6 +O_CISTF equ -4 +O_IOCTLF equ -2 dseg xctbl: dw ff_dev dw as0_dev dw as1_dev - dw null_dev - - rept 16 - ($-xctbl)/2 +max$devices equ ($-xctbl)/2 + dw null_dev ;todo: + rept 16 - max$devices dw 0 endm -ff_dev: - dw ff.ist - dw ff.in - dw ff.ost - dw ff.out - dw ff.init - dw @ctbl+8*0 - -as0_dev: - dw as0ista - dw as0inp - dw as0osta - dw as0out - dw as0init - dw @ctbl+8*1 - -as1_dev: - dw as1ista - dw as1inp - dw as1osta - dw as1out - dw as1init - dw @ctbl+8*2 +;-------------------------------------------------------------- -null_dev: - dw null$status - dw null$input - dw ret$true dw rret + dw ret$true + dw null$input + dw null$status dw rret - dw 0 +null_dev: ;-------------------------------------------------------------- @@ -96,13 +71,15 @@ null_dev: cseg ?cinit: ; init devices - b0call _cinit + ld b,c + ld c,0 ; +ioctl: + b0call _ioctl ret dseg -_cinit: - ld b,c - ld hl,O_INITF +_ioctl: + ld hl,O_IOCTLF jr vector_io ;-------------------------------------------------------------- @@ -173,35 +150,74 @@ _cost: ; character output status jr vector_io ;-------------------------------------------------------------- +; +; hl: function table index (offset) +; b: device +; c: output char or ioctl # +; de: ioctl arg pointer +; +; Calls funtion xctbl[offset] with +; b,c,de unchanged and hl = ptr to drivers local data dseg vector_io: - push de - ex de,hl - - ld hl,xctbl - ld a,max$devices - cp b - jr c,$+3 - ld a,b - add a,a - add a,l - ld l,a - jr nc,$+3 - inc h - ld a,(hl) - inc hl - ld h,(hl) - ld l,a - ex de,hl - add hl,de - ld a,(hl) - inc hl - ld h,(hl) - ld l,a - ex (sp),hl - ex de,hl - ret + push de ;save arg ptr 11 + ex de,hl ; 3 + ; + ld a,max$devices ; 6 + cp b ; 4 + jr c,$+3 ; (6/8) + ld a,b ; (4)10/8 + add a,a ; 4 + ld hl,xctbl ; 9 + add a,l ; 4 + ld l,a ; 4 + jr nc,$+3 ; (6/8) + inc h ; (4) 10/8 + ld a,(hl) ; 6 + inc hl ; 4 + ld h,(hl) ; 6 + ld l,a ; 4 + ex de,hl ; 3 + add hl,de ; 7 + ld a,(hl) ; 6 + inc hl ; 4 + ld h,(hl) ; 6 + ld l,a ; 4 + ex (sp),hl ; 16 + ex de,hl ; 3 + ret ; 9 143 + +;-------------------------------------------------------------- + + if 0 + +vector_io: + push de ;11 + push hl ;11 + ; + ld hl,xctbl ;9 - + ld de,max$devices ;9 + ld a,b ;4 + cp e ;4 + jr nc,$+3 ;(6/8) + ld e,a ;(4) 10/8 + add hl,de ;7 + add hl,de ;7 + ld e,(hl) ;6 + inc hl ;4 + ld d,(hl) ;6 + pop hl ;9 + add hl,de ;7 + ld a,(hl) ;6 + inc hl ;4 + ld h,(hl) ;6 + ld l,a ;4 + ex (sp),hl ;16 + ex de,hl ;3 + ret ;9 148 + + endif ;--------------------------------------------------------------