From e8a98308cd28da296993a9085df28dc5957de86d Mon Sep 17 00:00:00 2001 From: Leo C Date: Mon, 16 Mar 2020 14:11:37 +0100 Subject: [PATCH] refactor print utils --- cbios/Makefile | 12 ++--- cbios/boot.180 | 10 ++-- cbios/cfio.180 | 67 ++++++++++------------- cbios/misc.180 | 13 ++--- cbios/sdio.180 | 63 +++++++++++----------- cbios/utils.180 | 140 +++++++++++++++++++++--------------------------- 6 files changed, 134 insertions(+), 171 deletions(-) diff --git a/cbios/Makefile b/cbios/Makefile index e1d1875..c9878ad 100644 --- a/cbios/Makefile +++ b/cbios/Makefile @@ -69,10 +69,10 @@ LN_DATA = F000 .suffixes: #.suffixes: .180 .rel -.phony: all +.PHONY: all all: sys -.phony: sys bios map asym ldr +.PHONY: sys bios map asym ldr 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}; \ -$${COMMAND} > $${OUTPUT}; \ +$${COMMAND} > $${OUTPUT} < $<; \ 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) -.phony: bin-dist +.PHONY: bin-dist 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) @@ -188,7 +188,7 @@ dist: $(SYSFILE) $(MAPFILE) $(ASYMFILE) cpmldr.com @$(RM) -r $(PREFIX) -.phony: clean realclean +.PHONY: clean realclean clean: $(RM) $(ALLOBJ) $(ALLLST) *.sym diff --git a/cbios/boot.180 b/cbios/boot.180 index 9594459..ee32505 100644 --- a/cbios/boot.180 +++ b/cbios/boot.180 @@ -73,10 +73,10 @@ hwinit: ld (@cbnk),a ; right now in bank 0 call pr.inln ; print signon message - db 13,10,13,10,'CP/M Version 3.0, Z180-Stamp BIOS v' + db 13,10,13,10,'CP/M Version 3.1, Z180-Stamp BIOS v' defvers db 13,10 - db 'Estimated CPU clock [Hz]: ',0 + dc 'Estimated CPU clock [Hz]: ' ld hl,(f_cpu) ld de,(f_cpu+2) @@ -115,12 +115,12 @@ hwinit: ; now, copy CCP to bank 0 for reloading - ld bc,2*256 + tpa$bank ; c: src$bnk, b: dst$bnk + ld bc,2*256 + tpa$bank ; b: dst$bnk, c: src$bnk jr mov_ccp ; just copy in the other direction ?rlccp: - ld bc,tpa$bank*256 + 2 ; c: src$bnk, b: dst$bnk + ld bc,tpa$bank*256 + 2 ; b: dst$bnk, c: src$bnk mov_ccp: call ?xmove ld hl,0100h @@ -132,7 +132,7 @@ mov_ccp: no$ccp: ; here if we couldn't find the file call pr.inln ; report this... - db 13,10,'BIOS Err on A: No CCP.COM file',0 + dc 13,10,'BIOS Err on A: No CCP.COM file' call ?conin ; get a response jr ?ldccp ; and try again diff --git a/cbios/cfio.180 b/cbios/cfio.180 index bd31aa4..c5960cb 100644 --- a/cbios/cfio.180 +++ b/cbios/cfio.180 @@ -26,7 +26,7 @@ extrn pr.inln ; print inline message extrn pr.decl ; print 32 bit decimal number extrn pr.errors ; print BIOS disk error header - extrn ?cono ; console out + extrn ?pchar ; console out extrn bnk2phy ; translate banked to physical linear address extrn add_hla ; add to extrn gstimer ; get timer short (16 bit) @@ -193,7 +193,7 @@ dpbsimhd512: cf$init0: call pr.inln ; - db 'cfio: CompactFlash Memory Card driver',0 + dc 'cfio: CompactFlash Memory Card driver' ld hl,parttbl ; Clear partition table ld b,PARTENTRY_SIZE*MAXDISKS @@ -263,7 +263,7 @@ pend: nocard: call pr.inln - db ": No Card",cr,lf,0 + dc ': No Card',cr,lf ret @@ -365,24 +365,11 @@ cfi_error: pr_char_nlbl: bit 0,b - jr z,pr_char + jp z,?pchar cp ' ' ret z res 0,b - ; fall thru - -; print character, saving hl, de, bc - -pr_char: - push hl - push de - push bc - ld c,a - call ?cono - pop bc - pop de - pop hl - ret + jp ?pchar ;------------------------------------------------------------------------------- @@ -502,23 +489,23 @@ prn_lp1: prnt_info: call pr.inln - db cr,lf,' Model: ',0 + dc cr,lf,' Model: ' ld hl,tmpsecbuf + 27*2 ; Model number ld c,20*2 ; max character count call pr_id ; call pr.inln - db ', S/N: ',0 + dc ', S/N: ' ld hl,tmpsecbuf + 10*2 ; Serial number ld c, 10*2 call pr_id call pr.inln - db ', Rev: ',0 + dc ', Rev: ' ld hl,tmpsecbuf + 23*2 ; Firmware revision ld c, 4*2 call pr_id call pr.inln - db cr,lf,' Size: ',0 + dc cr,lf,' Size: ' ld hl,(tmpsecbuf+60*2) ;Total Sectors Addressable in LBA Mode ld de,(tmpsecbuf+61*2) ; push hl @@ -526,7 +513,7 @@ prnt_info: ld bc,1 call pr.decl call pr.inln - db ' Sectors (',0 + dc ' Sectors (' pop de pop hl srl d @@ -536,7 +523,7 @@ prnt_info: ld bc,1 call pr.decl call pr.inln - db ' KiB)',cr,lf,0 + dc ' KiB)',cr,lf ret ; Print partition table info @@ -553,14 +540,14 @@ prp_lp: ret z push bc - call pr.inln - db ' ',0 ld a,(@adrv) add a,c add a,'A' - call pr_char + ld (prp_dm),a call pr.inln - db ': CP/M partition at: ',0 + db ' ' +prp_dm: db 'A' + dc ': CP/M partition at: ' ld l,(ix+PTAB_START+0) ld h,(ix+PTAB_START+1) ld e,(ix+PTAB_START+2) @@ -568,7 +555,7 @@ prp_lp: ld bc,1 call pr.decl call pr.inln - db ', size: ',0 + dc ', size: ' ld l,(ix+PTAB_SIZE+0) ld h,(ix+PTAB_SIZE+1) ld e,(ix+PTAB_SIZE+2) @@ -580,7 +567,7 @@ prp_lp: ld bc,1 call pr.decl call pr.inln - db 'KiB',cr,lf,0 + dc 'KiB',cr,lf ld bc,PARTENTRY_SIZE add ix,bc pop bc @@ -801,16 +788,16 @@ errm1: ; error message components msg$drq: - db 'DRQ, ',0 - -b7$msg: db ' Bad Block detected,',0 -b6$msg: db ' Uncorrectable Data Error,',0 -b5$msg: db ' Media Changed,',0 -b4$msg: db ' Sector ID Not Found,',0 -b3$msg: db ' Media Change Requst,',0 -b2$msg: db ' Aborted Command,',0 -b1$msg: db ' Track 0 Not Found,',0 -b0$msg: db ' AM Not Found (or general error),',0 + dc 'DRQ, ' + +b0$msg: dc ' AM Not Found (or general error),' +b1$msg: dc ' Track 0 Not Found,' +b2$msg: dc ' Aborted Command,' +b3$msg: dc ' Media Change Requst,' +b4$msg: dc ' Sector ID Not Found,' +b5$msg: dc ' Media Changed,' +b6$msg: dc ' Uncorrectable Data Error,' +b7$msg: dc ' Bad Block detected,' db 0 ;------------------------------------------------------------------------------- diff --git a/cbios/misc.180 b/cbios/misc.180 index 3c36572..58122f8 100644 --- a/cbios/misc.180 +++ b/cbios/misc.180 @@ -3,7 +3,7 @@ public cpu_frq public get_tmr - extrn div32_r,?pmsg + extrn div32_r,pr.inln extrn msg.sm,msg.recv,hwl2phy maclib z180reg.inc @@ -67,16 +67,13 @@ sp.i.1: add a,'0' ld (spi$nr),a - ld hl,spi$msg - call ?pmsg -sp.i.2: - halt - jr sp.i.2 - -spi$msg: + call pr.inln db 13,10,'Spurious Int: ' spi$nr: db '0' db 0 +sp.i.2: + halt + jr sp.i.2 ;-------------------------------------------------------------------- ; diff --git a/cbios/sdio.180 b/cbios/sdio.180 index 8803874..cc81bab 100644 --- a/cbios/sdio.180 +++ b/cbios/sdio.180 @@ -22,9 +22,8 @@ ; Utility routines extrn ?wboot ; warm boot vector - extrn ?pmsg ; print message @ extrn pr.idx ; print indexed message - extrn pr.inln,pr.crlf ; print inline message, print + extrn pr.inln ; print inline message extrn pr.errors ; print BIOS disk error header extrn bnk2phy ; translate banked to physical linear address extrn msg.sm ; send message to AVR @@ -142,7 +141,7 @@ dpbsimhd512: sd$init0: call pr.inln ; - db 'sdio: SD Card driver'cr,lf,0 + dc 'sdio: SD Card driver',cr,lf ret sd$init1: @@ -317,7 +316,7 @@ fatfs_err: ret z ; no fatfs error call pr.inln - db 'FatFs: ',0 + dc 'FatFs: ' ld hl,fr$msg0 ; point at first FatFs message ld a,(recv_msg_rc+1) @@ -357,38 +356,38 @@ recv_msg_len equ $ - recv_msg ; error message components ; general driver errors -drvmsg0: db 'Unknown Error, ',0 -drvmsg1: db 'Invalid Parameter(s), ',0 -drvmsg2: db 'Invalid Drive, ',0 -drvmsg3: db 'Bus Timeout, ',0 -drvmsg4: db 'Access beyond disk size, ',0 -drvmsg5: db 'Write protected, ',0 -drvmsg6: db 'No media, ',0 +drvmsg0: dc 'Unknown Error, ' +drvmsg1: dc 'Invalid Parameter(s), ' +drvmsg2: dc 'Invalid Drive, ' +drvmsg3: dc 'Bus Timeout, ' +drvmsg4: dc 'Access beyond disk size, ' +drvmsg5: dc 'Write protected, ' +drvmsg6: dc 'No media, ' db 0 ; fat file system errors -fr$msg0: db 'Unknown Error,',0 -fr$msg1: db 'DISK_ERR,',0 -fr$msg2: db 'INT_ERR,',0 -fr$msg3: db 'NOT_READY,',0 -fr$msg4: db 'NO_FILE,',0 -fr$msg5: db 'NO_PATH,',0 -fr$msg6: db 'INVALID_NAME,',0 -fr$msg7: db 'DENIED,',0 -fr$msg8: db 'EXIST,',0 -fr$msg9: db 'INVALID_OBJECT,',0 -fr$msg10: db 'WRITE_PROTECTED,',0 -fr$msg11: db 'INVALID_DRIVE,',0 -fr$msg12: db 'NOT_ENABLED,',0 -fr$msg13: db 'NO_FILE_SYSTEM,',0 -fr$msg14: db 'MKFS_ABORTED,',0 -fr$msg15: db 'TIMEOUT,',0 -fr$msg16: db 'LOCKED,',0 -fr$msg17: db 'NOT_ENOUGH_CORE,',0 -fr$msg18: db 'TOO_MANY_OPEN_FILES,',0 -fr$msg19: db 'FR_INVALID_PARAMETER,',0 -fr$msg20: db 'short read/write,',0 +fr$msg0: dc 'Unknown Error,' +fr$msg1: dc 'DISK_ERR,' +fr$msg2: dc 'INT_ERR,' +fr$msg3: dc 'NOT_READY,' +fr$msg4: dc 'NO_FILE,' +fr$msg5: dc 'NO_PATH,' +fr$msg6: dc 'INVALID_NAME,' +fr$msg7: dc 'DENIED,' +fr$msg8: dc 'EXIST,' +fr$msg9: dc 'INVALID_OBJECT,' +fr$msg10: dc 'WRITE_PROTECTED,' +fr$msg11: dc 'INVALID_DRIVE,' +fr$msg12: dc 'NOT_ENABLED,' +fr$msg13: dc 'NO_FILE_SYSTEM,' +fr$msg14: dc 'MKFS_ABORTED,' +fr$msg15: dc 'TIMEOUT,' +fr$msg16: dc 'LOCKED,' +fr$msg17: dc 'NOT_ENOUGH_CORE,' +fr$msg18: dc 'TOO_MANY_OPEN_FILES,' +fr$msg19: dc 'FR_INVALID_PARAMETER,' +fr$msg20: dc 'short read/write,' db 0 end diff --git a/cbios/utils.180 b/cbios/utils.180 index 08c5fd0..4b74750 100644 --- a/cbios/utils.180 +++ b/cbios/utils.180 @@ -12,7 +12,7 @@ ; print utils - public ?pmsg ; print message + public ?pchar,?pmsg ; print char , print message () public pr.idx ; print message from table indexed by public pr.inln,pr.crlf ; print message inline, print newline public phex2,phex4 ; print 2 digit hex or 4 digit hex @@ -212,77 +212,63 @@ div_no_restore: ; exx ;high ret -;------------------------------------------------------------------------------- -; print message @ up to a null -; saves & - -?pmsg: - push bc - push de -pmsg$loop: - ld a,(hl) - inc hl - or a - jr z,pmsg$exit - ld c,a - push hl - call ?cono - pop hl - jr pmsg$loop -pmsg$exit: - pop de - pop bc - ret - ;------------------------------------------------------------------------------- ; print message from table @, indexed by ; saves & pr.idx: push bc - push de push hl ; put pointer to first message on stack - ld e,a ; save message number + ld b,a ; save message number + or a + jr z,pdc_done xor a - ld b,a - ld c,a - inc e -pdc_nxt_str: - dec e - ex (sp),hl - jr z,pdc_found - ex (sp),hl - cpir +pdc_skip: + bit 7,(hl) + inc hl + jr z,pdc_skip cp (hl) - jr nz,pdc_nxt_str - ; End of List, msg not found. - ; Print first msg. -pdc_found: - pop hl - call ?pmsg - pop de + jr z,pdc_done ; End of List, msg not found. Print first msg. + djnz pdc_skip + ex (sp),hl ; Remove first msg from stack +pdc_done: + pop hl ; Get msg. to print pop bc + ;fall thru + +;------------------------------------------------------------------------------- +; print message @ up to a null +; saves & + +?pmsg: + ld a,(hl) + inc hl + and 07fh + ret z + call ?pchar + dec hl + bit 7,(hl) + inc hl + jr z,?pmsg ret ;------------------------------------------------------------------------------- ; print message inline up to a null -; saves all registers +; saves , , pr.inln: ex (sp),hl - push af call ?pmsg - pop af ex (sp),hl ret ;------------------------------------------------------------------------------- ; print -; saves all registers +; saves , , pr.crlf: call pr.inln - db cr,lf,0 + dc cr,lf ret ;------------------------------------------------------------------------------- @@ -309,32 +295,32 @@ phex2: pop af print.digit: - push hl - push de - push bc - push af - and 00fh - cp 10 - jr c,prd_1 - add a,007h -prd_1: - add a,'0' + daa + add a,0a0h + adc a,040h + ;fall thru + +;------------------------------------------------------------------------------- +; print character in a +; saves , , +?pchar: + push bc + push de + push hl ld c,a call ?cono - pop af - pop bc - pop de pop hl + pop de + pop bc ret - ;------------------------------------------------------------------------------- ; print decimal 16 bit number from HL ; ; HL: unsigned binary number to print ; C: minimum print field width -; number is prined right-aligned +; number is printed right-aligned ; B: pad character, typically ' ' or '0' pr.dec: @@ -349,7 +335,7 @@ pr.dec: ; ; DEHL: unsigned binary number to print ; C: minimum print field width -; number is prined right-aligned +; number is printed right-aligned ; B: pad character, typically ' ' or '0' pr.decl: @@ -408,28 +394,22 @@ prd_out: ;------------------------------------------------------------------------------- ?pderr: - ld hl,drive$msg - call ?pmsg ; error header ld a,(@adrv) add a,'A' - ld c,a - call ?cono ; drive code - ld hl,track$msg - call ?pmsg ; track header + ld (msg_drv),a + call pr.inln ; error header + db cr,lf,bell,'BIOS Error on ' +msg_drv: + db 'A' + dc ': T-' ld c,0 ld hl,(@trk) call pr.dec ; track number - ld hl,sector$msg - call ?pmsg ; sector header + call pr.inln ; sector header + dc ', S-' ld hl,(@sect) jp pr.dec ; sector number - ; error message components -drive$msg: db cr,lf,bell,'BIOS Error on ',0 -track$msg: db ': T-',0 -sector$msg: db ', S-',0 - - ;------------------------------------------------------------------------------- ; get console input, echo it, and shift to upper case ; save hl,de,bc @@ -490,7 +470,7 @@ pre1: pre2: ; prompt for retry call pr.inln - db ' Retry (Y/N) ? ',0 + dc ' Retry (Y/N) ? ' call uciecho ; get operator response cp 'Y' @@ -498,9 +478,9 @@ pre2: op$msg: - db ', Unknown op, ',0 - db ', Read, ',0 - db ', Write, ',0 + dc ', Unknown op, ' + dc ', Read, ' + dc ', Write, ' db 0 end -- 2.39.2