Hooper's Heaven
An embedded basketball game on an MSPM0G3507 with real-time physics, a bilingual UI, and audio feedback — all running on a 30 Hz interrupt loop.
The problem
A basketball game needs a physics engine that feels responsive and correct on a microcontroller with no OS and no floating-point convenience — motion, gravity, and collision all have to run reliably inside a fixed timing budget, while the display keeps redrawing without visible artifacts.
Approach
A 30 Hz interrupt service routine drives the whole game: integer projectile motion with gravity accumulation, and backboard collision detection, all computed within each ISR tick. Input comes from an ADC-driven potentiometer, and the UI runs on an ST7735 LCD with a bilingual interface and audio feedback layered on top. The display’s biggest correctness problem was LCD smearing — the ball leaving a visual trail as it moved — solved by tracking the ball’s position every frame and redrawing the HUD text specifically where the ball had just erased it, rather than redrawing the whole screen every tick.
Results
A fully playable embedded basketball game with correct physics, a clean display with no smearing artifacts, and a bilingual interface — running entirely within a 30 Hz real-time budget on a microcontroller.