PanBadge/README.md

3.3 KiB
Raw Permalink Blame History

Panagotchi

A Tamagotchi-style virtual pet for the CH32V003F4P6 badge — a hacker-themed creature that evolves from procuserroot, then either ascends to Claude or degrades into a glitch depending on how well you tend to it.

Fits in ~12 KB of the 16 KB flash budget.

Hardware

Pin Function
PA1 Indicator LED
PC0 OK button
PC1/PC2 SSD1306 128×64 OLED (I2C1)
PD2 Passive piezo buzzer
PD5 Right button
PD6 Left button

Powered by a CR2032 coin cell via a TLV61070A boost converter to 3.3V. See pinout.md for the full pin assignment and power architecture.

Gameplay

Controls: Left / Right move the menu cursor. OK activates the selected action.

Menu actions:

Icon Action Effect
Apple FEED +30 satiety, 5 hygiene
Ball PLAY +25 happy, 12 energy (requires energy ≥ 15)
Moon SLEEP Toggle nap; restores energy
Drop CLEAN Reset hygiene to 100, remove poop piles
Cross HEAL +35 health
Chart STATS Show stat bars + XP readout
Gear SETTINGS Screen timeout, brightness, sound

Stats decay on a ~15-second tick. Health responds to overall wellbeing — if any need drops below 15 it bleeds down; if all are above 50 it recovers. Let health reach 0 and the pet dies with a SEGFAULT (11).

Evolution (XP thresholds: 45 / 120 / 240):

proc  →  user  →  root  →  Claude (well-kept) / glitch (neglected)

Each stage gains a visual accessory: shades at user, a gaming headset and mic boom at root.

Species (chosen on the welcome screen):

  • Panko — the panda; full 7-expression animation set
  • Shell — a friendly CRT terminal with a > _ prompt mouth
  • Tmux — a split-pane terminal with a status bar

Building

Requires ch32v003fun checked out as a sibling directory.

# Generate sprites from source art
python3 sprites_gen.py > sprites.h

# Build and flash
make

Flash via the minichlink or wch-link programmer. The Makefile targets cv_flash / cv_clean from ch32fun.

Check real flash usage with:

riscv-none-elf-size tama.elf

Power saving

The OLED is the biggest power draw. When the screen-off timeout fires, the display is blanked and the MCU enters WFI light-sleep. Two wake sources:

  • Button press (EXTI falling edge on PC0/PD5/PD6) — lights the screen back up
  • TIM2 overflow (~once per game tick) — runs a background stat update and low-need chirp, without waking the display

SRAM and all pet state survive WFI; only the CPU clock is gated.

Brightness and screen-off timeout are adjustable in the settings menu.

Files

File Purpose
tama.c Main firmware: game logic, rendering, input, low-power
sprites_gen.py Python sprite generator — edit art here
sprites.h Auto-generated 1-bpp sprite data (do not edit)
funconfig.h ch32fun config overrides (disables printf backends)
pinout.md Full pin assignment and power architecture notes
OPTIMIZATION.md Flash size backlog and optimization notes