]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blobdiff - cbios/ascii.180
Factor out 16 bit output function, pointer test. Set CRTS_IFLOW,CCTS_OFLOW as default...
[z180-stamp-cpm3.git] / cbios / ascii.180
index ef9e1bb8f6f1072f45acd1a8037cf4cdbab97dbd..3ea64a741772757e8e138821ee6a98f1fbcb17e1 100644 (file)
@@ -33,7 +33,7 @@ as0_dev:
        db      0                       ;absolute device #\r
        db      0                       ;relative device\r
        db      0                       ;iflags\r
-       db      0                       ;fflags\r
+       db      M_CREAD+M_CRTS_IFLOW+M_CCTS_OFLOW       ;fflags\r
        db      M_CS8                   ;cflags\r
 o.absdev       equ     0\r
 o.reldev       equ     1\r
@@ -58,7 +58,7 @@ as1_dev:
        db      0                       ;absolute device #\r
        db      1                       ;relative device\r
        db      0                       ;iflags\r
-       db      0                       ;fflags\r
+       db      M_CREAD                 ;fflags\r
        db      M_CS8                   ;cflags\r
 \r
        db      0\r
@@ -156,12 +156,7 @@ init_st:
        ld      a,(hl)                  ;get baudrate index\r
        call    as_br_div\r
        ld      c,astc0l\r
-       ld      a,l\r
-       call    out_asci_reg\r
-       inc     c\r
-       ld      a,h\r
-       call    out_asci_reg\r
-\r
+       call    out_asci_reg_hl\r
 \r
        ld      c,cntlb0\r
        ld      a,M_MPBT                ;No MP Mode, X16\r
@@ -217,10 +212,7 @@ mod_tab:
 ; Get the current serial port settings.\r
 \r
 func_tcgeta:\r
-       ld      a,d\r
-       or      e\r
-       ld      a,0ffh\r
-       jr      z,fgeta_e\r
+       call    chk_ptr\r
 \r
        ld      a,(ix+o.iflags)\r
        call    b_st_a\r
@@ -244,18 +236,13 @@ func_tcgeta:
        dec     de\r
        dec     de\r
        xor     a\r
-fgeta_e:\r
        ret\r
 \r
-\r
 ;--------------------------------------------------------------\r
 ; Set the current serial port settings.\r
 \r
 func_tcseta:\r
-       ld      a,d\r
-       or      e\r
-       ld      a,0ffh\r
-       jr      z,fseta_e\r
+       call    chk_ptr\r
 \r
        call    asci_stop\r
 \r
@@ -281,10 +268,8 @@ func_tcseta:
        call    init_st\r
        pop     de\r
        xor     a\r
-fseta_e:\r
        ret\r
 \r
-\r
 ;--------------------------------------------------------------\r
 ; Allow the output buffer to drain\r
 \r
@@ -370,6 +355,16 @@ func_tiocssoftcar:
 \r
 ;--------------------------------------------------------------\r
 \r
+chk_ptr:\r
+       ld      a,e\r
+       or      d\r
+       ret     nz\r
+       cpl\r
+       pop     hl\r
+       ret\r
+\r
+;--------------------------------------------------------------\r
+\r
 asci_stop:\r
        ld      c,stat0                 ;Disable rx/tx interrupts\r
        xor     a                       ;\r
@@ -395,19 +390,34 @@ asci_start:
 \r
 out_asci_reg:\r
        push    bc\r
-       ld      b,a\r
-       ld      a,c\r
-       cp      astc0l                  ;astc0/1 are 16 bit\r
-       jr      c,$+5\r
-        add    a,(ix+o.reldev)\r
-       add     a,(ix+o.reldev)\r
-       ld      c,a\r
-       ld      a,b\r
+       bit     0,(ix+o.reldev)\r
+       jr      z,$+3\r
+        inc    c\r
        ld      b,0\r
        out     (c),a\r
        pop     bc\r
        ret\r
 \r
+;--------------------------------------------------------------\r
+; output 16 bit value to asci0/1 register\r
+;\r
+; c:   register address\r
+; hl:  value\r
+; a destroyed\r
+\r
+out_asci_reg_hl:\r
+       ld      a,b                     ;save b\r
+       bit     0,(ix+o.reldev)\r
+       jr      z,$+4\r
+        inc    c\r
+        inc    c\r
+       ld      b,0\r
+       out     (c),l\r
+       inc     c\r
+       out     (c),h\r
+       ld      b,a\r
+       ret\r
+\r
 ;--------------------------------------------------------------\r
 ; baud rate divider\r
 ;\r