From 12f14a43cd375975cc2872b018e361e471a9fc09 Mon Sep 17 00:00:00 2001 From: Leo C Date: Sat, 31 Oct 2015 02:52:30 +0100 Subject: [PATCH] new chario --- cbios/chario.180 | 162 ++++++++++++++++++++++++++++++----------------- 1 file changed, 103 insertions(+), 59 deletions(-) diff --git a/cbios/chario.180 b/cbios/chario.180 index 6b8eff1..931b35b 100644 --- a/cbios/chario.180 +++ b/cbios/chario.180 @@ -20,6 +20,75 @@ 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 + +;-------------------------------------------------------------- + + cseg +@ctbl: + db 'USB0 ' ; device 0 + db mb$in$out + db baud$none + + db 'ASCI0 ' ; device 1 + db mb$in$out+mb$serial+mb$soft$baud + db baud$19200 + + db 'ASCI1 ' ; device 2 + db mb$in$out+mb$serial+mb$soft$baud + db baud$19200 + + db 0 ; table terminator + + + dseg +xctbl: + dw ff_dev + dw as0_dev + dw as1_dev + dw null_dev + + rept 16 - ($-xctbl)/2 + 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 rret + dw 0 + ;-------------------------------------------------------------- ; Init character device @@ -33,12 +102,8 @@ max$devices equ 3 dseg _cinit: ld b,c - call vector$io - dw ff.init - dw as0init - dw as1init - dw rret - + ld hl,O_INITF + jr vector_io ;-------------------------------------------------------------- ; Character input @@ -53,11 +118,8 @@ _cinit: dseg _ci: - call vector$io - dw ff.in - dw as0inp - dw as1inp - dw null$input + ld hl,O_CIF + jr vector_io ;-------------------------------------------------------------- ; Input status @@ -72,11 +134,8 @@ _ci: dseg _cist: ; character input status - call vector$io - dw ff.ist - dw as0ista - dw as1ista - dw null$status + ld hl,O_CISTF + jr vector_io ;-------------------------------------------------------------- ; Character output @@ -92,11 +151,8 @@ _cist: ; character input status dseg _co: ; character output - call vector$io - dw ff.out - dw as0out - dw as1out - dw rret + ld hl,O_COF + jr vector_io ;-------------------------------------------------------------- @@ -113,34 +169,41 @@ _co: ; character output dseg _cost: ; character output status - call vector$io - dw ff.ost - dw as0osta - dw as1osta - dw ret$true + ld hl,O_COSTF + jr vector_io ;-------------------------------------------------------------- dseg -vector$io: - pop hl +vector_io: push de - ld de,max$devices ; default if - ld a,b ; - cp e ; b > max$devices - jr nc,exist - ld e,a -exist: - add hl,de - add hl,de + ex de,hl - ld e,(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 d,(hl) + ld h,(hl) + ld l,a ex de,hl - pop de - jp (hl) + add hl,de + ld a,(hl) + inc hl + ld h,(hl) + ld l,a + ex (sp),hl + ex de,hl + ret +;-------------------------------------------------------------- null$input: ld a,1Ah @@ -154,23 +217,4 @@ null$status: xor a ret -;-------------------------------------------------------------- - - cseg -@ctbl: - db 'USB0 ' ; device 0 - db mb$in$out - db baud$none - - db 'ASCI0 ' ; device 1 - db mb$in$out+mb$serial+mb$soft$baud - db baud$19200 - - db 'ASCI1 ' ; device 2 - db mb$in$out+mb$serial+mb$soft$baud - db baud$134 - - db 0 ; table terminator - - end -- 2.39.2