diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index f45890aa..228f7007 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -515,18 +515,17 @@ HBX_ROM: JP P,HBX_ROM ; BIT 7 INDICATES RAM OUT (MPCL_ROM),A ; ENSURE ROM PAGE OUT OF MEMORY BEFORE SWITCH ; - PUSH HL ; FORCE TOP 32K - LD HL,(HCB + HCB_RAMBANKS) ; TO BE IN FIRST CHIP - SRL L - XOR L ; MAYBE PRECALCULATE THIS - POP HL ; AT INITIALIZATION + +HBX_MMMSK .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 ; 256K = 8 banks = 00001000 +; XOR %00000100 ; TOP 32K IS ALWAYS IN FIRST CHIP ;#ENDIF ; ;#IF (RAMSIZE == 1024) -; XOR %00010000 ; TOP 32K IS ALWAYS IN FIRST CHIP ; 1024K = 32 banks = 00100000 +; XOR %00010000 ; TOP 32K IS ALWAYS IN FIRST CHIP ;#ENDIF ; OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR @@ -534,7 +533,7 @@ HBX_ROM: HBX_ROM: OUT (MPCL_RAM),A ; ENSURE RAM PAGE OUT OF MEMORY BEFORE SWITCH OUT (MPCL_ROM),A ; SET ROM PAGE SELECTOR - +; HBX_RAMX: ; #IF (INTMODE == 1) @@ -1315,6 +1314,18 @@ Z280_INITZ: LD BC,HBX_SIZ LDIR ; +; RUNTIME MEMORY SIZE ADJUSTMENT +; +#IF (MEMMGR == MM_MBC) + LD HL,HCB + HCB_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) + RRA ; 256K = %00000100, 1024K = %00010000 +MB128512: + LD (HBX_MMMSK),A +#ENDIF +; ; IF APPBOOT, RESTORE CURRENT BANK ID ; #IFDEF APPBOOT