CHIP-8 (CHIP-8)

Перейти к навигации Перейти к поиску

CHIP-8 — интерпретируемый язык программирования, который был разработан Джозефом Вейзбекером в семидесятых для использования в RCA COSMAC VIP. В дальнейшем был использован в COSMAC ELF[1], Telmac 1800[2], ETI 660, DREAM 6800. Сегодня CHIP-8 часто используется для обучения базовым навыкам эмуляции в связи со своей простотой и схожестью с реальными платформами.

Язык CHIP-8 позволяет адресовать до 4096 байт памяти в адресном пространстве от 016 до FFF16 с ячейками по 8 бит в формате Big-Endian. При этом первые 512 байт памяти (с 016 до 1FF16) зарезервированы интерпретатором CHIP-8 для программы интерпретатора и хранения спрайтов, поэтому использование этого диапазона ячеек памяти пользовательскими программами нежелательны. Пользовательские программы могут быть загружены в любой участок памяти, но наиболее распространенным вариантом является расположение программы с 20016 по FFF16 адрес.

Регистры и таймеры

[править | править код]
Название Разрядность Описание
V0-VE 8 бит 15 регистров общего назначения
VF 8 бит Флаг переноса. Может быть использован пользовательской программой как регистр общего назначения
DT 8 бит Таймер задержки. При ненулевом значении декрементируется с частотой 60 Гц
ST 8 бит Таймер звука. При ненулевом значении декрементируется с частотой 60 Гц и проигрывает характерный звук «BEEP» с постоянной тональностью, зависящей от реализации интерпретатора
PC 16 бит Указатель на текущую исполняемую инструкцию
SP 8 бит Указатель на вершину стека

Язык CHIP-8 имеет поддержку ввода с шестнадцатиклавишной клавиатуры следующей компоновки:

1 2 3 C
4 5 6 D
7 8 9 E
A 0 B F

Экранный вывод

[править | править код]

Для экранного вывода в языке CHIP-8 используется монохромный дисплей с разрешением 64 на 32 пикселя. Отрисовка на экране происходит спрайтами. Спрайт в CHIP-8 представляет собой массив размером до 15 байт хранящийся в области памяти интерпретатора, где каждый бит с состоянием '0' или '1' обозначает черный и белый цвет пикселя в строке длиной 8 пикселя соответственно, при этом, при наложении двух спрайтов друг на друга накладывающиеся пиксели инвертируется. Одновременно интерпретатор может хранить до 16 спрайтов.

Примечания

[править | править код]