mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
385 lines
7.8 KiB
Plaintext
385 lines
7.8 KiB
Plaintext
; biohdr.lib 2/19/2012 dwg - BIOS header display macros
|
||
; copyright (C) 2011 Douglas Goodall. All Rights Reserved.
|
||
; Licensed to N8VEM Community for non-commercial use only.
|
||
|
||
; 2/19/2012 dwg - review for release 1.5.1.0
|
||
; 2/05/2012 dwg - added DSKM (DM_ROM...) better late than never
|
||
; 2/05/2012 dwg - added prpsdenable,prpsdtrace, and prpsdcapacity
|
||
; 1/16/2012 dwg - extend LU numbers to 0x1C entries (256MB)
|
||
; 1/11/2012 dwg - added new setlu for 1.4 slice technique
|
||
; 12/18/2011 dwg - added REVISION (from svn)
|
||
; 12/07/2011 dwg - BIOS header enhancement for version 1.3
|
||
|
||
; Common Configuration items,
|
||
; Valid in all configurations
|
||
RMJ equ 0E64Bh
|
||
RMN equ RMJ+1
|
||
RUP equ RMN+1
|
||
RTP equ RUP+1
|
||
|
||
if 0
|
||
BANPTR equ RTP+1
|
||
DKMP equ BANPTR+2
|
||
DBBOOL equ DKMP+2 ; Disk Boot Boolean
|
||
DBDRV equ DBBOOL+1 ; Disk Boot Drive Code
|
||
FREQ equ DBDRV+1
|
||
PLAT equ FREQ+1 ; Hardware Platform
|
||
DIOPLT equ PLAT+1
|
||
VDUPLT equ DIOPLT+1
|
||
ROMSIZ equ VDUPLT+1
|
||
RAMSIZ equ ROMSIZ+2
|
||
CRAM equ RAMSIZ+2
|
||
DSKY equ CRAM+1 ; Is Display/Keyboard Attached?
|
||
UART equ DSKY+1 ; Is UART Enabled?
|
||
VDUEN equ UART+1
|
||
FDEN equ VDUEN+1 ; Is Floppy Disk Support Enabled
|
||
FDTR equ FDEN+1 ; Is Floppy Disk Error Tracing Enabled?
|
||
FMED equ FDTR+1 ; Floppy Disk Media Type
|
||
FALT equ FMED+1 ; Alternative Floppy Disk Media Type
|
||
FAUT equ FALT+1 ; Is Floppy Disk Automatic Sensing Enabled?
|
||
IDEN equ FAUT+1 ; Is On-Board IDE Support Enabled
|
||
IDTR equ IDEN+1
|
||
IDE8 equ IDTR+1
|
||
IDCP equ IDE8+1 ; 1/13/2012 IDE Capacity
|
||
PPEN equ IDCP+2 ; Is PPIDE Support Enablned?
|
||
PPTR equ PPEN+1 ; Is PPIDE Tracing Enabled?
|
||
PP8B equ PPTR+1
|
||
PPCP equ PP8B+1 ; 1/13/2012 PPIDE Capacity
|
||
PSLW equ PPCP+2 ; Use NOPs for recovery-time compensation
|
||
BTYP equ PSLW+1
|
||
BTTO equ BTYP+1
|
||
BTDF equ BTTO+1
|
||
BAUD equ BTDF+1 ; What is the Console Baud Rate
|
||
|
||
; Only Valid if PLATFORM == PLT_N8
|
||
CLKDIV equ BAUD+2 ; Z180_CLKDIV
|
||
MEMWAIT equ CLKDIV+1 ; Z180_MEMWAIT
|
||
IOWAIT equ MEMWAIT+1 ; Z180_IOWAIT
|
||
CNTLB0 equ IOWAIT+1 ; Z180_CNTLB0
|
||
CNTLB1 equ CNTLB0+1 ; Z180_CNTLB1
|
||
SDENABLE equ CNTLB1+1
|
||
SDTRACE equ SDENABLE+1
|
||
SDCP equ SDTRACE+1 ; 1/13/2012 SD Capacity
|
||
VDPTR equ SDCP+2 ; pointer to VDU Data
|
||
FDPTR equ VDPTR+2 ; pointer to FD Data
|
||
IDEPTR equ FDPTR+2 ; pointer to IDE Data
|
||
PPIPTR equ IDEPTR+2 ; pointer to PPIDE_DATA Data
|
||
PPIPTR2 equ PPIPTR+2 ; pointer to PPIDE.ASM DATA
|
||
|
||
DEFIO equ PPIPTR2+2 ; pointer to DEFIOBYTE
|
||
LDRC equ DEFIO+1 ; pointer to LDRCON
|
||
DBGC equ LDRC+1 ; pointer to DBGCON
|
||
TTYP equ DBGC+1 ; pointer to TERMTYPE
|
||
REV equ TTYP+1 ; subversion revision
|
||
|
||
TMDT equ REV+2 ; startup date and time
|
||
|
||
PSDE equ TMDT+6 ; prpsdenable
|
||
PSDT equ PSDE+1 ; prpsdtrace
|
||
PSDC equ PSDT+1 ; prpsdcapacity
|
||
PRCE equ PSDC+2
|
||
|
||
DSKM equ PRCE+1 ; DM_ROM...
|
||
|
||
DTSZ equ DSKM+1 ; DATASIZE
|
||
|
||
; LU0 LU1 LU2 LU3 LU4 LU5 LU6 LU7 LU8 LU9
|
||
; 41 82 c3 104 145 186 1c7 208 249 286
|
||
;
|
||
; LU10 LU11 LU12 LU13 LU14 LU15 LU16
|
||
; 2c7 308 349 38a 3cb 40c 44d
|
||
|
||
LU0 equ 0 ; 041h ; PPIDE1 offset for first slice (default)
|
||
LU1 equ 1 ; 082h ; PPIDE1 offset for second slice
|
||
LU2 equ 2 ; 0C3h ; PPIDE1 offset for third slice
|
||
LU3 equ 3 ; 104h ; PPIDE1 offset for fourth slice
|
||
LU4 equ 4 ; 145h ; PPIDE1 offset for fifth slice
|
||
LU5 equ 5 ; 186h ; PPIDE1 offset for sixth slice
|
||
LU6 equ 6 ; 1c7h ; PPIDE1 offset for seventh slice
|
||
LU7 equ 7 ; 208h ; PPIDE1 offset for eighth slice
|
||
LU8 equ 8 ; 249h ; PPIDE1 offset for ninth slice
|
||
LU9 equ 9 ; 286h ; PPIDE1 offset for tenth slice
|
||
LU10 equ 10
|
||
LU11 equ 11
|
||
LU12 equ 12
|
||
LU13 equ 13
|
||
LU14 equ 14
|
||
LU15 equ 15
|
||
LU16 equ 16
|
||
LU17 equ 17
|
||
LU18 equ 18
|
||
LU19 equ 19
|
||
LU20 equ 20
|
||
LU21 equ 21
|
||
LU22 equ 22
|
||
LU23 equ 23
|
||
LU24 equ 24
|
||
LU25 equ 25
|
||
LU26 equ 26 ; 0x1a
|
||
LU27 equ 27 ; 0x1b (1Cth entry)
|
||
|
||
endif
|
||
|
||
DRIVEB equ 1 ; 0=A, 1=B...
|
||
|
||
|
||
setlu13 macro offset
|
||
lxi h,PPIPTR2 ; set pointer to ppide.asm data
|
||
mov e,m ; dereference pointer
|
||
inx h
|
||
mov d,m ; de -> ppide.asm data
|
||
xchg ; hl -> ppide.asm data
|
||
lxi d,6 ; offset to offset
|
||
dad d ; hl -> offset in ppide.asm data
|
||
lxi d,offset ; load caller's parameter in de
|
||
mov m,e ; stuff LO offset byte into offset
|
||
inx h ; bump ptr
|
||
mov m,d ; stuff HO offset byte into offset
|
||
mvi c,13 ; BDOS DSKRESET
|
||
call 5 ; call BDOS
|
||
endm
|
||
|
||
getlu13 macro
|
||
lxi h,PPIPTR2 ; set pointer to ppide.asm data
|
||
mov e,m ; dereference pointer
|
||
inx h
|
||
mov d,m ; de -> ppide.asm data
|
||
xchg ; hl -> ppide.asm data
|
||
lxi d,6 ; offset to offset
|
||
dad d ; hl -> offset in ppide.asm data
|
||
mov e,m ; pick up LO byte of offset
|
||
inx h ; bump ptr
|
||
mov d,m ; pick up HO byte of offset
|
||
xchg ; hl = offset
|
||
endm
|
||
|
||
setlu14 macro offset
|
||
lxi h,PPIPTR2 ; set pointer to ppide.asm data
|
||
mov e,m ; dereference pointer
|
||
inx h
|
||
mov d,m ; de -> ppide.asm data
|
||
xchg ; hl -> ppide.asm data
|
||
lxi d,6 ; offset to offset
|
||
dad d ; hl -> offset in ppide.asm data
|
||
lxi d,offset ; load caller's parameter in de
|
||
mov m,e ; stuff LO offset byte into offset
|
||
inx h ; bump ptr
|
||
mov m,d ; stuff HO offset byte into offset
|
||
mvi c,13 ; BDOS DSKRESET
|
||
call 5 ; call BDOS
|
||
endm
|
||
|
||
getlu14 macro
|
||
lxi h,PPIPTR2 ; set pointer to ppide.asm data
|
||
mov e,m ; dereference pointer
|
||
inx h
|
||
mov d,m ; de -> ppide.asm data
|
||
xchg ; hl -> ppide.asm data
|
||
lxi d,6 ; offset to offset
|
||
dad d ; hl -> offset in ppide.asm data
|
||
mov e,m ; pick up LO byte of offset
|
||
inx h ; bump ptr
|
||
mov d,m ; pick up HO byte of offset
|
||
xchg ; hl = offset
|
||
endm
|
||
|
||
setlu macro drive,slice
|
||
local dontboth,msg,msg2
|
||
mvi c,drive
|
||
call BISELDSK
|
||
lxi d,16
|
||
dad d
|
||
mov a,m
|
||
cpi 'L'
|
||
jnz dontboth
|
||
inx h
|
||
mov a,m
|
||
cpi 'U'
|
||
jnz dontboth
|
||
inx h
|
||
mvi a,slice
|
||
mov m,a
|
||
print msg
|
||
mvi a,drive
|
||
adi 'A'
|
||
mov e,a
|
||
mvi c,2
|
||
call BDOS
|
||
print msg2
|
||
lxi h,slice
|
||
call pr$d$word
|
||
jmp dontboth
|
||
msg db CR,LF,'Drive $'
|
||
msg2 db ': set to Logical Unit (slice) $'
|
||
dontboth:
|
||
endm
|
||
|
||
|
||
xluset macro
|
||
local ldrive,lslice,dontboth,msg,msg2
|
||
; C = DRIVE
|
||
; A = SLICE
|
||
sta lslice
|
||
mov a,c
|
||
sta ldrive
|
||
|
||
call BISELDSK ; uses c parameter (drive)
|
||
lxi d,16
|
||
dad d
|
||
mov a,m
|
||
cpi 'L'
|
||
jnz dontboth
|
||
inx h
|
||
mov a,m
|
||
cpi 'U'
|
||
jnz dontboth
|
||
inx h
|
||
lda lslice
|
||
mov m,a ; put slice into CURRENT
|
||
|
||
; print msg
|
||
; lda ldrive
|
||
; adi 'A'
|
||
; mov e,a
|
||
; mvi c,2
|
||
; call BDOS
|
||
; print msg2
|
||
; lda lslice
|
||
; mov l,a
|
||
; mvi h,0
|
||
; call pr$d$word
|
||
|
||
jmp dontboth
|
||
msg db CR,LF,'Drive $'
|
||
msg2 db ': set to Logical Unit (slice) $'
|
||
ldrive db 0
|
||
lslice db 0
|
||
dontboth:
|
||
endm
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
hdrlit macro ptr,val,msg
|
||
local notval
|
||
lxi h,ptr
|
||
mvi a,val
|
||
cmp m
|
||
jnz notval
|
||
print msg
|
||
notval:
|
||
endm
|
||
|
||
|
||
hdrbool macro ptr,tmsg,fmsg
|
||
local itstrue,itsfalse,imdone
|
||
enter
|
||
lxi h,ptr
|
||
mov a,m
|
||
cpi TRUE
|
||
jnz itsfalse
|
||
lxi d,tmsg
|
||
jmp imdone
|
||
itsfalse: lxi d,fmsg
|
||
imdone: mvi c,PRINTSTR
|
||
call BDOS
|
||
leave
|
||
endm
|
||
|
||
hdrbyte macro ptr,msg
|
||
enter
|
||
mvi c,PRINTSTR
|
||
lxi d,msg
|
||
call BDOS
|
||
lxi h,ptr
|
||
mov a,m
|
||
call pr$h$byte
|
||
|
||
conout '('
|
||
mov e,m
|
||
mov d,0
|
||
xchg
|
||
call pr$d$word
|
||
conout ')'
|
||
|
||
leave
|
||
endm
|
||
|
||
hdrpbyte macro ptr,msg
|
||
enter
|
||
mvi c,PRINTSTR
|
||
lxi d,msg
|
||
call BDOS
|
||
lxi h,PTR
|
||
mov e,m
|
||
inx h
|
||
mov d,m
|
||
xchg
|
||
mov a,m
|
||
call pr$h$byte
|
||
|
||
; conout ' '
|
||
conout '('
|
||
mov e,m
|
||
mov d,0
|
||
xchg
|
||
call pr$d$word
|
||
conout ')'
|
||
leave
|
||
endm
|
||
|
||
hdrword macro ptr,msg
|
||
enter
|
||
|
||
mvi c,PRINTSTR
|
||
lxi d,msg
|
||
call BDOS
|
||
|
||
lxi h,ptr
|
||
inx h
|
||
mov a,m
|
||
call pr$h$byte
|
||
|
||
lxi h,ptr
|
||
mov a,m
|
||
call pr$h$byte
|
||
|
||
conout '('
|
||
lxi h,ptr
|
||
mov e,m
|
||
inx h
|
||
mov d,m
|
||
xchg
|
||
call pr$d$word
|
||
conout ')'
|
||
leave
|
||
endm
|
||
|
||
syncerr macro
|
||
print syncmsg
|
||
exit
|
||
endm
|
||
|
||
hdrvalid macro
|
||
local byte1ok,byte2ok
|
||
enter
|
||
lxi h,CFDA
|
||
mov a,m
|
||
cpi 0DAh
|
||
jz byte1ok
|
||
syncerr
|
||
byte1ok:
|
||
inx h
|
||
mov al,m
|
||
cpi 0CFh
|
||
jz byte2ok
|
||
syncerr
|
||
byte2ok:
|
||
leave
|
||
endm
|
||
|
||
; eof - bioshdr.lib
|
||
|