VOGONS


First post, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Hello eyerone,
I wonder if there's currently an x86 emulator around that..

- emulates an 8086 or V30 or 80186 or 80286 CPU
- an corresponding x87 FPU
- emulates glass terminal, CGA or Hercules or Hercules InColor
- emulates an EMS board, EMS-capable chipset or synthetic EMS hardware
- does not limit base memory to 640KiB, ie. lets the user select
the total amount of contiguous memory up to ~1MiB

The latter is mainly an artificial limit caused by the EGA/VGA framebuffer technology of the day.
If only Hercules is installed, 704KiB can be available. If only CGA is installed, 736KiB can be available (just checked).
If no video system is installed (terminaly via CTTY only). ~900KiB can be available.
https://en.wikipedia.org/wiki/DOS_memory_management

Anyway, I'm just curious. It would help me making experiments in
which I could find out how to optimize by one and only PC/XT clone..

Any comments and suggestions heartly welcome.

Best regards,
Jo22

Edit: Typos fixed (CGA and HGC switched).
Edit: Link moved to correct position.

Last edited by Jo22 on 2021-01-12, 20:48. Edited 2 times in total.

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 1 of 32, by superfury

User metadata
Rank l33t++
Rank
l33t++

UniPCemu supports all CPUs but V30(actually a 80186, even though the settings say V30, it's actually a 8086 with 80186 instructions and memory logic added on top(but without the V20/V30 instruction set extensions to the 186)), although no FPU. It supports CGA and EMS board. You can configure memory until 640K(640K-1M memory being mapped past 1MB).

I do wonder if any memory actually can exist in the 640K-1M window, due to bus conflicts with the adapter? Let's say there's memory in that location(e.g. A0000-BFFFF) and the VGA video aperture at A0000-BFFFF is enabled. Will the VGA win in that case? Or will the address/data lines get burned(or malfunction in any other way)? Afaik people always warn against such conflicts?

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

Reply 3 of 32, by Zup

User metadata
Rank Oldbie
Rank
Oldbie

I remember that some Philips and Schneider PC/XT clones allowed 768 Kb, but I don't remember any real computer that go beyond that. Also, I don't know if that 768Kb were contiguous or base+EMS memory. Keep on mind that you need some memory for disk and system BIOS (usually located at C000 and F000).

IRL, I don't think that having more than 640Kb would be that useful (the worst memory hoggers I've found needs about 600Kb, but they were all 386+ games), I guess that having 640Kb + some EMS would be enough.

I have traveled across the universe and through the years to find Her.
Sometimes going all the way is just a start...

I'm selling some stuff!

Reply 4 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Thank you for the replies so far! 😀

I do wonder if any memory actually can exist in the 640K-1M window

Well, um, I think so. In my real PC/XT compatible I was simply using an ordinary UMB card by c't magazine.
It's no fancy retro piece, just a simple memory board from the old PC/XT days.
In combination with a little DOS utility the BIOS saw 704KiB no problem.

Edit: I recall asking similar stuff in PCem thread years ago. Silly me! 😅
See Re: PCEm. Another PC emulator.
The original IBM 5150 can also be adapted to support UMBs out-of-box,
according to a document in an archive called "896K.ZIP" - dated 1989.
The utility package is called "704k.zip" ("Increase RAM from 640K to 704K on some PCs")
See http://www.lanet.lv/simtel.net/msdos/memutil.html

Attachments

  • ct1.jpg
    Filename
    ct1.jpg
    File size
    273.16 KiB
    Views
    4532 views
    File license
    Fair use/fair dealing exception
  • ct2.jpg
    Filename
    ct2.jpg
    File size
    299.51 KiB
    Views
    4532 views
    File license
    Fair use/fair dealing exception

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 5 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Hi again! 😀
Just found another UMB card.
The Lo-tech 1MB RAM card does about the same as my ancient memory board.
https://www.lo-tech.co.uk/wiki/Lo-tech_1MB_RAM_Board

729px-Lo-tech-1MB-RAM-Board-assembled-r02.jpg
Filename
729px-Lo-tech-1MB-RAM-Board-assembled-r02.jpg
File size
83.89 KiB
Views
4504 views
File license
Fair use/fair dealing exception

Picture from: https://www.lo-tech.co.uk/wiki/File:Lo-tech-1 … 2.jpg#filelinks

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 6 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Found another piece of silicon/software. The PC-Speed 8086/NEC V30 board (Atari ST)
supports 704KiB by default and emulates both Olivetti/AT&T and Tandy 1000 compatible CGA graphics.
(In fact, it supports another one the designers invented themselves. A BGI driver for it was planned.)

" PC-SPEED emulates the Olivetti 640*400 pixel graphic card.
Many PC-programs (GEM,MS-WINDOWS etc.) support this."

"In the CGA mode you can display the TANDY 1000 resolution !!!
Games often support this resolution.
The TANDY 1000 can display 320 x 200 pixel in 16 Color."

Source: http://www.atarimania.com/utility-atari-st-pc … peed_23201.html

pc-speed_704.jpg
Filename
pc-speed_704.jpg
File size
17.27 KiB
Views
4496 views
File license
Fair use/fair dealing exception

Source: https://youtu.be/7Pvg1KQ6CKY

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 7 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Official OS/2 by mighty old Big Blue itself also supports 736 KiB of conventional memory out-of-box for DOS programs if CGA graphics are selected,
indicatting that the 640KiB barrier wasn't seen as the ultimate limit for conventional memory by its own creator(s). 😀

Attachments

  • os2_cga_736kib_ram.jpg
    Filename
    os2_cga_736kib_ram.jpg
    File size
    87.71 KiB
    Views
    4489 views
    File license
    Fair use/fair dealing exception
  • os2_cga_736kib_ram2.jpg
    Filename
    os2_cga_736kib_ram2.jpg
    File size
    84.75 KiB
    Views
    4489 views
    File license
    Fair use/fair dealing exception

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 8 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Update. On my journey to other systems with 700+ KiB base memory I found:

- KCS Power Board (Amiga) offers 704KiB in MGA/CGA mode.
Source: http://amiga.resource.cx/expde/powerpcplus

- AT-Speed x86 board (Atari ST) offers 704KiB in CGA/Olivetti mode.
Source: TOS Magazine 1990-08, page 20.

- ATonce (Atari ST) offers 704KiB in CGA/Olivetti mode.
Source: TOS Magazine 1990-08, page 20.

- PC-Ditto (Atari ST) offers 703KiB in CGA mode.
PC-Ditto exists as a software-only and hardware/software emulator.

pc-ditto.jpg
Filename
pc-ditto.jpg
File size
21.7 KiB
Views
4479 views
File license
Fair use/fair dealing exception

The picture shows the software emulator.
Source: https://www.youtube.com/watch?v=ytM-uznCZc4

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 9 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Update.

- Power PC Board (Amiga) offers 704KiB in MGA/CGA mode.
Source: http://amiga.resource.cx/expde/powerpc

- Power PC Board Plus (Amiga) offers 704KiB in MGA/CGA mode.
Source: http://amiga.resource.cx/expde/powerpcplus

Edit: The BBC Master 512 upgrade module supported 704 KiB in CGA, too.
"Such a machine has memory between 0 and AFFFFh available for programs – 704kb,
which is more than any normal memory PC. In these the memory usable by DOS stops at 9FFFFh.)"

Acorn_ADC08_80186CoProC.jpg
Filename
Acorn_ADC08_80186CoProC.jpg
File size
70.38 KiB
Views
4471 views
File license
Fair use/fair dealing exception

Source: BBC Master 512 Operational Manual, "Memory Maps and Screen Operation"
http://www.cowsarenotpurple.co.uk/bbccomputer … een.html#memmap

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 10 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Update. PCTask on Amiga also offered 704 KB in CGA mode. 😀

"En general, parece que mientras más memoria se pueda asignar al PCTask más estable
y rápido es, siendo recomendable configurarlo con 704kb de memoria convencional y un mínimo de 3 ó 4 mb
de memoria extendida para los programas que la requieran."

In English: "In general, it seems that the more memory can be allocated to the PCTask, the more stable
and fast it is, being recommended to configure it with 704kb of conventional memory and a minimum of 3 or 4 mb
of extended memory for the programs that require it."

Source: https://web.archive.org/web/20080612045000/ht … /01/conexpc.php

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 11 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Update. The Sharp PC 7100 portable PC offered 704KiB, too.
Source: http://museums.hr/en/collection/object/259471 … o-sharp-pc-7100

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 12 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Update. Found an interesting piece of text - "Breaching into the upper memory area".

"One technique used on early IBM XT computers was to install additional RAM into the video memory address range and push the limit up to the start
of the Monochrome Display Adapter (MDA). Sometimes, a custom address decoder was required for this to work. This moved the barrier to 704 KB
(with MDA/HGC) or 736 KB (with CGA).[6][7] Memory managers on 386-based systems, such as QEMM or MEMMAX (+V) in DR-DOS, could achieve the same
effect, adding conventional memory at 640 KB and moving the barrier to 704 KB (up to segment 0xB000,[a] the start of MDA/HGC) or 736 KB (up to
segment 0xB800, the start of the CGA).[7] Only CGA could be used in this situation, because Enhanced Graphics Adapter (EGA) video memory was
immediately adjacent to the conventional memory area below the 640 KB line; the same memory area could not be used both for the frame buffer
of the video card and for transient programs.

AllCard, an add-on memory management unit for XT-class computers, allowed normal memory to be mapped into the 0xA0000-0xEFFFF address range,
giving up to 952 KB for DOS programs. Programs such as Lotus 1-2-3, which accessed video memory directly, needed to be patched to handle this
memory layout. Therefore, the 640 KB barrier was removed at the cost of hardware compatibility.

It was also possible to use console redirection (either by specifying an alternative console device like "AUX:" when initially invoking COMMAND.COM
or by using CTTY later on) to direct output to and receive input from a dumb terminal or another computer running a terminal emulator.
Assuming the System BIOS still permitted the machine to boot (which is often the case at least with BIOSes for embedded PCs), the video card could
then be removed completely, and the system could provide a total of 960 KB of continuous DOS memory for programs to load.

Similar usage was possible on many DOS- but not IBM PC compatible computers with a non-fragmented memory layout, for example the
Victor 9000/Sirius 1 which supported up to 896 KB continuous DOS memory to be used under its custom version of MS-DOS. "

Source: https://www.wikizero.com/en/Conventional_memo … per_memory_area

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 13 of 32, by Caluser2000

User metadata
Rank l33t
Rank
l33t

MonoTech has a memory card that has a util to load stuff to UMBs https://monotech.fwscart.com/XT-FullRAM_-_Fil … 4_19914752.aspx

There's a glitch in the matrix.
A founding member of the 286 appreciation society.
Apparently 32-bit is dead and nobody likes P4s.
Of course, as always, I'm open to correction...😉

Reply 14 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++
Caluser2000 wrote:

MonoTech has a memory card that has a util to load stuff to UMBs https://monotech.fwscart.com/XT-FullRAM_-_Fil … 4_19914752.aspx

Thank you very much for the tip, man! 😁

- Interestingly, the maker of the card seems to be aware of the possibility of memory above 640 KiB, too!
I haven't expected this, since the Lo-tech card's site only mentions UMBs, as far as I can tell.

In one of Monotech's pictures, MEM reports:

Total under 1MB : 731 KB
Largest executable program size: 630K
Largest free upper memory block: 69K

mem_umb_monotech.jpg
Filename
mem_umb_monotech.jpg
File size
41.03 KiB
Views
4373 views
File license
Fair use/fair dealing exception

Source: https://d1f7geppf3ca7.cloudfront.net/origin/5 … 0602_173407.jpg

Edit: I suppose I've got to revise some statements of this posting, I apologize! 😅
Seems the maker did accomplish to load parts of the DOS kernal in upper memory, reducing the conventional memory usage to 10 KiB.
Anyway, still impressive. Having UMBs is surely helpful, even on an XT class PC, I think. Having this emulated somehow/somewhen would be neat, too.

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 16 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Hi Freddy, thank you very much for the tip! ^_^ I'll see what I can do with it.
Maybe patching an existing emulator or something along these lines.
The program that I used previously was "704K", it perhaps can be patched for 736KB, too !?

Attachments

  • Filename
    704k.zip
    File size
    1.21 KiB
    Downloads
    113 downloads
    File comment
    704K by Alpha Computer Service

    "This program is intended to be used with an IBM-PC,XT, or AT with 704K
    of memory installed in the system. If you are running with a PC, be
    sure that the memory switches are set for 640K."
    File license
    Fair use/fair dealing exception

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 17 of 32, by FreddyV

User metadata
Rank Oldbie
Rank
Oldbie

Hi,

I did it some months ago but I lost the source code, I started a new one to do It.

Here you have the MCB Structure:
http://helppc.netcore2k.net/table/mcb

Add the amount of Memory you want to the last MCB (Before the CGA Video memory) and DOS Will have more than 640Kb.
The only problem is that the SW are generally not made to use all this memory.. This trick work of course starting from DOS 3, as there is no DOS Memory int in DOS 1 and 2.

Reply 18 of 32, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Thank you very much for the information, Freddy! 😀

PS: Merry Christmas, too.

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 19 of 32, by retardware

User metadata
Rank Oldbie
Rank
Oldbie

There are actually two ways of making use of memory above A000.

Either add that pool to the normal DOS MCB chain, and have a fragmented memory pool.
This works well only with software that does not make the assumption that reported total free memory is contiguous.
Most software does make this assumption, and tries to get that memory in one piece. This of course fails and the program usually terminates with a message "Memory allocation error" or the like.

Or add the pool to the UMB memory control block chains. These can then be used instead of the normal/conventional memory pool by assigning such an UMB block to a program by starting it via LH.