Musashi: Motorola 680x0 emulator written in C

124 pointsposted a month ago
by doener

4 Comments

kstenerud

a month ago

Wow! Wasn't expecting this to be on HN.

So here's the backstory:

I'd just graduated from BCIT a year before. A friend invited me to visit Japan, so I got a working holiday visa, hopped on a plane, and there I was in a 1K apartment with 2 other people. I had one whole square meter of floor space for my computer (which I'd packed with me) and a donated monitor.

While looking for tech work, I fiddled around with MAME, doing small fixes to drivers and such, but I'd always had a love for the 68000 chip (from my Amiga days), so I looked at what MAME was doing and saw that its 68k emulator was written in assembler.

So I set a goal: Can I outperform the current assembler core with one written in portable C? Spoiler: Yes.

I spent 2 months sitting Buddha-like on the tiny square of floor in between job interviews, writing (and leveraging MAME's debugger). My proudest moment was when I finally saw the title screen for Rastan Saga pop up! (of course it crashed on launch, but still)

I named it Musashi, after Shinmen Musashi-no-Kami Fujiwara no Harunobu (新免武蔵守藤原玄信), commonly known as Miyamoto Musashi, who wrote the Book of Five Rings - a book that had a huge effect on me.

kazinator

a month ago

I made one a 68010 emulator in C in 1994.

For the opcode dispatch, I made a file which consisted of regex and name pairs. The regexes matched strings of 0s and 1s: the bit patterns of the opcode space. The names mapped these to C functions. A script processed the file, generating the dispatch switch.

I seem to remember that on a 66 MHz 486 DX2 box running Linux, the thing was emulating about half a million instructions per second.

Code: totally lost to the sands of time.

rcarmo

a month ago

I took a look at this during my holiday break (where I was hacking BasiliskII to do JIT emulation on ARM), and it’s quite neat but, IIRC, wasn’t enough of a speed up over the existing emulator.