]> cloudbase.mooo.com Git - ddt180.git/blobdiff - ddt180.z80
Allow symbols in expressions. Print symbol in H command.
[ddt180.git] / ddt180.z80
index 85e37057cf5c8c85d68e0279984f17aeb7d1674a..862dbc2b83242042532d6298efd7ff70ff62a54b 100644 (file)
@@ -249,69 +249,6 @@ crlf:
        jr c,mainloop\r
        ret\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 de,conbuf+1\r
-       ld a,(de)\r
-       ld b,a\r
-       ld c,0\r
-       inc b\r
-l0162h:\r
-       inc de\r
-       dec b\r
-       jr z,l0194h\r
-       ld a,(de)\r
-       bit 0,c\r
-       call z,toupper\r
-       ld (de),a\r
-       cp ''''\r
-       jr nz,l0162h\r
-       push de\r
-       dec de\r
-       ld a,(de)\r
-       cp ''''\r
-       jr z,l0190h\r
-       dec de\r
-       ld a,(de)\r
-       cp '^'\r
-       jr z,l0184h\r
-       dec de\r
-       ld a,(de)\r
-       cp '^'\r
-       jr nz,l0190h\r
-l0184h:\r
-       inc de\r
-       push bc\r
-       call sub_0303h\r
-       pop bc\r
-       dec de\r
-       ld a,(de)\r
-       cp ''''\r
-       jr z,l0191h\r
-l0190h:\r
-       inc c\r
-l0191h:\r
-       pop de\r
-       jr l0162h\r
-l0194h:\r
-       xor a\r
-       ld (de),a\r
-       ld de,conbuf+2\r
-       pop hl\r
-       ret\r
-\r
-toupper:\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\r
        push de\r
@@ -331,23 +268,6 @@ l01bfh:
        pop de\r
        ret\r
 \r
-out.bin.w:\r
-       ld a,h\r
-       call out.bin.b\r
-       ld a,l\r
-out.bin.b:\r
-       ld b,8\r
-l01c9h:\r
-       add a,a\r
-       push af\r
-       ld a,00\r
-       adc a,a\r
-       call out_dgt\r
-       pop af\r
-       djnz l01c9h\r
-       ld a,'"'\r
-       jp outchar\r
-\r
 sub_01d9h:\r
        ld a,'-'\r
        call outchar\r
@@ -410,25 +330,42 @@ out_dgt:
 l0229h:\r
        add a,'0'\r
        jr outchar\r
-l022dh:\r
-       ld a,'-'\r
-       call outchar\r
-       ld a,040h\r
+\r
+out.bin.w:\r
+       ld a,h\r
+       call out.bin.b\r
+       ld a,l\r
+out.bin.b:\r
+       ld b,8\r
+l01c9h:\r
+       add a,a\r
+       push af\r
+       ld a,00\r
+       adc a,a\r
+       call out_dgt\r
+       pop af\r
+       djnz l01c9h\r
+       ld a,'"'\r
+       jr outchar\r
+\r
 out.ascii:\r
-       ex af,af'\r
-       call outquote\r
-       ex af,af'\r
        push af\r
        res 7,a\r
        cp ' '\r
+       push af\r
+       call nc,outbl\r
+       call outquote\r
+       pop af\r
        jr nc,l0242h\r
        sub 0c0h\r
+       ex af,af'\r
+       ld a,'^'\r
+       call outchar\r
+       ex af,af'\r
 l0242h:\r
        call outchar\r
-       push af\r
        cp ''''\r
        call z,outchar\r
-       pop af\r
        ex af,af'\r
        call outquote\r
        pop af\r
@@ -436,9 +373,18 @@ l0242h:
        ld a,'.'\r
        call m,outchar\r
        ex af,af'\r
-       jr c,l022dh\r
        ret\r
 \r
+outbl6:\r
+       call outbl2\r
+outbl4:\r
+       call outbl2\r
+outbl2:\r
+       call outbl\r
+outbl:\r
+       ld a,' '\r
+       jr outchar\r
+\r
 p_char_lparen:\r
        ld a,'('\r
        jr outchar\r
@@ -462,6 +408,25 @@ outchar:
        pop hl\r
        ret\r
 \r
+pstr:\r
+       ld c,0\r
+l028ah:\r
+       ld a,(hl)\r
+       inc hl\r
+       and a\r
+       ret z\r
+       call outchar\r
+       inc c\r
+       and a\r
+       ret m\r
+       jr l028ah\r
+\r
+pstr_inl:\r
+       ex      (sp),hl\r
+       call    pstr\r
+       ex      (sp),hl\r
+       ret\r
+\r
 inchar:\r
        push hl\r
        push de\r
@@ -479,40 +444,67 @@ l0284h:
        pop hl\r
        ret\r
 \r
-pstr:\r
+get_line:\r
+       push hl\r
+       ld de,conbuf\r
+       ld c,BDOS_CBUF\r
+       call ddtz_bdos\r
+       call crlf\r
+       ld de,conbuf+1\r
+       ld a,(de)\r
+       ld b,a\r
        ld c,0\r
-l028ah:\r
-       ld a,(hl)\r
-       inc hl\r
-       and a\r
-       ret z\r
-       call outchar\r
+       inc b\r
+l0162h:\r
+       inc de\r
+       dec b\r
+       jr z,l0194h\r
+       ld a,(de)\r
+       bit 0,c\r
+       call z,toupper\r
+       ld (de),a\r
+       cp ''''\r
+       jr nz,l0162h\r
+       push de\r
+       dec de\r
+       ld a,(de)\r
+       cp ''''\r
+       jr z,l0190h\r
+       dec de\r
+       ld a,(de)\r
+       cp '^'\r
+       jr z,l0184h\r
+       dec de\r
+       ld a,(de)\r
+       cp '^'\r
+       jr nz,l0190h\r
+l0184h:\r
+       inc de\r
+       push bc\r
+       call sub_0303h\r
+       pop bc\r
+       dec de\r
+       ld a,(de)\r
+       cp ''''\r
+       jr z,l0191h\r
+l0190h:\r
        inc c\r
-       and a\r
-       ret m\r
-       jr l028ah\r
-\r
-pstr_inl:\r
-       ex      (sp),hl\r
-       call    pstr\r
-       ex      (sp),hl\r
+l0191h:\r
+       pop de\r
+       jr l0162h\r
+l0194h:\r
+       xor a\r
+       ld (de),a\r
+       ld de,conbuf+2\r
+       pop hl\r
        ret\r
 \r
-outbl6:\r
-       call outbl2\r
-outbl4:\r
-       call outbl2\r
-outbl2:\r
-       call outbl\r
-outbl:\r
-       ld a,' '\r
-       jr outchar\r
-\r
-add_hl_a:\r
-       add a,l\r
-       ld l,a\r
+toupper:\r
+       cp 'a'\r
+       ret c\r
+       cp 'z'+1\r
        ret nc\r
-       inc h\r
+       and 05fh\r
        ret\r
 \r
 skipbl0:\r
@@ -553,6 +545,13 @@ chk_sp:
        jr c,to_error\r
        ret\r
 \r
+add_hl_a:\r
+       add a,l\r
+       ld l,a\r
+       ret nc\r
+       inc h\r
+       ret\r
+\r
 cp_hl_de:\r
        and a\r
        sbc hl,de\r
@@ -1030,16 +1029,18 @@ do_factor:
        cp '('\r
        jr z,fact_mem\r
        cp '['\r
-       jp z,expr_brckt\r
+       jr z,expr_brckt\r
        cp ''''\r
        jr z,fact_factstring\r
+       cp '.'\r
+       jr z,fact_symbol\r
        dec de\r
        scf\r
        ret\r
 \r
 fact_reg.Y:\r
        call get.decdigit\r
-       jp c,ERROR\r
+       jr c,error4\r
        inc de\r
        add a,a\r
        ld hl,reg_Y\r
@@ -1135,6 +1136,66 @@ expr_brckt:
 error4:\r
        jp ERROR\r
 \r
+fact_symbol:\r
+       push    bc\r
+       ld      hl,ddtz_base\r
+\r
+fs_nxtsym:\r
+       ld      a,(hl)                  ;symlen\r
+       cp      0c3h\r
+       jr      z,error4\r
+       ld      b,a\r
+       inc     b\r
+       push    hl\r
+       push    de\r
+fs_2:\r
+       ld      a,(de)\r
+       call    test_termchar\r
+       jr      z,fs_endstr\r
+       dec     b\r
+       jr      z,fs_cont\r
+       inc     de\r
+       dec     hl\r
+       cp      (hl)\r
+       jr      z,fs_2\r
+fs_cont:\r
+       pop     de\r
+       pop     hl\r
+       ld      a,(hl)\r
+       add     a,3\r
+       call    sub_hl_a\r
+       jr      fs_nxtsym\r
+\r
+fs_endstr:\r
+       dec     b\r
+       jr      nz,fs_cont\r
+       pop     hl\r
+       pop     hl\r
+       inc     hl\r
+       ld      a,(hl)\r
+       inc     hl\r
+       ld      h,(hl)\r
+       ld      l,a\r
+       or      a\r
+       pop     bc\r
+       ret\r
+\r
+t_trmchrs:\r
+       db      ' !#&()*+,-/:;<=>[\]{|}',0\r
+t_trmchrs_len  equ $ - t_trmchrs\r
+\r
+test_termchar:\r
+       push    hl\r
+       push    bc\r
+       ld      hl,t_trmchrs\r
+       ld      bc,t_trmchrs_len\r
+       cpir\r
+       pop     bc\r
+       pop     hl\r
+       ret\r
+\r
+\r
+\r
 get.number:\r
        call get.hexdigit\r
        ret c\r
@@ -2319,9 +2380,11 @@ l0e5eh:
        call out_hl_dec_neg\r
        call outbl4\r
        call out.bin.w\r
-       call outbl2\r
+       call outbl\r
        ld a,l\r
        call out.ascii\r
+       call outbl\r
+       call p_symbol\r
        jp crlf\r
 \r
 p_symbols:\r
@@ -2336,8 +2399,8 @@ psym_l:
        ld      b,(hl)\r
        dec     hl\r
        ld      a,b\r
-       cp      10h\r
-       ret     nc\r
+       cp      0c3h\r
+       ret     z\r
 \r
        ex      de,hl\r
        call    out_hl\r
@@ -2351,6 +2414,17 @@ psymch_l:
        call    crlf\r
        jr      psym_l\r
 \r
+\r
+p_symbol:\r
+  if 0\r
+       ld      a,(dash_flag)\r
+       or      a\r
+       ret     nz\r
+  endif\r
+       call    sym_getname\r
+       ret     z\r
+       ld      a,'.'\r
+       call    outchar\r
 p_symstr:\r
        ld      b,(hl)\r
 pss_l:\r
@@ -2360,7 +2434,6 @@ pss_l:
        djnz    pss_l\r
        ret\r
 \r
-\r
 p_label:\r
   if 0\r
        ld      a,(dash_flag)\r
@@ -3073,6 +3146,10 @@ p_max_high:
        DC      '  Max = '\r
        ld hl,(max_load)\r
        call out_hl\r
+       call pstr_inl\r
+       DC      '  Top = '\r
+       ld hl,(BDOS+1)\r
+       call out_hl\r
        jp crlf\r
 \r
 cmd_W:\r