]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/commitdiff
refactor print utils
authorLeo C <erbl259-lmu@yahoo.de>
Mon, 16 Mar 2020 13:11:37 +0000 (14:11 +0100)
committerLeo C <erbl259-lmu@yahoo.de>
Mon, 16 Mar 2020 13:11:37 +0000 (14:11 +0100)
cbios/Makefile
cbios/boot.180
cbios/cfio.180
cbios/misc.180
cbios/sdio.180
cbios/utils.180

index e1d1875c964aca853d35eefc088956f23122a608..c9878ad100de481feaa3867c2225b88f3e2cbfb4 100644 (file)
@@ -69,10 +69,10 @@ LN_DATA = F000
 .suffixes:
 #.suffixes: .180 .rel
 
 .suffixes:
 #.suffixes: .180 .rel
 
-.phony: all
+.PHONY: all
 all: sys
 
 all: sys
 
-.phony: sys bios map asym ldr
+.PHONY: sys bios map asym ldr
 sys: $(SYSFILE)
 bios: bnkbios3.spr
 map: $(MAPFILE)
 sys: $(SYSFILE)
 bios: bnkbios3.spr
 map: $(MAPFILE)
@@ -101,7 +101,7 @@ ccpline = $(CPMEMU) $(1) -$(subst $(space),$(comma),$(strip $(2)))
 define cpm-asm =
 COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \
 OUTPUT=$$(mktemp); echo $${COMMAND}; \
 define cpm-asm =
 COMMAND="$(AS) -$(basename $<)/$(AS_OPT)"; \
 OUTPUT=$$(mktemp); echo $${COMMAND}; \
-$${COMMAND} > $${OUTPUT}; \
+$${COMMAND} > $${OUTPUT} < $<; \
 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
 exit $${ERROR}
 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; fi ; \
 exit $${ERROR}
@@ -175,11 +175,11 @@ bnkbios3.spr : $(OBJ)
        @$(cpm-asm)
 
 
        @$(cpm-asm)
 
 
-.phony: bin-dist
+.PHONY: bin-dist
 bin-dist: $(SYSFILE) $(MAPFILE) cpmldr.com
        $(ZIP) -9 $(DIST_NAME_BIN) $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
 
 bin-dist: $(SYSFILE) $(MAPFILE) cpmldr.com
        $(ZIP) -9 $(DIST_NAME_BIN) $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
 
-.phony: dist
+.PHONY: dist
 dist: $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
        $(GIT) archive --format=zip --prefix=$(PREFIX)/ -9 -o $(DIST_NAME) HEAD^{tree}
        @mkdir -p $(PREFIX)
 dist: $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
        $(GIT) archive --format=zip --prefix=$(PREFIX)/ -9 -o $(DIST_NAME) HEAD^{tree}
        @mkdir -p $(PREFIX)
@@ -188,7 +188,7 @@ dist: $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com
        @$(RM) -r $(PREFIX)
 
 
        @$(RM) -r $(PREFIX)
 
 
-.phony: clean realclean
+.PHONY: clean realclean
 clean:
        $(RM) $(ALLOBJ) $(ALLLST) *.sym
 
 clean:
        $(RM) $(ALLOBJ) $(ALLLST) *.sym
 
index 9594459b8cbc25687b4ba291cc2678b82d0b2c66..ee32505d45d4ed4a99ccd847302b3271390c08b1 100644 (file)
@@ -73,10 +73,10 @@ hwinit:
        ld      (@cbnk),a               ; right now in bank 0\r
 \r
        call    pr.inln                 ; print signon message\r
        ld      (@cbnk),a               ; right now in bank 0\r
 \r
        call    pr.inln                 ; print signon message\r
-       db      13,10,13,10,'CP/M Version 3.0, Z180-Stamp BIOS v'\r
+       db      13,10,13,10,'CP/M Version 3.1, Z180-Stamp BIOS v'\r
        defvers\r
        db      13,10\r
        defvers\r
        db      13,10\r
-       db      'Estimated CPU clock [Hz]: ',0\r
+       dc      'Estimated CPU clock [Hz]: '\r
 \r
        ld      hl,(f_cpu)\r
        ld      de,(f_cpu+2)\r
 \r
        ld      hl,(f_cpu)\r
        ld      de,(f_cpu+2)\r
@@ -115,12 +115,12 @@ hwinit:
 \r
        ; now, copy CCP to bank 0 for reloading\r
 \r
 \r
        ; now, copy CCP to bank 0 for reloading\r
 \r
-       ld      bc,2*256 + tpa$bank     ; c: src$bnk, b: dst$bnk\r
+       ld      bc,2*256 + tpa$bank     ; b: dst$bnk, c: src$bnk\r
        jr      mov_ccp\r
 \r
        ; just copy in the other direction\r
 ?rlccp:\r
        jr      mov_ccp\r
 \r
        ; just copy in the other direction\r
 ?rlccp:\r
-       ld      bc,tpa$bank*256 + 2     ; c: src$bnk, b: dst$bnk\r
+       ld      bc,tpa$bank*256 + 2     ; b: dst$bnk, c: src$bnk\r
 mov_ccp:\r
        call    ?xmove\r
        ld      hl,0100h\r
 mov_ccp:\r
        call    ?xmove\r
        ld      hl,0100h\r
@@ -132,7 +132,7 @@ mov_ccp:
 \r
 no$ccp:                                        ; here if we couldn't find the file\r
        call    pr.inln                 ; report this...\r
 \r
 no$ccp:                                        ; here if we couldn't find the file\r
        call    pr.inln                 ; report this...\r
-       db      13,10,'BIOS Err on A: No CCP.COM file',0\r
+       dc      13,10,'BIOS Err on A: No CCP.COM file'\r
 \r
        call    ?conin                  ; get a response\r
        jr      ?ldccp                  ; and try again\r
 \r
        call    ?conin                  ; get a response\r
        jr      ?ldccp                  ; and try again\r
index bd31aa4079f9fc3863676edbeaf66b1db9254cad..c5960cb81a2b49dbf407bb5a873aec47c01e7356 100644 (file)
@@ -26,7 +26,7 @@
        extrn pr.inln           ; print inline message\r
        extrn pr.decl           ; print 32 bit decimal number\r
        extrn pr.errors         ; print BIOS disk error header\r
        extrn pr.inln           ; print inline message\r
        extrn pr.decl           ; print 32 bit decimal number\r
        extrn pr.errors         ; print BIOS disk error header\r
-       extrn ?cono             ; console out\r
+       extrn ?pchar            ; console out\r
        extrn bnk2phy           ; translate banked to physical linear address\r
        extrn add_hla           ; add <A> to <HL>\r
        extrn gstimer           ; get timer short (16 bit)\r
        extrn bnk2phy           ; translate banked to physical linear address\r
        extrn add_hla           ; add <A> to <HL>\r
        extrn gstimer           ; get timer short (16 bit)\r
@@ -193,7 +193,7 @@ dpbsimhd512:
 \r
 cf$init0:\r
        call    pr.inln                 ;\r
 \r
 cf$init0:\r
        call    pr.inln                 ;\r
-       db      'cfio: CompactFlash Memory Card driver',0\r
+       dc      'cfio: CompactFlash Memory Card driver'\r
 \r
        ld      hl,parttbl              ; Clear partition table\r
        ld      b,PARTENTRY_SIZE*MAXDISKS\r
 \r
        ld      hl,parttbl              ; Clear partition table\r
        ld      b,PARTENTRY_SIZE*MAXDISKS\r
@@ -263,7 +263,7 @@ pend:
 \r
 nocard:\r
        call    pr.inln\r
 \r
 nocard:\r
        call    pr.inln\r
-       db      ": No Card",cr,lf,0\r
+       dc      ': No Card',cr,lf\r
        ret\r
 \r
 \r
        ret\r
 \r
 \r
@@ -365,24 +365,11 @@ cfi_error:
 \r
 pr_char_nlbl:\r
        bit     0,b\r
 \r
 pr_char_nlbl:\r
        bit     0,b\r
-       jr      z,pr_char\r
+       jp      z,?pchar\r
        cp      ' '\r
        ret     z\r
        res     0,b\r
        cp      ' '\r
        ret     z\r
        res     0,b\r
-       ; fall thru\r
-\r
-; print character, saving hl, de, bc\r
-\r
-pr_char:\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
+       jp      ?pchar\r
 \r
 ;-------------------------------------------------------------------------------\r
 \r
 \r
 ;-------------------------------------------------------------------------------\r
 \r
@@ -502,23 +489,23 @@ prn_lp1:
 \r
 prnt_info:\r
        call    pr.inln\r
 \r
 prnt_info:\r
        call    pr.inln\r
-       db      cr,lf,'    Model: ',0\r
+       dc      cr,lf,'    Model: '\r
        ld      hl,tmpsecbuf + 27*2     ; Model number\r
        ld      c,20*2                  ; max character count\r
        call    pr_id                   ;\r
        call    pr.inln\r
        ld      hl,tmpsecbuf + 27*2     ; Model number\r
        ld      c,20*2                  ; max character count\r
        call    pr_id                   ;\r
        call    pr.inln\r
-       db      ', S/N: ',0\r
+       dc      ', S/N: '\r
        ld      hl,tmpsecbuf + 10*2     ; Serial number\r
        ld      c, 10*2\r
        call    pr_id\r
        call    pr.inln\r
        ld      hl,tmpsecbuf + 10*2     ; Serial number\r
        ld      c, 10*2\r
        call    pr_id\r
        call    pr.inln\r
-       db      ', Rev: ',0\r
+       dc      ', Rev: '\r
        ld      hl,tmpsecbuf + 23*2     ; Firmware revision\r
        ld      c, 4*2\r
        call    pr_id\r
 \r
        call    pr.inln\r
        ld      hl,tmpsecbuf + 23*2     ; Firmware revision\r
        ld      c, 4*2\r
        call    pr_id\r
 \r
        call    pr.inln\r
-       db      cr,lf,'    Size: ',0\r
+       dc      cr,lf,'    Size: '\r
        ld      hl,(tmpsecbuf+60*2)     ;Total Sectors Addressable in LBA Mode\r
        ld      de,(tmpsecbuf+61*2)     ;\r
        push    hl\r
        ld      hl,(tmpsecbuf+60*2)     ;Total Sectors Addressable in LBA Mode\r
        ld      de,(tmpsecbuf+61*2)     ;\r
        push    hl\r
@@ -526,7 +513,7 @@ prnt_info:
        ld      bc,1\r
        call    pr.decl\r
        call    pr.inln\r
        ld      bc,1\r
        call    pr.decl\r
        call    pr.inln\r
-       db      ' Sectors (',0\r
+       dc      ' Sectors ('\r
        pop     de\r
        pop     hl\r
        srl     d\r
        pop     de\r
        pop     hl\r
        srl     d\r
@@ -536,7 +523,7 @@ prnt_info:
        ld      bc,1\r
        call    pr.decl\r
        call    pr.inln\r
        ld      bc,1\r
        call    pr.decl\r
        call    pr.inln\r
-       db      ' KiB)',cr,lf,0\r
+       dc      ' KiB)',cr,lf\r
        ret\r
 \r
 ; Print partition table info\r
        ret\r
 \r
 ; Print partition table info\r
@@ -553,14 +540,14 @@ prp_lp:
        ret     z\r
 \r
        push    bc\r
        ret     z\r
 \r
        push    bc\r
-       call    pr.inln\r
-       db      '    ',0\r
        ld      a,(@adrv)\r
        add     a,c\r
        add     a,'A'\r
        ld      a,(@adrv)\r
        add     a,c\r
        add     a,'A'\r
-       call    pr_char\r
+       ld      (prp_dm),a\r
        call    pr.inln\r
        call    pr.inln\r
-       db      ': CP/M partition at: ',0\r
+       db      '    '\r
+prp_dm:        db      'A'\r
+       dc      ': CP/M partition at: '\r
        ld      l,(ix+PTAB_START+0)\r
        ld      h,(ix+PTAB_START+1)\r
        ld      e,(ix+PTAB_START+2)\r
        ld      l,(ix+PTAB_START+0)\r
        ld      h,(ix+PTAB_START+1)\r
        ld      e,(ix+PTAB_START+2)\r
@@ -568,7 +555,7 @@ prp_lp:
        ld      bc,1\r
        call    pr.decl\r
        call    pr.inln\r
        ld      bc,1\r
        call    pr.decl\r
        call    pr.inln\r
-       db      ', size: ',0\r
+       dc      ', size: '\r
        ld      l,(ix+PTAB_SIZE+0)\r
        ld      h,(ix+PTAB_SIZE+1)\r
        ld      e,(ix+PTAB_SIZE+2)\r
        ld      l,(ix+PTAB_SIZE+0)\r
        ld      h,(ix+PTAB_SIZE+1)\r
        ld      e,(ix+PTAB_SIZE+2)\r
@@ -580,7 +567,7 @@ prp_lp:
        ld      bc,1\r
        call    pr.decl\r
        call    pr.inln\r
        ld      bc,1\r
        call    pr.decl\r
        call    pr.inln\r
-       db      'KiB',cr,lf,0\r
+       dc      'KiB',cr,lf\r
        ld      bc,PARTENTRY_SIZE\r
        add     ix,bc\r
        pop     bc\r
        ld      bc,PARTENTRY_SIZE\r
        add     ix,bc\r
        pop     bc\r
@@ -801,16 +788,16 @@ errm1:
 ; error message components\r
 \r
 msg$drq:\r
 ; error message components\r
 \r
 msg$drq:\r
-       db      'DRQ, ',0\r
-\r
-b7$msg:        db      ' Bad Block detected,',0\r
-b6$msg:        db      ' Uncorrectable Data Error,',0\r
-b5$msg:        db      ' Media Changed,',0\r
-b4$msg:        db      ' Sector ID Not Found,',0\r
-b3$msg:        db      ' Media Change Requst,',0\r
-b2$msg:        db      ' Aborted Command,',0\r
-b1$msg:        db      ' Track 0 Not Found,',0\r
-b0$msg:        db      ' AM Not Found (or general error),',0\r
+       dc      'DRQ, '\r
+\r
+b0$msg:        dc      ' AM Not Found (or general error),'\r
+b1$msg:        dc      ' Track 0 Not Found,'\r
+b2$msg:        dc      ' Aborted Command,'\r
+b3$msg:        dc      ' Media Change Requst,'\r
+b4$msg:        dc      ' Sector ID Not Found,'\r
+b5$msg:        dc      ' Media Changed,'\r
+b6$msg:        dc      ' Uncorrectable Data Error,'\r
+b7$msg:        dc      ' Bad Block detected,'\r
        db      0\r
 \r
 ;-------------------------------------------------------------------------------\r
        db      0\r
 \r
 ;-------------------------------------------------------------------------------\r
index 3c36572f9e9488b76e80091688850bcbdde740e5..58122f8cc2281dcdd221e62966fb3637156dfa93 100644 (file)
@@ -3,7 +3,7 @@
        public cpu_frq\r
        public get_tmr\r
 \r
        public cpu_frq\r
        public get_tmr\r
 \r
-       extrn div32_r,?pmsg\r
+       extrn div32_r,pr.inln\r
        extrn msg.sm,msg.recv,hwl2phy\r
 \r
        maclib z180reg.inc\r
        extrn msg.sm,msg.recv,hwl2phy\r
 \r
        maclib z180reg.inc\r
@@ -67,16 +67,13 @@ sp.i.1:
 \r
        add     a,'0'\r
        ld      (spi$nr),a\r
 \r
        add     a,'0'\r
        ld      (spi$nr),a\r
-       ld      hl,spi$msg\r
-       call    ?pmsg\r
-sp.i.2:\r
-       halt\r
-       jr      sp.i.2\r
-\r
-spi$msg:\r
+       call    pr.inln\r
        db      13,10,'Spurious Int: '\r
 spi$nr:        db      '0'\r
        db      0\r
        db      13,10,'Spurious Int: '\r
 spi$nr:        db      '0'\r
        db      0\r
+sp.i.2:\r
+       halt\r
+       jr      sp.i.2\r
 \r
 ;--------------------------------------------------------------------\r
 ;\r
 \r
 ;--------------------------------------------------------------------\r
 ;\r
index 88038741d672cb17cdcd238a37d58cca9148453a..cc81baba5f61ce709a5dbe444deecc38825e90ee 100644 (file)
@@ -22,9 +22,8 @@
     ; Utility routines\r
 \r
        extrn ?wboot            ; warm boot vector\r
     ; Utility routines\r
 \r
        extrn ?wboot            ; warm boot vector\r
-       extrn ?pmsg             ; print message @<HL>\r
        extrn pr.idx            ; print indexed message\r
        extrn pr.idx            ; print indexed message\r
-       extrn pr.inln,pr.crlf   ; print inline message, print <cr><lf>\r
+       extrn pr.inln           ; print inline message\r
        extrn pr.errors         ; print BIOS disk error header\r
        extrn bnk2phy           ; translate banked to physical linear address\r
        extrn msg.sm            ; send message to AVR\r
        extrn pr.errors         ; print BIOS disk error header\r
        extrn bnk2phy           ; translate banked to physical linear address\r
        extrn msg.sm            ; send message to AVR\r
@@ -142,7 +141,7 @@ dpbsimhd512:
 \r
 sd$init0:\r
        call    pr.inln                 ;\r
 \r
 sd$init0:\r
        call    pr.inln                 ;\r
-       db      'sdio: SD Card driver'cr,lf,0\r
+       dc      'sdio: SD Card driver',cr,lf\r
        ret\r
 \r
 sd$init1:\r
        ret\r
 \r
 sd$init1:\r
@@ -317,7 +316,7 @@ fatfs_err:
        ret     z               ; no fatfs error\r
 \r
        call    pr.inln\r
        ret     z               ; no fatfs error\r
 \r
        call    pr.inln\r
-       db      'FatFs: ',0\r
+       dc      'FatFs: '\r
 \r
        ld      hl,fr$msg0      ; point at first FatFs message\r
        ld      a,(recv_msg_rc+1)\r
 \r
        ld      hl,fr$msg0      ; point at first FatFs message\r
        ld      a,(recv_msg_rc+1)\r
@@ -357,38 +356,38 @@ recv_msg_len equ $ - recv_msg
 ; error message components\r
     ; general driver errors\r
 \r
 ; error message components\r
     ; general driver errors\r
 \r
-drvmsg0:       db      'Unknown Error, ',0\r
-drvmsg1:       db      'Invalid Parameter(s), ',0\r
-drvmsg2:       db      'Invalid Drive, ',0\r
-drvmsg3:       db      'Bus Timeout, ',0\r
-drvmsg4:       db      'Access beyond disk size, ',0\r
-drvmsg5:       db      'Write protected, ',0\r
-drvmsg6:       db      'No media, ',0\r
+drvmsg0:       dc      'Unknown Error, '\r
+drvmsg1:       dc      'Invalid Parameter(s), '\r
+drvmsg2:       dc      'Invalid Drive, '\r
+drvmsg3:       dc      'Bus Timeout, '\r
+drvmsg4:       dc      'Access beyond disk size, '\r
+drvmsg5:       dc      'Write protected, '\r
+drvmsg6:       dc      'No media, '\r
                db      0\r
 \r
     ; fat file system errors\r
 \r
                db      0\r
 \r
     ; fat file system errors\r
 \r
-fr$msg0:       db      'Unknown Error,',0\r
-fr$msg1:       db      'DISK_ERR,',0\r
-fr$msg2:       db      'INT_ERR,',0\r
-fr$msg3:       db      'NOT_READY,',0\r
-fr$msg4:       db      'NO_FILE,',0\r
-fr$msg5:       db      'NO_PATH,',0\r
-fr$msg6:       db      'INVALID_NAME,',0\r
-fr$msg7:       db      'DENIED,',0\r
-fr$msg8:       db      'EXIST,',0\r
-fr$msg9:       db      'INVALID_OBJECT,',0\r
-fr$msg10:      db      'WRITE_PROTECTED,',0\r
-fr$msg11:      db      'INVALID_DRIVE,',0\r
-fr$msg12:      db      'NOT_ENABLED,',0\r
-fr$msg13:      db      'NO_FILE_SYSTEM,',0\r
-fr$msg14:      db      'MKFS_ABORTED,',0\r
-fr$msg15:      db      'TIMEOUT,',0\r
-fr$msg16:      db      'LOCKED,',0\r
-fr$msg17:      db      'NOT_ENOUGH_CORE,',0\r
-fr$msg18:      db      'TOO_MANY_OPEN_FILES,',0\r
-fr$msg19:      db      'FR_INVALID_PARAMETER,',0\r
-fr$msg20:      db      'short read/write,',0\r
+fr$msg0:       dc      'Unknown Error,'\r
+fr$msg1:       dc      'DISK_ERR,'\r
+fr$msg2:       dc      'INT_ERR,'\r
+fr$msg3:       dc      'NOT_READY,'\r
+fr$msg4:       dc      'NO_FILE,'\r
+fr$msg5:       dc      'NO_PATH,'\r
+fr$msg6:       dc      'INVALID_NAME,'\r
+fr$msg7:       dc      'DENIED,'\r
+fr$msg8:       dc      'EXIST,'\r
+fr$msg9:       dc      'INVALID_OBJECT,'\r
+fr$msg10:      dc      'WRITE_PROTECTED,'\r
+fr$msg11:      dc      'INVALID_DRIVE,'\r
+fr$msg12:      dc      'NOT_ENABLED,'\r
+fr$msg13:      dc      'NO_FILE_SYSTEM,'\r
+fr$msg14:      dc      'MKFS_ABORTED,'\r
+fr$msg15:      dc      'TIMEOUT,'\r
+fr$msg16:      dc      'LOCKED,'\r
+fr$msg17:      dc      'NOT_ENOUGH_CORE,'\r
+fr$msg18:      dc      'TOO_MANY_OPEN_FILES,'\r
+fr$msg19:      dc      'FR_INVALID_PARAMETER,'\r
+fr$msg20:      dc      'short read/write,'\r
                db      0\r
 \r
        end\r
                db      0\r
 \r
        end\r
index 08c5fd092c339780a47ffb5a6c2eec86989c947f..4b74750f631d7db8ff5eaffd3b14e5bf302b7c25 100644 (file)
@@ -12,7 +12,7 @@
 \r
        ; print utils\r
 \r
 \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
        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
@@ -212,77 +212,63 @@ div_no_restore:                   ;
        exx                     ;high\r
        ret\r
 \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
 ;-------------------------------------------------------------------------------\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
        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
        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
        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
        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
        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
 \r
 pr.inln:\r
        ex      (sp),hl\r
-       push    af\r
        call    ?pmsg\r
        call    ?pmsg\r
-       pop     af\r
        ex      (sp),hl\r
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
 ; print <CR><LF>\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
 \r
 pr.crlf:\r
        call    pr.inln\r
-       db      cr,lf,0\r
+       dc      cr,lf\r
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
@@ -309,32 +295,32 @@ phex2:
        pop     af\r
 \r
 print.digit:\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
 \r
+?pchar:\r
+       push    bc\r
+       push    de\r
+       push    hl\r
        ld      c,a\r
        call    ?cono\r
        ld      c,a\r
        call    ?cono\r
-       pop     af\r
-       pop     bc\r
-       pop     de\r
        pop     hl\r
        pop     hl\r
+       pop     de\r
+       pop     bc\r
        ret\r
 \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
 ;-------------------------------------------------------------------------------\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
 ;       B: pad character, typically ' ' or '0'\r
 \r
 pr.dec:\r
@@ -349,7 +335,7 @@ pr.dec:
 ;\r
 ;      DEHL: unsigned binary number to print\r
 ;         C: minimum print field width\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
 ;         B: pad character, typically ' ' or '0'\r
 \r
 pr.decl:\r
@@ -408,28 +394,22 @@ prd_out:
 ;-------------------------------------------------------------------------------\r
 \r
 ?pderr:\r
 ;-------------------------------------------------------------------------------\r
 \r
 ?pderr:\r
-       ld      hl,drive$msg\r
-       call    ?pmsg           ; error header\r
        ld      a,(@adrv)\r
        add     a,'A'\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      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
        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
 ;-------------------------------------------------------------------------------\r
 ; get console input, echo it, and shift to upper case\r
 ; save hl,de,bc\r
@@ -490,7 +470,7 @@ pre1:
 pre2:\r
                                ; prompt for retry\r
        call    pr.inln\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
        call    uciecho         ; get operator response\r
        cp      'Y'\r
@@ -498,9 +478,9 @@ pre2:
 \r
 \r
 op$msg:\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
        db      0\r
 \r
        end\r