jr mainloop\r
\r
l0146h:\r
- ld a,'?'\r
- call outchar\r
+ call pstr_inl\r
+ dc '?'\r
;fall thru\r
crlf:\r
+ call pstr_inl\r
+ db CR,LF+80h\r
call inchar\r
- ld a,CR\r
- call outchar\r
- ld a,LF\r
- call outchar\r
ld a,0\r
ld (con_col),a\r
jr c,mainloop\r
or e\r
jr z,l01bfh\r
call outbl\r
- ld a,'@'\r
- call outchar\r
+ call pstr_inl\r
+ dc '@'\r
and a\r
sbc hl,de\r
call out_hl\r
ret\r
\r
sub_01d9h:\r
- ld a,'-'\r
- call outchar\r
+ call pstr_inl\r
+ dc '-'\r
dec hl\r
jp cpl.hl\r
\r
ld b,006h\r
call sub_01f9h\r
pop hl\r
- ld a,'.'\r
- call outchar\r
+ call pstr_inl\r
+ dc '.'\r
l01f3h:\r
call outbl\r
djnz l01f3h\r
jr nc,l0242h\r
sub 0c0h\r
ex af,af'\r
- ld a,'^'\r
- call outchar\r
+ call pstr_inl\r
+ dc '^'\r
ex af,af'\r
l0242h:\r
call outchar\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
+ jr pstr\r
\r
pstr_inl:\r
ex (sp),hl\r
add hl,de\r
ret\r
\r
+sub_hl_a1:\r
+ dec hl\r
+sub_hl_a:\r
+ push bc\r
+ ld c,a\r
+ ld b,0\r
+ or a\r
+ sbc hl,bc\r
+ pop bc\r
+ ret\r
+\r
+sym_getname:\r
+ push de\r
+ push hl\r
+ ld hl,ddtz_base+2\r
+sgn_l:\r
+ ld d,(hl)\r
+ dec hl\r
+ ld e,(hl)\r
+ dec hl\r
+ ld a,(hl)\r
+ cp 0c3h\r
+ jr z,sgn_e\r
+\r
+ ex (sp),hl\r
+ call cp_hl_de\r
+ jr z,sgn_e\r
+ ex (sp),hl\r
+ call sub_hl_a1\r
+ jr sgn_l\r
+sgn_e:\r
+ sub 0c3h\r
+ pop hl\r
+ pop de\r
+ ret\r
+\r
+p_symstr:\r
+ push bc\r
+ ld b,(hl)\r
+pss_l:\r
+ dec hl\r
+ ld a,(hl)\r
+ call outchar\r
+ djnz pss_l\r
+ dec hl\r
+ pop bc\r
+ ret\r
+\r
+p_sym_space:\r
+ if 0\r
+ ld a,(dash_flag)\r
+ or a\r
+ ret nz\r
+ endif\r
+\r
+ push hl\r
+ push bc\r
+ ld c,a\r
+ ld a,(con_col)\r
+ ld b,a\r
+ call sym_getname\r
+ jr z,psb_align\r
+ bit 7,c\r
+ jr z,psb_nd\r
+ call pstr_inl\r
+ dc ' .'\r
+psb_nd:\r
+ call p_symstr\r
+\r
+psb_align:\r
+ ld a,(con_col)\r
+ sub b\r
+ ld b,a\r
+ ld a,(symlen_max)\r
+ bit 7,c\r
+ jr z,$+4\r
+ add a,2\r
+ res 7,c\r
+ add c\r
+ sub b\r
+ ld b,a\r
+ jr z,psb_e\r
+psb_a_l:\r
+ call outbl\r
+ djnz psb_a_l\r
+psb_e:\r
+ pop bc\r
+ pop hl\r
+ ret\r
+\r
+p_label:\r
+ if 0\r
+ ld a,(dash_flag)\r
+ or a\r
+ ret nz\r
+ endif\r
+ push hl\r
+ call sym_getname\r
+ jr z,pl_e\r
+ call p_symstr\r
+ call pstr_inl\r
+ dc ':'\r
+ call crlf\r
+pl_e:\r
+ pop hl\r
+ ret\r
+\r
lookupch:\r
ld b,0\r
l02f5h:\r
call get.decdigit\r
jr c,error4\r
inc de\r
+get_y_val:\r
add a,a\r
ld hl,reg_Y\r
call add_hl_a\r
push bc\r
push de\r
call pstr\r
- ld a,'='\r
- call outchar\r
+ call pstr_inl\r
+ dc '='\r
ex (sp),hl\r
ld e,(hl)\r
inc hl\r
\r
cmd_B:\r
call skipbl\r
- jr z,l07b7h\r
+ jr z,bp_print\r
inc de\r
cp 'X'\r
- jr z,l077dh\r
+ jr z,bp_clr0\r
dec de\r
ld a,001h\r
jp bp_enter\r
-l077dh:\r
+bp_clr0:\r
call skipbl\r
jr z,bp_clr_all\r
-l0782h:\r
+bp_clr_next:\r
call expr\r
jp c,assert_eol\r
push de\r
call bp_clr\r
pop de\r
call next_arg\r
- jr l0782h\r
+ jr bp_clr_next\r
\r
bp_clr_all:\r
scf\r
djnz l0799h\r
ret\r
\r
-l07b7h:\r
+bp_print:\r
ld b,BP_CNT\r
ld ix,bp_tab\r
-l07bdh:\r
+bp_pr_l:\r
bit 0,(ix+000h)\r
- jr z,l0808h\r
+ jr z,bp_pr_cont\r
ld a,'R'\r
bit 4,(ix+000h)\r
jr nz,l07cdh\r
ld l,(ix+002h)\r
ld h,(ix+003h)\r
call out.hl.@\r
- call outbl2\r
- ld a,':'\r
- call outchar\r
+ ld a,82h\r
+ call p_sym_space\r
+ call pstr_inl\r
+ dc ':'\r
ld l,(ix+004h)\r
ld h,(ix+005h)\r
call out_hl\r
or l\r
jr z,l0805h\r
call outbl4\r
- ld a,'I'\r
- call outchar\r
- call outbl2\r
+ call pstr_inl\r
+ dc 'I '\r
call pstr\r
l0805h:\r
call crlf\r
-l0808h:\r
+bp_pr_cont:\r
ld de,BP_SIZE\r
add ix,de\r
- djnz l07bdh\r
+ djnz bp_pr_l\r
ret\r
\r
; Add break points to list\r
call skipbl\r
ret z\r
cp 'R'\r
- jr nz,l081ch\r
+ jr nz,bp_e_1\r
inc de\r
set 4,b\r
-l081ch:\r
+bp_e_1:\r
push bc\r
call expr\r
jp c,ERROR\r
bp_get_freeslot:\r
ld b,BP_CNT\r
ld ix,bp_tab\r
-l085ah:\r
+bp_gf_l:\r
ld a,(ix+000h)\r
and 00fh\r
ret z\r
ld bc,BP_SIZE\r
add ix,bc\r
pop bc\r
- djnz l085ah\r
+ djnz bp_gf_l\r
jp ERROR\r
\r
bp_get_count:\r
l0bc7h:\r
push af\r
call sub_0bdch\r
- call outbl4\r
+ pop af\r
+ push af\r
+ call get_y_val\r
+ ld a,82h\r
+ call p_sym_space\r
pop af\r
inc a\r
bit 0,a\r
l0c33h:\r
ld b,c\r
call pstr\r
- ld a,'='\r
- call outchar\r
+ call pstr_inl\r
+ dc '='\r
ld a,(de)\r
bit 0,b\r
jp z,out_hex\r
call outbl\r
ld a,l\r
call out.ascii\r
- call outbl\r
- call p_symbol\r
+ ld a,80h\r
+ call p_sym_space\r
jp crlf\r
\r
p_symbols:\r
inc de\r
call assert_eol\r
+ ld a,(symlen_max)\r
+ add a,7\r
+ ld b,a\r
+ ld c,0\r
ld hl,ddtz_base+2\r
-psym_l:\r
+psym_nxtsym:\r
ld d,(hl)\r
dec hl\r
ld e,(hl)\r
dec hl\r
- ld b,(hl)\r
- dec hl\r
- ld a,b\r
+ ld a,(hl)\r
cp 0c3h\r
- ret z\r
+ jr z,psym_e\r
\r
ex de,hl\r
call out_hl\r
+ call outbl\r
ex de,hl\r
+ call p_symstr\r
+\r
+ ld a,c\r
+ add b\r
+ ld c,a\r
+ ld a,80 ;screen width\r
+ sub b\r
+ cp c\r
+ jr c,psym_nxtline\r
+psym_fillcol:\r
call outbl\r
-psymch_l:\r
- ld a,(hl)\r
- dec hl\r
- call outchar\r
- djnz psymch_l\r
- call crlf\r
- jr psym_l\r
+ ld a,(con_col)\r
+ cp c\r
+ jr c,psym_fillcol\r
+ jr psym_nxtsym\r
\r
+psym_nxtline:\r
+ ld c,0\r
+ call crlf\r
+ jr psym_nxtsym\r
\r
-p_symbol:\r
- if 0\r
- ld a,(dash_flag)\r
+psym_e:\r
+ ld a,c\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
- dec hl\r
- ld a,(hl)\r
- call outchar\r
- djnz pss_l\r
- ret\r
-\r
-p_label:\r
- if 0\r
- ld a,(dash_flag)\r
- or a\r
- ret nz\r
- endif\r
- push hl\r
- call sym_getname\r
- jr z,pl_e\r
- call p_symstr\r
- ld a,':'\r
- call outchar\r
- call crlf\r
-pl_e:\r
- pop hl\r
- ret\r
-\r
-sym_getname:\r
- push de\r
- push hl\r
- ld hl,ddtz_base+2\r
-sgn_l:\r
- ld d,(hl)\r
- dec hl\r
- ld e,(hl)\r
- dec hl\r
- ld a,(hl)\r
- cp 0c3h\r
- jr z,sgn_e\r
+ jp crlf\r
\r
- ex (sp),hl\r
- call cp_hl_de\r
- jr z,sgn_e\r
- ex (sp),hl\r
- call sub_hl_a1\r
- jr sgn_l\r
-sgn_e:\r
- sub 0c3h\r
- pop hl\r
- pop de\r
- ret\r
-\r
-sub_hl_a1:\r
- dec hl\r
-sub_hl_a:\r
- push bc\r
- ld c,a\r
- ld b,0\r
- or a\r
- sbc hl,bc\r
- pop bc\r
- ret\r
\r
cmd_Q:\r
ld a,(de)\r
cp 080h\r
jr nz,l1111h\r
call read_sector\r
+ ld a,01ah\r
ret z\r
sub a\r
l1111h:\r
ld de,(cur_fcb)\r
ld c,BDOS_READ\r
call ddtz_bdos\r
- dec a\r
+ sub a,1\r
jr z,l1132h\r
- jp p,ERROR\r
+ jr nc,error8\r
l1132h:\r
pop bc\r
pop de\r
push de\r
ld de,TPA\r
call cp_hl_de\r
- jp c,ERROR\r
+ jr c,error8\r
ld de,(BDOS+1)\r
call cp_hl_de\r
- jp nc,ERROR\r
+ jr nc,error8\r
ld de,(high_load)\r
call cp_hl_de\r
jr c,l1157h\r
pop hl\r
jr z,read_hexfile\r
ld de,TPA\r
- add hl,de\r
push hl\r
+ add hl,de\r
l108eh:\r
call read_sector\r
+ jr nz,read_file_nxt\r
pop hl\r
- jr z,read_symfile\r
+ jr read_symfile\r
+\r
+read_file_nxt:\r
ld de,DMA_BUF\r
ld b,080h\r
l109ah:\r
inc de\r
inc hl\r
djnz l109ah\r
- push hl\r
jr l108eh\r
\r
read_hexfile:\r
push hl\r
l10aeh:\r
- call read_byte\r
+ call read_byte ; RECORD MARK\r
jr z,rdhex_done\r
cp ':'\r
jr nz,l10aeh\r
ld c,0\r
- call read_hexchar\r
+ call read_hexchar ; RECLEN\r
ld b,a\r
- call read_hexchar\r
+ call read_hexchar ; LOAD ADDR H\r
ld h,a\r
- call read_hexchar\r
+ call read_hexchar ; LOAD ADDR L\r
ld l,a\r
ld a,b\r
and a\r
jr z,rdhex_done\r
- call read_hexchar\r
+ call read_hexchar ; RECTYP\r
l10cch:\r
- call read_hexchar\r
+ call read_hexchar ; DATA\r
pop de\r
push de\r
push hl\r
pop hl\r
inc hl\r
djnz l10cch\r
- call read_hexchar\r
+ call read_hexchar ; CHKSUM\r
ld a,c\r
and a\r
jr nz,error9\r
cp ' '\r
jp z,p_max_high\r
\r
+ push hl ; offset\r
call pstr_inl\r
db 'SYMBOLS',CR,LF+80h\r
\r
dec de\r
call file_open\r
-;------------------------------------------------------------------------\r
rs_1:\r
call read_byte\r
rs_2:\r
+ pop de ; offset\r
cp 1ah\r
- jr z,p_max_high\r
+ jp z,p_max_high\r
+ push de ; offset\r
cp '!'\r
jr c,rs_1\r
- call read_hexbyte0\r
- ld d,a\r
- call read_hexbyte ; symval\r
- ld e,a\r
- push de ; symval\r
+ call read_hexbyte0 ; symval H\r
+ ld h,a\r
+ call read_hexbyte ; symval L\r
+ ld l,a\r
+ add hl,de\r
+ push hl ; symval\r
call read_byte\r
cp ' '\r
jr z,rs_4\r
cp ' '\r
jr c,rs_2\r
jr rs_3\r
-;\r
+\r
rs_4: ld hl,(BDOS+1) ;\r
ld e,0 ; setup symlen\r
rs_5: dec hl ;\r
- call read_byte ;\r
- cp TAB ;\r
+ call read_byte ; next char of symbol name\r
+ cp TAB ; symbol term?\r
jr z,rs_6 ;\r
cp CR ;\r
jr z,rs_6 ;\r
- cp '!' ;\r
- jr c,error9 ;\r
+ cp '!' ; TODO: check for valid symbol char instead\r
+ jr c,error9 ;\r
ld (hl),a ;\r
inc e ; symlen++\r
ld a,e ;\r
jr c,rs_5 ;\r
error9:\r
jp ERROR ;\r
-;\r
+\r
rs_6: push de ; symlen\r
push hl ;\r
ex de,hl ;\r
ex de,hl ;\r
pop de ;\r
ld (hl),e ; symlen\r
+ ld a,e\r
inc hl ;\r
pop de ; symval\r
ld (hl),e ;\r
inc hl ;\r
ld (hl),d ;\r
+ ld hl,symlen_max\r
+ cp (hl)\r
+ jr c,$+3\r
+ ld (hl),a\r
jp rs_1 ;\r
-;------------------------------------------------------------------------\r
+\r
\r
p_max_high0:\r
call assert_eol\r
ld de,(var.@)\r
ld a,d\r
or e\r
- ld b,011h\r
+ ld b,17\r
jr z,l122dh\r
- ld b,019h\r
+ ld b,25\r
l122dh:\r
call outbl\r
ld a,(con_col)\r
call p_disas_instr\r
and a\r
ret z\r
-\r
l193fh:\r
call outbl\r
ld a,(con_col)\r
ld a,d\r
or e\r
ret z\r
- call p_char_lparen\r
- ld a,'@'\r
- call outchar\r
+ call pstr_inl\r
+ dc '(@'\r
and a\r
sbc hl,de\r
call out_hl\r
ld a,(iy+001h)\r
and a\r
jp m,l1e61h\r
- ld a,'+'\r
- call outchar\r
+ call pstr_inl\r
+ dc '+'\r
ld a,(iy+001h)\r
jr l1e6bh\r
l1e61h:\r
- ld a,'-'\r
- call outchar\r
+ call pstr_inl\r
+ dc '-'\r
ld a,(iy+001h)\r
neg\r
l1e6bh:\r
jp pstr\r
\r
p_mnemonic:\r
+ ld a,(con_col)\r
+ ld c,a\r
call pstr\r
l1ebch:\r
- call outbl\r
- inc c\r
- ld a,c\r
- cp 5\r
- jr c,l1ebch\r
+ call outbl\r
+ ld a,(con_col)\r
+ sub c\r
+ cp 5\r
+ jr c,l1ebch\r
ret\r
\r
t_MNEMONICS:\r
l1ffdh:\r
db 0\r
\r
+symlen_max: ;max length of symbols read so far\r
+ db 0\r
cur_fcb:\r
dw 0\r
fcbsym:\r