]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - z180/ddtz.180
VT100/ANSI parser
[z180-stamp.git] / z180 / ddtz.180
index 77da910a372e5b79a29863217ef54ed742167752..10fecf8ba9b34e0e5f85ff5d7de26db31a974ddf 100644 (file)
@@ -1,7 +1,7 @@
        page    255\r
        .z80\r
 \r
-       external $ci, $co, $cists\r
+       extrn   ?const,?conin,?cono\r
 \r
        global  ddtz,bpent\r
        global  $stack\r
@@ -27,7 +27,7 @@ BP_CNT                equ     12              ;number of breakbpoints
 \r
 \r
 ;--------------------------------------------------\r
-; \r
+;\r
 \r
 ; copy code to common memory and execute it there\r
 comst  macro\r
@@ -103,17 +103,17 @@ ddtz:
        ld      hl,sysramc\r
        ld      de,topcodbeg\r
        ld      bc,topcodend-topcodbeg\r
-       ldir                    \r
-       \r
+       ldir\r
+\r
        ld      hl,vartab\r
        ld      de,ddtram\r
        ld      bc,vartabe-vartab\r
-       ldir            \r
+       ldir\r
        exx\r
 \r
        ld      a,e\r
        ld      (ubbr),a\r
-       \r
+\r
 ddtz_w:\r
        ld hl,MSG               ;073c\r
        call PSTR               ;073f\r
@@ -203,203 +203,227 @@ CMD.?:
        call    PSTR\r
        ret\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
 DELC:\r
-       ld a,b                  ;07f2\r
-       or a                    ;07f3\r
-       ret z                   ;07f4\r
-       ld a,BS                 ;07f5\r
-       call $co                ;07f7\r
-       ld a,' '                ;07fa\r
-       call $co                ;07fc\r
-       ld a,BS                 ;07ff\r
-       call $co                ;0801\r
-       dec hl                  ;0804\r
-       dec b                   ;0805\r
-       inc c                   ;0806\r
-       ld a,(hl)               ;0807\r
-       cp ' '                  ;0808\r
-       ret nc                  ;080a\r
-       ld a,BS                 ;080b\r
-       call $co                ;080d\r
-       ld a,' '                ;0810\r
-       call $co                ;0812\r
-       ld a,BS                 ;0815\r
-       call $co                ;0817\r
-       ret                     ;081a\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                  ;081b\r
-       or a                    ;081c\r
-       ret z                   ;081d\r
-       call DELC               ;081e\r
-       jr DELL                 ;0821\r
+       ld a,b                  ;\r
+       or a                    ;\r
+       ret z                   ;\r
+       call DELC               ;\r
+       jr DELL                 ;\r
 \r
 INLINE:\r
-       push hl                 ;0823\r
-       ld hl,CI.BUF            ;0824\r
-       ld c,(hl)               ;0827\r
-       inc hl                  ;0828\r
-       ld b,000h               ;0829\r
-       inc hl                  ;082b\r
+       push hl                 ;\r
+       ld hl,CI.BUF            ;\r
+       ld c,(hl)               ;\r
+       inc hl                  ;\r
+       ld b,000h               ;\r
+       inc hl                  ;\r
 inlnxtch:\r
-       ld a,c                  ;082c\r
-       or a                    ;082d\r
-       jr z,inl_e              ;082e\r
-       call $ci                ;0830\r
-       cp CR                   ;0833\r
-       jr z,inl_e              ;0835\r
-       cp LF                   ;0837\r
-       jr z,inl_e              ;0839\r
-       cp BS                   ;083b\r
-       jr nz,l0844h            ;083d\r
-       call DELC               ;083f\r
-       jr inlnxtch             ;0842\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,l0844h            ;\r
+       call DELC               ;Delete Char\r
+       jr inlnxtch             ;\r
 l0844h:\r
-       cp DEL                  ;0844\r
-       jr nz,l084dh            ;0846\r
-       call DELC               ;0848\r
-       jr inlnxtch             ;084b\r
+       cp DEL                  ;\r
+       jr nz,l084dh            ;\r
+       call DELC               ;Delete Char\r
+       jr inlnxtch             ;\r
 l084dh:\r
-       cp CNTRX                ;084d\r
-       jr nz,l0856h            ;084f\r
-       call DELL               ;0851\r
-       jr inlnxtch             ;0854\r
+       cp CNTRX                ;\r
+       jr nz,l0856h            ;\r
+       call DELL               ;Delete Line\r
+       jr inlnxtch             ;\r
 l0856h:\r
-       cp TAB                  ;0856\r
-       jr nz,l085ch            ;0858\r
-       ld a,' '                ;085a\r
+       cp TAB                  ;\r
+       jr nz,l085ch            ;\r
+       ld a,' '                ;\r
 l085ch:\r
-       ld (hl),a               ;085c\r
-       cp ' '                  ;085d\r
-       jr nc,l0869h            ;085f\r
-       ld a,'^'                ;0861\r
-       call $co                ;0863\r
-       ld a,(hl)               ;0866\r
-       add a,'@'               ;0867\r
+       ld (hl),a               ;\r
+       cp ' '                  ;\r
+       jr nc,l0869h            ;\r
+       ld a,'^'                ;Controle characters\r
+       call $co                ;\r
+       ld a,(hl)               ;\r
+       add a,'@'               ;\r
 l0869h:\r
-       call $co                ;0869\r
-       inc hl                  ;086c\r
-       inc b                   ;086d\r
-       dec c                   ;086e\r
-       jr inlnxtch             ;086f\r
+       call $co                ;\r
+       inc hl                  ;\r
+       inc b                   ;\r
+       dec c                   ;\r
+       jr inlnxtch             ;\r
 \r
 inl_e:\r
-       ld hl,ci.buf+1          ;0871\r
-       ld (hl),b               ;0874\r
-       call CRLF               ;0875\r
-       ld de,ci.buf+1          ;0878\r
-       ld a,(de)               ;087b\r
-       ld b,a                  ;087c\r
-       ld c,000h               ;087d\r
-       inc b                   ;087f\r
+       ld hl,ci.buf+1          ;\r
+       ld (hl),b               ;\r
+       call CRLF               ;\r
+       ld de,ci.buf+1          ;\r
+       ld a,(de)               ;\r
+       ld b,a                  ;\r
+       ld c,000h               ;\r
+       inc b                   ;\r
 l0880h:\r
-       inc de                  ;0880\r
-       dec b                   ;0881\r
-       jr z,l08b2h             ;0882\r
-       ld a,(de)               ;0884\r
-       bit 0,c                 ;0885\r
-       call z,UPCASE           ;0887\r
-       ld (de),a               ;088a\r
-       cp ''''                 ;088b\r
-       jr nz,l0880h            ;088d\r
-       push de                 ;088f\r
-       dec de                  ;0890\r
-       ld a,(de)               ;0891\r
-       cp ''''                 ;0892\r
-       jr z,l08aeh             ;0894\r
-       dec de                  ;0896\r
-       ld a,(de)               ;0897\r
-       cp '^'                  ;0898\r
-       jr z,l08a2h             ;089a\r
-       dec de                  ;089c\r
-       ld a,(de)               ;089d\r
-       cp '^'                  ;089e\r
-       jr nz,l08aeh            ;08a0\r
+       inc de                  ;\r
+       dec b                   ;\r
+       jr z,l08b2h             ;\r
+       ld a,(de)               ;\r
+       bit 0,c                 ;\r
+       call z,UPCASE           ;\r
+       ld (de),a               ;\r
+       cp ''''                 ;\r
+       jr nz,l0880h            ;\r
+       push de                 ;\r
+       dec de                  ;\r
+       ld a,(de)               ;\r
+       cp ''''                 ;\r
+       jr z,l08aeh             ;\r
+       dec de                  ;\r
+       ld a,(de)               ;\r
+       cp '^'                  ;\r
+       jr z,l08a2h             ;\r
+       dec de                  ;\r
+       ld a,(de)               ;\r
+       cp '^'                  ;\r
+       jr nz,l08aeh            ;\r
 l08a2h:\r
-       inc de                  ;08a2\r
-       push bc                 ;08a3\r
-       call sub_0a0eh          ;08a4\r
-       pop bc                  ;08a7\r
-       dec de                  ;08a8\r
-       ld a,(de)               ;08a9\r
-       cp ''''                 ;08aa\r
-       jr z,l08afh             ;08ac\r
+       inc de                  ;\r
+       push bc                 ;\r
+       call sub_0a0eh          ;\r
+       pop bc                  ;\r
+       dec de                  ;\r
+       ld a,(de)               ;\r
+       cp ''''                 ;\r
+       jr z,l08afh             ;\r
 l08aeh:\r
-       inc c                   ;08ae\r
+       inc c                   ;\r
 l08afh:\r
-       pop de                  ;08af\r
-       jr l0880h               ;08b0\r
+       pop de                  ;\r
+       jr l0880h               ;\r
 l08b2h:\r
-       xor a                   ;08b2\r
-       ld (de),a               ;08b3\r
-       ld de,ci.buf+2          ;08b4\r
-       pop hl                  ;08b7\r
-       ret                     ;08b8\r
+       xor a                   ;\r
+       ld (de),a               ;\r
+       ld de,ci.buf+2          ;\r
+       pop hl                  ;\r
+       ret                     ;\r
 \r
 UPCASE:\r
-       cp 'a'                  ;08b9\r
-       ret c                   ;08bb\r
-       cp 'z'+1                ;08bc\r
-       ret nc                  ;08be\r
-       and 05fh                ;08bf\r
-       ret                     ;08c1\r
+       cp 'a'                  ;\r
+       ret c                   ;\r
+       cp 'z'+1                ;\r
+       ret nc                  ;\r
+       and 05fh                ;\r
+       ret                     ;\r
 \r
 out.hl.@:\r
-       call out.hl             ;08c2\r
-       push de                 ;08c5\r
-       push hl                 ;08c6\r
-       ld de,(offs.@)          ;08c7\r
-       ld a,d                  ;08cb\r
-       or e                    ;08cc\r
-       jr z,l08ddh             ;08cd\r
-       call OUTBL              ;08cf\r
-       ld a,'@'                ;08d2\r
-       call OUTCHAR            ;08d4\r
-       and a                   ;08d7\r
-       sbc hl,de               ;08d8\r
-       call out.hl             ;08da\r
+       call out.hl             ;\r
+       push de                 ;\r
+       push hl                 ;\r
+       ld de,(offs.@)          ;\r
+       ld a,d                  ;\r
+       or e                    ;\r
+       jr z,l08ddh             ;\r
+       call OUTBL              ;\r
+       ld a,'@'                ;\r
+       call OUTCHAR            ;\r
+       and a                   ;\r
+       sbc hl,de               ;\r
+       call out.hl             ;\r
 l08ddh:\r
-       pop hl                  ;08dd\r
-       pop de                  ;08de\r
-       ret                     ;08df\r
+       pop hl                  ;\r
+       pop de                  ;\r
+       ret                     ;\r
 \r
 out.bin.w:\r
-       ld a,h                  ;08e0\r
-       call out.bin.b          ;08e1\r
-       ld a,l                  ;08e4\r
+       ld a,h                  ;\r
+       call out.bin.b          ;\r
+       ld a,l                  ;\r
 out.bin.b:\r
-       ld b,008h               ;08e5\r
+       ld b,008h               ;\r
 l08e7h:\r
-       add a,a                 ;08e7\r
-       push af                 ;08e8\r
-       ld a,0                  ;08e9\r
-       adc a,a                 ;08eb\r
-       call out.digit          ;08ec\r
-       pop af                  ;08ef\r
-       djnz l08e7h             ;08f0\r
-       ld a,'"'                ;08f2\r
-       jp OUTCHAR              ;08f4\r
+       add a,a                 ;\r
+       push af                 ;\r
+       ld a,0                  ;\r
+       adc a,a                 ;\r
+       call out.digit          ;\r
+       pop af                  ;\r
+       djnz l08e7h             ;\r
+       ld a,'"'                ;\r
+       jp OUTCHAR              ;\r
 \r
 sub_08f7h:\r
-       ld a,'-'                ;08f7\r
-       call OUTCHAR            ;08f9\r
-       dec hl                  ;08fc\r
-       jp cpl.hl               ;08fd\r
+       ld a,'-'                ;\r
+       call OUTCHAR            ;\r
+       dec hl                  ;\r
+       jp cpl.hl               ;\r
 \r
 out.hl.decm:\r
-       push hl                 ;0900\r
-       call sub_08f7h          ;0901\r
-       db      3eh             ;0904  ld a,0E5h\r
+       push hl                 ;\r
+       call sub_08f7h          ;\r
+       db      3eh             ;  ld a,0E5h\r
 out.hl.dec:\r
        push    hl\r
-       ld b,6                  ;0906\r
-       call sub_0917h          ;0908\r
-       pop hl                  ;090b\r
-       ld a,'.'                ;090c\r
-       call OUTCHAR            ;090e\r
+       ld b,6                  ;\r
+       call sub_0917h          ;\r
+       pop hl                  ;\r
+       ld a,'.'                ;\r
+       call OUTCHAR            ;\r
 l0911h:\r
-       call OUTBL              ;0911\r
-       djnz l0911h             ;0914\r
-       ret                     ;0916\r
+       call OUTBL              ;\r
+       djnz l0911h             ;\r
+       ret                     ;\r
 \r
 \r
 sub_0917h:\r
@@ -472,22 +496,34 @@ l0960h:
 outquote:\r
        ld a,''''               ;0979\r
 OUTCHAR:\r
-       push hl                 ;097b\r
-       push af                 ;097c\r
-       and 07fh                ;097d\r
-       call $co                ;097f\r
-       ld hl,CON.COL           ;0982\r
-       inc (hl)                ;0985\r
-       pop af                  ;0986\r
-       pop hl                  ;0987\r
+       push    hl\r
+       push    de\r
+       push    bc\r
+       push    af\r
+       and     07fh\r
+       ld      c,a\r
+       call    ?cono\r
+       ld      hl,CON.COL\r
+       inc     (hl)\r
+       pop     af\r
+       pop     bc\r
+       pop     de\r
+       pop     hl\r
        ret                     ;0988\r
 \r
 inchar:\r
-       call $cists             ;0989\r
-       and a                   ;098c\r
-       ret z                   ;098d\r
-       call $ci                ;098e\r
+       push    hl\r
+       push    de\r
+       push    bc\r
+       call    ?const\r
+       and     a\r
+       jr      z,inch1\r
+       call    ?conin\r
        scf                     ;0991\r
+inch1:\r
+       pop     bc\r
+       pop     de\r
+       pop     hl\r
        ret                     ;0992\r
 \r
 PSTR:\r
@@ -1816,7 +1852,7 @@ l1144h:
        inc hl                  ;1176\r
        ld a,d                  ;1177\r
        comrep                  ;1178\r
-       \r
+\r
        else\r
 \r
        ld a,(ddtrst)           ;115c\r
@@ -2688,10 +2724,9 @@ l1698h:
        ret                     ;169a\r
 \r
 ;      Read Intel Hex File from console.\r
-\r
 CMD.R:\r
        ld hl,0                 ;169b\r
-       call get_lastarg_def    ;169e\r
+       call get_lastarg_def    ;169e   get offset from command line\r
        push hl                 ;16a1\r
        ld hl,0                 ;16a2\r
        ld (HILOD),hl           ;16a5\r
@@ -2713,15 +2748,15 @@ w_recstart:
        jr z,l16deh             ;16c4\r
 l16c6h:\r
        call i.gethexbyte       ;16c6\r
-       pop de                  ;16c9\r
+       pop de                  ;16c9   offset\r
        push de                 ;16ca\r
        push hl                 ;16cb\r
        add hl,de               ;16cc\r
        call i.storebyte        ;16cd\r
        pop hl                  ;16d0\r
        inc hl                  ;16d1\r
-       djnz l16c6h             ;16d2\r
-       call i.gethexbyte       ;16d4\r
+       djnz l16c6h             ;16d2   repeat for record len\r
+       call i.gethexbyte       ;16d4   checksum\r
        ld a,c                  ;16d7\r
        and a                   ;16d8\r
        jp nz,ERROR             ;16d9   exit if checksum error\r
@@ -2762,10 +2797,10 @@ i.getchar:
 i.storebyte:\r
        push af                 ;1708\r
        push de                 ;1709\r
-       ld de,TPA               ;170a\r
+       ld de,TPA               ;170a   lowest allowed load address\r
        call CP.HL.DE           ;170d\r
        jp c,ERROR              ;1710\r
-       ld de,$stcka            ;1713\r
+       ld de,$stcka            ;1713   highest allowed load address\r
        call CP.HL.DE           ;1716\r
        jp nc,ERROR             ;1719\r
        ld de,(HILOD)           ;171c\r
@@ -2781,7 +2816,7 @@ l1734h:
        pop de                  ;1734\r
        pop af                  ;1735\r
        comst                   ;1736\r
-       ld (hl),a               ;173a\r
+       ld (hl),a               ;173a   store byte\r
        comend\r
        ret                     ;173b\r
 \r
@@ -4649,7 +4684,7 @@ b_0x2108_start:                   ;       1 byte opcodes
        defb 08bh               ;2137\r
        defw l2561h             ;2138\r
 \r
-       defb 0c7h               ;213a   rst \r
+       defb 0c7h               ;213a   rst\r
        defb 0c7h               ;213b\r
        defb 0b4h               ;213c\r
        defw l231eh             ;213d\r