@@ -218,10 +218,14 @@ POST_TEST_KEY = 1 ; POST Key Test (PKEY)
218218;----------------------------------------------------------------------------;
219219; Advanced Options (may void your warranty)
220220;
221- MAX_RAM = 640 ; Max detectable low RAM (in KB)
221+ MAX_RAM_PC EQU 640 ; 0000-A000 (ought to be enough)
222+ MAX_RAM_MDA EQU 704 ; MDA include A000-B000
223+ MAX_RAM_CGA EQU 736 ; CGA include A000-B800
224+ MAX_RAM = MAX_RAM_PC ; Max detectable low RAM (in KB)
222225 ; 640 max using EGA/VGA
223- ; 704 max using MDA
224- ; 736 max using CGA
226+ ; 704 max using MDA (MAX_RAM_MDA)
227+ ; 736 max using CGA (MAX_RAM_CGA)
228+ MAX_RAM_AUTO = 0 ; Auto-detect MAX_RAM from video DIP switches
225229DRAM_REFRESH = 1 ; 1=Use standard DMA DRAM refresh
226230 ; 0=Disable refresh (use only with SRAM!)
227231RAM_PARITY = 1 ; Enable RAM parity checking
@@ -390,6 +394,7 @@ POST_TEST_FD = 0 ; disable Floppy Drive Seek Test
390394 ; disable Floppy Head Settle Delay
391395RAM_TEST_LONG = 0 ; disable long RAM test
392396TURBO_TYPE = TURBO_NONE ; disable Turbo features
397+ MAX_RAM_AUTO = 1 ; select max RAM from video setting
393398
394399 IF ARCH_SUB_TYPE EQ ARCH_MIST
395400;----------------------------------------------------------------------------;
@@ -3220,7 +3225,7 @@ SETTINGS_FE2010_1:
32203225
32213226 ELSE
32223227;----------------------------------------------------------------------------;
3223- ; Is a 5160 or standard clone build
3228+ ; Is a 5160 or standard PPI
32243229;
32253230SETTINGS_5160:
32263231 AND AL , NOT MASK PBSW ; set bit 3 = 0 for low switch select
@@ -3241,6 +3246,24 @@ SETTINGS_5160:
32413246 ENDIF
32423247 OR AL , CH ; combine RAM, FPU with drives and vid
32433248
3249+ IF MAX_RAM_AUTO EQ 1
3250+ ;----------------------------------------------------------------------------;
3251+ ; Set MAX_RAM from video DIP switches: CGA=736, MDA=704 else 640
3252+ ; 21 bytes
3253+ ;
3254+ PUSH AX ; save original equipment byte
3255+ MOV DX , MAX_RAM_PC ; default 640K
3256+ AND AL , MASK VIDM ; bits 4-5 video only
3257+ JZ MAX_RAM_AUTO_DONE ; done if EGA/VGA (off, off)
3258+ MOV DL , LOW MAX_RAM_MDA ; try MDA 704K
3259+ CMP AL , 11b SHL 4 ; is MDA (on, on)?
3260+ JE MAX_RAM_AUTO_DONE ; done if MDA
3261+ MOV DL , LOW MAX_RAM_CGA ; else CGA 736K
3262+ MAX_RAM_AUTO_DONE:
3263+ MOV MEM_SZ_PC , DX ; save to BDA
3264+ POP AX ; restore equipment byte
3265+ ENDIF
3266+
32443267 ENDIF ; not ARCH_TYPE EQ ARCH_EHB
32453268 ENDIF ; not ARCH_TYPE EQ ARCH_FE2010
32463269 ENDIF ; not ARCH_TYPE EQ ARCH_5150
@@ -4381,9 +4404,9 @@ DETECT_MEMORY PROC
43814404 MOV DS , AX
43824405
43834406;----------------------------------------------------------------------------;
4384- ; 5150: get MAX RAM from SW2
4407+ ; 5150 or MAX_RAM_AUTO : get MAX RAM from MEM_SZ_PC
43854408;
4386- IF ARCH_TYPE EQ ARCH_5150
4409+ IF ARCH_TYPE EQ ARCH_5150 OR MAX_RAM_AUTO EQ 1
43874410 MOV AX , MEM_SZ_PC ; SW2 RAM size in KB
43884411 MOV CL , 4 ; shift counter
43894412 SHR AX , CL ; Number of 16KB RAM blocks
0 commit comments