After upgrading from VirtualBox 2.1 to VirtualBox2.2 on Ubuntu 8.10, I have not been able to get MSDOS to load ems pages in high memory. This chews up 64k of conventional memory. After rolling back to 2.1, memory usage returned to normal.
Anyone else with similar issue?
Vbox 2.2 - MSDOS EMS only loads in Conventional Memory
-
BeniD82
- Posts: 2
- Joined: 25. Apr 2009, 06:10
- Primary OS: MS Windows Vista
- VBox Version: OSE other
- Guest OSses: DOS, Windows 3.11 WfW, Windows 95, Windows 98, Windows XP Professional, Debian
Re: Vbox 2.2 - MSDOS EMS only loads in Conventional Memory
The 2.2 release of VirtualBox changed something which affected the way memory is seen by DOS. Rather than displaying HMA/UMB as available (black blocks), it will be displayed as RAM (gray blocks). For EMS to work, 64k of memory need to be set aside for an EMS page frame. Since no HMA/UMB memory appear as available, the page frame cannot be created. The good news is though that you can get EMS to work by manually adding UMB memory adress ranges to the DEVICE=C:\DOS\EMM386.EXE string.
First Example: This is how DOS sees the memory without manually including memory ranges (note that everything appears as RAM rather than available). Furthermore, a 4KB ROM is also visible (this is the Intel PXE Network Boot ROM).


EMM386 Configuration 1: EMM386 is not complaining about the Intel PXE Boot ROM being within the page frame and everything appears to be working correctly. The page frame is set to E000. This configuration will create a substantial amount of consecutive UMB.
DEVICE=C:\DOS\EMM386.EXE I=B000-B7FF I=C900-EFFF FRAME=E000

EMM386 Configuration 2: This is an alternate configuration excluding the memory range which is occupied by the Intel PXE Boot ROM. This required to page frame to be moved a few segments lower, to CC00.
DEVICE=C:\DOS\EMM386.EXE X=E200 I=B000-B7FF I=C900-E100 I=E300-EFFF FRAME=CC00

I haven't noticed any issues regarding the page frame overlapping with the Intel PXE Network Boot ROM, therefore I would suggest Configuration 1 in order to get the largest block of consecutive UMB possible. In case you do experience difficulties, try Configuration 2. You can also set EMM386 to not use an EMS page frame at all by setting the switch FRAME=NONE. Be aware that some applications may not run properly without a fixed page frame. I would also suggest to use the /L:X switch when loading drivers into the respective memory blocks.
/L:1 refers to the memory block below the video bios which is occupying C000-C800
/L:2 refers to the memory block above the video bios (large one)
(if you're using Configuration 2 /L:3 refers to the block past the Intel PXE Network Boot ROM beginning at E300)
I would load small drivers such as the mouse driver and Windows File System helper driver into the smaller first block, whereas larger drivers such as CD-ROM, MSCDEX.EXE, and audio into the larger second block.
Examples:
AUTOEXEC.BAT: LH /L:1 C:\DOS\CTMOUSE.EXE
CONFIG.SYS: DEVICEHIGH /L:2 =C:\DRIVERS\OAKCDROM.SYS /D:VBOX001
If the memory adresses confuse you, check out this site, it will make it much easier to understand http://www.tburke.net/info/misc/dosmemory.htm Hope this helps!
BeniD82
First Example: This is how DOS sees the memory without manually including memory ranges (note that everything appears as RAM rather than available). Furthermore, a 4KB ROM is also visible (this is the Intel PXE Network Boot ROM).


EMM386 Configuration 1: EMM386 is not complaining about the Intel PXE Boot ROM being within the page frame and everything appears to be working correctly. The page frame is set to E000. This configuration will create a substantial amount of consecutive UMB.
DEVICE=C:\DOS\EMM386.EXE I=B000-B7FF I=C900-EFFF FRAME=E000

EMM386 Configuration 2: This is an alternate configuration excluding the memory range which is occupied by the Intel PXE Boot ROM. This required to page frame to be moved a few segments lower, to CC00.
DEVICE=C:\DOS\EMM386.EXE X=E200 I=B000-B7FF I=C900-E100 I=E300-EFFF FRAME=CC00

I haven't noticed any issues regarding the page frame overlapping with the Intel PXE Network Boot ROM, therefore I would suggest Configuration 1 in order to get the largest block of consecutive UMB possible. In case you do experience difficulties, try Configuration 2. You can also set EMM386 to not use an EMS page frame at all by setting the switch FRAME=NONE. Be aware that some applications may not run properly without a fixed page frame. I would also suggest to use the /L:X switch when loading drivers into the respective memory blocks.
/L:1 refers to the memory block below the video bios which is occupying C000-C800
/L:2 refers to the memory block above the video bios (large one)
(if you're using Configuration 2 /L:3 refers to the block past the Intel PXE Network Boot ROM beginning at E300)
I would load small drivers such as the mouse driver and Windows File System helper driver into the smaller first block, whereas larger drivers such as CD-ROM, MSCDEX.EXE, and audio into the larger second block.
Examples:
AUTOEXEC.BAT: LH /L:1 C:\DOS\CTMOUSE.EXE
CONFIG.SYS: DEVICEHIGH /L:2 =C:\DRIVERS\OAKCDROM.SYS /D:VBOX001
If the memory adresses confuse you, check out this site, it will make it much easier to understand http://www.tburke.net/info/misc/dosmemory.htm Hope this helps!
BeniD82