
MAW Bird Shooter is a fully synthesized single-player arcade game fabricated as a Tiny Tapeout ASIC. It drives a 640×480 60 Hz VGA display directly from the chip's output pins using a 50 MHz system clock.
Game loop
The screen shows an animated bird wandering across the display and a player-controlled crosshair. The player has 10 shots to aim and fire. Each shot is immediately scored as a HIT (crosshair overlaps the bird bounding box) or MISS. After each shot, a brief HIT or MISS overlay is shown before the next round begins. The bird respawns at a pseudo-random position after every shot. Win condition: 7 or more hits out of 10 (≥ 70%). Press SHOOT on the win or lose screen to restart.
Architecture
game_state_fsm — central FSM controlling game flow: RESET → START_SCREEN → SHOOTING → HIT / HIT_DELAY → MISS / MISS_DELAY → WON / LOST.crosshair_control — moves the crosshair one step per game tick while a directional button is held.enemy_movement — animates the bird along a triangle-wave trajectory seeded by two independent 16-bit LFSRs, giving varied spawn positions and movement paths.bird_animated — cycles through five bird sprite frames to produce a flapping wing animation.render_engine + vgatiming — composites all sprites (bird, crosshair, HIT/MISS/WON/LOST overlays, shot-counter UI) and outputs standard VGA sync signals with 1-bit-per-channel RGB colour.{HSYNC, VSYNC, R, G, B, GND, GND, GND} on uo[7:0].Button wiring note: All button inputs are active-high — a logic 1 means the button is pressed. The ASIC has no internal pull resistors on these pins, so each must be held at logic 0 via a 10 kΩ pull-down resistor to GND when idle, and driven to VCC when pressed. Do not use pull-up resistors, as that would invert the polarity and the buttons will not work correctly.
| # | Input | Output | Bidirectional |
|---|---|---|---|
| 0 | |||
| 1 | |||
| 2 | |||
| 3 | BTN_SHOOT (active-high, pull-down externally) | VGA_B (Blue, 1-bit) | |
| 4 | BTN_RIGHT (active-high, pull-down externally) | VGA_G (Green, 1-bit) | |
| 5 | BTN_LEFT (active-high, pull-down externally) | VGA_R (Red, 1-bit) | |
| 6 | BTN_DOWN (active-high, pull-down externally) | VGA_VSYNC | |
| 7 | BTN_UP (active-high, pull-down externally) | VGA_HSYNC |