MAD-65

madsim

The MAD-65 simulator · version 1.0.3

madsim is a whole MAD-65 in a program: both 65C02 processors, the video circuit, the two SN76489 PSGs and the YM2413 FM chip, and both joystick ports. It runs the real firmware ROMs and real cartridge images, so software that runs here runs on the hardware.

The simulation is paced to the console's true frame rate of 60.317 Hz, independent of your monitor. That is the point of the machine, so it is not something the simulator was going to fake.

madsim running the MAD-65 diagnostic demo: a wireframe cube over a starfield with both ROM build dates
madsim with no cartridge: the console's built-in diagnostic demo.

Download madsim 1.0.3 (Windows)

ZIP archive, 2.9 MB · includes both firmware ROMs · released 2026-09-03

Running it

  1. Unpack the ZIP anywhere.
  2. Run madsim.exe from the unpacked folder.

No installer, no dependencies, nothing written outside the folder. It finds the roms\ folder next to itself and loads the firmware automatically. With no cartridge it boots the console's diagnostic demo — if that runs, your setup is correct.

To play a game, drop its cartridge image next to madsim.exe as cart.bin, or point at it: madsim.exe --cart mygame.bin. The C.E.T.A.S. download comes with madsim already bundled, so it needs none of this.

Controls

Arrow keys / Right Ctrl / Right Shiftjoystick 1 — move, fire, second fire
W A S D / Left Shift / Left Ctrljoystick 2 — move, fire, second fire
Space or Ppause / resume
Mmute / unmute audio
− and =music ↔ sound-effects mixer knob
F5reset — as if you had pulled the /RESET line
F8display filter: plain, B/W CRT, green, amber, blue phosphor
F11borderless fullscreen
F12rotate the screen 90° clockwise, for vertical (TATE) games
F3 / F2utilization meter / dump machine state (developer info)
Escquit

MAD-65 was designed to be seen on a CRT — that is what the F8 filters are for. On a flat panel they are the closest you will get to the picture as it was intended.

Gamepads

A USB gamepad is picked up automatically — no configuration and no flags. The first pad connected drives joystick port 1, a second one port 2. Unplug a pad and its port falls back to the keyboard; both sources work at once, and hot-plugging works while the simulator is running.

The D-pad and the left stick steer. The two vertically opposed face buttons are fire, the two horizontally opposed ones are second fire — each line is wired to both buttons of its pair, so it does not matter which one your thumb finds. The right stick is deliberately ignored.

A PS1/PS2-to-USB adapter has to be in analogue mode (press ANALOG, LED on). In digital mode the pad reports its right stick as the face buttons and its D-pad as the left stick, and nothing downstream can tell those apart from real presses — so the right stick appears to fire.

The utilization meter

F3 shows how much of each frame CPU1 and the GPU actually used, and how much of that went on wait states. For anyone writing a game it is the quickest answer to the only question that matters on this machine: is there still room in the frame?

What it does not do

Video is a snapshot taken once per frame at VSYNC — which is exactly what a frame is, and right for writing games. madsim does not model what the video circuit is doing mid-scanline, so raster tricks inside a frame need the gate-level Verilator simulator that lives in the MAD-65 sources instead.

The frame model is sequential: CPU1 runs a whole frame, then the GPU, then the buffers swap. That is faithful rather than approximate, because the two processors only ever talk through the ping-pong shared RAM, and that swaps at the frame boundary anyway.

Release notes

Short notes. The full changelog is in the download.