
JA Achtung Compact is a two-player "Achtung, die Kurve!" style game on a single Tiny Tapeout tile. Each player steers a moving head that leaves a permanent trail; touching a wall or any trail ends the round.
The chip has no internal framebuffer. Instead it uses an external QSPI PSRAM (APS6404L) as a 1-bit-per-cell occupancy framebuffer and generates 640x480@60 VGA directly:
Player input comes from the Tiny Tapeout Gamepad PMOD (two SNES-style controllers on one serial interface). A compact decoder extracts only the buttons the game needs: L/R shoulder buttons turn each player 90 degrees (edge-triggered), and Start restarts the round after a game over. Player 2's trail is drawn with a woven "groove" sub-pattern so the two monochrome trails are distinguishable.
rst_n low before powering the PSRAM. After PSRAM VDD is stable,
keep rst_n low for at least 150 us. During this hold the chip keeps the
external PSRAM clock low, all chip-select outputs high, and all four SIO lines
actively low, as required by the APS6404L power-up specification. The
50 MHz system clock may already be running.In simulation, the full verification suite lives in Game Simulation/tests/:
game-logic traces compared bit-exactly against a Python reference model, a
pixel-exact VGA capture test through the real QSPI read path, and a
full-system smoke test through the gamepad protocol. See
Game Simulation/README.md.
| # | Input | Output | Bidirectional |
|---|---|---|---|
| 0 | VGA R1 | Flash CS# (unused, high) | |
| 1 | VGA G1 | QSPI PSRAM IO0 | |
| 2 | VGA B1 | QSPI PSRAM IO1 | |
| 3 | VGA VSync | QSPI PSRAM SCK | |
| 4 | Gamepad PMOD latch | VGA R0 | QSPI PSRAM IO2 |
| 5 | Gamepad PMOD clock | VGA G0 | QSPI PSRAM IO3 |
| 6 | Gamepad PMOD data | VGA B0 | QSPI PSRAM CS# |
| 7 | VGA HSync | PSRAM B CS# (unused, high) |