VOGONS


EMM Mapping

Topic actions

First post, by caylan

User metadata
Rank Newbie
Rank
Newbie

My situation is tough to explain. It's not game related. It's an old business application that I've been hired to modernize.

I have a DOS application that supports multiple multiuser terminals. Here's the history from the vendor.

EMM originally was confined to 4 pages. The software used this window to swap in dataset buffers. At some point EMM permitted […]
Show full quote

EMM originally was confined to 4 pages. The software used this window to swap in dataset buffers.

At some point EMM permitted mapping of additional pages. By this
I don’t mean mapping more memory but mapping more address
space. The original 64k EMS window refers to address space.
2 Mb or 4Mb. refers to the amount of memory that might map
into it.

The software made use of the additional address space to support lots
more jobs with larger memory requirements. We would use an
additional set of pages (in this case 13-4=9) for mapping a job’s memory.

Since only one job would be running at a time this mapping
worked well and provided memory space for 9*16k=144k of
job memory size.

There were a few enhancements to EMS over the years that
broadened the memory windows through which EMM could be
viewed. The software made use of them. At our most “advanced”, we
used 4 16k pages of mappable memory for buffers. In addition
we made use of an additional window of memory of about
6 to 9 16k pages (my best recollection of the amount) into which
to map job/process memory.

In DOSEMU I can configure up to 12 frames of 16k each. However, I need 13. AHHH! Yes, you can laugh, but it's the gods to honest truth. I can either code DOSEMU support for non-contiguous EMS page frames or check with you folks to see if DOSBOX supports this.

Here is the current memory dump from DOSEMU to give you a better idea what I'm trying to do.

CONF:  Memory map dump:
0x00000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0x10000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0x20000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0x30000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0x40000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0x50000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0x60000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0x70000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0x80000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0x90000: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
0xA0000: vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
0xB0000: vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
0xC0000: VVVVVVVVVVVV....................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
0xD0000: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
0xE0000: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
0xF0000: EEEEEEEEEEEEEEEErrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

Key:
E: EMS page frame
V: VGAEMU Video BIOS
d: Base DOS memory (first 640K)
h: Direct-mapped hardware page frame
r: Dosemu reserved area
v: Video memory
x: Extended memory (HMA+XMS)
.: (unused)
CONF: End dump

Each full line of "E" represents 4 page frames. You can see that I can fit one more for a total of 12. However, I can't move/reconfigure "v, V, or r" to fit 13 frames. I tried shrinking "d" and inserting the 13 frames there, but then the software fails to start (not enough memory).

Any ideas to get this old beast running?

Yours very truly. - Caylan

Reply 1 of 2, by wd

User metadata
Rank DOSBox Author
Rank
DOSBox Author

A virtualizer with emm386 may be your best bet. You can try to rearrange some of the memory blocks of dosbox (dos allocations, bios rom space) but I don't know if that would make up for enough free continuous pages.

Reply 2 of 2, by LowSpec486

User metadata
Rank Newbie
Rank
Newbie

Why are you working with DOSemu to bootstrap that project?

Start simple, then add complexity. So get a real hardware DOS machine, and try there. Then, if it works, consider moving to a virtualized environment.