|
|
|
|
@@ -514,20 +514,9 @@ HBX_ROM:
|
|
|
|
|
OR A ; SET FLAGS
|
|
|
|
|
JP P,HBX_ROM ; BIT 7 INDICATES RAM
|
|
|
|
|
OUT (MPCL_ROM),A ; ENSURE ROM PAGE OUT OF MEMORY BEFORE SWITCH
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
HBX_MMMSK .EQU $+1 ; FORCE TOP 32K ; MASK POPULATED
|
|
|
|
|
; SEE MBC RUNTIME MEMORY SIZE ADJUSTMENT
|
|
|
|
|
HBX_MBCMSK .EQU $+1 ; FORCE TOP 32K ; MASK POPULATED
|
|
|
|
|
XOR %00000000 ; TO BE IN FIRST CHIP ; DURING INITIALIZATION
|
|
|
|
|
|
|
|
|
|
;
|
|
|
|
|
;#IF (RAMSIZE == 256)
|
|
|
|
|
; XOR %00000100 ; TOP 32K IS ALWAYS IN FIRST CHIP
|
|
|
|
|
;#ENDIF
|
|
|
|
|
;
|
|
|
|
|
;#IF (RAMSIZE == 1024)
|
|
|
|
|
; XOR %00010000 ; TOP 32K IS ALWAYS IN FIRST CHIP
|
|
|
|
|
;#ENDIF
|
|
|
|
|
;
|
|
|
|
|
OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR
|
|
|
|
|
JR HBX_RAMX
|
|
|
|
|
HBX_ROM:
|
|
|
|
|
@@ -1273,6 +1262,9 @@ Z280_INITZ:
|
|
|
|
|
LD A,1
|
|
|
|
|
OUT (MPGENA),A
|
|
|
|
|
#ENDIF
|
|
|
|
|
;
|
|
|
|
|
; AT THIS POINT, RAM SHOULD BE AVAILABLE IN THE COMMON BANK
|
|
|
|
|
; (TOP 32K).
|
|
|
|
|
;
|
|
|
|
|
DIAG(%00000011)
|
|
|
|
|
;
|
|
|
|
|
@@ -1314,16 +1306,34 @@ Z280_INITZ:
|
|
|
|
|
LD BC,HBX_SIZ
|
|
|
|
|
LDIR
|
|
|
|
|
;
|
|
|
|
|
; RUNTIME MEMORY SIZE ADJUSTMENT
|
|
|
|
|
; THIS IS WHERE WE SHOULD PROBE FOR THE ACTUAL NUMBER OF RAM
|
|
|
|
|
; BANKS AVAILABLE IN THE SYSTEM. THE PROBE CODE WOULD NEED
|
|
|
|
|
; TO BE COPIED TO AND RUN FROM THE COMMON RAM BANK.
|
|
|
|
|
;
|
|
|
|
|
; MBC RUNTIME MEMORY SIZE ADJUSTMENT
|
|
|
|
|
;
|
|
|
|
|
; THE MBC RAM BOARD CAN CONTAIN 1 OR 2 RAM CHIPS. THEY CAN BE
|
|
|
|
|
; EITHER 128K OR 512K EACH. SO THE MBC RAM BAORD CAN HAVE A
|
|
|
|
|
; TOTAL OF 128K, 256K, 512K, OR 1024K. THE COMMON (HIMEM) RAM
|
|
|
|
|
; IS ALWAYS MAPPED TO THE LAST 32K OF THE FIRST CHIP ON THE BOARD.
|
|
|
|
|
; IF THERE ARE TWO CHIPS ON THE BOARD, THIS MEANS THE COMMON
|
|
|
|
|
; BANK WILL APPEAR IN THE "MIDDLE" OF THE PHYSICAL RAM BANKS.
|
|
|
|
|
; ROMWBW NEEDS THE COMMON BANK TO BE AT THE LAST BANK OF PHYSICAL
|
|
|
|
|
; RAM IN ORDER TO HAVE SEQUENTIAL RAM BANKS AVAILABLE FOR THE
|
|
|
|
|
; RAM DISK. TO WORK AROUND THIS, WE FLIP THE HIGH BIT OF THE
|
|
|
|
|
; BANK ID FOR AN MBC SYSTEM IFF IT HAS 2 CHIPS (256K OR 1024K).
|
|
|
|
|
; THE CODE BELOW GENERATES THE CORRECT MASK TO ACCOMPLISH THIS
|
|
|
|
|
; AND THEN POKES THE MASK INTO AN XOR INSTRUCTION IN THE MBC
|
|
|
|
|
; MEMORY MANAGER.
|
|
|
|
|
;
|
|
|
|
|
#IF (MEMMGR == MM_MBC)
|
|
|
|
|
LD HL,HCB + HCB_RAMBANKS ; IN NUMBER OF RAMBANKS DETECTED FOR MBC
|
|
|
|
|
LD HL,CB_RAMBANKS ; IN NUMBER OF RAMBANKS DETECTED FOR MBC
|
|
|
|
|
LD A,%11101011 ; IS 4 (128KB) OR 16 (512KB) THEN
|
|
|
|
|
AND (HL) ; ZERO THE LAST BANK MASK OTHERWISE
|
|
|
|
|
JR Z,MB128512 ; CALCULATE THE LAST BANK MASK (BANKS/2)
|
|
|
|
|
JR Z,MBC_SINGLE ; CALCULATE THE LAST BANK MASK (BANKS/2)
|
|
|
|
|
RRA ; 256K = %00000100, 1024K = %00010000
|
|
|
|
|
MB128512:
|
|
|
|
|
LD (HBX_MMMSK),A
|
|
|
|
|
MBC_SINGLE:
|
|
|
|
|
LD (HBX_MBCMSK),A
|
|
|
|
|
#ENDIF
|
|
|
|
|
;
|
|
|
|
|
; IF APPBOOT, RESTORE CURRENT BANK ID
|
|
|
|
|
@@ -1349,6 +1359,7 @@ MB128512:
|
|
|
|
|
LD DE,0
|
|
|
|
|
LD BC,$8000
|
|
|
|
|
CALL HBX_BNKCPY
|
|
|
|
|
;
|
|
|
|
|
#IF (1)
|
|
|
|
|
;
|
|
|
|
|
; POPULATE THE CRITICAL RAM BANK NUMBERS.
|
|
|
|
|
@@ -1379,6 +1390,7 @@ CB_IDS: LD (HL),A ; POPULATE CB_BIDCOM
|
|
|
|
|
DEC A
|
|
|
|
|
SUB TOT_RAM_RB
|
|
|
|
|
LD (HL),A
|
|
|
|
|
;
|
|
|
|
|
#ENDIF
|
|
|
|
|
;
|
|
|
|
|
; TRANSITION TO HBIOS IN RAM BANK
|
|
|
|
|
@@ -2091,7 +2103,7 @@ HB_Z280BUS1:
|
|
|
|
|
CALL PRTSTRD
|
|
|
|
|
.TEXT "KB ROM, $"
|
|
|
|
|
;
|
|
|
|
|
LD HL,(HCB + HCB_RAMBANKS) ; GET NUMBER OF BANKS IN L
|
|
|
|
|
LD HL,(CB_RAMBANKS) ; GET NUMBER OF BANKS IN L
|
|
|
|
|
LD H,0 ; CALCULATE RAM SIZE
|
|
|
|
|
ADD HL,HL
|
|
|
|
|
ADD HL,HL ; X4
|
|
|
|
|
@@ -2103,6 +2115,18 @@ HB_Z280BUS1:
|
|
|
|
|
CALL PRTSTRD
|
|
|
|
|
.TEXT "KB RAM$"
|
|
|
|
|
;
|
|
|
|
|
#IF 0
|
|
|
|
|
;
|
|
|
|
|
; DIAGNOSTIC DISPLAY OF BANK IDS IN HCB
|
|
|
|
|
;
|
|
|
|
|
CALL PRTSTRD
|
|
|
|
|
.TEXT ", BANK IDS:$"
|
|
|
|
|
LD DE,CB_BIDCOM
|
|
|
|
|
LD A,8
|
|
|
|
|
CALL PRTHEXBUF
|
|
|
|
|
;
|
|
|
|
|
#ENDIF
|
|
|
|
|
;
|
|
|
|
|
#IF (CPUFAM == CPU_Z280)
|
|
|
|
|
CALL NEWLINE
|
|
|
|
|
PRTS("Z280: $")
|
|
|
|
|
@@ -3568,8 +3592,9 @@ SYS_GETCPUINFO:
|
|
|
|
|
; E: COUNT OF RAM BANKS
|
|
|
|
|
;
|
|
|
|
|
SYS_GETMEMINFO:
|
|
|
|
|
LD D,ROMSIZE / 32
|
|
|
|
|
LD A,(HCB + HCB_RAMBANKS)
|
|
|
|
|
LD A,(CB_ROMBANKS)
|
|
|
|
|
LD D,A
|
|
|
|
|
LD A,(CB_RAMBANKS)
|
|
|
|
|
LD E,A
|
|
|
|
|
XOR A
|
|
|
|
|
RET
|
|
|
|
|
|