From ae0b157a7b1f43b2f17ca3bb75a4b1c9bf8988eb Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Sun, 13 Apr 2003 18:21:49 +0000 Subject: [PATCH] Some changes to a20 line handling and some cleaning up. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@905 --- src/hardware/memory.cpp | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/hardware/memory.cpp b/src/hardware/memory.cpp index 25c65f45..8d0a3beb 100644 --- a/src/hardware/memory.cpp +++ b/src/hardware/memory.cpp @@ -274,24 +274,33 @@ static void AllocateMem_WriteHandler(PhysPt pt,Bit8u val) // A20 Line Handlers static Bit8u controlport_data = 0; +static bool a20_enabled; + +bool MEM_A20_Enabled(void) { + return a20_enabled; +} + +void MEM_A20_Enable(bool enable) { + if (a20_enabled==enable) return; + a20_enabled=enable; + if (enable) { + MEM_SetupMapping(PAGE_COUNT(1024*1024),PAGE_COUNT(64*1024),((Bit8u*)memory)+1024*1024); + } else { + MEM_SetupMapping(PAGE_COUNT(1024*1024),PAGE_COUNT(64*1024),memory); + } + LOG(LOG_MISC,"A20 Line is %s",enable ? "Enabled" : "Disabled"); +} static void write_p92(Bit32u port,Bit8u val) { // Bit 0 = system reset (switch back to real mode) if (val&1) E_Exit("XMS: CPU reset via port 0x92 not supported."); - if ((val&2) & !(controlport_data&2)) { - // ensable HMA - MEM_SetupMapping(PAGE_COUNT(1024*1024),PAGE_COUNT(64*1024),((Bit8u*)memory)+1024*1024); - }; - if (!(val&2) && (controlport_data&2)) { - // disable HMA - MEM_SetupMapping(PAGE_COUNT(1024*1024),PAGE_COUNT(64*1024),memory); - }; - controlport_data = val; -}; + controlport_data = val & ~2; + MEM_A20_Enable((val & 2)>0); +} static Bit8u read_p92(Bit32u port) { - return controlport_data; -}; + return controlport_data | a20_enabled ? 0x02 : 0; +} static void MEM_ShutDown(Section * sec) { for (Bitu i=0; i