Klon słynnego Tetrisa napisany w asemblerze. Mieści się całkowicie w 512 bajtach sektora rozruchowego (wymaga tylko 446 bajtów miejsca, czyli po prostu największy rozmiar bootloader w MBR).

MBR - sekcja zawierająca kod i dane niezbędne do późniejszego uruchomienia systemu operacyjnego i znajdująca się w pierwszych sektorach fizycznych. Pierwsze 446 bajtów dysku jest przekazywane do kodu bootloadera. To w tym miejscu nagrywany jest TetrOS.

Oczywiście dzięki takim właściwościom jest ładowany przed każdym system operacyjny- nie wymaga żadnego systemu operacyjnego, działa samodzielnie. Tak, dobrze słyszałeś, TetrOS to własny bootloader.

Tak to wygląda na ekranie:

A źródło w sektorze rozruchowym wygląda tak:

I tak to jest całośćźródło. Pamiętasz, że waży tylko 446 bajtów?

Możliwe jest uruchomienie tego „cudownego systemu operacyjnego” pod qemu lub nawet zainstalowanie go na żywo partycja rozruchowa dysk lub dysk flash.

początek

Wystarczy zainstalować qemu:

sudo apt-get zainstaluj qemu

i biegnij:

Pobierz na dysk flash

Skopiuj obraz na dysk flash. Załóżmy, że jeśli dysk flash jest zamontowany jako /dev/sde , musisz uruchomić następujące polecenie, aby na nim pisać sektor rozruchowy TetrOS:

sudo dd if=tetros.img of=/dev/sde

Opis gry

Deweloperowi udało się upchnąć nie najnudniejszy projekt do zaledwie 512 bajtów pamięci. Każda cegła w grze ma swój własny kolor, sterowanie odbywa się za pomocą przycisków, w przypadku porażki gra się kończy, klocki są generowane losowo... BolgenOS nie był nawet blisko!

Niestety ze względu na rozmiar z niektórych funkcji trzeba było zrezygnować. W grze nie ma punktacji, ponowne uruchamianie gry bez ponownego ładowania i wyświetlania następnego klocka.

WPROWADZANIE Mikrokontrolery, ich występowanie i zastosowanie
Historia mikrokontrolerów
Elektronika w greckim stylu
Dlaczego AVR?
Co dalej?

CZĘŚĆ I. OGÓLNE ZASADY KONSTRUKCJI I FUNKCJONOWANIA ATMEL AVR

Rozdział 1 Przegląd mikrokontrolerów Atmel AVR

Rodziny AVR
Cechy praktycznego zastosowania MK AVR

Rozdział 2. Ogólny układ, organizacja pamięci, taktowanie, resetowanie

Pamięć programu
Pamięć danych (RAM, SRAM)
Nieulotna pamięć danych (EEPROM)
Metody taktowania
Resetowanie
Funkcje podłączenia dodatkowej zewnętrznej pamięci danych

Rozdział 3. Wprowadzenie do urządzeń peryferyjnych

Porty we/wy
Liczniki czasowe
Analogowy do cyfrowego konwertera
Porty szeregowe
UART
Interfejs SPI
Interfejs TWI (12C)
uniwersalny interfejs szeregowy USI

Rozdział 4 Przerwania i tryby oszczędzania energii

Przerwania
Rodzaje przerwań
Tryby oszczędzania energii
Zużycie MK AVR
Zużycie energii i tryby oszczędzania energii MK AYR

CZĘŚĆ DRUGA. PROGRAMOWANIE MIKROKONTROLERÓW ATMEL AVR

Rozdział 5. Ogólne zasady programowania rodziny MK AVR

Asembler czy C?
Sposoby i środki programowania AVR
Edytor kodu
O AVR Studio
Aranżacja montera
programiści
O plikach szesnastkowych
Polecenia, instrukcje i notacja montażowa AVR
Liczby i wyrażenia
Dyrektywy i funkcje
Ogólna struktura programu AVR
Obsługa przerwań
RESETOWANIE
Najprostszy program
Opóźnienie
Program licznika
Korzystanie z przerwań
Opóźnienie timera
Program licznika przerwań
O bitach konfiguracyjnych

Rozdział 6 System poleceń AVR

Polecenia transferu sterowania i rejestr SREG
Polecenia check-pass
Polecenia logiczne
Instrukcje przesunięcia i operacje na bitach
Polecenia do operacji arytmetycznych
Polecenia przesyłania danych
Polecenia sterowania systemem
Wykonywanie typowych procedur w asemblerze
O stosie, zmiennych lokalnych i globalnych

Rozdział 7 Operacje arytmetyczne

Standardowe operacje arytmetyczne
Mnożenie liczb wielocyfrowych
Dzielenie wielocyfrowe
Operacje na liczbach ułamkowych
Generator liczb losowych
Operacje na liczbach w formacie BCD
Liczby ujemne w MK

Rozdział 8 Programowanie timerów

8 i 16-bitowe timery
Tworzenie wartości zadanej częstotliwości
Odliczanie
Dokładna korekta czasu
Miernik częstotliwości i miernik okresu
Miernik częstotliwości
Periodometr
Dynamiczna kontrola wskazania
Wskaźniki LED i ich połączenie
Programowanie wskazanie dynamiczne
Timery w trybie PWM

Rozdział 9 Korzystanie z EEPROM

Jeszcze raz o bezpieczeństwie danych w EEPROM
Napisz i przeczytaj EEPROM
Przechowywanie stałych w EEPROM

Rozdział 10 Komparator analogowy i ADC

Operacje analogowo-cyfrowe i ich błędy
Praca z komparatorem analogowym
Integracja ADC na komparatorze
Zasada działania i wzory obliczeniowe
Integracja programu ADC
Wbudowany przetwornik ADC
Przykład ADC
Program

Rozdział 11 Programowanie SPI

Podstawowe operacje przez SPI
Opcja sprzętowa
Opcja oprogramowania
O odmianach pamięci nieulotnej
Zapisuj i czytaj pamięć flash przez SPI
Program wymiany pamięci 45DB011B przez SPI
Pisanie i czytanie fiszek
Podłączanie kart MMS
Wydawanie poleceń i inicjowanie MMC
Pisanie i czytanie MMS

Rozdział 12. Interfejs TWI (12C) i jego praktyczne zastosowanie

Protokół podstawowy 12C
Emulacja oprogramowania protokołu 12C
Zapis danych do zewnętrznej pamięci nieulotnej
Tryby wymiany z pamięcią AT24
Program
Zegar z interfejsem 12C
Rejestracja danych
Czytanie danych

Rozdział 13 Programowanie UART/USART

Inicjalizacja UART
Wysyłanie i odbieranie danych
Przykład ustawienia zegara DS1307 za pomocą UART
Techniki ochrony przed awariami komunikacji
Parzysty parzystość
Jak zorganizować prawidłową wymianę
Dodatkowe funkcje USART
Implementacja interfejsów RS-232 i RS-485
Konwertery poziomów dla RS-232
RS-485

Rozdział 14 Tryby oszczędzania energii i zegar nadzoru

Programowanie oszczędzania energii
Przykład instrumentu zasilanego bateryjnie
Dopracowanie programu
Korzystanie z licznika czasu nadzoru

APLIKACJE

Załącznik 1. Główne parametry mikrokontrolerów Atmel AVR

Załącznik 2 Polecenia Atmel AVR
Instrukcje arytmetyczne i logiczne
Polecenia operacji bitowych
Komendy porównania
Polecenia transferu sterowania
Bezwarunkowe instrukcje skoku i wywołania podprogramu
Pomiń kontrolę i instrukcje rozgałęzienia warunkowego
Polecenia przesyłania danych
Polecenia sterowania systemem

Dodatek 3 Teksty programu
45DB011B program demonstracyjny komunikacji z pamięcią flash za pośrednictwem interfejsu SPI
Procedury wymiany na interfejsie 12C

Dodatek 4 Komunikacja z komputer osobisty i debugowanie programów przez UART
Praca z portem COM w Delphi
Port COM i Windows API
Praca z COM poprzez gotowe komponenty
Instalacja linii RTS w DOS i Windows
Program COM2000
Debugowanie programów za pomocą programu terminalowego

Dodatek 5 Słowniczek powszechnie stosowanych skrótów i terminów
Korespondencja terminów w języku rosyjskim z ich tłumaczeniem na język angielski
Korespondencja terminów w języku angielskim z ich tłumaczeniem na język rosyjski

Literatura
Indeks tematyczny

Jakoś zobaczyłem w sieci ciekawy filmik, który pokazał grę w węża zaimplementowaną na mikrokontrolerze i matrycy LED 8x8, potem znalazłem jeszcze kilka podobnych filmów, które mnie zainteresowały. Wśród nich znalazło się również wideo, w którym gra Tetris została zmontowana na „potężnym” mikrokontrolerze. Po obejrzeniu postanowiłem opracować własną wersję urządzenia, w której łączy się obie gry, wykorzystując mikrokontroler PIC16F688 oraz dwie matryce LED, które wyświetlają pole gry o rozdzielczości 8x16 pikseli.

Schemat urządzenia pokazano poniżej. Wyprowadzanie informacji na macierz H1, H2 w trybie dynamicznym odbywa się za pomocą rejestrów przesuwnych DD2, DD3, DD4. Wyjścia mikroukładów DD2, DD3 są połączone z anodami matryc. Katody obu matryc są połączone z kolektorami tranzystorów VT1-VT8, których sygnały sterujące są generowane przez układ DD4. Mikrokontroler ładuje dane do rejestru DD4, gdy się przepełni, informacje z 9. wyjścia są przesyłane na wejście rejestru DD3, następnie w ten sam sposób dane są przesyłane do rejestru DD2. Rezystory R1-R16 ograniczają prąd płynący przez diody LED matrycy. Rezystory R17-R23 ustawiają prąd bazowy tranzystorów VT1-VT8. Mikrokontroler działa z częstotliwością 8 MHz z wewnętrznego oscylatora. Częstotliwość odświeżania obrazu wynosi 100 Hz.


Po włączeniu zasilania na polu gry wyświetlany jest wygaszacz ekranu gry „Wąż”. W górnej części pola wyświetlana jest cyfra 1, w dolnej znajduje się obraz fragmentu gry. Po naciśnięciu przycisku „Start / Pauza” SB5 przechodzisz do menu gry, na górze którego wyświetlany jest poziom gry w postaci liczb od 1 do 9. Poziom gry jest ustawiany za pomocą SB1 „Up” przycisk, za każdym naciśnięciem numer poziomu zwiększa się sekwencyjnie o jednostkę. Po cyfrze 9 ponownie wyświetla się cyfra 1. Od ustalony poziom Gra zależy od początkowej długości węża, więc dla 1 poziomu długość wynosi 3 punkty, dla 9 11 punktów. Na dole menu wyświetlana jest informacja o prędkości węża. Liczba 1 odpowiada minimalnej prędkości, a 9 odpowiada maksymalnej. Wartość prędkości ustawia się przyciskiem „W dół” SB4, podobnie jak ustawianie poziomu gry. Świecenie diod LED na obwodzie pola w menu oznacza, że ​​wybrany jest tryb gry z obecnością granic na obwodzie pola. W tym trybie, gdy wąż opuszcza pole gry, następuje strata. Jeśli w menu diody LED na obwodzie pola są wyłączone, wybrany jest tryb bez granic. W takim przypadku, opuszczając pole gry, głowa węża pojawia się po przeciwnej stronie pola. Przyciski SB2 „Prawo” i SB3 „Lewo” ustawiają żądany tryb gry. Kiedy po raz pierwszy wejdziesz do menu gry, wartość długości i prędkości są ustawione na jeden, wybierany jest tryb z obecnością granic.

Po naciśnięciu przycisku „Start / Pauza” z menu gry, na polu gry wyświetlany jest wąż w pozycji podstawowej i losowy wolny punkt. Naciśnięcie dowolnego z przycisków „W górę”, „W lewo”, „W prawo” powoduje, że wąż porusza się w odpowiednim kierunku. Po rozpoczęciu ruchu dostępny staje się również przycisk „W dół”, umożliwiający sterowanie wężem. Po uderzeniu w świetlisty punkt zwiększa się długość węża. Po zebraniu 14 punktów gracz przechodzi na kolejny poziom gry. Po 9 poziomie następuje przejście na poziom pierwszy. Jeśli wąż uderzy we własne ciało lub wyjdzie z pola gry w trybie granicznym, następuje strata. Po 3 przegranych wracasz do menu gry, gdzie wskazany jest aktualny poziom i szybkość gry. Gdy wąż zacznie się poruszać, naciskając przyciski „Start / Pauza”, możesz wstrzymać i wznowić grę.

Aby wyjść z menu gry, przytrzymaj przycisk „Start / Pauza” przez 1 sekundę, po czym na polu gry pojawi się ekran powitalny gry. Przełączanie między grami odbywa się poprzez naciśnięcie dowolnego z przycisków „W górę”, „W dół”, „W lewo”, „W prawo”. Jednocześnie wyświetlany jest ekran powitalny odpowiedniej gry.

Cyfra 2 jest wyświetlana w górnej części ekranu powitalnego gry Tetris, a obraz fragmentu gry widoczny jest w dolnej części. Przejście do menu gry odbywa się poprzez naciśnięcie przycisku „Start/Pauza”. W górnej części menu wyświetlana jest liczba punktów zdobytych przez gracza. Za każdą przyznawane są punkty usunięta linia. Licznik punktów zlicza do 99, następnie resetuje się do zera i wynik rozpoczyna się od nowa. Na początku każdego Nowa gra, licznik również jest resetowany. W dolnej części menu wyświetlane są informacje o prędkości ruchu elementów, którą ustawia się odpowiednio przyciskami „Góra”, „Dół”. Po naciśnięciu przycisku „Start/Pauza” z menu rozpoczyna się gra, w górnej części pola pojawiają się losowe figury, które można przesuwać przyciskami „W lewo” i „W prawo” w odpowiednim kierunku. Przycisk W górę obraca kształt o 90 stopni zgodnie z ruchem wskazówek zegara za każdym naciśnięciem. Przytrzymując przycisk „W dół”, możesz przyspieszyć ruch postaci. Przycisk „Start/Pauza” umożliwia wstrzymanie i wznowienie gry. Gra kończy się, gdy nowa figurka nie mieści się na polu gry, po czym następuje przejście do menu, w którym można zobaczyć liczbę zdobytych przez gracza punktów. Wyjście z menu odbywa się w taki sam sposób jak w grze „Wąż”.

Jeśli żaden z przycisków nie zostanie naciśnięty w ciągu 4 minut, urządzenie przechodzi w tryb niskiego poboru mocy, mikrokontroler wyłącza matryce LED i przechodzi w tryb uśpienia. Urządzenie „wybudza się” po naciśnięciu przycisku „Start” i powraca do poprzedniego stanu.

W urządzeniu zastosowano rezystory - rozmiar 1206 do montażu natynkowego. Kondensatory C2, C3 - rozmiar ceramiczny 1206. Matryce LED H1, H2 - TOM-1088BG-B zielona poświata o średnicy diod LED 3mm i rozdzielczości 8x8 pikseli. Przyciski to standardowy zegar.

Źródłem zasilania jest zasilacz stabilizowany o napięciu 3,7-5V, można również zastosować ogniwa galwaniczne lub baterie np. 3 baterie 1,5V AA lub AAA połączone szeregowo np. ja używam 3 baterii AA. Urządzenie pozostaje sprawne, gdy napięcie zasilania spadnie do 3,3V, a jasność matryc LED spada.

Nazwa: Praktyczne programowanie mikrokontrolerów Atmel AVR w asemblerze 2 edycja

Wydawca:„BHV-Petersburg”

Rok wydania: 2011

Strony: 354

Język: Rosyjski

Format: DjVu

Rozmiar: 12,2 MB

Zasady działania, cechy architektury i techniki programowania mikrokontrolerów Atmel AVR nakładają się na siebie.

Podano gotowe receptury programowania głównych funkcji nowoczesnego sprzętu mikroelektronicznego: od reakcji po naciśnięcie przycisku lub budowanie dynamicznego wskazania, po złożone protokoły do ​​rejestracji danych w pamięć zewnętrzna lub funkcje połączenia zegara czasu rzeczywistego. Szczególną uwagę zwrócono na wymianę danych urządzeń mikroelektronicznych z komputerem osobistym, podano przykłady programów. Książka uwzględnia cechy nowoczesnych modeli AVR i powiązanych układów. ostatnie lata wydanie.
Aplikacja zawiera główne parametry mikrokontrolerów AVR, listę poleceń i tekstów. Aplikacja zawiera główne parametry mikrokontrolerów AVR, listę poleceń i tekstów programów dla nich, a także listę użytych pojęć i skrótów.
Dla studentów, inżynierów i radioamatorów

7. Mikrokontrolery, ich występowanie i zastosowanie
8. Prehistoria mikrokontrolerów
10. Elektronika w stylu greckim
12. Dlaczego AVR?
14. Co dalej?
17. CZĘŚĆ L OGÓLNE ZASADY PROJEKTOWANIA I DZIAŁANIA ATMEL AVR
19. Rozdział 1. Przegląd mikrokontrolerów Atmel AVR
21. Rodziny AVR
23. Cechy praktycznego wykorzystania MK AVR
23. Konsumpcja
25. Niektóre cechy zastosowania AVR w obwodach
27. Rozdział 2 Urządzenie ogólne, organizacja pamięci, taktowanie, reset
27. Pamięć programu
29. Pamięć danych (RAM, SRAM)
31. Nieulotna pamięć danych (EEPROM)
32. Metody pomiaru czasu
34. Zresetuj
37. Rozdział 3. Wprowadzenie do urządzeń peryferyjnych
38. Porty we/wy
39. Liczniki czasowe
41. Konwerter analogowo-cyfrowy
42. Porty szeregowe
43. UART
46. ​​Interfejs SPI
50. Interfejs TWI (I2C)
50. Uniwersalny interfejs szeregowy USI
53. Rozdział 4. Przerwania i tryby oszczędzania energii
53. Przerwania
57. Odmiany przerw
58. Tryby oszczędzania energii
61. CZĘŚĆ II. PROGRAMOWANIE MIKROKONTROLERÓW ATMELAVR
63. Rozdział 5 Ogólne zasady programowanie rodziny MK AVR
63. Asembler czy C?
67. Sposoby i środki programowania AVR
67. Edytor kodu
68. O AVR Studio
70. Układ asemblera
71. Programiści
75. O plikach szesnastkowych
78. Polecenia, instrukcje i zapis asemblera AVR
79. Liczby i wyrażenia
80. Dyrektywy i funkcje
84. Ogólna struktura programu AVR
85. Obsługa przerwań
89. RESETUJ
90. Najprostszy program
92. Opóźnienie
94. Program licznika
96. Korzystanie z przerwań
97. Opóźnienie czasowe
98. Program licznikowy wykorzystujący przerwania
101. O bitach konfiguracyjnych
105. Rozdział 6, System poleceń AVR
105. Kontroluj polecenia transferu i rejestruj SREG
111. Polecenia check-pass
113. Polecenia operacji logicznych
114. Instrukcje przesunięcia i operacje na bitach
116. Polecenia operacji arytmetycznych
118. Polecenia przesyłania danych
122. Polecenia sterowania systemem
123. Wykonywanie typowych procedur w asemblerze
125. O stosie, zmiennych lokalnych i globalnych
127. Rozdział 7. Operacje arytmetyczne
128. Standardowe operacje arytmetyczne
129. Mnożenie liczb wielocyfrowych
131. Podział liczb wielocyfrowych
134. Operacje na liczbach ułamkowych
136. Generator liczb losowych
138. Operacje na liczbach w formacie BCD
143. Liczby ujemne w MK
147. Rozdział 8. Programowanie timerów
147. 8 i 16-bitowe timery
149. Tworzenie wartości zadanej częstotliwości
153. Odliczanie
158. Dokładna korekta czasu
160. Licznik częstotliwości i miernik okresu
160. Miernik częstotliwości
164. Periodometr
167. Dynamiczna kontrola wskazania
168. Wskaźniki LED i ich połączenie
171. Dynamiczne wskazanie programowania
174. Timery w trybie PWM
179. Rozdział 9. Korzystanie z EEPROM
179. Jeszcze raz o bezpieczeństwie danych w EEPROM
181. Zapis i odczyt EEPROM
183. Przechowywanie stałych w EEPROM
187. Rozdział 10. Komparator analogowy i ADC
187. Operacje analogowo-cyfrowe i ich błędy
190. Praca z komparatorem analogowym
193. Integracja ADC na komparatorze
194. Zasada działania i wzory obliczeniowe
198. Integracja programu ADC
201. Wbudowany przetwornik ADC
204. Przykład użycia ADC
206. Program
215. Rozdział 11 Programowanie SPI
215. Podstawowe operacje przez SPI
216. Wariant sprzętowy
218. Opcja programu
219. O odmianach pamięci nieulotnej
221. Zapisywanie i odczytywanie pamięci flash przez SP!
224. Program do wymiany z pamięcią 45DB011B przez SPI
225. Pisanie i czytanie fiszek
225. Podłączanie kart MMS
228. Wydawanie poleceń i inicjowanie MMC
232. Pisanie i czytanie MMC
237. Rozdział 12. Interfejs TW1 (I2C) i jego praktyczne zastosowanie
237. Protokół podstawowy 1 2 C
240. Emulacja programowa protokołu I 2 C
241. Zapis danych do zewnętrznej pamięci nieulotnej
241. Tryby wymiany z pamięcią AT24
243. Program
247. Zegar z interfejsem I 2 C
255. Nagrywanie danych
259. Odczytywanie danych
261. Rozdział 13. Programowanie UART/USART
262. Inicjalizacja UART
263. Wysyłanie i odbieranie danych
266. Przykład ustawienia zegara DS1307 za pomocą UART
271. Techniki ochrony przed awariami komunikacji
271. Kontrola parzystości
273. Jak zorganizować poprawną wymianę?
274. Dodatkowe cechy USART
276. Implementacja interfejsów RS-232 i RS-485
280. Konwertery poziomów dla RS-232
283.RS-485
285. Rozdział 14. Tryby oszczędzania energii i zegar Watchdog
286. Programowanie trybu oszczędzania energii
287. Przykład instrumentu zasilanego bateryjnie
289. Udoskonalenie programu
293. Korzystanie z licznika czasu nadzoru
299. DODATKI
301. Załącznik 1. Główne parametry mikrokontrolerów Atmel AVR
309 Załącznik 2 Polecenia Atmel AVR
310. Polecenia arytmetyczne i logiczne
311. Polecenia operacji bitowych
312. Polecenia porównawcze
313. Polecenia przekazywania sterowania
313. Instrukcje skoku bezwarunkowego i wywoływania podprogramów
314. Polecenia pominięcia kontrolnego i polecenia skoku warunkowego
315. Polecenia przesyłania danych
316. Polecenia sterujące systemem
317. Załącznik 3. Teksty programów
317. Program demonstracyjny do wymiany danych z pamięcią flash 45DB011B przez interfejs SPI
321. Procedury wymiany przez interfejs I2C
329. Załącznik 4. Wymiana danych z komputerem osobistym i programy do debugowania poprzez UART
329. Praca z portem COM w Delphi
335. Instalacja linii RTS w DOS i Windows
337. Program COM2000
339. Debugowanie programów za pomocą emulatora terminala
341. Załącznik 5. Słowniczek powszechnie stosowanych skrótów i terminów
347. Literatura
349. Indeks tematyczny