]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/commitdiff
new chario
authorLeo C <erbl259-lmu@yahoo.de>
Sat, 31 Oct 2015 01:52:30 +0000 (02:52 +0100)
committerLeo C <erbl259-lmu@yahoo.de>
Mon, 13 Jun 2016 16:21:20 +0000 (18:21 +0200)
cbios/chario.180

index 6b8eff1457d6dda1372b0a7d293daed1aea5ac13..931b35b9bf8368406c3ed498f648dcfd2c17e5c5 100644 (file)
 \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
+       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$19200\r
+\r
+       db      0                               ; table terminator\r
+\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
+        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
+null_dev:\r
+       dw      null$status\r
+       dw      null$input\r
+       dw      ret$true\r
+       dw      rret\r
+       dw      rret\r
+       dw      0\r
+\r
 \r
 ;--------------------------------------------------------------\r
 ; Init character device\r
@@ -33,12 +102,8 @@ max$devices equ     3
        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
+       ld      hl,O_INITF\r
+       jr      vector_io\r
 \r
 ;--------------------------------------------------------------\r
 ; Character input\r
@@ -53,11 +118,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 +134,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 +151,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 +169,41 @@ _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
        dseg\r
-vector$io:\r
-       pop     hl\r
+vector_io:\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
+       ex      de,hl\r
 \r
-       ld      e,(hl)\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      d,(hl)\r
+       ld      h,(hl)\r
+       ld      l,a\r
        ex      de,hl\r
-       pop     de\r
-       jp      (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
 \r
+;--------------------------------------------------------------\r
 \r
 null$input:\r
        ld      a,1Ah\r
@@ -154,23 +217,4 @@ null$status:
        xor     a\r
        ret\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
        end\r