MES
Edutainment System

A civic-education cartridge that runs on a 1985 console. Not an emulator skin and not a retro-styled web page — a 128 KiB ROM, a discrete-logic board, and a printable shell, so a public-records game can be handed to somebody as an object.

The software is OpenArcade, ported from the Perfect World module of the same name. Its original idea — the cabinet is permanent, games are cartridges — turned out to map onto the hardware almost exactly: one 16 KiB program bank is one cartridge slot, and the cabinet lives in the bank the console keeps mapped at all times.

On the cartridge 2 of 4 slots used

Slot 1 · bank 0

Camino Real

A civic survival run north along El Camino Real de Tierra Adentro, a donkey pulling a tarp-covered Cybertruck. Fifteen real stops from El Paso del Norte to Santa Fe, three roles, seven resources, trail and town events, and a public-records deck that trades information against water, food, cash and time.

Slot 2 · bank 1

System Check

The diagnostic cartridge, and the board bring-up tool. Reports mapper, PRG size, CHR-RAM and mirroring; scans all seven swappable banks through the mapper; write/read tests CHR-RAM and work RAM; live controller readout; twelve-colour bar pattern. Run this first on any board you build.

Slots 3–4 · banks 2–6

Empty, and wired

Reserved for future cartridges. The unused banks already carry their signatures, so the bank scan proves the whole 128 KiB is reachable before there is anything in it. Adding a game is a new source file and one row in the catalog.

Project area — the board PWP-UNROM-128

Discrete UNROM, iNES mapper 2. 128 KiB of program ROM in eight 16 KiB banks, with the console supplying 8 KiB of character RAM. Two 74-series chips do the whole job — no mapper ASIC, no CPLD, nothing that needs programming beyond the ROM itself.

PWP-UNROM-128 — MES Edutainment System cartridge schematic Discrete UNROM (iNES mapper 2) cartridge: 128 KiB PRG-ROM, 74HC161 bank latch, 74HC32 used as write strobe and bank/fixed multiplexer, 8 KiB CHR-RAM supplied by the console. CARTRIDGE — DISCRETE UNROM Signal names are from the console's point of view. Active-low is marked with a leading slash. PWP-UNROM-128 MES Edutainment System — cartridge iNES mapper 2 (UxROM) · 128 KiB PRG · 8 KiB CHR-RAM The Perfect World Project · sheet 1 of 1 EDGE CONNECTOR 72 pin · 2.50 mm pitch CPU A0–A13 CPU A14 CPU D0–D7 CPU R/W /ROMSEL PPU A10 PPU A11 CIRAM A10 PPU /A13 CIRAM /CE +5V / GND 2–13, 39, 40 41 42–49 14 50 63 62 22 58 57 36 · 1, 72 ≥1 U3a 74HC32 · 1,2 → 3 1 2 3 bank write strobe /ROMSEL → ROM /CE U2 74HC161 quad D latch — bank register 2 CP 3 D0 4 D1 5 D2 9 /PE 1 /MR Q0 14 Q1 13 Q2 12 D0–D2 CPU D0–D7 GND +5V ≥1 U3b ≥1 U3c ≥1 U3d CPU A14 high — all three gates forced high — fixed bank U1 PRG-ROM 128 KiB × 8 JEDEC 32-pin · 5 V · ≤150 ns A14 A15 A16 A0–A13 D0–D7 /CE CPU A0–A13 STRAPPING /OE → GND /WE, /PGM, VPP → +5V A17–A18 → GND (512K) VCC → +5V, VSS → GND MIRRORING — CLOSE ONE PAD V : CIRAM A10 ← PPU A10 (pin 63) H : CIRAM A10 ← PPU A11 (pin 62) CIRAM /CE ← PPU /A13 (57 ← 58) This ROM's header declares VERTICAL. Nothing scrolls, so the other build still plays. POWER C1–C3 100 nF ×3 one per IC, at its VCC pin C4 10 µF bulk near the edge fingers R1 10 kΩ → /MR HOW THE BANK SWITCH WORKS A CPU write to $8000–$FFFF pulls /ROMSEL and R/W low, so U3a goes low. At the end of the cycle /ROMSEL returns high, U3a rises, and that edge latches D0–D2 into U2. U2 then drives the ROM's A14–A16 through U3b/c/d — but each gate is OR'd with CPU A14, so any read of $C000–$FFFF forces all three high and the last bank appears no matter what the latch holds. That is the fixed kernel window.

Why two chips is the whole mapper

The 74HC161 is a counter used as a four-bit latch: it holds the bank number. The 74HC32's four OR gates do double duty — one makes the write strobe from /ROMSEL and R/W, and the other three OR the latch outputs with CPU A14. That last trick is the entire fixed-bank mechanism: whenever the processor reads $C000–$FFFF, A14 is high, all three address lines are forced high, and the last bank appears no matter what the latch holds.

Bus conflicts are real on this board. The ROM is still driving the data bus during a bank write, so the value written has to match the byte already stored at that address. The ROM handles it: the bank switch reads its number out of a table in the fixed bank and writes it straight back to its own address, which makes the two equal by construction.

Bill of materials

RefPartPackageNote
U1PRG-ROM 128 KiB × 8, 5 V, ≤150 nsJEDEC 32-pinSST39SF040 or AT28C010
U274HC161 — 4-bit counter as a quad D latchDIP-16 / SOIC-16the bank register
U374HC32 — quad 2-input ORDIP-14 / SOIC-14strobe + multiplexer
C1–C3100 nF ceramic X7R0805one per IC, at its VCC pin
C410 µF electrolytic or tantalumbulk, near the fingers
R110 kΩ0805pull-up on /MR
PCBFR-4, gold-flash or ENIG edge fingers2.50 mm pitch1.2 mm thick, not 1.6
Shell3D printed, two halves + 2 × M2×8PETG or ABSparametric source included

Fabrication quotable now, not buildable yet

The board is generated by script from measured dimensions rather than drawn by hand, so every number is traceable to a source and a correction regenerates every layer at once. What follows is plotted back from the Gerbers that would be sent — not from the data they came from — so a fault in the output shows up as a wrong picture instead of shipping quietly.

The PWP-UNROM-128 board plotted from its own Gerbers: green
              soldermask, the Perfect World seal and board identity in white
              silkscreen at the top right, 72 gold edge fingers along the
              bottom, and the narrower card-edge tongue stepping in at each
              side.

Multi-source by design

Component shortages are the expected failure, not the unlikely one, so the board is not tied to a part number. It targets the signals a 1 Mbit ROM needs and brings the four pins that differ between families out to solder jumpers, so six different ROMs strap onto the same bare board. The logic footprints are overlapping DIP and SOIC, which means one board can be hand-soldered with an iron or machine-assembled for a run — without a respin between them.

What the fabricator has to be told

ItemValueWhy it matters
Thickness1.20 mmEvery prototype house defaults to 1.6 mm. A 1.6 mm board will not seat, and forcing it splays the console's connector permanently.
Gold fingersHard gold, 72 fingers, 2.50 mm pitchENIG alone is soft plating that wears through after a few dozen insertions.
Edge bevel30–45° lead-in, both facesWithout it the board chews the connector on insertion. Usually skipped unless asked.
SoldermaskNone over the tongueMask left on a contact finger cannot be fixed after fabrication.
Board size100.00 × 65.50 mm, 2 layersFrom the measured cartridge drawing, not from a guess.
The profile package is for a quote, not for boards. It contains the outline, all 72 gold fingers, the soldermask clearance and the legend — every feature that makes this board unusual and expensive — so a fabricator can price it and check it before any time goes into routing copper. It deliberately contains no circuit. Do not build from it.

The one thing still gated

The ROM's pin mapping is the standard JEDEC 32-pin arrangement, but it has not been confirmed against a manufacturer datasheet. Committing remembered pin numbers to fabricated copper is not acceptable, so the generator refuses to emit the full package until that check is recorded. Everything else — outline, card edge, netlist, logic footprints — is independent of it.

Getting the ROM onto a chip three routes

The mistake that breaks every first attempt: an .nes file is 16 bytes of header followed by the ROM. Burn it as-is and every byte lands 16 addresses late. Burn the .bin — it must be exactly 131,072 bytes.
Route A · no soldering

Off-the-shelf cartridge

Buy a blank UNROM-512 flash cart and its programmer. That mapper is a superset of ours, so the ROM runs after one repacking step that moves the kernel into the bank the hardware keeps fixed. Fastest path to a physical unit.

Route B · one chip swap

Donor cartridge

Because this is stock UNROM/128 KiB, an NES-UNROM donor becomes an MES cartridge by replacing a single chip — no mapper work at all. Contra, Castlevania, Mega Man, Metal Gear and Duck Tales are all suitable. Buy beaters, not boxed copies.

Route C · the real product

Build the board

Fabricate PWP-UNROM-128 and populate it. Two weeks of lead time and the only route that scales to a run. Do A or B first — prove the ROM on real hardware before anyone places a PCB order.

Acceptance test

Every finished cartridge runs slot 2, System Check before it gets a label. Bank scan must read OK for banks 0–6 and KE for the kernel bank; any -- means that bank is unreachable and the fault is in the latch, the multiplexer, or a ROM address line. Then CHR-RAM and work RAM must pass, every button must register, and the colour bars must be clean.

Status honest

  • ROM builds — 128 KiB, mapper 2, NES 2.0 header, all bank signatures verified
  • Cabinet, insert and eject round trip through the mapper
  • System Check passes every self-test in emulation
  • Camino Real playable start to finish — full run to Santa Fe, both endings
  • Schematic, bill of materials and bring-up procedure written
  • Printable shell — both halves manifold, exported, dimensioned
  • Board geometry traceable to the measured cartridge drawing, self-checked
  • Netlist complete — 39 nets, no pin on two nets, every required pin connected
  • Profile package generated and plotted back from its own Gerbers
  • ROM pin mapping not yet datasheet-confirmed — generator refuses the full package
  • Footprints, placement and routing not done
  • No PCB fabricated
  • No chip burned
  • No shell printed
  • Never run on real hardware — the first physical unit is the first hardware test
  • Lockout policy undecided: an unmodified front-loader will blink without a CIC

Everything above the line is verified in emulation. Nothing below it has been attempted. The build documentation is written as the script to follow the first time, not as a report of something that already happened.