Hi everyone,

In my constant quest to be able to program every chip I can get my hands on, I have amassed quite a few different programmers. Currently I have:

  • MCUMall GQ-4X (USB)
  • MiniPro TL866 (USB)
  • Andromeda Research EPROM+ (Parallel Port)
  • Needham EMP-30 (Parallel Port)
  • Hi/Lo Systems All-07 (Parallel Port)

The GQ-4X and MiniPro are both relatively new, inexpensive programmers. They have 64-bit Windows drivers so they work fine on modern systems. My main complaint is that they have issues both reading and writing older devices (64K or less, like 2764, 2732, 2716, 2708, etc). Unfortunately a great many arcade games use ROMs of this size. Symptoms would be failed burns and inconsistent reads. When using the USB readers, I typically read each chip twice to make sure that the checksum is the same both times. If it's different, either the chip is bad or the programmer is not quite tuned right to read the chip. When this happens, the older programmers seem to read them consistently. Saves you from throwing out working chips!

I have found these older Parallel Port devices to work better for older chips, since they were designed in the time that the chips were prevalent. There are several ways to make use of them in modernity. Here are my experiences.

Using a very old computer with MS-DOS or FreeDOS - works but file transfer is inconvenient.

I didn't spend too much time on this solution. I had an old Pentium II computer, which had a parallel port and a few USB ports. This motherboard wouldn't boot from USB so I had to use an MS-DOS installation CD-ROM. This was hilariously hard because I hadn't needed to burn a CD in years and my most-modern computer didn't even have an optical drive.

*Random note: It seems like Windows 10 coupled with the image writing program Rufus doesn't work anymore. For whatever reason, the resulting USB drive will half-boot and then crash. 

MS-DOS 7.1 and FreeDOS both support mounting USB flash drives as storage so I thought I could basically hotplug the USB stick between this Pentium II and my modern computer to send ROMs back and forth. Unfortunately the problem here is that this hotplug idea doesn't work reliably. My guess is that there's some sort of memory buffer that needs to be filled before the USB drive is actually written to. The effect here is that sometimes I would read a ROM, write to the USB drive, remove it from the Pentium II and put it in the new computer, but the file is not there. I also had issues in finding files in DOS that I had recently put on the USB drive from the new computer.

One bonus is that a computer this old will likely detect PCI parallel port cards if you want more than one.

I explored networking in DOS but finding packet drivers and setting it up is a nightmare. More on networking in the VirtualBox section.

Using a modern computer with MS-DOS or FreeDOS - same as above, but parallel port PCI cards might not work.

Surprisingly, modern computers will still support DOS. FreeDOS is a good solution. Basically the same experience as above, except it was a little easier to install FreeDOS using a USB drive since the motherboard supported booting from USB. This computer wouldn't detect the PCI parallel port card I had.

Using a modern computer with a DOS virtual machine - best solution. File transfer still annoying but can be scripted.

Windows 10 seems to have restored access to the parallel port which is great. You do need to find a motherboard with a parallel port which might be difficult. I found that my motherboard had a parallel port header on it, and I just had to buy a bracket from Amazon. I also have a PCIe parallel port card, which played nice with Windows 10 but would NOT work with VirtualBox for some reason. So unless someone else has had success, I'm going to say that only motherboard-level parallel ports will work.

Follow these steps to get things working:

  1. Download VirtualBox and install, then start it up.
  2. Create a new Virtual Machine, select DOS as the operating system, then choose 32 MB RAM and whatever hard drive size you want. I left mine at 500 MB, I'm not sure what the limit is. Create this as a VHD file when it gives you the option!
  3. Download the newest FreeDOS or MS-DOS CD image, and mount it to the newly created VM. 
  4. Turn on the VM and install your DOS variant.

OK, now here's where things start to get annoying. How do you get files in and out of VirtualBox? If it was Windows, you could just create a shared folder, but no such luck in DOS. I spent a lot of time exploring networking, thinking I could mount a Windows share to a drive letter. You can actually do this, but the drivers and such take up so much memory that the Hi/Lo Systems ALL-07 software would not load. I tried messing around with memory managers but couldn't figure it out. If you're a DOS head and can send me an image with MSCLIENT installed and working and still with almost all conventional memory available, let me know.

Remember earlier I told you to create the Virtual Machine image as a VHD? That's because Windows 10 will let you mount VHD as a mass storage device. To try it out, follow these steps:

  1. Pause your VM. If you don't do this, the VM will crash later.
  2. Open up Windows' Disk Management program.
  3. From the top menu, find "Attach VHD".
  4. Select the VM's VHD. I think it's usually located in C:\Users\you\VirtualBox\VMs
  5. You'll see that the VHD is visible in Explorer as a drive. From here you can add and remove files at your leisure.
  6. When you're done, right-click the drive and click Eject.
  7. Unpause the VM, and fingers-crossed it should continue on like nothing every happened...

Following these steps, I copied over my EPROM software. It worked fine but couldn't yet detect my programmer. To be expected of course since we haven't set that up. The parallel port support in VirtualBox is basically hidden, and can only be enabled by command line. I'll show you what my commands were then explain what each section means.

C:\Program Files\Oracle\VirtualBox>vboxmanage modifyvm DOS --lptmode1 LPT1

Here, "DOS" is the name of my VM, "--lptmode1 LPT1" enables parallel port mode and attaches LPT1 from the host system. We have not told it what to do with it yet but it has created a virtual port called "lpt1".

C:\Program Files\Oracle\VirtualBox>vboxmanage modifyvm DOS --lpt1 0x378 7

In this line, "--lpt1" refers to the virtual port we created in the first line. "0x378 7" indicates we want to attach it to memory address 0x378 using interrupt 7. If you wanted to use 0x278, another port that most software will recognize, you would use "0x278 5", since "5" is the interrupt usually used.

That's actually it! VirtualBox can seemingly only support a single parallel port at a time. Also, if you try to launch two VMs with the same port attached, the second one will fail. If you ever want to remove the port, use a line like this:

C:\Program Files\Oracle\VirtualBox>vboxmanage modifyvm DOS --lpt1 off

Now, my EPROM software is detecting the programmer just fine. I have done several dozen reads and writes with absolutely no issues.