.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)
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}
@$(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)
@$(RM) -r $(PREFIX)
-.phony: clean realclean
+.PHONY: clean realclean
clean:
$(RM) $(ALLOBJ) $(ALLLST) *.sym
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
- 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
; 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
- 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
\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
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
\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
nocard:\r
call pr.inln\r
- db ": No Card",cr,lf,0\r
+ dc ': No Card',cr,lf\r
ret\r
\r
\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
- ; 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
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
- 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
- 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
- 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 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
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 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
- call pr_char\r
+ ld (prp_dm),a\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 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 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
; 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
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
\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
+sp.i.2:\r
+ halt\r
+ jr sp.i.2\r
\r
;--------------------------------------------------------------------\r
;\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.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
\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 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
; 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
-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
\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