Browse Source

Revise BPBIOS Prototype

Revise BPBIOS source to accommodate recent changes in HBIOS API.
pull/3/head
Wayne Warthen 10 years ago
parent
commit
5bb7bd6c44
  1. 14
      Source/BPBIOS/cboot-ww.z80
  2. 4
      Source/BPBIOS/dphhd.lib
  3. 59
      Source/BPBIOS/hardhb.z80
  4. 66
      Source/BPBIOS/hbios.z80
  5. 20
      Source/BPBIOS/romwbw-mk4.lib
  6. 20
      Source/BPBIOS/romwbw-sim.lib
  7. 18
      Source/BPBIOS/romwbw.lib
  8. 5
      Source/HBIOS/API.txt

14
Source/BPBIOS/cboot-ww.z80

@ -368,13 +368,13 @@ BLKMV: POP BC ; And number of bytes to move
DEC A ; 0 --> FF
LD (Z3WHL),A ; Set the Wheel Byte
; Get and save the internal HBIOS physical disk
; buffer address which is assumed to be in the
; HBIOS bank.
LD B,18H ; Get buffer function call (assumes already allocated!!!)
LD HL,0 ; ... with address 0 to get HBIOS buf adr
CALL HBX_INVOKE ; ... to return internal HBIOS buffer adr
LD (HB_DSKBUF),HL ; Record the buffer address
; Allocate disk buffer in HBIOS bank and
; save it for use later in disk access.
LD B,0F4H ; BIOS FUNC: ALLOCATE HEAP MEMORY
LD HL,512 ; 1 SECTOR, 512 BYTES
CALL HBX_INVOKE ; DO IT
CALL NZ,PANIC ; HANDLE ERROR
LD (HB_DSKBUF),HL ; RECORD THE BUFFER ADDRESS
IF HAVIOP
LD HL,IOPRET

4
Source/BPBIOS/dphhd.lib

@ -116,7 +116,7 @@ DPH$57: DEFW 0
XDPH58: DEFB TRUE ; --- Ninth Hard Drive/Partition
DEFB FIXDSK
DEFB 2
DEFB HB_MDDEV + 0
DEFB HB_MDDEV + 1
DPH$58: DEFW 0
DEFW 0,0,0
DEFW DIRBUF
@ -128,7 +128,7 @@ DPH$58: DEFW 0
XDPH59: DEFB TRUE ; --- Tenth Hard Drive/Partition
DEFB FIXDSK
DEFB 2
DEFB HB_MDDEV + 1
DEFB HB_MDDEV + 0
DPH$59: DEFW 0
DEFW 0,0,0
DEFW DIRBUF

59
Source/BPBIOS/hardhb.z80

@ -174,7 +174,7 @@ HDSK_READ:
; CALL PRTSTRD
; DEFB '[HDSK READ]$'
LD B,10H ; $10 IS HBIOS DISK READ
LD B,13H ; $13 IS HBIOS DISK READ
JR HDSK_RW
;
;
@ -183,7 +183,7 @@ HDSK_WRITE:
; CALL PRTSTRD
; DEFB '[HDSK WRITE]$'
LD B,11H ; $11 IS HBIOS DISK WRITE
LD B,14H ; $14 IS HBIOS DISK WRITE
JR HDSK_RW
;
;
@ -193,42 +193,31 @@ HDSK_RW:
DEC HL ; ADJUST TO POINT TO UNIT NUMBER
LD C,(HL) ; LOAD IT IN C FOR HBIOS CALL LATER
PUSH BC ; SAVE FUNCTION AND DEVICE FOR LATER
; LD DE,(HSTTRK)
; LD HL,0
; LD B,4 ; PREPARE TO LEFT SHIT BY 4 BITS
;HDSK_RW1:
; SLA E ; SHIFT DE LEFT BY 4 BITS
; RL D
; RL L
; RL H
; DJNZ HDSK_RW1 ; LOOP TILL ALL BITS DONE
; LD A,(HSTSEC) ; GET THE SECTOR INTO A
; AND 0FH ; GET RID OF TOP NIBBLE FOR SAFETY
; OR E ; COMBINE WITH E
; LD E,A ; BACK IN E
LD HL,(HSTTRK) ; GET TRACK VALUE
LD A,L ; LSB OF TRACK TO A
AND 0FH ; ISOLATE HEAD IN LOW 4 BITS
LD D,A ; STUFF IT IN D
LD A,(HSTSEC) ; GET SECTOR
LD E,A ; STUFF IT IN E
LD B,4 ; PREPARE TO SHIFT OUT 4 BIT HEAD VALUE
HDSK_RW1:
SRL H ; SHIFT ONE BIT OUT
RR L ; ... OF HL
DJNZ HDSK_RW1 ; DO ALL 4 BITS
EX DE,HL ; HL <-> DE FOR HBIOS CALL
LD HL,(HSTTRK) ; GET TRACK VALUE
LD A,L ; LSB OF TRACK TO A
AND 0FH ; ISOLATE HEAD IN LOW 4 BITS
LD D,A ; STUFF IT IN D
LD A,(HSTSEC) ; GET SECTOR
LD E,A ; STUFF IT IN E
LD B,4 ; PREPARE TO SHIFT OUT 4 BIT HEAD VALUE
HDSK_RW1:
SRL H ; SHIFT ONE BIT OUT
RR L ; ... OF HL
DJNZ HDSK_RW1 ; DO ALL 4 BITS
POP BC ; RECOVER FUNCTION AND DEVICE
CALL HBX_INVOKE
OR A
PUSH BC ; SAVE INCOMING FUNCTION, DEVICE/UNIT
LD B,12H ; SETUP FOR NEW SEEK CALL
CALL HBX_INVOKE ; DO IT
POP BC ; RESTORE INCOMING FUNCTION, DEVICE/UNIT
RET NZ ; ABORT IF SEEK RETURNED AN ERROR W/ ERROR IN A
LD HL,(HB_DSKBUF) ; GET BUFFER ADDRESS
LD DE,1 ; TRANSFER ONE SECTOR
CALL HBX_INVOKE ; DO IT
OR A ; SET FLAGS
RET Z ; DONE IF NO ERROR
XOR A
DEC A ; A=$FF TO SIGNAL ERROR
RET
OR 0FFH ; A=$FF TO SIGNAL ERROR
RET ; AND DONE W/ ERROR
;
;==================================================================================================
; HDSK DISK DRIVER - DATA

66
Source/BPBIOS/hbios.z80

@ -3,33 +3,33 @@
; *****************************
;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
; CHARACTER DEVICES (ONLY FIRST NIBBLE RELEVANT, SECOND NIBBLE RESERVED FOR UNIT)
;
HBCIO_UART EQU 000H
HBCIO_ASCI EQU 010H
HBCIO_VDU EQU 020H
HBCIO_CVDU EQU 030H
HBCIO_UPD7220 EQU 040H
HBCIO_N8V EQU 050H
HBCIO_PRPCON EQU 060H
HBCIO_PPPCON EQU 070H
HBCIO_CRT EQU 0D0H
HBCIO_BAT EQU 0E0H
HBCIO_NUL EQU 0F0H
;
; DISK DEVICES (ONLY FIRST NIBBLE RELEVANT, SECOND NIBBLE RESERVED FOR UNIT)
;
HBDEV_MD EQU 000H
HBDEV_FD EQU 010H
HBDEV_RF EQU 020H
HBDEV_IDE EQU 030H
HBDEV_ATAPI EQU 040H
HBDEV_PPIDE EQU 050H
HBDEV_SD EQU 060H
HBDEV_PRPSD EQU 070H
HBDEV_PPPSD EQU 080H
HBDEV_HDSK EQU 090H
;;
;; CHARACTER DEVICES (ONLY FIRST NIBBLE RELEVANT, SECOND NIBBLE RESERVED FOR UNIT)
;;
;HBCIO_UART EQU 000H
;HBCIO_ASCI EQU 010H
;HBCIO_VDU EQU 020H
;HBCIO_CVDU EQU 030H
;HBCIO_UPD7220 EQU 040H
;HBCIO_N8V EQU 050H
;HBCIO_PRPCON EQU 060H
;HBCIO_PPPCON EQU 070H
;HBCIO_CRT EQU 0D0H
;HBCIO_BAT EQU 0E0H
;HBCIO_NUL EQU 0F0H
;;
;; DISK DEVICES (ONLY FIRST NIBBLE RELEVANT, SECOND NIBBLE RESERVED FOR UNIT)
;;
;HBDEV_MD EQU 000H
;HBDEV_FD EQU 010H
;HBDEV_RF EQU 020H
;HBDEV_IDE EQU 030H
;HBDEV_ATAPI EQU 040H
;HBDEV_PPIDE EQU 050H
;HBDEV_SD EQU 060H
;HBDEV_PRPSD EQU 070H
;HBDEV_PPPSD EQU 080H
;HBDEV_HDSK EQU 090H
;
HB_DEFBNK EQU BID_USR ; Default bank number
;
@ -66,7 +66,8 @@ HB_SRCADR DW 0
HB_SRCBNK DB 0
HB_DSTADR DW 0
HB_DSTBNK DB 0
DB 0,0,0,0,0,0,0,0
HB_CPYLEN DW 0
DB 0,0,0,0,0,0
HB_INVOKE JP HBX_INVOKE
HB_BNKSEL JP HBX_BNKSEL
HB_BNKCPY JP HBX_BNKCPY
@ -90,6 +91,7 @@ HB_SRCADR EQU 0FFE2H
HB_SRCBNK EQU 0FFE4H
HB_DSTADR EQU 0FFE5H
HB_DSTBNK EQU 0FFE7H
HB_CPYLEN EQU 0FFE8H
ENDIF
@ -124,6 +126,11 @@ HBX_INIT:
RET
;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; SETBNK - Set memory bank specified in A.
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
HBX_SETBNK:
JP HBX_BNKSEL
@ -143,9 +150,6 @@ HBX_COPY:
IF INTPXY
;
; Enter at HBX_BNKSEL to set bank temporarily and avoid
; updating the "current" bank.
;
HBX_BNKSEL:
LD (HB_CURBNK),A

20
Source/BPBIOS/romwbw-mk4.lib

@ -9,7 +9,7 @@
; HBIOS configuration.
;
HBIOS EQU YES ; Use HBIOS functions
INTPXY EQU YES ; Internal HBIOS Proxy
;INTPXY EQU YES ; Internal HBIOS Proxy
HBLOC EQU 0FE00H ; Location of HBIOS proxy (used if not INTPXY)
;
; Set exactly one of the following to YES to specify platform
@ -26,13 +26,15 @@ HBCLK EQU YES ; HBIOS clock driver
;
; Set HB_HDDEV to appropriate hard disk driver
;
;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver
;HB_HDDEV EQU HBDEV_IDE ; IDE Driver
HB_HDDEV EQU HBDEV_SD ; SD Card Driver
;;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver
;;HB_HDDEV EQU HBDEV_IDE ; IDE Driver
;HB_HDDEV EQU HBDEV_SD ; SD Card Driver
HB_HDDEV EQU 2
;
; Set HB_MDDEV to appropriate memory disk driver
;
HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
HB_MDDEV EQU 0
;
; RAM/ROM disk sizes expressed as count of 2K blocks
;
@ -60,10 +62,12 @@ BID_COM EQU 9FH
ENDIF
;
IF N8 OR MK4
HB_IODEV EQU HBCIO_ASCI
ELSE
HB_IODEV EQU HBCIO_UART
;HB_IODEV EQU HBCIO_ASCI
; ELSE
;HB_IODEV EQU HBCIO_UART
ENDIF
;
HB_IODEV EQU 0
;
IF INTPXY
MEMTOP EQU 0FFE0H - 1 ; Start of HBIOS 32 byte control block

20
Source/BPBIOS/romwbw-sim.lib

@ -9,7 +9,7 @@
; HBIOS configuration.
;
HBIOS EQU YES ; Use HBIOS functions
INTPXY EQU YES ; Internal HBIOS Proxy
;INTPXY EQU YES ; Internal HBIOS Proxy
HBLOC EQU 0FE00H ; Location of HBIOS proxy (used if not INTPXY)
;
; Set exactly one of the following to YES to specify platform
@ -26,13 +26,15 @@ HBCLK EQU YES ; HBIOS clock driver
;
; Set HB_HDDEV to appropriate hard disk driver
;
HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver
;HB_HDDEV EQU HBDEV_IDE ; IDE Driver
;HB_HDDEV EQU HBDEV_SD ; SD Card Driver
;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver
;;HB_HDDEV EQU HBDEV_IDE ; IDE Driver
;;HB_HDDEV EQU HBDEV_SD ; SD Card Driver
HB_HDDEV EQU 2
;
; Set HB_MDDEV to appropriate memory disk driver
;
HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
HB_MDDEV EQU 0
;
; RAM/ROM disk sizes expressed as count of 2K blocks
;
@ -60,10 +62,12 @@ BID_COM EQU 9FH
ENDIF
;
IF N8 OR MK4
HB_IODEV EQU HBCIO_ASCI
ELSE
HB_IODEV EQU HBCIO_UART
;HB_IODEV EQU HBCIO_ASCI
; ELSE
;HB_IODEV EQU HBCIO_UART
ENDIF
;
HB_IODEV EQU 0
;
IF INTPXY
MEMTOP EQU 0FFE0H - 1 ; Start of HBIOS 32 byte control block

18
Source/BPBIOS/romwbw.lib

@ -26,13 +26,15 @@ HBCLK EQU YES ; HBIOS clock driver
;
; Set HB_HDDEV to appropriate hard disk driver
;
HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver
;HB_HDDEV EQU HBDEV_IDE ; IDE Driver
;HB_HDDEV EQU HBDEV_SD ; SD Card Driver
;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver
;;HB_HDDEV EQU HBDEV_IDE ; IDE Driver
;;HB_HDDEV EQU HBDEV_SD ; SD Card Driver
HB_HDDEV EQU 2
;
; Set HB_MDDEV to appropriate memory disk driver
;
HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
HB_MDDEV EQU 0
;
; RAM/ROM disk sizes expressed as count of 2K blocks
;
@ -60,10 +62,12 @@ BID_COM EQU 9FH
ENDIF
;
IF N8 OR MK4
HB_IODEV EQU HBCIO_ASCI
ELSE
HB_IODEV EQU HBCIO_UART
;HB_IODEV EQU HBCIO_ASCI
; ELSE
;HB_IODEV EQU HBCIO_UART
ENDIF
;
HB_IODEV EQU 0
;
IF INTPXY
MEMTOP EQU 0FFE0H - 1 ; Start of HBIOS 32 byte control block

5
Source/HBIOS/API.txt

@ -233,12 +233,13 @@ CAPACITY ($1A):
If media is unknown, return error (no media)
GEOMETRY ($1B):
BC=Function/Unit HL=Cylinders
BC=Function/Unit A=Result
HL=Cylinders
D:0-6=Heads
D:7=LBA Capable
E=Sectors
BC=Block Size
A=Result
Report current media geometry information.
If media is unknown, return error (no media)

Loading…
Cancel
Save