Space Invaders na STM32 – projekt mini-konsoli z VGA dla oldschoolowych graczy

Space Invaders na STM32 – projekt mini-konsoli dla oldschoolowych graczy

Space Invaders to jedna z pierwszych gier cyfrowych z kategorii shoot’em up, opracowana przez Tomohiro Nishikado, ukazała się na rynku  w 1978. Gra polega na niszczeniu kolejnych fal kosmitów przy użyciu działka i na gromadzeniu – przy tej okazji – punktów. Księga Rekordów Guinnessa wymienia grę jako „top arcade game” (najważniejszą grę na automaty), a postać jednego z bohaterskich kosmicznych wrogów została ikoną wszystkich gier komputerowych.

Prostota gry – zarówno od strony jej obsługi, mało wyrafinowanej grafiki i praktycznie braku fabuły – stała się jej poważnym atutem w erze mikroprocesorów taktowanych gigantycznymi „zegarami”, dochodzącymi w wyrafinowanych systemach nawet do kilku MHz. W artykule przedstawiamy sposób zaimplementowania tej gry na mikrokontrolerze STM32F103, którego zasoby z dużym zapasem wystarczają do obsługi zarówno samej gry, jak i wytworzenia sygnału wideo w standardzie VGA.

Na poniższym filmie pokazano fragment przykładowej rozgrywki i wygląd prostej konsolki, której płytka drukowana powstała w redakcji portalu MIKROKONTROLER.pl.

Schemat elektryczny konsoli na której uruchomiono grę pokazano na rysunku 1. Są na nim widoczne wszystkie połączenia niezbędne do prawidłowego funkcjonowania gry. Rolę interfejsu użytkownika tworzą trzy przyciski (lewo – S1, prawo – S2 oraz strzał – S3) oraz programowo zrealizowany generator sygnału wideo, który jest podawany na 15-stykowe złącze VGA. Mikrokontroler U2 wytwarza zarówno 1-bitowy sygnał wideo (sterowana jest linia VGA odpowiadająca za składową obrazu w kolorze zielonym), jak i sygnały synchronizujące V_SYNC i H_SYNC.

 

Rys. 1. Schemat elektryczny konsoli Space Invaders na mikrokontrolerze STM32

Rys. 1. Schemat elektryczny konsoli Space Invaders na mikrokontrolerze STM32

 

Do mikrokontrolera dołączono złącze JTAG/SWD (Con1), które umożliwia zaprogramowanie jego pamięci Flash jak i debugowanie pracy podczas uruchamiania własnego programu. Układ U1 jest stabilizatorem LDO zapewniającym właściwą wartość napięcia zasilającego mikrokontroler (3,3 V), napięcie zasilające o wartości 5 V jest podawane na złącze USB (Con2). Dioda LED D1 sygnalizuje dołączenie do płytki napięcia zasilającego, kondensatory C1 i C2 oraz C5…C8 odpowiadają za odsprzężenie linii zasilającej.

 

Rys. 2. Płytkę drukowana konsoli zaprojektowano za pomocą Altium Designera (projekt do pobrania na dole strony)

 

Oprogramowanie do prezentowanej gra powstały jako przykład modułu z mikrokontrolerem STM32 firmy Artekit, grę można więc zaimplementować na dowolnej platformie z mikrokontrolerem STM32. Żeby ułatwić zabawę konstruktorom, którzy chcą skupić się na poprawianiu lub modyfikacji przykładowego oprogramowania, opracowaliśmy niewielką płytkę drukowaną zawierająca wszystkie elementy konsoli – jej wygląd w oknie Altium Designera pokazano na rysunku 2. Pliki projektu PCB są dostępne do pobrania poniżej.

Do pobrania

O autorze