Клон знаменитого Tetris, написанный на ассемблере. Он целиком вмещается в 512 байт загрузочного сектора (ему требуется всего 446 байт места, это как раз максимальный размер загрузчика в MBR).

MBR - раздел, содержащий код и данные, необходимые для последующей загрузки операционной системы и расположенные в первых физических секторах. Самые первые 446 байт диска отдаются под код загрузчика. Именно в это место и записывается TetrOS.

Естественно, из-за таких свойств он загружается перед любой операционной системой - никакой ОС ему не требуется, он работает сам. Да-да, вы не ослышались, TetrOS - сам себе загрузчик.

Вот так это выглядит на экране:

А исходник на загрузочном секторе выглядит так:

И да, это весь исходник. Вы же помните, что он весит всего 446 байт?

Можно запустить эту «чудо-операционную систему» под qemu или даже по-настоящему установить на загрузочный раздел диска или флешки.

Запуск

Просто установите qemu:

sudo apt-get install qemu

и запустите:

Загрузка на флешку

Скопируйте образ на флешку. Допустим, если флешка подмонтирована как /dev/sde , вам понадобится выполнить следующую команду, чтобы записать на ее загрузочный сектор TetrOS:

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

Описание игры

Разработчик сумел всего в 512 байт памяти впихнуть не самый скучный дизайн. У каждого кирпичика в игре есть свой цвет, управление производится кнопками, в случае поражения игра завершается, кирпичики генерируются случайным образом… BolgenOS и рядом не стояла!

К несчастью, из-за размера от некоторых фич пришлось отказаться. В игре нет подсчета очков, рестарта игры без перезагрузки и отображения того, каким будет следующий кирпичик.

ВВЕДЕНИЕ. Микроконтроллеры, их возникновение и применение
Предыстория микроконтроллеров
Электроника в греческом стиле
Почему AVR?
Что дальше?

ЧАСТЬ I. ОБЩИЕ ПРИНЦИПЫ УСТРОЙСТВА И ФУНКЦИОНИРОВАНИЯ ATMEL AVR

Глава 1. Обзор микроконтроллеров Atmel AVR

Семейства AVR
Особенности практического использования МК AVR

Глава 2. Общее устройство, организация памяти, тактирование, сброс

Память программ
Память данных (ОЗУ, SRAM)
Энергонезависимая память данных (EEPROM)
Способы тактирования
Сброс
Особенности подключения дополнительной внешней памяти данных

Глава 3. Знакомство с периферийными устройствами

Порты ввода-вывода
Таймеры-счетчики
Аналого-цифровой преобразователь
Последовательные порты
U ART
Интерфейс SPI
Интерфейс TWI (12С)
Универсальный последовательный интерфейс USI

Глава 4. Прерывания и режимы энергосбережения

Прерывания
Разновидности прерываний
Режимы энергосбережения
Потребление МК AVR
Потребление МК AYR и режимы энергосбережения

ЧАСТЬ II. ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ ATMEL AVR

Глава 5. Общие принципы программирования МК семейства AVR

Ассемблер или С?
Способы и средства программирования AVR
Редактор кода
Об AVR Studio
Обустройство ассемблера
Программаторы
О hex-файлах
Команды, инструкции и нотация AVR-ассемблера
Числа и выражения
Директивы и функции
Общая структура AVR-программы
Обработка прерываний
RESET
Простейшая программа
Задержка
Программа счетчика
Использование прерываний
Задержка по таймеру
Программа счетчика с использованием прерываний
О конфигурационных битах

Глава 6. Система команд AVR

Команды передачи управления и регистр SREG
Команды проверки-пропуска
Команды логических операций
Команды сдвига и операции с битами
Команды арифметических операций
Команды пересылки данных
Команды управления системой
Выполнение типовых процедур на ассемблере
О стеке, локальных и глобальных переменных

Глава 7. Арифметические операции

Стандартные арифметические операции
Умножение многоразрядных чисел
Деление многоразрядных чисел
Операции с дробными числами
Генератор случайных чисел
Операции с числами в формате BCD
Отрицательные числа в МК

Глава 8. Программирование таймеров

8- и 16-разрядные таймеры
Формирование заданного значения частоты
Отсчет времени
Точная коррекция времени
Частотомер и периодомер
Частотомер
Периодомер
Управление динамической индикацией
LED-индикаторы и их подключение
Программирование динамической индикации
Таймеры в режиме PWM

Глава 9. Использование EEPROM

Еще раз о сохранности данных в EEPROM
Запись и чтение EEPROM
Хранение констант в EEPROM

Глава 10. Аналоговый компаратор и АЦП

Аналого-цифровые операции и их погрешности
Работа с аналоговым компаратором
Интегрирующий АЦП на компараторе
Принцип работы и расчетные формулы
Программа интегрирующего АЦП
Встроенный АЦП
Пример использования АЦП
Программа

Глава 11. Программирование SPI

Основные операции через SPI
Аппаратный вариант
Программный вариант
О разновидностях энергонезависимой памяти
Запись и чтение flash-памяти через SPI
Программа обмена с памятью 45DB011В по SPI
Запись и чтение flash-карт
Подключение карт ММС
Подача команд и инициализация ММС
Запись и чтение ММС

Глава 12. Интерфейс TWI (12С) и его практическое использование

Базовый протокол 12С
Программная эмуляция протокола 12С
Запись данных во внешнюю энергонезависимую память
Режимы обмена с памятью АТ24
Программа
Часы с интерфейсом 12С
Запись данных
Чтение данных

Глава 13. Программирование UART/USART

Инициализация UART
Передача и прием данных
Пример установки часов DS1307 с помощью UART
Приемы защиты от сбоев при коммуникации
Проверка на четность
Как организовать корректный обмен
Дополнительные возможности USART
Реализация интерфейсов RS-232 и RS-485
Преобразователи уровня для RS-232
RS-485

Глава 14. Режимы энергосбережения и сторожевой таймер

Программирование режима энергосбережения
Пример прибора с батарейным питанием
Доработка программы
Использование сторожевого таймера

ПРИЛОЖЕНИЯ

Приложение 1. Основные параметры микроконтроллеров Atmel AVR

Приложение 2. Команды Atmel AVR
Арифметические и логические команды
Команды операций с битами
Команды сравнения
Команды передачи управления
Команды безусловного перехода и вызова подпрограмм
Команды проверки-пропуска и команды условного перехода
Команды переноса данных
Команды управления системой

Приложение 3. Тексты программ
Демонстрационная программа обмена данными с flash-памятью 45DB011В по интерфейсу SPI
Процедуры обмена по интерфейсу 12С

Приложение 4. Обмен данными с персональным компьютером и отладка программ через UART
Работа с COM-портом в Delphi
COM-порт и Windows API
Работа с СОМ через готовые компоненты
Установка линии RTS в DOS и Windows
Программа СОМ2000
Отладка программ с помощью терминальной программы

Приложение 5. Словарь часто встречающихся аббревиатур и терминов
Соответствие терминов на русском их переводу на английский
Соответствие терминов на английском их переводу на русский

Литература
Предметный указатель

Увидел как-то интересный видеоролик в сети, в нем демонстрировалась игра змейка реализованная на микроконтроллере и светодиодной матрице 8х8, потом нашел еще несколько подобных роликов, которые заинтересовали меня. Среди них также был ролик, где на “мощном” микроконтроллере была собрана игра тетрис. После просмотра, я решил разработать собственный вариант устройства, в котором совмещены обе игры, с применением микроконтроллера PIC16F688 и двух светодиодных матриц, которые отображают игровое поле с разрешением 8х16 точек.

Схема устройства показана ниже. Вывод информации на матрицы H1, H2 в динамическом режиме осуществляется посредством сдвиговых регистров DD2, DD3, DD4. Выходы микросхем DD2, DD3 подключены к анодам матриц. Катоды обеих матриц подключены к коллекторам транзисторов VT1-VT8, управляющие сигналы для которых формируются микросхемой DD4. Микроконтроллер загружает данные в регистр DD4, при переполнении которого, информация с 9 вывода передается на вход регистра DD3, далее таким же образом данные передаются на регистр DD2. Резисторы R1-R16 ограничивают ток через светодиоды матриц. Резисторы R17-R23 устанавливают ток базы транзисторов VT1-VT8. Микроконтроллер работает на частоте 8 МГц от внутреннего генератора. Частота обновления изображения составляет 100Гц.


После подачи питания, на игровом поле отображается заставка игры “Змейка”. В верхней части поля высвечивается цифра 1, в нижней части представлено изображение фрагмента игры. При нажатии на кнопку SB5 “Старт/Пауза”, выполняется переход в меню игры, в верхней части которого отображается уровень игры в виде цифр от 1 до 9. Уровень игры устанавливается кнопкой SB1 “Вверх”, при каждом нажатии происходит последовательное увеличения номера уровня на единицу. После цифры 9, снова высвечивается цифра 1. От установленного уровня игры зависит начальная длина змейки, так для 1-го уровня длина составляет 3 точки, для 9-го 11 точек. В нижней части меню отображается информация о скорости движения змейки. Цифре 1 соответствует минимальная скорость, а цифре 9 максимальная. Значение скорости устанавливается кнопкой SB4 “Вниз” подобно установке уровня игры. Свечение светодиодов по периметру поля в меню означает, что выбран режим игры с наличием границ по периметру поля. В этом режиме, при выходе змейки за пределы игрового поля наступает проигрыш. Если в меню, светодиоды по периметру поля погашены, то выбран режим без наличия границ. В этом случае при выходе за пределы игрового поля, голова змейки появляется с противоположной стороны поля. Кнопками SB2 “Вправо” и SB3 “Влево” устанавливается требуемый режим игры. При первоначальном входе в меню игры, значение длины и скорости устанавливаются на единицу, выбирается режим с наличием границ.

После нажатия кнопки “Старт/Пауза” из меню игры, на игровом поле высвечивается змейка в базовом положении и случайная свободная точка. Нажатие любой из кнопок “Вверх”, “Влево”, “Вправо” приводит змейку в движение по соответствующему напрвлению. После начала движения, для управления змейкой также становится доступна кнопка “Вниз”. При наезде на светящуюся точку, длина змейки увеличивается. После набора 14 точек происходит переход на следующий уровень игры. После 9-го уровня происходит переход на первый уровень. В случае наезда змейки на собственное туловище, или выхода за пределы игрового поля в режиме наличия границ, наступает проигрыш. После 3-х проигрышей происходит возврат в меню игры, где указан текущий уровень игры и скорость. После начала движения змейки, нажатиями кнопками “Старт/Пауза” можно приостановить и возобновить игру.

Для выхода из меню игры необходимо удерживать нажатой кнопку “Старт/Пауза” в течении 1 секунды, после чего на игровом поле высветится заставка игры. Переключение между играми осуществляется нажатием любой из кнопок “Вверх”, “Вниз”, “Влево”, “Вправо”. При этом высвечивается заставка соответсвующей игры.

В верхнй части заставки игры “Тетрис” высвечивается цифра 2, в нижней части представлено изображение фрагмента игры. Переход в меню игры осуществляется нажатием кнопки “Старт/Пауза”. В верхней части меню отображается количество баллов набранных игроком. Баллы начисляются за каждую удаленную строку. Счетчик баллов ведет счет до 99, затем обнуляется, и счет начинается заново. При старте каждой новой игры, счетчик также обнуляется. В нижней части меню отображается информация о скорости движения фигур, которая устанавливается кнопками “Вверх”, “Вниз” соответственно. После нажатия кнопки “Старт/Пауза” из меню, начинается игра, в верхней части поля появляются случайные фигуры, которые можно перемещать кнопками “Влево” и “Вправо” в соответсвующую сторону. Кнопка “Вверх” поворачивает фигуру на 90 градусов по часовой стрелке, при каждом нажатии. Удерживая нажатой кнопку “Вниз”, можно ускорить движение фигуры. Кнопкой “Старт/Пауза” можно приостановить и возобновить игру. Игра заканчивается когда новая фигура не может поместиться на игровом поле, после чего происходит переход в меню, где можно просмотреть количество баллов набранных игроком. Выход из меню выполняется также как в игре “Змейка”.

Если в течении 4 минут не была нажата ни одна из кнопок, то устройство переходит в режим пониженного энергопотребления, микроконтроллер отключает светодиодные матрицы, и переходит в спящий режим. Устройство “просыпается” после нажатия кнопки “Старт”, и возвращается в прежнее состояние.

В устройстве применены резисторы – типоразмера 1206 для поверхностного монтажа. Конденсаторы С2, С3 – керамические типоразмера 1206. Светодиодные матрицы H1, H2 – TOM-1088BG-B зеленого цвета свечения с диаметром светодиодов 3мм, и разрешением 8х8 точек. Кнопки стандартные тактовые.

Источник питания – стабилизированный блок питания напряжением 3,7-5В, также можно использовать гальванические элементы или аккумуляторы, например 3 последовательно соединненные батарейки по 1,5В типоразмера AA или AAA, я например использую 3 батарейки AA. Устройство сохраняет работоспособность при снижении напряжения питания до 3,3В, при этом уменьшается яркость свечения светодиодных матриц.

Название: Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера 2 издание

Издательство: «БХВ-Петербург»

Год издания: 2011

Страниц: 354

Язык: Русский

Формат: DjVu

Размер: 12,2 Мб

Наложены принципы функционирования, особенности архитектуры и приемы программирования микроконтроллеров Atmel AVR.

Приведены готовые рецепты для программирования основных функций современной микроэлектронной аппаратуры: от реакции на нажатие кнопки или построения динамической индикации до сложных протоколов записи данных во внешнюю память или особенностей подключения часов реального времени. Особое внимание уделяется обмену данными микроэлектронных устройств с персональным компьютером, приводятся примеры программ. В книге учтены особенности современных моделей AVR и сопутствующих микросхем последних лет выпуска.
Приложение содержит основные параметры микроконтроллеров AVR, перечень команд и тексты Приложения содержат основные параметры микроконтроллеров AVR, перечень команд и тексты программ для них, а также список используемых терминов и аббревиатур.
Для учащихся, инженерно-технических работников и радиолюбителей

7. Микроконтроллеры, их возникновение и применение
8. Предыстория микроконтроллеров
10. Электроника в греческом стиле
12. Почему AVR?
14. Что дальше?
17.ЧАСТЬ L ОБЩИЕ ПРИНЦИПЫ УСТРОЙСТВА И ФУНКЦИОНИРОВАНИЯ ATMEL AVR
19. Глава 1. Обзор микроконтроллеров Atmel AVR
21. Семейства AVR
23. Особенности практического использования МК AVR
23. О потреблении
25. Некоторые особенности применения AVR в схемах
27. Глава 2. Общее устройство, организация памяти, тактирование, сброс
27. Память программ
29. Память данных (ОЗУ, SRAM)
31. Энергонезависимая память данных (EEPROM)
32. Способы тактирования
34. Сброс
37. Глава 3. Знакомство с периферийными устройствами
38. Порты ввода-вывода
39. Таймеры-счетчики
41. Аналогово-цифровой преобразователь
42. Последовательные порты
43. UART
46. Интерфейс SPI
50. Интерфейс TWI (I2С)
50. Универсальный последовательный интерфейс USI
53. Глава 4. Прерывания и режимы энергосбережения
53. Прерывания
57. Разновидности прерываний
58. Режимы энергосбережения
61. ЧАСТЬ II. ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ ATMELAVR
63. Глава 5. Общие принципы программирования МК семейства AVR
63. Ассемблер или С?
67. Способы и средства программирования AVR
67. Редактор кода
68. Об AVR Studio
70. Обустройство ассемблера
71. Программаторы
75. О hex-файлах
78. Команды, инструкции и нотация AVR-ассемблера
79. Числа и выражения
80. Директивы и функции
84. Общая структура АVR-программы
85. Обработка прерываний
89. RESET
90. Простейшая программа
92. Задержка
94. Программа счетчика
96. Использование прерываний
97. Задержка по таймеру
98. Программа счетчика с использованием прерываний
101. О конфигурационных битах
105. Глава 6, Система команд AVR
105. Команды передачи управления и регистр SREG
111. Команды проверки-пропуска
113. Команды логических операций
114. Команды сдвига и операции с битами
116. Команды арифметических операций
118. Команды пересылки данных
122. Команды управления системой
123. Выполнение типовых процедур на ассемблере
125. О стеке, локальных и глобальных переменных
127. Глава 7. Арифметические операции
128. Стандартные арифметические операции
129. Умножение многоразрядных чисел
131. Деление многоразрядных чисел
134. Операции с дробными числами
136. Генератор случайных чисел
138. Операции с числами в формате BCD
143. Отрицательные числа в МК
147. Глава 8. Программирование таймеров
147. 8- и 16-разрядные таймеры
149. Формирование заданного значения частоты
153. Отсчет времени
158. Точная коррекция времени
160. Частотомер и периодомер
160. Частотомер
164. Периодомер
167. Управление динамической индикацией
168. LED-индикаторы и их подключение
171. Программирование динамической индикации
174. Таймеры в режиме PWM
179. Глава 9. Использование EEPROM
179. Еще раз о сохранности данных в EEPROM
181. Запись и чтение EEPROM
183. Хранение констант в EEPROM
187. Глава 10. Аналоговый компаратор и АЦП
187. Аналого-цифровые операции и их погрешности
190. Работа с аналоговым компаратором
193. Интегрирующий АЦП на компараторе
194. Принцип работы и расчетные формулы
198. Программа интегрирующего АЦП
201. Встроенный АЦП
204. Пример использования АЦП
206. Программа
215. Глава 11. Программирование SPI
215. Основные операции через SPI
216. Аппаратный вариант
218. Программный вариант
219. О разновидностях энергонезависимой памяти
221. Запись и чтение flash-памяти через SP!
224. Программа обмена с памятью 45DB011В по SPI
225. Запись и чтение flash-карт
225. Подключение карт ММС
228. Подача команд и инициализация ММС
232. Запись и чтение ММС
237. Глава 12. Интерфейс TW1 (I2С) и его практическое использование
237. Базовый протокол 1 2 С
240. Программная эмуляция протокола I 2 С
241. Запись данных во внешнюю энергонезависимую память
241. Режимы обмена с памятью АТ24
243. Программа
247. Часы с интерфейсом I 2 С
255. Запись данных
259. Чтение данных
261. Глава 13. Программирование UART/USART
262. Инициализация UART
263. Передача и прием данных
266. Пример установки часов DS1307 с помощью UART
271. Приемы защиты от сбоев при коммуникации
271. Проверка на четность
273. Как организовать корректный обмен
274. Дополнительные возможности USART
276. Реализация интерфейсов RS-232 и RS-485
280. Преобразователи уровня для RS-232
283. RS-485
285. Глава 14. Режимы энергосбережения и сторожевой таймер
286. Программирование режима энергосбережения
287. Пример прибора с батарейным питанием
289. Доработка программы
293. Использование сторожевого таймера
299. ПРИЛОЖЕНИЯ
301. Приложение 1. Основные параметры микроконтроллеров Atmel AVR
309. Приложение 2. Команды Atmel AVR
310. Арифметические и логические команды
311. Команды операций с битами
312. Команды сравнения
313. Команды передачи управления
313. Команды безусловного перехода и вызова подпрограмм
314. Команды проверки-пропуска и команды условного перехода
315. Команды переноса данных
316. Команды управления системой
317. Приложение 3. Тексты программ
317. Демонстрационная программа обмена данными с flash-памятью 45DB011В по интерфейсу SPI
321. Процедуры обмена по интерфейсу I2С
329. Приложение 4. Обмен данными с персональным компьютером и отладка программ через UART
329. Работа с СОМ-портом в Delphi
335. Установка линии RTS в DOS и Windows
337. Программа СОМ2000
339. Отладка программ с помощью эмулятора терминала
341. Приложение 5. Словарь часто встречающихся аббревиатур и терминов
347. Литература
349. Предметный указатель