Frost on a roof

Amiga Assigns

AmigaOS was an operating system that was way ahead of its time. It had features that other home operating systems (like Windows or MacOS) were missing back then, like preemptive multitasking. There was also a feature that was called assignments. I truly miss that one on Linux!

An Amiga "assign" is a bit similar to the drive letter you may know from Windows. For example, the Windows path C:\example.txt refers to a file called example.txt in the root directory of the main partition, while the same file on the first floppy drive is called A:\example.txt.

On Amiga, the main partition is usually called DH0:, the second partition is called DH1: and so on, while the first floppy drive is called DF0:. A similar path on the Amiga would thus be DH0:example.txt or DF0:example.txt.

As you can see, on the Amiga a "drive letter" can actually consist of multiple characters and also numbers. This is called an assignment. The name DH0 is assigned to the main harddisk partition.

But wait, there is more!

You can have multiple assigns pointing to the same target. For example, the main partition usually contains the Amiga desktop environment, called Workbench. For this reason, the main partition also has a label like Workbench, and the file could also be accessed as Workbench:example.txt.

This is actually quite a smart concept, especially for exchangeable media. For example, let's imagine we have just started a game called shredzone, and it needs to access a file Music/Opening.mod on its installation disk (AmigaOS uses a slash as file separator, like all proper operating systems). It would open a file called shredzone:Music/Opening.mod.

AmigaOS would see that there is no assignment called shredzone, and would pop up a dialog like this:

From a user's perspective, I would now know that I have to find a medium called shredzone, and insert it into the computer. It does not matter if it's a floppy disk, a CD, or even a network mount. AmigaOS also does not command me to insert the medium into a certain drive. If it's a floppy disk, and I have multiple floppy drives, I can just pick the one I like to. AmigaOS will then detect that a medium with that name was inserted, would close the dialog, and grant the game access to the file.

On Linux, I would need to access that medium under a path like /run/media/shred/shredzone, which is a lot to type, contains my user name, and is harder to remember than just shredzone:.

But wait, there is still more! 😄

It is easy to add assignments to the system via command line. It's even possible to use subdirectories as assignment target. Let's stay with our shredzone game example. I got tired of having to insert the installation disk every time I want to play that game. So I create a directory called DH2:Games/Shredzone/Files on my hard drive, and I copy all files of that disk to that directory.

After that, I enter this command on the command line:

assign shredzone: DH2:Games/Shredzone/Files

Now, when I start the game, AmigaOS will see that there is a shredzone assign already existing, and will access the files there. So the song file shredzone:Music/Opening.mod would be accessed at DH2:Games/Shredzone/Files/Music/Opening.mod.

AmigaOS makes use of assigns itself. For example, there is a standard assignment called C:. It usually points to the C directory of the booting device, where all command line commands (like dir, copy, delete etc) are expected to be present. This assign is similar to what $PATH is to a Linux shell.

Imagine I have installed a set of development tools, like an assembler and a C compiler. The commands of this toolset can be found at DH1:Development/DevTools/C. On a Linux system, I would add this path to the $PATH env variable, so I can just type the command name to execute one of these commands.

On AmigaOS, I just add this path to an existing assignment:

assign add C: DH1:Development/DevTools/C

Now AmigaOS knows that when I enter a command in the command line, it has to look for it in Workbench:C, and if it's not found there, it will try to find it in DH1:Development/DevTools/C. I could even execute commands like dir C:, and see all files in both directories. Of course, it is not limited to two targets.

There is still more, like deferred assigns. But I only want to give you a general impression of what Amiga assigns are, and why I miss them on Linux.

How to burn Amiga EPROMs

TL866II Plus with EPROM adapter and MX27C4100 EPROM With the recent AmigaOS 3.2 release, and the prospect of further updates, it may be interesting to burn own EPROMs for the Amiga. Luckily there is no need to buy expensive equipment any more, as EPROM burners and erasers became affordable. This article explains how I burn Amiga EPROMs at home.

Shopping List

First of all, we will need fitting EPROMs of course. These types are compatible to most Amiga models:

  • AMD AM27C400
  • Macronix MX27C4100 [sic!]
  • STMicroelectronics M27C400

It is important to pick parts with an access time of 200 ns or faster. Models like the Amiga 4000 can even be jumpered to an access time of 160 ns. EPROMs with 120 ns (or less) are easy to find, and definitely on the safe side. Note that Macronix truncates the trailing zero, so a MX27C4100-12 actually has 120 ns access time.

For burning the EPROMs, I use an XGecu TL866II Plus programmer and a 27C400 programming adapter.

Unlike modern flash memory, EPROMs cannot be erased electrically, but are erased by exposing the chip behind the quartz glass window to a strong UV light source. For this reason, an EPROM eraser is also recommended. Note that there are OTP-ROMs without that window, they cannot be erased at all.

With a bit of nail polish remover, the AMD 27C400 retransformed to MX 27C4100. No EPROM shaming here! 😉 None of these EPROM types are still in production. You might still find sources who sell NOS parts, but usually all chips on the market are refurbished. I am a bit careful with chips that look too new, or are claimed to be made by AMD. It is likely that these are just Macronix chips that were painted black and then laser-engraved with a fake AMD label. A cotton bud and a bit of nail polish remover will quickly reveal the scam.

These fake parts are perfectly fine. They are just sold at a higher price because of the alleged noble AMD origin, so you might as well order the Macronix chips directly and save money.

Preparation

Before burning a ROM dump, all even and odd bytes need to be swapped. For Amiga models with two ROM sockets, these dumps also need to be split into separate images for the upper and lower word. To make things even more complicated, a 256KB ROM dump needs to be duplicated to fill the entire memory space of a 512KB EPROM.

Luckily, the AmigaOS 3.2 CD already provides *.bin files that are ready for burning. For plain ROM dumps (those that can be used in emulators), my tool pynaroma can be used for byte-swapping, splitting, and duplicating.

Burning ROM

For the TL866 programmer, I prefer to use the minipro controller software. It is open source and runs on Linux, MacOS and many other Unix derivates, while the manufacturer's original software requires Windows.

The programming adapter is inserted into the programmer, and EPROM inserted into the ZIF socket of the adapter, with the notch pointing to the top, and the chip aligned with the bottom of the socket. Do not put the EPROM into the programmer without that adapter, otherwise it will be destroyed during operation.

The adapter simulates the pinout of an AM27C4096 EPROM, so --device 'AM27C4096@DIP40' must be selected. The --skip-id option must be given as well, otherwise minipro would abort the process because it detects a different type of EPROM.

For writing, the --no_id_error option needs to be used instead. By default, the AM27C4096@DIP40 profile uses a programming voltage of 13V, and a writing voltage of 6.5V. On my chips VPP=12.5V is printed, so I reduced the programming voltage with the --vpp 12.5 option. It might also be necessary to reduce the writing voltage using the --vdd option. Check the datasheet if in doubt.

The first step is to check if the EPROM is empty.

minipro --device 'AM27C4096@DIP40' --skip_id --blank_check

If it's not, it must be erased first. 15 minutes of UV light exposure in the EPROM eraser should be sufficient. If the EPROM still isn't empty after that, just repeat the process.

After that, the ROM image (e.g. amigaos.bin) can be burned to the EPROM:

minipro --device 'AM27C4096@DIP40' --no_id_error --vpp 12.5 --write amigaos.bin

minipro will automatically verify the content after burning, but you can also verify it manually:

minipro --device 'AM27C4096@DIP40' --skip_id --verify amigaos.bin

And for the sake of completeness, this is how to read the content of a burned EPROM to a ROM image file:

minipro --device 'AM27C4096@DIP40' --skip_id --read amigaos-read.bin

After burning, the window should be covered to protect the chip from stray UV light. A simple paper sticker is sufficient.

#Advertisement? This blog is free of ads. All shown products have been paid by myself.
Friday, October 29, 2021
The Ugly Duckling

One year or so after I got my Amiga 500, I extended it with a GVP Impact Series II A500-HD+ SCSI host adapter and a 45MB harddisk. It retired together with the Amiga 500, and was stored in the basement for decades. But while the Amiga survived the years in a surprisingly good state, the GVP had suffered from the moisture. The case was yellowed, but also got mold stains, and the metal frame got some flash rust.

Dirty, yellowed, mold stains, rust at the bottom frame… This poor device has suffered from storage.

All in all, it seemed to be in a bad shape that was difficult to restore. But on the other hand, it would be sad to write off this nice piece of hardware, while all the other Amiga stuff got a general overhaul.

I sent the case to the CBM Museum Wuppertal for cleaning and whitening. It was a bit embarassing to send it in that bad condition, but they said it can be cleaned and will then look as good as new. Let's see if they can do miracles.

Flash Rust

The base frame had a lot of dirt and flash rust from the storage, especially in the areas that are frequently touched. I used some Nigrin car metal polish paste to clean it, but probably every kitchen metal polish would have done the job as well. It was a bit of work, but after that it almost looked as new.

A lot of flash rust, fingerprints, and dirt. After applying a metal polish, it was a lot harder to make a photo. 😄

Self-Powering

There have been two things that were always annoying me on this controller. One was the tiny fan that was supposed to cool the harddisk, but produced a lot of noise. The other one was that a separate external PSU was needed to power the harddisk.

I always wished that the controller would just source itself from the Amiga, but it was clear to me that the mechanical harddisk was drawing too much power for that. The original Fujitsu drive consumed about 10W! With a SCSI2SD adapter, the power consumption is considerably lower, so a self-powering is feasible. The SCSI2SD V5.2 adapter draws only about 10mA, or 0.05W.

The controller can easily be modified to get its power from the Amiga. There is a blog post by davem2 explaining it. All one needs to do is to bridge the CN5 and CN6 pads with some solder.

The CN5 and CN6 bridges enable powering from Amiga. The controller's PSU must not be connected after the modification though.

Since the SCSI2SD adapter also does not need active cooling, I could finally keep the loud case fan disconnected for good.

After the modification, make sure never to connect the GVP PSU to the controller again. It would power the Amiga via the card connector, which is very likely to cause damage to your hardware. Also, do not use mechanical harddisks after the modification. If you want to keep using the original PSU instead, you should let a technician check it first.

Firmware Upgrade

By a lucky chance, I found the latest firmware v4.15 in Ralph Babel's Amiga archive. By another lucky chance, I also found a 27128 EPROM in my spare part box that was once stripped from an old mainboard.

The original firmware would have worked fine as well, but if there is an opportunity for a free update, why not take it?

A firmware update after 30 years!

If you should use a 27256 EPROM instead, make sure to burn the image twice, as only the upper half of the memory will be accessed by the hardware.

Final Works

As there are no electrolytic capacitors on this board, there is no need for recapping. I still did a minor modification: I replaced the LEDs with blue (power) and red (disk) ones, as it became a kind of signature color for all my computers.

After that, I gave the board a thorough bath in IPA, and cleaned the edge card connector with a contact cleaner.

The PCB is nice and clean again!

I also found two 1MB/70ns 30-pin SIMM modules for a few Euros on the Bay, so I could double the available Fast RAM to stunning 4MB in total. (Remember to change the jumpers accordingly, as there is no automatic detection.)

Reassembly

Meanwhile the CBM Museum Wuppertal had returned the cleaned and whitened cover. They did an excellent job! The case looks almost as good as new. The mold and dirt stains are gone, and the whitening brought back the original "Amiga beige" color.

The cover was cleaned and whitened successfully.

As the SCSI2SD adapter is delivered without any kind of mounting frame, I had to 3D-print one myself. Unfortunately it collided with the case fan, so eventually I just removed it completely.

The SCSI2SD adapter on its mounting frame.

And that's it. The GVP harddisk controller is reunited with its Amiga 500 again. I am sure they have missed each other. 😉

Don't they look happy?

The ugly duckling finally became a beautiful swan again!