\r
; print utils\r
\r
- public ?pmsg ; print message\r
+ public ?pchar,?pmsg ; print char <A>, print message (<HL>)\r
public pr.idx ; print message from table indexed by <A>\r
public pr.inln,pr.crlf ; print message inline, print newline\r
public phex2,phex4 ; print 2 digit hex <A> or 4 digit hex <HL>\r
exx ;high\r
ret\r
\r
-;-------------------------------------------------------------------------------\r
-; print message @<HL> up to a null\r
-; saves <BC> & <DE>\r
-\r
-?pmsg:\r
- push bc\r
- push de\r
-pmsg$loop:\r
- ld a,(hl)\r
- inc hl\r
- or a\r
- jr z,pmsg$exit\r
- ld c,a\r
- push hl\r
- call ?cono\r
- pop hl\r
- jr pmsg$loop\r
-pmsg$exit:\r
- pop de\r
- pop bc\r
- ret\r
-\r
;-------------------------------------------------------------------------------\r
; print message from table @<HL>, indexed by <A>\r
; saves <BC> & <DE>\r
\r
pr.idx:\r
push bc\r
- push de\r
push hl ; put pointer to first message on stack\r
- ld e,a ; save message number\r
+ ld b,a ; save message number\r
+ or a\r
+ jr z,pdc_done\r
xor a\r
- ld b,a\r
- ld c,a\r
- inc e\r
-pdc_nxt_str:\r
- dec e\r
- ex (sp),hl\r
- jr z,pdc_found\r
- ex (sp),hl\r
- cpir\r
+pdc_skip:\r
+ bit 7,(hl)\r
+ inc hl\r
+ jr z,pdc_skip\r
cp (hl)\r
- jr nz,pdc_nxt_str\r
- ; End of List, msg not found.\r
- ; Print first msg.\r
-pdc_found:\r
- pop hl\r
- call ?pmsg\r
- pop de\r
+ jr z,pdc_done ; End of List, msg not found. Print first msg.\r
+ djnz pdc_skip\r
+ ex (sp),hl ; Remove first msg from stack\r
+pdc_done:\r
+ pop hl ; Get msg. to print\r
pop bc\r
+ ;fall thru\r
+\r
+;-------------------------------------------------------------------------------\r
+; print message @<HL> up to a null\r
+; saves <BC> & <DE>\r
+\r
+?pmsg:\r
+ ld a,(hl)\r
+ inc hl\r
+ and 07fh\r
+ ret z\r
+ call ?pchar\r
+ dec hl\r
+ bit 7,(hl)\r
+ inc hl\r
+ jr z,?pmsg\r
ret\r
\r
;-------------------------------------------------------------------------------\r
; print message inline up to a null\r
-; saves all registers\r
+; saves <BC>, <DE>, <HL>\r
\r
pr.inln:\r
ex (sp),hl\r
- push af\r
call ?pmsg\r
- pop af\r
ex (sp),hl\r
ret\r
\r
;-------------------------------------------------------------------------------\r
; print <CR><LF>\r
-; saves all registers\r
+; saves <BC>, <DE>, <HL>\r
\r
pr.crlf:\r
call pr.inln\r
- db cr,lf,0\r
+ dc cr,lf\r
ret\r
\r
;-------------------------------------------------------------------------------\r
pop af\r
\r
print.digit:\r
- push hl\r
- push de\r
- push bc\r
- push af\r
- and 00fh\r
- cp 10\r
- jr c,prd_1\r
- add a,007h\r
-prd_1:\r
- add a,'0'\r
+ daa\r
+ add a,0a0h\r
+ adc a,040h\r
+ ;fall thru\r
+\r
+;-------------------------------------------------------------------------------\r
+; print character in a\r
+; saves <BC>, <DE>, <HL>\r
\r
+?pchar:\r
+ push bc\r
+ push de\r
+ push hl\r
ld c,a\r
call ?cono\r
- pop af\r
- pop bc\r
- pop de\r
pop hl\r
+ pop de\r
+ pop bc\r
ret\r
\r
-\r
;-------------------------------------------------------------------------------\r
; print decimal 16 bit number from HL\r
;\r
; HL: unsigned binary number to print\r
; C: minimum print field width\r
-; number is prined right-aligned\r
+; number is printed right-aligned\r
; B: pad character, typically ' ' or '0'\r
\r
pr.dec:\r
;\r
; DEHL: unsigned binary number to print\r
; C: minimum print field width\r
-; number is prined right-aligned\r
+; number is printed right-aligned\r
; B: pad character, typically ' ' or '0'\r
\r
pr.decl:\r
;-------------------------------------------------------------------------------\r
\r
?pderr:\r
- ld hl,drive$msg\r
- call ?pmsg ; error header\r
ld a,(@adrv)\r
add a,'A'\r
- ld c,a\r
- call ?cono ; drive code\r
- ld hl,track$msg\r
- call ?pmsg ; track header\r
+ ld (msg_drv),a\r
+ call pr.inln ; error header\r
+ db cr,lf,bell,'BIOS Error on '\r
+msg_drv:\r
+ db 'A'\r
+ dc ': T-'\r
ld c,0\r
ld hl,(@trk)\r
call pr.dec ; track number\r
- ld hl,sector$msg\r
- call ?pmsg ; sector header\r
+ call pr.inln ; sector header\r
+ dc ', S-'\r
ld hl,(@sect)\r
jp pr.dec ; sector number\r
\r
- ; error message components\r
-drive$msg: db cr,lf,bell,'BIOS Error on ',0\r
-track$msg: db ': T-',0\r
-sector$msg: db ', S-',0\r
-\r
-\r
;-------------------------------------------------------------------------------\r
; get console input, echo it, and shift to upper case\r
; save hl,de,bc\r
pre2:\r
; prompt for retry\r
call pr.inln\r
- db ' Retry (Y/N) ? ',0\r
+ dc ' Retry (Y/N) ? '\r
\r
call uciecho ; get operator response\r
cp 'Y'\r
\r
\r
op$msg:\r
- db ', Unknown op, ',0\r
- db ', Read, ',0\r
- db ', Write, ',0\r
+ dc ', Unknown op, '\r
+ dc ', Read, '\r
+ dc ', Write, '\r
db 0\r
\r
end\r