|
|
@ -514,20 +514,9 @@ HBX_ROM: |
|
|
OR A ; SET FLAGS |
|
|
OR A ; SET FLAGS |
|
|
JP P,HBX_ROM ; BIT 7 INDICATES RAM |
|
|
JP P,HBX_ROM ; BIT 7 INDICATES RAM |
|
|
OUT (MPCL_ROM),A ; ENSURE ROM PAGE OUT OF MEMORY BEFORE SWITCH |
|
|
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 |
|
|
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 |
|
|
OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR |
|
|
JR HBX_RAMX |
|
|
JR HBX_RAMX |
|
|
HBX_ROM: |
|
|
HBX_ROM: |
|
|
@ -1273,6 +1262,9 @@ Z280_INITZ: |
|
|
LD A,1 |
|
|
LD A,1 |
|
|
OUT (MPGENA),A |
|
|
OUT (MPGENA),A |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
; AT THIS POINT, RAM SHOULD BE AVAILABLE IN THE COMMON BANK |
|
|
|
|
|
; (TOP 32K). |
|
|
; |
|
|
; |
|
|
DIAG(%00000011) |
|
|
DIAG(%00000011) |
|
|
; |
|
|
; |
|
|
@ -1314,16 +1306,34 @@ Z280_INITZ: |
|
|
LD BC,HBX_SIZ |
|
|
LD BC,HBX_SIZ |
|
|
LDIR |
|
|
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) |
|
|
#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 |
|
|
LD A,%11101011 ; IS 4 (128KB) OR 16 (512KB) THEN |
|
|
AND (HL) ; ZERO THE LAST BANK MASK OTHERWISE |
|
|
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 |
|
|
RRA ; 256K = %00000100, 1024K = %00010000 |
|
|
MB128512: |
|
|
|
|
|
LD (HBX_MMMSK),A |
|
|
|
|
|
|
|
|
MBC_SINGLE: |
|
|
|
|
|
LD (HBX_MBCMSK),A |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
; IF APPBOOT, RESTORE CURRENT BANK ID |
|
|
; IF APPBOOT, RESTORE CURRENT BANK ID |
|
|
@ -1349,6 +1359,7 @@ MB128512: |
|
|
LD DE,0 |
|
|
LD DE,0 |
|
|
LD BC,$8000 |
|
|
LD BC,$8000 |
|
|
CALL HBX_BNKCPY |
|
|
CALL HBX_BNKCPY |
|
|
|
|
|
; |
|
|
#IF (1) |
|
|
#IF (1) |
|
|
; |
|
|
; |
|
|
; POPULATE THE CRITICAL RAM BANK NUMBERS. |
|
|
; POPULATE THE CRITICAL RAM BANK NUMBERS. |
|
|
@ -1379,6 +1390,7 @@ CB_IDS: LD (HL),A ; POPULATE CB_BIDCOM |
|
|
DEC A |
|
|
DEC A |
|
|
SUB TOT_RAM_RB |
|
|
SUB TOT_RAM_RB |
|
|
LD (HL),A |
|
|
LD (HL),A |
|
|
|
|
|
; |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
; TRANSITION TO HBIOS IN RAM BANK |
|
|
; TRANSITION TO HBIOS IN RAM BANK |
|
|
@ -2091,7 +2103,7 @@ HB_Z280BUS1: |
|
|
CALL PRTSTRD |
|
|
CALL PRTSTRD |
|
|
.TEXT "KB ROM, $" |
|
|
.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 |
|
|
LD H,0 ; CALCULATE RAM SIZE |
|
|
ADD HL,HL |
|
|
ADD HL,HL |
|
|
ADD HL,HL ; X4 |
|
|
ADD HL,HL ; X4 |
|
|
@ -2103,6 +2115,18 @@ HB_Z280BUS1: |
|
|
CALL PRTSTRD |
|
|
CALL PRTSTRD |
|
|
.TEXT "KB RAM$" |
|
|
.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) |
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
CALL NEWLINE |
|
|
CALL NEWLINE |
|
|
PRTS("Z280: $") |
|
|
PRTS("Z280: $") |
|
|
@ -3568,8 +3592,9 @@ SYS_GETCPUINFO: |
|
|
; E: COUNT OF RAM BANKS |
|
|
; E: COUNT OF RAM BANKS |
|
|
; |
|
|
; |
|
|
SYS_GETMEMINFO: |
|
|
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 |
|
|
LD E,A |
|
|
XOR A |
|
|
XOR A |
|
|
RET |
|
|
RET |
|
|
|