]> cloudbase.mooo.com Git - ddt180.git/commitdiff
Replace BDOS console i/o
authorLeo C <erbl259-lmu@yahoo.de>
Fri, 7 Dec 2018 20:58:24 +0000 (21:58 +0100)
committerLeo C <erbl259-lmu@yahoo.de>
Fri, 7 Dec 2018 20:58:24 +0000 (21:58 +0100)
ddt180.z80

index 27633290173f65f08c6e8b42cbc5b431dcb9389e..3ab5b88253e3c1dafa55b6605e3bea022917fe65 100644 (file)
@@ -29,9 +29,12 @@ current_cseg defl    $
 \r
 ; Some greneral definitions\r
 \r
-TAB            equ     9\r
-LF             equ     10\r
-CR             equ     13\r
+BS             equ     08h\r
+TAB            equ     09h\r
+CR             equ     0dh\r
+LF             equ     0ah\r
+DEL            equ     7fh\r
+CNTRX          equ     'X'-'@'\r
 \r
 ; CP/M memory layout\r
 \r
@@ -43,11 +46,7 @@ TPA          equ     0100h
 \r
 ; BDOS function calls\r
 \r
-BDOS_CIN       equ     1       ;Console Input\r
-BDOS_COUT      equ     2       ;Console Output\r
 BDOS_PSTR      equ     9       ;Print String\r
-BDOS_CBUF      equ     10      ;Read Console Buffer\r
-BDOS_CSTAT     equ     11      ;Get Console Status\r
 BDOS_OPEN      equ     15      ;Open File\r
 BDOS_CLOSE     equ     16      ;Close File\r
 BDOS_DELETE    equ     19      ;Delete File\r
@@ -167,6 +166,11 @@ l0093h:
 \r
 ;-------------------------------------------------------------------------------\r
 \r
+?const:\r
+?conin:\r
+?cono:\r
+       ret\r
+\r
 CMDTAB:\r
        dw      ERROR ;cmd_@    ;examine/substitute the displacement register @\r
        dw      ERROR ;cmd_A    ;Assemble\r
@@ -371,9 +375,8 @@ outchar:
        push bc\r
        push af\r
        and 07fh\r
-       ld e,a\r
-       ld c,BDOS_COUT\r
-       call ddtz_bdos\r
+       ld      c,a\r
+       call    ?cono\r
        ld hl,con_col\r
        inc (hl)\r
        pop af\r
@@ -410,41 +413,142 @@ p_goto_col:
 \r
 ;-------------------------------------------------------------------------------\r
 \r
+$ci:\r
+       push    hl\r
+       push    de\r
+       push    bc\r
+       call    ?conin\r
+       pop     bc\r
+       pop     de\r
+       pop     hl\r
+       ret\r
+\r
+$co:\r
+       push    hl\r
+       push    de\r
+       push    bc\r
+       ld      c,a\r
+       call    ?cono\r
+       pop     bc\r
+       pop     de\r
+       pop     hl\r
+       ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
 inchar:\r
        push ix\r
        push hl\r
        push de\r
        push bc\r
-       ld c,BDOS_CSTAT\r
-       call ddtz_bdos\r
+       call    ?const\r
        and a\r
-       jr z,l0284h\r
-       ld c,BDOS_CIN\r
-       call ddtz_bdos\r
+       jr      z,inch1\r
+       call    ?conin\r
        scf\r
-l0284h:\r
+inch1:\r
        pop bc\r
        pop de\r
        pop hl\r
        pop ix\r
        ret\r
 \r
+;-------------------------------------------------------------------------------\r
+\r
+DELC:\r
+       ld      a,b\r
+       or      a\r
+       ret     z\r
+       call    DELC1\r
+       dec     hl\r
+       dec     b\r
+       inc     c\r
+       ld      a,(hl)\r
+       cp      ' '\r
+       ret     nc\r
+DELC1:\r
+       push    de\r
+       push    hl\r
+       push    bc\r
+       ld      c,BS\r
+       call    ?cono\r
+       ld      c,' '\r
+       call    ?cono\r
+       ld      c,BS\r
+       call    ?cono\r
+       pop     bc\r
+       pop     hl\r
+       pop     de\r
+       ret\r
+\r
+DELL:\r
+       ld a,b                  ;\r
+       or a                    ;\r
+       ret z                   ;\r
+       call DELC               ;\r
+       jr DELL                 ;\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
 get_line:\r
-       push hl\r
-       ld de,conbuf\r
-       ld c,BDOS_CBUF\r
-       call ddtz_bdos\r
-       call crlf\r
-       ld hl,conbuf+1\r
-       ld      e,(hl)\r
-       xor     a\r
-       ld      d,a\r
+       push hl                 ;\r
+       ld hl,conbuf            ;\r
+       ld c,(hl)               ;\r
+       inc hl                  ;\r
+       ld b,000h               ;\r
+       inc hl                  ;\r
+inlnxtch:\r
+       ld a,c                  ;\r
+       or a                    ;\r
+       jr z,inl_e              ;\r
+       call $ci                ;\r
+       cp CR                   ;\r
+       jr z,inl_e              ;Accept line\r
+       cp LF                   ;\r
+       jr z,inl_e              ;Accept line\r
+       cp BS                   ;\r
+       jr nz,gl_1              ;\r
+       call DELC               ;Delete Char\r
+       jr inlnxtch             ;\r
+gl_1:\r
+       cp DEL                  ;\r
+       jr nz,gl_2              ;\r
+       call DELC               ;Delete Char\r
+       jr inlnxtch             ;\r
+gl_2:\r
+       cp CNTRX                ;\r
+       jr nz,gl_3              ;\r
+       call DELL               ;Delete Line\r
+       jr inlnxtch             ;\r
+gl_3:\r
+       cp TAB                  ;\r
+       jr nz,gl_4              ;\r
+       ld a,' '                ;\r
+gl_4:\r
+       ld (hl),a               ;\r
+       cp ' '                  ;\r
+       jr nc,gl_5              ;\r
+       ld a,'^'                ;Controll characters\r
+       call $co                ;\r
+       ld a,(hl)               ;\r
+       add a,'@'               ;\r
+gl_5:\r
+       call $co                ;\r
+       inc hl                  ;\r
+       inc b                   ;\r
+       dec c                   ;\r
+       jr inlnxtch             ;\r
+\r
+inl_e:\r
+       ld (hl),0\r
+       ld hl,conbuf+1          ;\r
+       ld (hl),b               ;\r
+       call CRLF               ;\r
+\r
        inc     hl\r
        ex      de,hl\r
-       add     hl,de\r
-       ld      (hl),a\r
-       pop hl\r
-       ret\r
+       pop hl                  ;\r
+       ret                     ;\r
 \r
 ;-------------------------------------------------------------------------------\r
 \r