; can be combined to support a particular system\r
; configuration.\r
\r
-cr equ 13\r
-lf equ 10\r
-bell equ 7\r
ctlQ equ 'Q'-'@'\r
ctlS equ 'S'-'@'\r
\r
\r
extrn ?time ; signal time operation\r
\r
- ; general utility routines\r
-\r
- public ?pmsg ; print message\r
- public pr.dec,pr.decl ; print 16 or 32 bit decimal number\r
- public ?pderr ; print BIOS disk error message header\r
- public pr.inln,pr.crlf ; print message inline\r
- public phex4,phex2 ; print 4 digit hex (HL), or 2 digit hex (A)\r
-\r
- extrn div32_16 ; divide 32 bit by 16 bit number\r
-\r
include modebaud.inc ; define mode bits\r
\r
\r
add hl,hl ; shift out next bit\r
jr nc,not$out$device\r
push hl ; save the vector\r
- push bc ; save the count and character\r
-not$out$ready:\r
- call coster\r
- or a\r
- jp z,not$out$ready\r
- pop bc\r
+; push bc ; save the count and character\r
+;not$out$ready:\r
+; call coster\r
+; or a\r
+; jr z,not$out$ready\r
+; pop bc\r
push bc ; restore and resave the character and device\r
call ?co ; if device selected, print it\r
pop bc ; recover count and character\r
jp (hl)\r
\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
- or a\r
- jr z,pmsg$exit\r
- ld c,a\r
- push hl\r
- call ?cono\r
- pop hl\r
- inc hl\r
- jr pmsg$loop\r
-pmsg$exit:\r
- pop de\r
- pop bc\r
- ret\r
-\r
-;-------------------------------------------------------------------------------\r
-; print message inline up to a null\r
-; saves all registers\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
-\r
-pr.crlf:\r
- call pr.inln\r
- db 13,10,0\r
- ret\r
-\r
-;-------------------------------------------------------------------------------\r
-; print hl as a 4 digit hexadecimal number\r
-; saves all registers\r
-\r
-phex4:\r
- ld a,h\r
- call phex2\r
- ld a,l\r
- ; fall thru\r
-\r
-;-------------------------------------------------------------------------------\r
-; print a as a 2 digit hexadecimal number\r
-; saves all registers\r
-\r
-phex2:\r
- push af\r
- rra\r
- rra\r
- rra\r
- rra\r
- call 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
-\r
- ld c,a\r
- call ?cono\r
- pop af\r
- pop bc\r
- pop de\r
- pop hl\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
-; B: pad character, typically ' ' or '0'\r
-\r
-pr.dec:\r
- push de\r
- ld de,0\r
- call pr.decl\r
- pop de\r
- ret\r
-\r
-;-------------------------------------------------------------------------------\r
-; print decimal 32 bit number from DEHL\r
-;\r
-; DEHL: unsigned binary number to print\r
-; C: minimum print field width\r
-; number is prined right-aligned\r
-; B: pad character, typically ' ' or '0'\r
-\r
-pr.decl:\r
- push bc ;save width and fillchar\r
- push bc\r
- exx ;(alt)\r
- ex (sp),hl ;save hl', get width and fill\r
- push de ;save de'\r
-\r
- xor a\r
- ld d,a ;clear counter\r
- ld e,a\r
- push af ; string terminator\r
- inc sp\r
-\r
-prd_divloop: ;do\r
- exx ; (main)\r
- ld bc,10 ;\r
- call div32_16 ; get a digit\r
- ld a,c ;\r
- add a,'0' ; make it printable\r
- push af ;\r
-\r
- ld a,h ;\r
- or l ;\r
- or d ;\r
- or e ;\r
- exx ; (alt)\r
- inc sp ;\r
- inc de ;\r
- jr nz,prd_divloop ;\r
-\r
-prd_filloop: ;h=filler, l=field width\r
- ld a,e\r
- cp l\r
- jr nc,prd_out\r
- push hl\r
- inc sp\r
- inc de\r
- jr prd_filloop\r
-prd_out:\r
- ld hl,0\r
- add hl,sp ;ptr to beginning of number string (hl==0 here)\r
- call ?pmsg\r
- ex de,hl\r
- add hl,sp\r
- ld sp,hl\r
- inc sp ;remove string terminator\r
- pop de\r
- pop hl\r
- exx ;(main)\r
- pop bc\r
- ret\r
-\r
-\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 c,0\r
- ld hl,(@trk)\r
- call pr.dec ; track number\r
- ld hl,sector$msg\r
- call ?pmsg ; sector header\r
- ld hl,(@sect)\r
- call pr.dec ; sector number\r
- ret\r
-\r
\r
; BNKSEL\r
; Bank Select. Select CPU bank for further execution.\r
db -1,-1,-1,-1,-1,-1,-1,-1 ; ctl-s clears to zero\r
db -1,-1,-1,-1,-1,-1,-1,-1\r
\r
-\r
-\r
dseg ; following resides in banked memory\r
\r
-\r
-\r
; Disk I/O interface routines\r
\r
\r
ret ; return with no error\r
\r
\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
; disk communication data items\r
; do not change order. sd driver depends on this\r
\r