Browse Source

Improved BPBIOS Bank Id Management

pull/378/head v3.4.0-dev.28
Wayne Warthen 2 years ago
parent
commit
edbe7d0781
  1. 21
      Source/BPBIOS/hbios.z80
  2. 24
      Source/BPBIOS/ibmv-ww.z80
  3. 27
      Source/BPBIOS/romwbw.lib
  4. 4
      Source/Images/Build.cmd

21
Source/BPBIOS/hbios.z80

@ -43,18 +43,15 @@ HBX_CPYLEN EQU 0FFE8H
; call here, make required changes, then update the
; BIOSJT to point directly to the normal SELMEM routine for
; all subsequent calls.
;
; HBIOS bank ids are computed by subtracting the BPBIOS bank id
; from the ending HBIOS bank id. HBIOS RAM bank ids start at 80h.
; The ending HBIOS bank id (HB_BNKEND) is (80h + RAM banks). Since
; the number of RAM banks in a system can vary, HB_BNKEND is
; determined here at startup.
;
; See romwbw.lib for additional RAM bank layout information.
; BPBIOS HBIOS Typical
; ------------ -------------- --------------
; -1: <COMMON> BID_COM 90h - 1 = 8Fh
; -2: TPABNK BID_USR 90h - 2 = 8Eh
; -3: SYSBNK BID_SYS 90h - 3 = 8Dh
; -4: RAMBNK BID_BUF 90h - 4 = 8Ch
; -4: MAXBNK BID_BUF 90h - 4 = 8Ch
; -5: BID_RAMM 90h - 5 = 8BH
; -15: BID_RAMD 90h - 15 = 81h (varies w/ memory size)
; -16: BID_HB 90h - 16 = 80h (varies w/ memory size)
HB_SELMEM:
PUSH AF
PUSH BC
@ -103,9 +100,11 @@ HB_MOVE:
PUSH HL
LD HL,HB_BNKEND
LD A,(HB_SRCBNK)
NEG
ADD A,(HL) ; Adjust for HBIOS bank ids
LD (HBX_SRCBNK),A
LD A,(HB_DSTBNK)
NEG
ADD A,(HL) ; Adjust for HBIOS bank ids
LD (HBX_DSTBNK),A
POP HL

24
Source/BPBIOS/ibmv-ww.z80

@ -115,10 +115,24 @@ SELMEM: LD (USRBNK),A ; Update user bank
; Must preserve all Registers including Flags.
; All Bank Switching MUST be done by this routine
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
; Parameter to BNKADJ (ADD) is set dynamically at initialization.
SELBNK: PUSH AF ; Save regs
SELBN0: LD (CURBNK),A ; Save as current bank #
BNKADJ: ADD A,90H ; Adjust for HBIOS bank ids
NEG
BNKADJ: ADD A,0FFH ; Adjust for HBIOS bank ids
IF HB_DEBUG AND FALSE
CALL PRTSTRD
DEFB '[SELBNK: $'
CALL PRTHEXBYTE
CALL PRTSTRD
DEFB ']$'
ENDIF
CALL HBX_BNKSEL
POP AF ; restore regs
RET
@ -172,7 +186,9 @@ FRGETB:
PUSH BC ; Save BC
PUSH DE ; Save DE
LD B,0FAH ; HBIOS Peek function
LD D,C ; Bank in D
LD A,(HB_BNKEND) ; Adjust BP bank id
SUB C ; ... to HBIOS bank id
LD D,A ; Put in D
CALL HBX_INVOKE ; Do it
LD A,E ; Value to A
POP DE ; Restore DE
@ -203,8 +219,10 @@ FRPUTB:
PUSH BC ; Save BC
PUSH DE ; Save DE
LD B,0FBH ; HBIOS Poke function
LD D,C ; Bank in D
LD E,A ; Value in E
LD A,(HB_BNKEND) ; Adjust BP bank id
SUB C ; ... to HBIOS bank id
LD D,A ; Put in D
CALL HBX_INVOKE ; Do it
POP DE ; Restore DE
POP BC ; Restore BC

27
Source/BPBIOS/romwbw.lib

@ -48,21 +48,26 @@ DRV_P SET NO ; YES if system has flopy drives
;
; RAM/ROM Bank Reserve
;
HB_RAMRESV EQU 5 ; RAM reserve is 8 banks
HB_RAMRESV EQU 5 ; RAM reserve is 5 banks
HB_ROMRESV EQU 4 ; ROM reserve is 4 banks
;
; Layout of RAM banks
;
; TODO: Query system via HBIOS API to determine the actual bank
; assignments, then adjust BPBIOS operation accordingly.
;
BID_HB EQU -16 ; 90h - 16 = 80h
BID_RAMD EQU -15 ; 90h - 15 = 81h
BID_RAMM EQU -5 ; 90h - 5 = 8Bh
BID_BUF EQU -4 ; 90h - 4 = 8Ch
BID_SYS EQU -3 ; 90h - 3 = 8Dh
BID_USR EQU -2 ; 90h - 2 = 8Eh
BID_COM EQU -1 ; 90h - 1 = 8Fh
; These are BPBIOS bank ids. They map to HBIOS bank ids
; by subtracting from the ending HBIOS bank id (N). HBIOS RAM bank ids
; start at 80h. The ending HBIOS bank id is (80h + RAM banks). The
; typical layout assumes 16 banks of RAM starting at HBIOS bank id 80h
; and ending at bank id 90h (N = 90h).
;
; BPBIOS HBIOS (TYPICAL)
; ---------------------------------------------- ---------------
; <HBIOS> 80h (80h)
; <RAMD> 81h (81h)
; <RAMM> N - 5 (8Bh)
BID_BUF EQU 4 ; BNK3 -> RAMBNK N - 4 (8Ch)
BID_SYS EQU 3 ; BNK2 -> SYSBNK N - 3 (8Dh)
BID_USR EQU 2 ; BNK0 -> TPABNK N - 2 (8Eh)
BID_COM EQU 1 ; BNK1 -> N - 1 (8Fh)
;
HB_EI MACRO
EI

4
Source/Images/Build.cmd

@ -1,6 +1,10 @@
@echo off
setlocal
:: call BuildDisk.cmd bp hd wbw_hd1k
:: copy /b hd1k_prefix.dat + ..\..\Binary\hd1k_bp.img + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\hd1k_combo_bp.img || exit /b
:: goto :eof
echo.
echo Building Floppy Disk Images...
echo.

Loading…
Cancel
Save