diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index da00ccd0..03a58402 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -514,15 +514,21 @@ 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 - -#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 - +; + 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 +; +;#IF (RAMSIZE == 256) +; XOR %00000100 ; TOP 32K IS ALWAYS IN FIRST CHIP ; 256K = 8 banks = 00001000 +;#ENDIF +; +;#IF (RAMSIZE == 1024) +; XOR %00010000 ; TOP 32K IS ALWAYS IN FIRST CHIP ; 1024K = 32 banks = 00100000 +;#ENDIF +; OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR JR HBX_RAMX HBX_ROM: @@ -2041,7 +2047,15 @@ HB_Z280BUS1: CALL PRTDEC CALL PRTSTRD .TEXT "KB ROM, $" - LD HL,RAMSIZE +; + LD HL,(HCB + HCB_RAMBANKS) ; GET NUMBER OF BANKS IN L + LD H,0 ; CALCULATE RAM SIZE + ADD HL,HL + ADD HL,HL ; X4 + ADD HL,HL ; X8 + ADD HL,HL ; X16 + ADD HL,HL ; X32 +; CALL PRTDEC CALL PRTSTRD .TEXT "KB RAM$" @@ -2074,7 +2088,7 @@ HB_Z280BUS1: ; ; ROM CHECKSUM VERIFICATION ; EACH OF THE FIRST 4 ROM BANKS HAS A CHECKSUM INJECTED SUCH THAT -; A COMPUTED CHECKSUM ACROSS THE ENTIRE BANK SHOLD ALWAYS BE ZERO +; A COMPUTED CHECKSUM ACROSS THE ENTIRE BANK SHOULD ALWAYS BE ZERO ; HB_ROMCK: CALL NEWLINE @@ -3512,7 +3526,8 @@ SYS_GETCPUINFO: ; SYS_GETMEMINFO: LD D,ROMSIZE / 32 - LD E,RAMSIZE / 32 + LD A,(HCB + HCB_RAMBANKS) + LD E,A XOR A RET ; diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 10da7303..dfc4f000 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -64,7 +64,7 @@ MD_INIT: #IF (MDFFENABLE) CALL MD_FINIT ; PROBE FLASH CAPABILITY #ENDIF - +; CALL NEWLINE ; FORMATTING PRTS("MD: UNITS=$") LD A,MD_DEVCNT @@ -72,14 +72,32 @@ MD_INIT: ; #IF (MDROM) PRTS(" ROMDISK=$") - LD HL,ROMSIZE - 128 +; LD HL,ROMSIZE - 128 + LD A,(HCB + HCB_ROMBANKS) ; GET NUMBER OF BANKS + SUB (TOT_ROM_RB) + LD L,A + LD H,0 ; CALCULATE RAM SIZE + ADD HL,HL ; X2 + ADD HL,HL ; X4 + ADD HL,HL ; X8 + ADD HL,HL ; X16 + ADD HL,HL ; X32 CALL PRTDEC PRTS("KB$") #ENDIF ; #IF (MDRAM) PRTS(" RAMDISK=$") - LD HL,RAMSIZE - 256 +; LD HL,RAMSIZE - 256 + LD A,(HCB + HCB_RAMBANKS) ; GET NUMBER OF BANKS + SUB (TOT_RAM_RB) ; LESS RESERVED BANKS + LD L,A + LD H,0 ; CALCULATE RAM SIZE + ADD HL,HL ; X2 + ADD HL,HL ; X4 + ADD HL,HL ; X8 + ADD HL,HL ; X16 + ADD HL,HL ; X32 CALL PRTDEC PRTS("KB$") #ENDIF @@ -170,11 +188,11 @@ MD_CAP: ; ASSUMES THAT UNIT 0 IS RAM, UNIT 1 IS ROM RET MD_CAP0: LD A,(HCB + HCB_RAMBANKS) ; POINT TO RAM BANK COUNT - LD B,4 ; SET # RESERVED RAM BANKS + LD B,TOT_RAM_RB ; SET # RESERVED RAM BANKS JR MD_CAP2 MD_CAP1: LD A,(HCB + HCB_ROMBANKS) ; POINT TO ROM BANK COUNT - LD B,8 ; SET # RESERVED ROM BANKS + LD B,TOT_ROM_RB ; SET # RESERVED ROM BANKS MD_CAP2: SUB B ; SUBTRACT OUT RESERVED BANKS LD H,A ; H := # BANKS @@ -756,7 +774,8 @@ MD_TGTDEV .EQU 0B7BFH ; TARGET CHIP FOR R/W FILESYSTEM 39SF040 ;====================================================================== ; MD_FINIT: - LD A,+(ROMSIZE/512) ; DISLAY NUMBER + CALL MD_CALCU ; DISPLAY +; #IF (MD_FVBS==1) CALL NEWLINE ; OF UNITS PRTS("MD: FLASH=$") @@ -773,7 +792,8 @@ MD_PROBE: PUSH BC #IF (MD_FVBS==1) CALL PC_SPACE - LD A,+(ROMSIZE/512)+1 + CALL MD_CALCU + INC A SUB B ; PRINT CALL PRTDECB ; DEVICE LD A,'=' ; NUMBER @@ -818,6 +838,17 @@ MD_PR1: CALL WRITESTR XOR A ; INIT SUCCEEDED RET ; +; CALCULATE NUMBER OF 512KB ROMS FROM NUMBER OF ROM BANKS +; +MD_CALCU: +; LD A,+(ROMSIZE/512) ; DISPLAY NUMBER + LD A,(HCB + HCB_ROMBANKS) ; GET NUMBER OF BANKS + SRL A ; X2 CALCULATE + SRL A ; X4 NUMBER OF 512KB + SRL A ; X8 CHIPS THAT IS + SRL A + RET +; ;====================================================================== ; LOOKUP AND DISPLAY CHIP ; @@ -847,7 +878,7 @@ MD_NXT1:LD A,(HL) ; INC HL INC HL - JR FF_NXT2 ; MATCH SO EXIT + JR MD_NXT2 ; MATCH SO EXIT ; MD_NXT0:PUSH BC ; WE DIDN'T MATCH SO POINT LD BC,MD_T_SZ ; TO THE NEXT TABLE ENTRY @@ -861,7 +892,7 @@ MD_NXT0:PUSH BC ; WE DIDN'T MATCH SO POINT ; LD HL,MD_FFMSGUNK ; WE REACHED THE END WITHOUT A MATCH ; -FF_NXT2: +MD_NXT2: #IF (MD_FVBS==1) CALL PRTSTR ; AFTER SEARCH DISPLAY THE RESULT #ENDIF diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 1585f4e8..8e56796e 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -488,14 +488,26 @@ SYSTIM .SET TM_Z280 ; ; MEMORY BANK CONFIGURATION ; +; PLT_RAM_R HOW MUCH RAM NEEDS TO BE RESERVED FOR SPECIFIC PLATFORMS +; WBW_RAM_R HOW MUCH RAM NEEDS TO BE RESERVED FOR ROMWBW +; PLT_ROM_R HOW MUCH ROM NEEDS TO BE RESERVED FOR SPECIFIC PLATFORMS +; WBW_ROM_R HOW MUCH ROM NEEDS TO BE RESERVED FOR ROMWBW +; +PLT_RAM_R .EQU 0 ; 0K +PLT_ROM_R .EQU 0 ; 0K +WBW_ROM_R .EQU 128 ; 128K ; TOTAL RESERVED ROM +WBW_RAM_R .EQU 256 ; 256K ; TOTAL RESERVED RAM +TOT_ROM_RB .EQU (PLT_ROM_R + WBW_ROM_R)/32 ; TOTAL ROM BANKS RESERVED +TOT_RAM_RB .EQU (PLT_RAM_R + WBW_RAM_R)/32 ; TOTAL RAM BANKS RESERVED +; #IF (BIOS == BIOS_UNA) -BID_ROM0 .EQU $0000 + (ROM_RESERVE / 32) -BID_RAM0 .EQU $8000 + (RAM_RESERVE / 32) +BID_ROM0 .EQU $0000 + (PLT_ROM_R / 32) +BID_RAM0 .EQU $8000 + (PLT_RAM_R / 32) #ENDIF ; #IF (BIOS == BIOS_WBW) -BID_ROM0 .EQU $00 + (ROM_RESERVE / 32) -BID_RAM0 .EQU $80 + (RAM_RESERVE / 32) +BID_ROM0 .EQU $00 + (PLT_ROM_R / 32) +BID_RAM0 .EQU $80 + (PLT_RAM_R / 32) #ENDIF BID_ROMN .EQU (BID_ROM0 + ((ROMSIZE / 32) - 1))