Skip to content

Commit 655bc33

Browse files
committed
Option to auto-detect MAX_RAM based on video DIP switch
1 parent 812414d commit 655bc33

File tree

1 file changed

+29
-6
lines changed

1 file changed

+29
-6
lines changed

src/GLABIOS.ASM

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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
225229
DRAM_REFRESH = 1 ; 1=Use standard DMA DRAM refresh
226230
; 0=Disable refresh (use only with SRAM!)
227231
RAM_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
391395
RAM_TEST_LONG = 0 ; disable long RAM test
392396
TURBO_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
;
32253230
SETTINGS_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

Comments
 (0)