mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
385 lines
7.8 KiB
385 lines
7.8 KiB
; 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
|
|
|