PCEmu – a software-only PC emulator. It emulates an 8086-based machine with VGA text graphics, EMS memory, host file system access, and `hardware’ debugging. It runs DOS and most programs correctly.
The emulator runs at about 8-10MHz 80286 speed on a Sun SparcStation 10/40 (without the -mviking flag) and at about 6MHz 8088 speed on a 33MHz 80486 box running Linux.
By default, the emulator requires the disk image called ‘DriveA’ to be in the current directory or else it will complain. If you don’t like this, then you can change the file the emulator boots from by altering your .pcemurc file (see below) or by changing the default at compile time (by modifying the Makefile).
Once run, the emulator should come up with the usual MSDOS banner and request the current date and time (which should already be correct). You can now run PC programs, mount Unix directories as drives etc. You will already have one drive redirection – drive C: is the Unix root directory. To mount further directories as drives, you must use the program ‘lredir’. Consult the file ‘lredir.readme’ for instructions…
Some parts of the PC architecture are emulated better than others. The BIOS has been partly implemented – enough to get MSDOS to boot and to allow most programs to run. Anyhow, most decent programs bypass the BIOS for screen access. BIOS Disk calls for drive A have been mostly emulated, although formatting doesn’t work.
Some of the hardware has been emulated but not much. Timer interrupts are generated by the system but there is now way (at present) to reprogram the timer. The Programmable Interrupt Controller has been emulated in part to respond to the End Of Interrupt command and reads from and writes to the mask register should work OK.
None of the VGA hardware has been emulated at present (apart from screen updating) although this will change in the near future. Mode changes must therefore be done through the BIOS.
The keyboard has been mostly emulated. The program converts X11 keysyms to raw PC scan codes and then generates an interrupt 9 as per usual. There is a BIOS routine which takes these scan codes and generates the correct BIOS ASCII/scan code pair. The keysyms used can be found in the module ‘xstuff.c’. In the future these keysyms will be read in from a file at run time.