\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
\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
\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
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
\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