“Why yes, I do have the foggiest”

My Mitsubishi ML-FX1

April 22, 2024

My first computer was an MSX, made by the Japanese giant Misubishi Electric (三菱電機株式会社, Mitsubishi Denki kabushikigaisha). It was a brilliant machine, especially since the only computer I had used before it was my father’s ZX Spectrum, a fine machine, but it looked like a very complicated little children’s toy. My MSX had a proper keyboard with a numerical island, an actual power switch at the back, an internal PSU, two Atari-standard joystick ports, a printer port, RCA audio and video out and two cartridge slots for games or hardware expansions, such as sound cards or disk drives. Rather standard for the time, you’d say, but the ZX Spectrum had exactly none of those.1

Like any MSX computer, the ML-FX1 had a Zilog Z80A equivalent NEC D780C-1 8-bits CPU clocked at 3.5Mhz. It had 64 kB RAM and 16 kB VRAM. A Yamaha S3527 chip integrated a General Instrument AY-3-8910 sound chip, controllers for joystick ports, cartridge selection, keyboard, printer and cassette interface and more. If the Z80 and the video had been integrated as well, it would have constituted a Sytem on a Chip (SoC) avant la lettre. The video controller was a Texas Instruments TMS9928ANL.

My Mitsubishi ML FX1

My Mitsubishi ML FX1 connected to a Philips VS0080 monitor and a Sony disk drive, playing Elite

I bought the Mitsubishi second-hand from my brother, who had bought it from a friend, who used the money to buy sneakers. My brother’s friend was actually the Mitsubishi’s first owner. He had bought the ML-FX1 on December 12, 1985, at least according to the handwritten date on the shop’s sticker that’s still on the underside of the case. The shop was from a chain called Funtronics, which was bought in 2003 by another Dutch computer manufacturer and shop chain, Paradigit. Until then, Functronics was the place to go for anything computer related, like floppies and magazines, in our sleepy border town Emmen.

Mitsubishi ML FX1 back

On the back, from left to right, are the second cartridge slot, mostly used for hardware expansions such as the floppy drive unit seen above, a Centronics printer port, RCA audio and video output ports, an RF output, a power button and an integrated power cable.

My Mitsubishi ML FX1 right

The right-hand side of the ML-FX1 had the two standard Atari joystick ports and a cassette recorder port. Even the cassette experience of this computer was superior to Sinclair’s. The sound was muted, the tape deck’s motor could be controlled from the computer and the data transfer speed could be set to 1200 or 2400 baud.

RCA ports are by no means of RGB or SCART quality, but far better than an RF output that combined both video and audio into something that could be selected as a TV channel, much like a VHS video recorder. I didn’t own a monitor right away, but even the small CRT bedroom TV that I used at the time had RCA inputs, so the image quality was pretty close to that of an actual CRT monitor.

I also, sadly, didn’t own a disk drive right away (they were expensive), so I was forced to use cassette tapes for any game I didn’t have on cartridge. Those tapes were easily copied with double tape decks in those days. Each tape contained ROM dumps of a couple of games, prepended with a small BASIC program that would automatically run on being loaded. It would then proceed to load the next binary file on the tape, byte for byte, into one or more free memory segments as needed and when it was done, tell the CPU to start at the first memory address. The computer wouldn’t care whether the game was in ROM or RAM, as long as someone told it where the game resided.

With a black case, there hasn’t been any decolouring since 1985, like you see with so many PCs, Amigas, C64s and other beige machines. The keys, however, needed some cleaning not too long ago. Pulling them from the case was easy with a standard key puller.

Cleaning the keys of a My Mitsubishi ML FX1

Don’t let the domes fool you. Underneath is just a rubber membrane. But that didn’t matter. We hadn’t used a good keyboard ever, and that was not something we were going to be opinionated about. We used the internal BASIC editor to type in game listings from magazines and even let them inspire us to create our own games. MSX BASIC provided ways to control the audio and video chips without any machine code, like a command that would accept strings with the actual names of the notes we knew from our music lessons to play, for instance, Frère Jacques in canon:

PLAY "cdeccdec","efggefgg","l8gagfl4ecl8gagfl4ec"

The PLAY command was asynchronous and would end as soon as it had pushed those strings to the audio chip, so that the music and other sounds could play in the background while the rest of the program continued.

We used matrix paper to design 8 x 8 pixel sprites which we could give a single colour and put into one of 31 layers using:

PUT SPRITE layer,(x,y),colour,sprite

BASIC provided a simple hook to detect collisions and tell the program at what line in the program to continue when that happened. It was very convenient. And how did we know all this without an internet? Simple. Books. Books that told you in a few chapters how to use all the functions, but forgot to tell you how to program. It didn’t matter. Creating the games was an adventure in itself. It had to be. Our games were too slow to be playable. That wasn’t the fault of the machine. We were children. We didn’t know the first thing about programming.

But for the ROM dumps and other commercial games, we mostly didn’t need the keyboard. We used big joysticks (no controller pads) like this one:

A QuikJoy JetFighter joystick

The mighty QuikJoy JetFighter had an auto-fire switch that would, when holding the fire button, send a fast pulsed signal to the computer, instead of a continuous one, making games like Nemesis and Salamander a lot easier, if not actually playable.

I still own the ML-FX1 and I did finish Elite on it, although I had already owned several MSX2s at that point. Sometimes I feel like playing MSX1 games on an actual MSX1 instead of the Sony MSX2+ I normally use. That, after almost 40 years, I can still grab the ML-FX1 from its shelf and hook it up to a monitor and speakers for some gaming, without any maintenance, except for a single keyboard cleaning session, is a testament to its build quality.


  1. In fact, Sinclair’s corner-cutting went so far on their ZX Spectrum that instead of a female cartridge connector, they added the cheaper male part to the computer, making the computer cheaper and potential cartridges and hardware expansions more expensive.

Traffic lights are following drivers

April 20, 2024

How didn't I see this coming? It appears that traffic lights in the Netherlands are now contacting apps on the phones of anyone waiting for a green light. By combining the data of different crossings, traffic engineers can measure how well traffic is flowing through cities. This is in fact very private data, because as soon as you know where each phone is going every day, you know where they live, where they work, where they shop, where there children go to school or daycare and where their friends live.

According to the article, the Dutch privacy watchdog has asked the responsible minister to look into this. I'm still worried.

I suppose this looks like an extra reason to use bicycles instead of cars for in-city distances, but nothing will prevent these traffic engineers to expand their project to include cyclists, if it doesn't already. So, now everybody leaves their phone at home when outside?

What a world that would be.

How not to connect to Quassel using Rust

April 18, 2024

Quassel is an open-source Internet Relay Client (IRC) client-server system that allows multiple clients to connect to a single server, enabling users to maintain a persistent connection to IRC networks. The quassel-core server runs as a daemon, while the client provides a graphical interface for users to interact with the server. This allows users to connect to the server from multiple devices and locations while maintaining the same chat history and preferences. IRC is an older chat protocol that is still very much in use but lacks this functionality by itself.

Some time ago, I was wondering if ChatGPT could help me start writing a Quassel client in Rust. This is what it came up with:

To connect to a quassel-core server in Rust, you can use the quassel crate, which provides a high-level API for interacting with a quassel-core server.

Here is an example of how to connect to a quassel-core server and retrieve the list of IRC networks:

use quassel::Connection;

fn main() -> quassel::Result<()> {
  // Connect to the quassel-core server
  let mut conn = Connection::connect(("localhost", 4242))?;

  // Authenticate with the server
  conn.auth("username", "password")?;

  // Retrieve the list of IRC networks
  let networks = conn.get_networks()?;

  // Print the list of network names
  for network in networks {


It continued explaining the code snippet, and it all made perfect sense, except for one tiny problem: the crate (Rust package) “quassel” does not exist. I asked ChatGPT about that, to which it responded:

Yes, you can add the following line to your Cargo.toml file to use the Quassel crate:

quassel = "0.1.0"

That is basically just not admitting its mistake, or even showing its awareness of it. When confronting it with that fact, it told me that during its last update in September 2021, the crate did exist, and it suggested I ask the Rust community or search forums. I have, but if it ever existed, apparently nobody has even seen it. There is, in fact, a libquassel crate that is now four years old, but it works rather differently from how ChatGPT’s imaginary “quassel” crate would work, at least according to the code it provided. Since libquassel already existed in September 2021, I wonder why it isn’t aware of it.

Anyone can make mistakes and, I suppose, so does anything. The above code, however, as suggested by ChatGPT, is not just faulty, it is complete fiction. We all know AI is not perfect and there is always the disclaimer to check important information, but if a colleague would offer this suggestion, I would look at them funny for a moment and not trust them any more.

AI is currently put in, behind and on top of everything, and it seems like we are expecting it to write our book reports, take our jobs and solve our climate crisis. The above is of course just one anecdotal example (though I have more; stay tuned) but it failed so epically here, I think we’re collectively in for one massive disappointment.

CC-BY-SA 2006-2024