diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 228f7007..f8cecf38 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -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 diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 2bde16ac..2828a57f 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -507,7 +507,7 @@ BID_ROMN .EQU (BID_ROM0 + ((ROMSIZE / 32) - 1)) BID_RAMN .EQU (BID_RAM0 + ((RAMSIZE / 32) - 1)) ; BID_RAMD0 .EQU BID_RAM0 ; FIRST RAM DRIVE BANK ^ RAM -BID_RAMDN .EQU BID_RAMN - 8 ; LAST RAM DRIVE BANK | DRIVE +BID_RAMDN .EQU BID_RAMN - TOT_RAM_RB ; LAST RAM DRIVE BANK | DRIVE ; ; OS BUFFERS CP/M3? -+ THESE ; ; OS BUFFERS CP/M3? | MAKE ; ; OS BUFFERS CP/M3? | UP diff --git a/Source/HDIAG/util.asm b/Source/HDIAG/util.asm index 33e47560..b78525d2 100644 --- a/Source/HDIAG/util.asm +++ b/Source/HDIAG/util.asm @@ -14,7 +14,7 @@ prtstr: call cout ; display character jr prtstr ; loop till done ; -; Print a string from a lookup table pointed to by HL, entry A +; Print a string from a lookup table pointed to by HL, index A ; with a prefix string at DE. HL, DE, and A are trashed. ; prtstrtbl: diff --git a/Source/ver.inc b/Source/ver.inc index 59618853..4758c3aa 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.118" +#DEFINE BIOSVER "3.1.1-pre.119" diff --git a/Source/ver.lib b/Source/ver.lib index bc0fe77a..43784d5d 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.118" + db "3.1.1-pre.119" endm