// HACKER NEWS — CYBERSECURITY
Porting my 1993 Amiga game to Godot, with an LLM reading the 68000 assembly
In 1993, in Baghdad, I built a game called Babylonian Twins on an Amiga 500:
512KB of RAM, no hard drive, plugged into a TV. I was an engineering student in
my twenties. Pure 68000 assembly, every sprite and every scanline by hand.
Murtadha Salman drew the art and Mahir AlSalman composed the music. We were
under sanctions. No internet, no game development resources, just one copy of
the Amiga Hardware Reference Manual, which I used to program the hardware
directly, and electricity a few hours a day. The constant floppy disk swapping
(because of the small memory) and the 50°C summers killed my disk drive three
times.
Left: 1993, on the Amiga. Right: 2026, the same gateway.
On the Amiga, “by hand” means the game doesn’t ask the operating system for
anything while it runs. At startup it saves the interrupt vectors, switches the
OS interrupts off and takes the whole machine:
“Get the system from the AMIGA” is my comment, from 1993. From that point on
the display is the game’s own copper list (the Amiga’s programmable video
coprocessor), rewritten on the fly for sprites and sky colours. Tiles move by
writing the blitter’s registers directly and waiting on its done flag. The
joystick is read straight from the hardware port, and the fire button is one
pin on a CIA chip. The OS comes back only between levels, to load the next
level’s files from the disk, and then it’s switched off again.
It was the first commercial game made in Iraq, and for a long time a game very
few people got to play. Commodore collapsed and sanctions scared off
publishers, so the finished game sat on a shelf. An Amiga forum found it in 2008 from my
brother’s YouTube uploads and hunted me down for the disks;
the thread is still there.
The game has been ported once before, by hand, in 2010. The same team
rebuilt it for the iPhone on an engine written from scratch, about 34,000
lines of C++, over months of nights and weekends. Apple and Google featured
it, and it reached over two million downloads. That story is
here.
I didn’t do this port. I asked for it, played the result every night, said
what felt wrong, and made the few decisions that needed somebody who was
there in 1993. The file formats and the assembly reading were the AI’s work,
and so were the decisions about how to carry thirty-year-old code across, and
it went faster than I could follow. This post is what I found when I sat down
weeks later and read what had been done to my own game. Some of it was wrong,
and I didn’t notice for weeks.
I’d tried this before. About a year ago I gave an earlier model the same Amiga
material and asked it to make sense of my binary level maps. It got there in
the end, but it took several rounds and a lot of hints from me.
Then Claude Fable 5 shipped, and I gave it the same files.
The test was deliberate. My guess was that there is little Amiga assembly
code in LLM training sets. If the model was better at working things out
rather than recalling them, this is where it would show.