BPBIOS Related Fixes

This commit is contained in:
Wayne Warthen
2016-11-23 19:31:57 -08:00
parent 8d02b02ab4
commit 97c36c0efc
32 changed files with 172 additions and 248 deletions

View File

@@ -501,12 +501,11 @@ DRVTBL: LD HL,DPHTBL ; Point to DPH table
IF IDE
INCLUDE HARDIDE.Z80
ENDIF
IF HDSK
IF HBIOS
INCLUDE HARDHB.Z80
ELSE
IF SIMHDSK
INCLUDE HARDSIM.Z80
ENDIF
ENDIF
IF HBDSK
INCLUDE HARDHB.Z80
ENDIF
PAGE
ENDIF

View File

@@ -370,7 +370,7 @@ BLKMV: POP BC ; And number of bytes to move
; Allocate disk buffer in HBIOS bank and
; save it for use later in disk access.
LD B,0F4H ; BIOS FUNC: ALLOCATE HEAP MEMORY
LD B,0F6H ; BIOS FUNC: ALLOCATE HEAP MEMORY
LD HL,512 ; 1 SECTOR, 512 BYTES
CALL HBX_INVOKE ; DO IT
CALL NZ,PANIC ; HANDLE ERROR
@@ -454,12 +454,11 @@ MEMOK:
IF IDE
DEFB CR,LF,' GIDE Hard Disk Driver'
ENDIF
IF HDSK
IF HBIOS
DEFB CR,LF,' HBIOS Hard Disk Driver'
ELSE
IF SIMHDSK
DEFB CR,LF,' SIMH Hard Disk Driver'
ENDIF
ENDIF
IF HBDSK
DEFB CR,LF,' HBIOS Hard Disk Driver'
ENDIF
IF HDDMA
DEFB ' (DMA-driven IO)'

View File

@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -93,7 +93,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -93,7 +93,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -93,7 +93,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only
; (Pick 1 of 3 options below)
SCSI EQU NO ; YES = Use SCSI Driver
IDE EQU NO ; YES = Use IDE Driver
HDSK EQU YES ; YES = Use SIMH HDSK Driver
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver
HBDSK EQU YES ; YES = Use HBIOS Disk Driver
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers?
; (DMA not implemented for GIDE)
UNIT_0 EQU YES ; Hard Disk Physical Unit 1

View File

@@ -33,10 +33,10 @@
; NOTE: No Skew Table is needed since Hard Disk Format is locked
;.....
; Partition A. SIMH HDSK0, Slice 0
; Partition A. HBIOS Disk 0, Slice 0
IF DRV_E
DEFB 'HDSK0:0 ','A'+80H ; Id - 10 bytes
DEFB 'HBDSK0:0 ','A'+80H ; Id - 10 bytes
DEFB FIXDSK ; Format type byte 0
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
DEFB -2 ; Skew factor (== Only the +/- sign used)
@@ -60,10 +60,10 @@ DPB50: DEFW 64 ; Sctrs/Trk
ENDIF
;.....
; Partition B. SIMH HDSK0, Slice 1
; Partition B. HBIOS Disk 0, Slice 1
IF DRV_F
DEFB 'HDSK0:1 ','B'+80H ; Id - 10 bytes
DEFB 'HBDSK0:1 ','B'+80H ; Id - 10 bytes
DEFB FIXDSK ; Format type byte 0
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
DEFB -2 ; Skew factor
@@ -87,10 +87,10 @@ DPB51: DEFW 64 ; Scts/Trk
ENDIF
;.....
; Partition C. SIMH HDSK0, Slice 2
; Partition C. HBIOS Disk 0, Slice 2
IF DRV_G
DEFB 'HDSK0:2 ','C'+80H ; Id - 10 bytes
DEFB 'HBDSK0:2 ','C'+80H ; Id - 10 bytes
DEFB FIXDSK ; Format type byte 0
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
DEFB -2 ; Skew factor
@@ -114,10 +114,10 @@ DPB52: DEFW 64 ; Scts/Trk
ENDIF
;.....
; Partition D. SIMH HDSK0, Slice 3
; Partition D. HBIOS Disk 0, Slice 3
IF DRV_H
DEFB 'HDSK0:3 ','D'+80H ; Id - 10 bytes
DEFB 'HBDSK0:3 ','D'+80H ; Id - 10 bytes
DEFB FIXDSK ; Format type byte 0
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
DEFB -2 ; Skew factor
@@ -141,10 +141,10 @@ DPB53: DEFW 64 ; Scts/Trk
ENDIF
;.....
; Partition A. SIMH HDSK1, Slice 0
; Partition A. HBIOS Disk 1, Slice 0
IF DRV_F
DEFB 'HDSK1:0 ','A'+80H ; Id - 10 bytes
IF DRV_I
DEFB 'HBDSK1:0 ','E'+80H ; Id - 10 bytes
DEFB FIXDSK ; Format type byte 0
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
DEFB -2 ; Skew factor (== Only the +/- sign used)
@@ -168,10 +168,10 @@ DPB54: DEFW 64 ; Sctrs/Trk
ENDIF
;.....
; Partition B. SIMH HDSK1, Slice 1
; Partition B. HBIOS Disk 1, Slice 1
IF DRV_G
DEFB 'HDSK1:1 ','B'+80H ; Id - 10 bytes
IF DRV_J
DEFB 'HBDSK1:1 ','F'+80H ; Id - 10 bytes
DEFB FIXDSK ; Format type byte 0
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
DEFB -2 ; Skew factor
@@ -195,10 +195,10 @@ DPB55: DEFW 64 ; Scts/Trk
ENDIF
;.....
; Partition C. SIMH HDSK1, Slice 2
; Partition C. HBIOS Disk 1, Slice 2
IF DRV_H
DEFB 'HDSK1:2 ','C'+80H ; Id - 10 bytes
IF DRV_K
DEFB 'HBDSK1:2 ','G'+80H ; Id - 10 bytes
DEFB FIXDSK ; Format type byte 0
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
DEFB -2 ; Skew factor
@@ -222,10 +222,10 @@ DPB56: DEFW 64 ; Scts/Trk
ENDIF
;.....
; Partition D. SIMH HDSK1, Slice 3
; Partition D. HBIOS Disk 1, Slice 3
IF DRV_I
DEFB 'HDSK1:3 ','D'+80H ; Id - 10 bytes
IF DRV_L
DEFB 'HBDSK1:3 ','H'+80H ; Id - 10 bytes
DEFB FIXDSK ; Format type byte 0
DEFB SPEED8+SEC512+ALC4K ; Format type byte 1
DEFB -2 ; Skew factor
@@ -259,7 +259,6 @@ DPB57: DEFW 64 ; Scts/Trk
DEFB 16 ; Logical Sectors per track
DEFB 0 ; Physical tracks/side (No Meaning in HD)
;HSIZ8 EQU 464 ; Number of blocks in Fourth Logical Drive
HSIZ8 EQU HB_ROMBLKS
DPB58: DEFW 64 ; Scts/Trk
@@ -286,7 +285,6 @@ DPB58: DEFW 64 ; Scts/Trk
DEFB 16 ; Logical Sectors per track
DEFB 0 ; Physical tracks/side (No Meaning in HD)
;HSIZ9 EQU 192 ; Number of blocks in Fourth Logical Drive
HSIZ9 EQU HB_RAMBLKS
DPB59: DEFW 64 ; Scts/Trk

View File

@@ -3,33 +3,6 @@
; *****************************
;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;;
;; 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
;
@@ -39,6 +12,23 @@ HB_DISPATCH EQU 0403H
;
; PLATFORM SPECIFIC CONSTANTS
;
IF N8VEM OR ZETA OR ZETA2
SBC_BASE EQU 60H
ENDIF
IF N8VEM OR ZETA
MPCL_RAM EQU SBC_BASE + 18H ; BASE IO ADDRESS OF RAM MEMORY PAGER CONFIGURATION LATCH
MPCL_ROM EQU SBC_BASE + 1CH ; BASE IO ADDRESS OF ROM MEMORY PAGER CONFIGURATION LATCH
ENDIF
IF ZETA2
MPGSEL_0 EQU SBC_BASE + 18H
MPGSEL_1 EQU SBC_BASE + 19H
MPGSEL_2 EQU SBC_BASE + 1AH
MPGSEL_3 EQU SBC_BASE + 1BH
MPGENA EQU SBC_BASE + 1CH
ENDIF
IF N8
N8_BASE EQU 80H ; BASE I/O ADDRESS BOARD PERIPHERALS (NON-CPU)
ACR EQU N8_BASE + 14H ; AUXILLARY CONTROL REGISTER
@@ -61,7 +51,7 @@ HB_XFCIMG EQU $
.PHASE HB_XFC
HB_CURBNK DB 0
HB_PRVBNK DB 0 ; DEPRECATED!!!
HB_INVBNK DB 0
HB_SRCADR DW 0
HB_SRCBNK DB 0
HB_DSTADR DW 0
@@ -126,14 +116,6 @@ HBX_INIT:
RET
;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; SETBNK - Set memory bank specified in A.
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
HBX_SETBNK:
JP HBX_BNKSEL
HBX_XCOPY:
LD A,C
LD (HB_SRCBNK),A
@@ -147,6 +129,8 @@ HBX_COPY:
CALL HBX_BNKCPY ; Do the work with private stack active
LD SP,(HBX_STKSAV) ; Back to original stack
RET
IF INTPXY
;
@@ -156,6 +140,21 @@ HBX_BNKSEL:
IF N8VEM OR ZETA
OUT (MPCL_ROM),A
OUT (MPCL_RAM),A
RET
ENDIF
IF ZETA2
BIT 7,A ; BIT 7 SET REQUESTS RAM PAGE
JR Z,HBX_ROM ; NOT SET, SELECT ROM PAGE
RES 7,A ; RAM PAGE REQUESTED: CLEAR ROM BIT
ADD A,16 ; ADD 16 x 32K - RAM STARTS FROM 512K
;
HBX_ROM:
RLCA ; TIMES 2 - GET 16K PAGE INSTEAD OF 32K
OUT (MPGSEL_0),A ; BANK_0: 0K - 16K
INC A ;
OUT (MPGSEL_1),A ; BANK_1: 16K - 32K
RET
ENDIF
IF N8
@@ -186,17 +185,8 @@ HBX_ROM:
RLCA
RLCA
OUT0 (CPU_BBR),A
RET
ENDIF
RET
;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; GETBNK - Get current memory bank and return in A.
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
HBX_GETBNK:
LD A,(HB_CURBNK)
RET
;
; Entry point HBX_BNKCPY is for use internally and
; assumes a valid stack already exists in upper 32K.
@@ -266,31 +256,28 @@ HBX_COPY4:
RET ; Done
;
;==================================================================================================
; HBIOS ENTRY FOR RST 08 PROCESSING
;==================================================================================================
;
; ENTRY POINT FOR BIOS FUNCTIONS (TARGET OF RST 08)
;
HBX_INVOKE:
LD (HBX_STKSAV),SP ; SAVE ORIGINAL STACK FRAME
LD SP,HBX_STACK ; SETUP NEW STACK FRAME
LD A,(HB_CURBNK) ; GET CURRENT BANK
LD (HBX_INVBNK),A ; SETUP TO RESTORE AT EXIT
LD (HB_INVBNK),A ; SAVE INVOCATION BANK
;DI
LD SP,HBX_STACK ; SETUP NEW STACK FRAME
LD A,BID_HB ; HBIOS BANK
CALL HBX_BNKSEL ; SELECT IT
;EI
CALL HB_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER
;DI
PUSH AF ; SAVE AF (FUNCTION RETURN)
LD A,0FFH ; LOAD ORIGINAL BANK ($FF IS REPLACED AT ENTRY)
HBX_INVBNK EQU $ - 1
LD A,(HB_INVBNK) ; LOAD ORIGINAL BANK
CALL HBX_BNKSEL ; SELECT IT
POP AF ; RESTORE AF
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
;EI
RET ; RETURN TO CALLER
@@ -303,25 +290,18 @@ HBX_INVBNK EQU $ - 1
HBX_FRGETB:
LD (HBX_STKSAV),SP ; Save current stack
LD SP,HBX_STACK ; Activate our private stack
LD A,(HB_CURBNK) ; Get current bank
LD (HBX_BNKSAV),A ; Save current bank
PUSH BC
LD A,C
DI
;DI
CALL HBX_BNKSEL
LD C,(HL)
LD A,(HBX_BNKSAV)
CALL HBX_BNKSEL
;WW EI
;EI
LD A,C
POP BC
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
RET
@@ -332,25 +312,18 @@ HBX_FRGETB:
HBX_FRGETW:
LD (HBX_STKSAV),SP ; Save current stack
LD SP,HBX_STACK ; Activate our private stack
LD A,(HB_CURBNK) ; Get current bank
LD (HBX_BNKSAV),A ; Save current bank
LD A,C
DI
;DI
CALL HBX_BNKSEL
LD E,(HL)
INC HL
LD D,(HL)
DEC HL
LD A,(HBX_BNKSAV)
CALL HBX_BNKSEL
;WW EI
;EI
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
RET
@@ -361,27 +334,20 @@ HBX_FRGETW:
HBX_FRPUTB:
LD (HBX_STKSAV),SP ; Save current stack
LD SP,HBX_STACK ; Activate our private stack
PUSH AF
LD A,(HB_CURBNK) ; Get current bank
LD (HBX_BNKSAV),A ; Save current bank
POP AF
PUSH BC
LD B,A
LD A,C
DI
;DI
CALL HBX_BNKSEL
LD (HL),B
LD A,(HBX_BNKSAV)
CALL HBX_BNKSEL
;WW EI
;EI
POP BC
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
RET
@@ -392,25 +358,18 @@ HBX_FRPUTB:
HBX_FRPUTW:
LD (HBX_STKSAV),SP ; Save current stack
LD SP,HBX_STACK ; Activate our private stack
LD A,(HB_CURBNK) ; Get current bank
LD (HBX_BNKSAV),A ; Save current bank
LD A,C
DI
;DI
CALL HBX_BNKSEL
LD (HL),E
INC HL
LD (HL),D
DEC HL
LD A,(HBX_BNKSAV)
CALL HBX_BNKSEL
;WW EI
;EI
LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME
RET
@@ -422,7 +381,6 @@ HBX_FRPUTW:
DSEG
HB_DSKBUF DEFW 0 ; Address of physical disk buffer in HBIOS bank
HBX_BNKSAV DEFB 0 ; Saved bank id during HBIOS calls
HBX_STKSAV DEFW 0 ; Saved stack pointer during HBIOS calls
DEFS 64 ; Private stack for HBIOS
@@ -431,7 +389,6 @@ HBX_STACK EQU $ ; Top of private stack
IF INTPXY
HBX_RETBNK DEFB 0 ; Bank to activate on return from BNKCPY
HBX_BUF DEFS 80H ; Interbank copy buffer
ENDIF

View File

@@ -30,7 +30,7 @@ BIOSTK: DEFB 0 ; NOP if not currently in bank,
LD (USP-7),HL ; Save entry HL
POP HL ; Retrieve caller's return address from stack
LD (USP-5),HL ; ..and set in our stack for local return
DI ; No interrupts while we play with the stack
;DI ; No interrupts while we play with the stack
LD (USP),SP ; Save User's Stack Pointer
LD SP,USP-1 ; ..and point locally, saving 1 byte for Bank
PUSH AF ; Save entry A and Flags
@@ -43,15 +43,15 @@ BIOSTK: DEFB 0 ; NOP if not currently in bank,
PUSH HL ; ..at USP-2 & 3
LD SP,USP-7 ; Point stack pointer to do local return
POP HL ; .restoring entry HL
;WW EI ; ..enabling interrupts
;EI ; ..enabling interrupts
RET ; And return to caller
; Restore User Stack and Bank Routine
USRSTK: PUSH AF
LD A,(USP-1) ; Get bank control byte from entry
LD (CURBNK),A ; WW: I ADDED THIS, IS IT RIGHT???
CALL HBX_SETBNK
CALL HBX_BNKSEL
LD (CURBNK),A
XOR A
LD (BIOSTK),A ; Patch NOP back in at start of code
POP AF
@@ -64,8 +64,8 @@ USRSTK: PUSH AF
FRCLR: PUSH AF ; Save any entry in AF
LD A,(USP-1) ; Get bank control byte
CALL HBX_BNKSEL
LD (CURBNK),A ; WW: I ADDED THIS, IS IT RIGHT???
CALL HBX_SETBNK
XOR A
LD (BIOSTK),A ; Patch NOP to enable stack switcher
POP AF
@@ -100,6 +100,7 @@ RETMEM: LD A,(CURBNK)
SELMEM: LD (USRBNK),A ; Update user bank
;..fall thru to set specified bank..
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; SELBNK - Switch Memory Bank to Bank in A and show as current.
; Must preserve all Registers including Flags.
@@ -107,8 +108,8 @@ SELMEM: LD (USRBNK),A ; Update user bank
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SELBNK: PUSH AF ; Save regs
SELBN0: LD (CURBNK),A ; Save as current bank #
CALL HBX_SETBNK
SELBN0: CALL HBX_BNKSEL
LD (CURBNK),A ; Save as current bank #
POP AF ; restore regs
RET

View File

@@ -141,45 +141,44 @@ CNTRLR: DEFB 80H ; Controller Types recognized are:
; 3- Seagate SCSI 8- Syquest SCSI
; 4- Shugart 1610-4 Minimal SCSI 80H- GIDE (IDE/ATA)
; First drive (Parameters for Toshiba MK-1544 IDE)
; First drive (Generic HBIOS drive configuration)
BITS DEFL 00000000B ; First HBIOS Hard Disk Drive
BITS DEFL 00000000B ; SCSI - Physical Device 0, Logical Unit 0
; IDE - Drive 0 = Master
BITS DEFL BITS+[UNIT_0 AND 10H] ; If active, set Bit 4
HDRV0: DEFB BITS ; Set Device, Unit, and Active bits
DEFW 581 ; Number of Cylinders
DEFB 2 ; Number of Heads
DEFW 36 ; SCSI - Cylinder # to start reduced write
; IDE - Number of Sectors Per Track
DEFW 520 ; Number of Cylinders
DEFB 16 ; Number of Heads
DEFW 16 ; IDE - Number of Sectors Per Track
DEFW 0000 ; Cylinder # to start precompensation
DEFB 0 ; Step Rate (0=3ms, 1=28us, 2=12us)
; Second drive (Parameters for Seagate ST-125N SCSI)
; Second drive (Generic HBIOS drive configuration)
BITS DEFL 00000001B ; Second HBIOS Hard Disk Drive
BITS DEFL 00000001B ; SCSI - Physical Device 1, Logical Unit 0
; IDE - Drive 1 = Slave
BITS DEFL BITS+[UNIT_1 AND 10H] ; If active, set Bit 4
HDRV1: DEFB BITS ; Set Device, Unit, and Active bits
DEFW 615 ; Syquest ST-125N
DEFB 4
DEFW 0000
DEFW 0000
DEFB 0
DEFW 520 ; Number of Cylinders
DEFB 16 ; Number of Heads
DEFW 16 ; IDE - Number of Sectors Per Track
DEFW 0000 ; Cylinder # to start precompensation
DEFB 0 ; Step Rate (0=3ms, 1=28us, 2=12us)
; Third drive (Parameters for Miniscribe 8425 SCSI)
; Third drive (Generic HBIOS drive configuration)
BITS DEFL 00000010B ; Third HBIOS Hard Disk Drive
BITS DEFL 00000010B ; Physical Device 2, Logical Unit 0
; IDE - (undefined)
BITS DEFL BITS+[UNIT_2 AND 10H] ; If active, set Bit 4
DEFB BITS ; Set Device, Unit, and Active bits
DEFW 615
DEFB 4
DEFW 615
DEFW 300
DEFB 2
HDRV2: DEFB BITS ; Set Device, Unit, and Active bits
DEFW 520 ; Number of Cylinders
DEFB 16 ; Number of Heads
DEFW 16 ; IDE - Number of Sectors Per Track
DEFW 0000 ; Cylinder # to start precompensation
DEFB 0 ; Step Rate (0=3ms, 1=28us, 2=12us)
DEFB 0,0,0,0,0 ; (Reserved)

View File

@@ -9,13 +9,13 @@
; HBIOS configuration.
;
HBIOS EQU YES ; Use HBIOS functions
;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
;
N8VEM EQU NO
ZETA EQU NO
ZETA2 EQU NO
N8 EQU NO
MK4 EQU YES
;
@@ -24,16 +24,16 @@ MK4 EQU YES
SIMHCLK EQU NO ; Direct SIMH clock access
HBCLK EQU YES ; HBIOS clock driver
;
; Set HB_IODEV to appropriate console device
;
HB_IODEV EQU 0
;
; 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 2
;
; Set HB_MDDEV to appropriate 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
@@ -44,7 +44,7 @@ HB_ROMBLKS EQU 192 ; 512K - 128K reserved / 2K per block
;
; Layout of RAM banks
;
IF N8VEM OR ZETA OR MK4
IF N8VEM OR ZETA OR ZETA2 OR MK4
BID_RAMD EQU 80H
BID_RAMM EQU 8BH
BID_SYS EQU 8CH
@@ -60,14 +60,6 @@ BID_HB EQU 9DH
BID_USR EQU 9EH
BID_COM EQU 9FH
ENDIF
;
IF N8 OR MK4
;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

View File

@@ -9,13 +9,13 @@
; HBIOS configuration.
;
HBIOS EQU YES ; Use HBIOS functions
;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
;
N8VEM EQU YES
ZETA EQU NO
ZETA2 EQU NO
N8 EQU NO
MK4 EQU NO
;
@@ -24,16 +24,16 @@ MK4 EQU NO
SIMHCLK EQU NO ; Direct SIMH clock access
HBCLK EQU YES ; HBIOS clock driver
;
; Set HB_IODEV to appropriate console device
;
HB_IODEV EQU 0
;
; 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 2
;
; Set HB_MDDEV to appropriate 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
@@ -44,7 +44,7 @@ HB_ROMBLKS EQU 192 ; 512K - 128K reserved / 2K per block
;
; Layout of RAM banks
;
IF N8VEM OR ZETA OR MK4
IF N8VEM OR ZETA OR ZETA2 OR MK4
BID_RAMD EQU 80H
BID_RAMM EQU 8BH
BID_SYS EQU 8CH
@@ -60,14 +60,6 @@ BID_HB EQU 9DH
BID_USR EQU 9EH
BID_COM EQU 9FH
ENDIF
;
IF N8 OR MK4
;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

View File

@@ -9,13 +9,13 @@
; HBIOS configuration.
;
HBIOS EQU YES ; Use HBIOS functions
;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
;
N8VEM EQU YES
ZETA EQU NO
ZETA2 EQU NO
N8 EQU NO
MK4 EQU NO
;
@@ -24,17 +24,17 @@ MK4 EQU NO
SIMHCLK EQU NO ; Direct SIMH clock access
HBCLK EQU YES ; HBIOS clock driver
;
; Set HB_IODEV to appropriate console device
;
HB_IODEV EQU 0 ; Assume we want to use first HBIOS serial device
;
; 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 2
HB_HDDEV EQU 2 ; Assumes disk device #2 is first hard disk device
;
; Set HB_MDDEV to appropriate memory disk driver
;
;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver
HB_MDDEV EQU 0
HB_MDDEV EQU 0 ; Assumes disk device #0 is ROM disk device
;
; RAM/ROM disk sizes expressed as count of 2K blocks
;
@@ -44,7 +44,7 @@ HB_ROMBLKS EQU 192 ; 512K - 128K reserved / 2K per block
;
; Layout of RAM banks
;
IF N8VEM OR ZETA OR MK4
IF N8VEM OR ZETA OR ZETA2 OR MK4
BID_RAMD EQU 80H
BID_RAMM EQU 8BH
BID_SYS EQU 8CH
@@ -60,14 +60,6 @@ BID_HB EQU 9DH
BID_USR EQU 9EH
BID_COM EQU 9FH
ENDIF
;
IF N8 OR MK4
;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

View File

@@ -321,13 +321,6 @@ STR_PC DB " PC=$"
STR_SP DB " SP=$"
;
;==================================================================================================
; MEMORY BANK MANAGEMENT
;==================================================================================================
;
MPCL_RAM EQU 78H ; BASE IO ADDRESS OF RAM MEMORY PAGER CONFIGURATION LATCH
MPCL_ROM EQU 7CH ; BASE IO ADDRESS OF ROM MEMORY PAGER CONFIGURATION LATCH
;
;==================================================================================================
; DATA
;==================================================================================================
;