VOGONS


First post, by superfury

User metadata
Rank l33t++
Rank
l33t++

I have my emulator, x86EMU, set to 80186 emulation. It also emulates a 8042 PS/2 controller and port 0x92 CPU reset and A20 lines(Port 0x92 bits 0&1, 8042 output port bit 1 and commands 0xDD&0xDF are emulated).

Still, when i put DOS=HIGH,UMB in the config.sys (w/ MS-DOS 5.0), it tells me MS-DOS couldn't be loaded high.

It literally says: "HMA not available : Loading DOS low". I see no output to anything affecting the A20 line.

Anyone knows why? Can MS-DOS even be loaded high on a 80(1)86 CPU?

I'm trying to get enough RAM free to get Hocus Pocus running. It tells me it needs 580000 bytes of RAM. MS-DOS 5.0's mem command tells me:
655360 bytes total conventional memory
655360 bytes available to MS-DOS
593744 largest executable program size

When I load the EMS drivers (and/or mouse drivers), the size becomes too small to run the app according to mem, but it won't even run with above specs?

Anyone knows why it won't load?

Last edited by superfury on 2015-11-08, 14:13. Edited 2 times in total.

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 1 of 9, by SarahWalker

User metadata
Rank Member
Rank
Member

No, 80(1)86 only have a 20-bit address bus and therefore can't access anything above 1MB.

Reply 3 of 9, by SarahWalker

User metadata
Rank Member
Rank
Member

Don't think so, I just tried it on PCem and it just hangs. The on-disk manual claims a 386 as the minimum, but I think it works on a 286.

Reply 4 of 9, by vladstamate

User metadata
Rank Oldbie
Rank
Oldbie

There is a difference between DOS=HIGH and DOS=UMB. For UMB you only need 1Mb of memory (more than the 640 that the original IBM PC XT had) as it will load stuff on top 384Kb.That should work on a 8086.

HIMEM.SYS requires protected mode (and hence a 286+) to use memory above 1Mb and that will enable you to use DOS=HIGH (it does that by enabling A20 in 8042 chip and then on 286 it enters protected mode to access - copy -high memory and exits it after).

Regards,
Vlad.

YouTube channel: https://www.youtube.com/channel/UC7HbC_nq8t1S9l7qGYL0mTA
Collection: http://www.digiloguemuseum.com/index.html
Emulator: https://sites.google.com/site/capex86/
Raytracer: https://sites.google.com/site/opaqueraytracer/

Reply 5 of 9, by Scali

User metadata
Rank l33t
Rank
l33t

An 80186 is not a regular CPU, but more of a microcontroller/SoC, with integrated interrupt controller, timer and DMA controller.
These components however are not fully compatible with PC/XT/AT hardware, and as such no PC-compatible systems exist, based on the 80186 (there are some that come reasonably close, but they use a custom OEM version of MS-DOS, which abstracts away some of the hardware differences).
So trying to run MS-DOS and PC applications on an emulator with an '80186' CPU (but I assume not the other components), is a purely theoretical affair. Such a machine does not and can not exist.
The closest thing is probably a NEC V20, which supports the same extended instructionset as the 80186 (basically a 286 without protected mode), but is pin-compatible with an 8088, and can be used in a 100% compatible motherboard.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 6 of 9, by idspispopd

User metadata
Rank Oldbie
Rank
Oldbie
vladstamate wrote:

HIMEM.SYS requires protected mode (and hence a 286+) to use memory above 1Mb and that will enable you to use DOS=HIGH (it does that by enabling A20 in 8042 chip and then on 286 it enters protected mode to access - copy -high memory and exits it after).

You are right about HIMEM.SYS and protected mode in general.
But DOS=HIGH only refers to the first 64kB after 1MB. It uses a trick by setting the segment to FFFFh. On an 8088 FFFF:0010 is the same physical address as 0000:0000 since the carry is dropped. (The carry would set A20, but the CPU only has A0-A19.)
Now when you have a CPU with more address lines (286+) and you open the A20 gate, than the carry is honored and you can access those precious 65520 bytes in real mode.

(SarahWalker's statement is correct, I just expanded on this.)

Reply 7 of 9, by vladstamate

User metadata
Rank Oldbie
Rank
Oldbie

That is interesting actually. It basically gives you one extra segment worth in real mode if you have A20 capable processor because of the carry bit. Very neat!

YouTube channel: https://www.youtube.com/channel/UC7HbC_nq8t1S9l7qGYL0mTA
Collection: http://www.digiloguemuseum.com/index.html
Emulator: https://sites.google.com/site/capex86/
Raytracer: https://sites.google.com/site/opaqueraytracer/

Reply 8 of 9, by superfury

User metadata
Rank l33t++
Rank
l33t++

Well, my emulation is currently a 8086 or 80186 with all other hardware from the IBM PC, except for having two DMA and Interrupt controllers(like a AT system). Essentially it's an AT system with a 8086, 8088, 80186 or 80188 processor installed.

And Hocus Pocus seems to run without problems when I enable the 80186 CPU (the rest of the IBM PC hardware is always emulated). So it's essentially a IBM AT with a CPU, which is without 286+ features and instructions(only emulated with 286+ or 386+ CPUs, 286+ adds all protection mechanisms. 286+ instructions, multitasking and protected mode interrupts isn't implemented yet. Basic protected mode and paging is already implemented) and only 80186 instructions instead of 80286 instructions.

Currently, when selecting the 80186 CPU to emulate during emulator startup and EMS drivers loaded, Hocus Pocus runs with Adlib sound(when enabled) witout any problems.

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 9 of 9, by Azarien

User metadata
Rank Oldbie
Rank
Oldbie

So it's essentially a IBM AT with a CPU, which is without 286+ features and instructions(only emulated with 286+ or 386+ CPUs, 286+ adds all protection mechanisms. 286+ instructions, multitasking and protected mode interrupts isn't implemented yet. Basic protected mode and paging is already implemented) and only 80186 instructions instead of 80286 instructions.

That's a Frankenstein's machine! You could add 32-bit registers (EAX etc) to that.
And SSE2 math 😀