Subscribe via RSS

Burning 16-bit EPROMs with a Willem Programmer

This wasn't fun! I wanted to get Kickstart 1.3 on my Amiga 500 and so I purchased some M27C400 EPROMs from eBay with the thought that I could host two ROMs on them and make it switchable. The ROMs arrived and, to my stupidity, didn't fit in a standard Willem EPROM Programmer! Of course, a quick google prior to purchasing anything would've made this very apparent. Fortunately, there's a fix! You can buy a DIP42 16-bit EPROM Adapter for the Willem, and so I did.


Thanks to COVID, it took an extra-specially long time to arrive and, once it did, got thrown into the box'o'Amiga'junk as I'd put the whole lot on the backburner whilst working on the Ataris of late. This weekend I'd finally managed to wrangle some time together and sat down with my trusty XP laptop to program these chips.... It wasn't easy!

Input Voltages

I jumped head-first into the programming and failed a LOT with errors such as 0x00 and 0x11. Any search online will tell you that, when getting lots of 0x00 and 0x11 errors, it mainly indicates that you aren't supplying the correct programming voltage for your target chip. Check out the PDF Datasheet for the chip you want to burn, it'll specify a programming voltage that it requires to successfully understand and store the bits that you're about to throw at it.

For the M27C400, we need to provide 12.5v +/- 0.25v. The Willem has a blue trimmable capacitor (or is that a resistor) on the top-right of the board that you can adjust to get this voltage. I always recommend to use an external power supply with these programmers and so I have a plug-pack which happily provides 12v @ 2amps. To make sure we'll have a chance of programming this chip, switch to the Test H/W tab of the software and tick VPP. This is pin 1 of the E32 socket. If this has worked, then you'll have a red LED illuminated on the board. Now, check the voltage between pin 16 (GND) and pin 1 (VPP) of the socket.


Mine was reporting a value lower than 12v to start with and hence I had a few issues burning. With a multimeter in place, I tuned the trimmer on the top-right and got the value to 12.5v. Actually, it was probably 12.6... but 12.4 would also work as you just need to be in the range of 12.25 - 12.75.

Another test burn saw a new error... no more 0x00 and 0x11, it was now further into the chip, usually around 0x100?

Willem Software vs. Programmer Settings

Next up, we need to make sure that you can correctly control ALL address lines with your Willem Programmer. After fixing the initial errors above, I started getting new errors at random intervals into the burning process. The errors all seemed to indicate that there was an issue writing data after address 0x100. I'd only been using empty chips, so it couldn't be because they already had data on them. You can also check if the chips are empty prior to burning and I totally recommend doing this. Either way, after this new error was received, I chose to then read the chips and view the data:


What you're seeing above is the data read back from the chip. I wrote the rom (loaded from file) to the chip, got the error and then chose to read the data from the chip back into the application. 75% of the data on that screen is correct, but you'll notice that the data repeats itself from 0x100! It turns out that this was all due to the fact that my Willem was only controlling the first 8 address lines and leaving the rest low. I recommend you rig up an LED test harness as per below and control the address pins via the Test H/W tab on the Willem Software.


After swapping chips around, checking continuity between the 4051s and reseating everything else, I came to the conclusion that there's incorrect information in the Standard Willem Programming Guide. If you scroll to page 5, you'll find information on the version of the software to use. It suggests that, based on jumper settings on the board, you can select if the board emulates a PCB3B or PCB3.5. If you've chosen PCB3B, then you'll need to use software version 0.97ja, as per my post from a long time ago, when I was failing with the same issue! Alternatively, if you've chosen PCB3.5, you need to use 0.98d6 or higher.


I looked at my board and checked out the jumpers that set the board emulation. Mine were actually individually set to 1-2 and 2-3 instead of both 1-2 or both 2-3. Hah... how did this thing ever work?! With these jumpers now set to 2-3 (aka PCB3B), I went back to version 0.97ja of the software and tried to get the full suite of address lines to light up via the Test H/W tab. No dice! If you browse to page 6 of the above PDF, you'll find that the jumpers should be set to 1-2 for PCB35 and 2-3 for PCB3B. Just for fun, I switched the jumpers to 1-2 and tested out version 0.98d6 of the burning software... still no dice! No permutation of checkboxes on the Test H/W tab would get a high signal on any of the address lines higher than A7! Up until this point in time, I'd only programmed 8-bit EPROMs, so I'd never noticed this.

I went ahead and played musical-chips. There's a chain of CD4015BE ICs that shift out the address lines, 3 of them with 1 each controlling 8 bits. It seemed plausible that there might have been a faulty connection between the first and second, but no amount of tinkering brought the address pins to life. I took a break as the frustration (or was that sadness) levels were elevating and sat down to a bit of TV. With a fresh mindset, I came back to the device, forgetting which settings were applied. Opening up version 0.97ja and testing address lines now worked!? Wait, the jumpers are set for PCB35... what the hell, it's backwards!? I opened 0.98d6 and it didn't work, so I set the jumpers back to 2-3 (for PCB3B) and it now 0.98d6 worked!? Urgh... so much time lost. So, TLDR; The PCB3B/PCB35 jumper settings are backwards on my Willem Programmer. Set them to 1-2 for PCB3B and 2-3 for PCB35!

Using the adapter

First up, there's two jumpers on the adapter to configure. The right-most controls the VPP/A21 line and needs to be set to 1-2 for M27C400 or M27C800 EPROMs. The other, in the middle of the board, I left at 1-2 as I don't know what it does.


Next up, there's a ribbon cable used to obtain more address pins from the main programming board. For the M27C400, the base E32 socket of the Willem actually produces enough address lines, so this ribbon cable isn't actually needed. Check out the diagram below to work out how the adapter is constructed. I've coloured the lines that are used on the M27C400 and 800, where you can see that the 400 doesn't use any of the wires from the header on the right.


If you're going to program an M27C800 or larger, you'll need to connect this. Simply make sure that pin A23 (bottom-most) lines up with A23 on the Willem board.


Finally, when inserting ANY chip into to the socket, make sure that the pins are all straight and that none will foul. For any of the chips, always make sure that the bottom pins are at the bottom end of the socket. The EPROMs are designed so that the Address lines extend 'north', so the silhouette on the board is actually for an M27C800. An M27C400 will be one pin lower than the silhouette, aligned at the bottom of the socket.


All the errors I made above would've been avoided if I'd known what I was doing from the start. Usually the old RTFM instruction makes sense, but when the jumper settings work in reverse to the manual, it's a little frustrating. On another note, I'd just trusted that this piece of hardware worked, as I've managed to burn other chips in the past. Assuming that cheap hardware just-works(tm) is a flaw in itself. Always make sure you know the hardware you're working with back-to-front, which was totally possible this time around thanks to open-source schematics being available!


Atari Portfolio

This item popped up on eBay recently and I was very happy to have my offer accepted. The unit came even with a serial adapter! I quickly found 3 AA batteries and inserted them...


DSC00206 DSC00208 DSC00209

The Atari Portfolio is an IBM-compatible 'Palm-top' PC from 1989. If you were paying attention whilst watching Terminator 2, then you would've noticed it was used to break into an ATM. You can even still download the software they used to fake the hack. The unit itself is just bigger than a VHS cassette, but the profile changes once you attach the serial port adapter.


DSC00214 DSC00215 DSC00217


The unit is DOS 2.x compatible, with a few apps already built in. There's a text editor, spreadsheet, calendar and phone book. When I read that it had these features, I instinctively just typed edit on the command line when the unit first powered up. The response of Bad command or program not found came as a slight surprise, but then I thought that it must have another name as it's not official MS-DOS. I then tried ed, editor, nano, emacs, vim... all to no avail. It wasn't until I looked a little closer at the keyboard that I saw that 'Editor' was the Atari-text (the function that executes when the Atari button is held down) under the E key! Nice! It's actually multitasking?

Using the text editor

Just because I found this slightly harder-than-expected, here's a quick primer. The text editor is actually really cool and can be opened by pressing Atari+E. Use Fn-1 (aka. F1) to get to the File menu to start a new file, open a file, etc. F2 gives you a help menu and I seriously recommend that you go through the items in the list. There's a ton of shortcut keys that'll come in handy. F3 is the clipboard menu with options for copying and pasting. At any time, Escape will exit menus and even exit the app right back to the command prompt.


Note, when opening files: if you don't know the file name then just type an asterisk and press enter to get a list of 'openable' files from the hard drive. For fun, I created a simple text file with a random sentence and saved it to C:\. This became useful when testing the serial port.

Note that, at any point in time, Fn + O will turn the unit off. Spacebar will wake it back up.

Initiating serial communications

My unit came totally blank, so I had to fumble my way through getting files transferred over to it. For those playing at home, what follows is the most-simple step-by-step process to get it up and running. These steps were borrowed and modified from Paul Rickard's blog post titled Atari Portfolio Serial Interface: How To Get Terminal Software.


Firstly, we'll need a cable to connect your PC to the Atari. I happened to have a USB-Serial adapter that Windows 10 was happy to use, so I plugged that in and grabbed the relevant converters to get from DB-9 to the DB-25 Null-Modem adapter that I had in the junk box.

Download and extract CoolTerm and get it up and running. Set the 10ms delay option and choose 300 BAUD rate with no hardware controls.

coolterm-port-settings coolterm-delay-settings coolterm-no-settings

Power up the Atari and open Set Up via Atari+S. Configure the serial port to BAUD 300, leaving the other settings alone. Make sure you select Initialize! at the end. Next , open the Editor and type a sentence, saving the file to C:\. It'll default to unnamed.txt. With CoolTerm open and connected, type the following:

copy unnamed.txt com1

DSC00224 DSC00225 DSC00226


If you're in luck, the file will have been spat out to the CoolTerm console. If not, then go over everything again... specifically making sure that your cabling is correct!

Transferring actual files

For those that have a valid connection, you can now try and transfer files. Using the DOS copy method above, I tried to copy files bigger than 1kb, but it always failed. Even with CoolTerms transmit delays, I couldn't successfully do it. This is probably the reason why Paul has used xload/xterm. So, the next step is to set up a proper terminal app on the Atari. To do this, you'll need to download both xload and xterm and extract them somewhere.

We'll first use the basic DOS copy command to get over. It's a tiny file that does the same as DOS copy, but has the ability to copy larger files. To get this over, type the following in the Atari, but don't hit enter:

copy com1

Now, on CoolTerm, choose Connection -> Send Text/Binary File. Set the filter to all files and find Select it, but don't hit Open just yet. You'll want to hit enter on the Atari, wait around 3 seconds and then hit Open on CoolTerm.

coolterm-send-file coolterm-sending DSC00227

The Atari wont flinch, but you'll hopefully have a transfer window in CoolTerm flash past (it doesn't stay open as the file is so small) and the file will be transferred. A few seconds later, DOS will drop you back to the prompt and you can list your files to see what copied over. If you have an with a size of 178 bytes, then you've succeeded. Type xload and see what happens. If it has failed, or it's the wrong size, then repeat the steps above until it works!

With xload now on your Portfolio, you can use CoolTerm once more to send the larger file. xload will only ever copy serial bytes to a file called, so don't try and use it for anything else. So, in CoolTerm, select to transfer a file and get ready to hit Open on On the Atari, type xload and press enter. Once you see the screen below, hit Open on CoolTerm. Note that at this point you have the option to switch the BAUD on both units to 1200... I left it at 300 for safety-sake.

After a successful copy, you should have in your C:\ at a ginormous size of 2944 bytes.

Type xterm and hit enter... crossing your fingers at the same time.


Nice... trashed binary. I re-did everything again and sent exactly the same... maybe I left it a second longer between hitting enter on xload and choosing Open on CoolTerm...


Yessss! We have a terminal application. xterm on the Atari supports XModem file transfers, but I couldn't work out how to do this with CoolTerm. I was on Windows 10 and managed to find two applications that can do XModem: Hyper Terminal and ExtraPuTTY. For fun... we'll use the former:


Hah. It still runs on W10... so ugly. It'll throw crappy errors at the start, telling you that you need a modem installed... just ignore/skip/cancel where appropriate.

hypertrm-modem-1 hypertrm-modem-2 hypertrm-test

Configure your serial port exactly as you'd done in CoolTerm, turning off any flow control. You can then open xterm on the Atari, choose F2 and send the files from Hypertrm via XModem.

hypertrm-send hypertrm-send-file hypertrm-sending

If it's working, then you'll see the dots across the screen... if you don't send via XModem, then the guts of the file will be printed out to the Atari and shit will get weird!

DSC00232 DSC00234 DSC00235

Transferred and executable!

Games and other software

Most Atari Portfolio software is compressed as LZH. 7-Zip had trouble with most of the files I downloaded, so I had to grab an archiver and do the extraction on the unit. As that there's very little spare space on C:\, this became quite a shuffle. For example, there's a file called yankee.lzh which plays the Yankee Doodle Dandy tune. To decompress it, you'll need on the Atari as well. Transfer both files using xterm and then try and extract the files by running lzhe yankee.lzh. It'll fail on the last file as xterm + xload + lzhe + yankee.lzh + half of the extracted files take up the entire internal storage. To fix this, delete xterm as you don't need it anymore. Leave xload as it'll help when you need to bring xterm back. Inside the LZH file is ptune and it's documentation. The .doc file is actually useless to us, so delete it and then use the editor to create a file of the same name with 0 bytes in size. When you then try to extract the contents of Yankee again, it'll ask to overwrite, but just say no. Finally you'll have yankee.bat that, when executed, will play the tune (poorly) and present the lyrics...

All of this shuffling would be circumvented if I had a memory card in the left-hand slot!

Memory cards

Atari chose the Mitsubishi Bee Card as their memory card type. This card allowed sizes ranging from 32Kb to 128Kb. Any memory cards with larger sizes were 'banked' and required powering off, switching banks and rebooting. The Bee Card was also used in MSX and Korg/Roland music equipment, and so you'll find that there are a variety of options when trying to source cards. There are also home-brew multi-cards, such as this one, if you have the cash and if COVID won't stop your shipments.

Filed under: Retro 4 Comments