]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blobdiff - cbios/chario.180
Update IXON flag from character device table (@ctbl)
[z180-stamp-cpm3.git] / cbios / chario.180
index 72748e4e96a4373812664f80927a655b7dae4a35..7133b7745b5a86b94e452540eee3c276eb5d5f0e 100644 (file)
@@ -4,21 +4,65 @@
 \r
 \r
 \r
-       public ?cinit,?ci,?co,?cist,?cost\r
+       public ?cinit,ioctl,?ci,?co,?cist,?cost\r
        public @ctbl\r
 \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   ff_dev\r
+       extrn   as0_dev,as1_dev\r
        extrn   _b0call\r
 \r
-       include config.inc\r
-       include z180reg.inc\r
+       maclib z180reg.inc\r
+       maclib config.inc\r
+\r
+       maclib modebaud.inc     ; define mode bits and baud equates\r
+\r
+\r
+\r
+;--------------------------------------------------------------\r
+\r
+       cseg\r
+@ctbl:\r
+       db      'USB0  '                ; device 0\r
+       db      mb$in$out\r
+       db      baud$none\r
+\r
+       db      'ASCI0 '                ; device 1\r
+       db      mb$in$out+mb$serial+mb$soft$baud\r
+       db      baud$19200\r
+\r
+       db      'ASCI1 '                ; device 2\r
+       db      mb$in$out+mb$serial+mb$soft$baud\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
+max$devices equ        ($-xctbl)/2\r
+       dw      null_dev                ;todo:\r
+       rept    16 - max$devices\r
+        dw     0\r
+       endm\r
 \r
-       include modebaud.inc    ; define mode bits and baud equates\r
+;--------------------------------------------------------------\r
 \r
-max$devices equ        3\r
+       dw      rret\r
+       dw      ret$true\r
+       dw      null$input\r
+       dw      null$status\r
+       dw      rret\r
+null_dev:\r
 \r
 \r
 ;--------------------------------------------------------------\r
@@ -27,18 +71,16 @@ max$devices equ     3
 \r
        cseg\r
 ?cinit:                                ; init devices\r
-       b0call  _cinit\r
+       ld      b,c\r
+       ld      c,0             ;\r
+ioctl:\r
+       b0call  _ioctl\r
        ret\r
 \r
        dseg\r
-_cinit:\r
-       ld      b,c\r
-       call    vector$io\r
-       dw      ff.init\r
-       dw      as0init\r
-       dw      as1init\r
-       dw      rret\r
-\r
+_ioctl:\r
+       ld      hl,O_IOCTLF\r
+       jr      vector_io\r
 \r
 ;--------------------------------------------------------------\r
 ; Character input\r
@@ -53,11 +95,8 @@ _cinit:
 \r
        dseg\r
 _ci:\r
-       call    vector$io\r
-       dw      ff.in\r
-       dw      as0inp\r
-       dw      as1inp\r
-       dw      null$input\r
+       ld      hl,O_CIF\r
+       jr      vector_io\r
 \r
 ;--------------------------------------------------------------\r
 ; Input status\r
@@ -72,11 +111,8 @@ _ci:
 \r
        dseg\r
 _cist:                         ; character input status\r
-       call    vector$io\r
-       dw      ff.ist\r
-       dw      as0ista\r
-       dw      as1ista\r
-       dw      null$status\r
+       ld      hl,O_CISTF\r
+       jr      vector_io\r
 \r
 ;--------------------------------------------------------------\r
 ; Character output\r
@@ -92,11 +128,8 @@ _cist:                              ; character input status
 \r
        dseg\r
 _co:                           ; character output\r
-       call    vector$io\r
-       dw      ff.out\r
-       dw      as0out\r
-       dw      as1out\r
-       dw      rret\r
+       ld      hl,O_COF\r
+       jr      vector_io\r
 \r
 \r
 ;--------------------------------------------------------------\r
@@ -113,34 +146,80 @@ _co:                              ; character output
 \r
        dseg\r
 _cost:                         ; character output status\r
-       call    vector$io\r
-       dw      ff.ost\r
-       dw      as0osta\r
-       dw      as1osta\r
-       dw      ret$true\r
+       ld      hl,O_COSTF\r
+       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
-       pop     hl\r
-       push    de\r
-       ld      de,max$devices  ; default if\r
-       ld      a,b             ;\r
-       cp      e               ;    b > max$devices\r
-       jr      nc,exist\r
-       ld      e,a\r
-exist:\r
-       add     hl,de\r
-       add     hl,de\r
-\r
-       ld      e,(hl)\r
-       inc     hl\r
-       ld      d,(hl)\r
-       ex      de,hl\r
-       pop     de\r
-       jp      (hl)\r
+vector_io:\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
 null$input:\r
        ld      a,1Ah\r
@@ -154,23 +233,4 @@ null$status:
        xor     a\r
        ret\r
 \r
-;--------------------------------------------------------------\r
-\r
-       cseg\r
-@ctbl:\r
-       db      'AVRCON'        ; device 0\r
-       db      mb$in$out\r
-       db      baud$none\r
-\r
-       db      'ASCI0 '        ; device 1\r
-       db      mb$in$out+mb$serial+mb$soft$baud\r
-       db      baud$19200\r
-\r
-       db      'ASCI1 '        ; device 2\r
-       db      mb$in$out+mb$serial+mb$soft$baud\r
-       db      baud$19200\r
-\r
-       db      0               ; table terminator\r
-\r
-\r
        end\r