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