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