Jump to content

ЧИП-8

Скриншот Pong , реализованного в CHIP-8
Telmac 1800 с игрой CHIP-8 Space Intercept (Джозеф Вайсбекер, 1978)

CHIP-8 интерпретируемый язык программирования , разработанный Джозефом Вайсбекером на его микропроцессоре 1802 года . Первоначально он использовался в COSMAC VIP и Telmac 1800 , 8-битных микрокомпьютерах , созданных в середине 1970-х годов.

CHIP-8 был разработан так, чтобы его было легко программировать, а также использовать меньше памяти, чем другие языки программирования, такие как BASIC . [1]

Интерпретаторы были созданы для многих устройств, таких как домашние компьютеры , микрокомпьютеры , графические калькуляторы , мобильные телефоны и игровые приставки . [2] [3]

Сообщество

[ редактировать ]

CHIP-8 с течением времени использовался на широком спектре устройств. Первое сообщество, использующее CHIP-8, началось в 1970-х годах на микрокомпьютерах . Они делились расширениями и программами в информационных бюллетенях, таких как VIPER ARESCO для VIP-пользователей COSMAC или DREAMER для пользователей DREAM 6800. [4] . В информационном бюллетене VIPER в первых трёх выпусках подробно описан машинный код интерпретатора CHIP-8 для VIP. [5]

В 1990-е годы начали создавать интерпретаторы CHIP-8 для графических калькуляторов . Яркие примеры включают CHIP-48 и SCHIP для HP-48 . [6]

Приложения CHIP-8 включают в себя оригинальные игры, демо-версии , а также воссоздания популярных игр из других систем. [7] Поскольку некоторые приложения CHIP-8 находятся в свободном доступе и используют такие лицензии, как лицензия Creative Commons Zero . [8] [9]

Расширения и вариации CHIP-8

[ редактировать ]

В 1970-х и 1980-х годах пользователи CHIP-8 делились программами CHIP-8, а также изменениями и расширениями интерпретатора CHIP-8, как в журнале VIPER для COSMAC VIP. Эти расширения включали CHIP-10 и Hi-Res CHIP-8, которые обеспечивали более высокое разрешение, чем стандартное 64x32, а также CHIP-8C и CHIP-8X, которые расширяли возможности монохромного дисплея для поддержки ограниченного цвета, среди других функций. [10] Эти расширения были в основном обратно совместимы, поскольку были основаны на исходном интерпретаторе, хотя некоторые из них были перепрофилированы и редко использовали коды операций для новых инструкций. [11]

В 1979 году Electronics Australia опубликовала серию статей о создании комплектного компьютера, аналогичного COSMAC VIP, на основе архитектуры Motorola 6800 . [12] Этот компьютер DREAM 6800 имел собственную версию CHIP-8. Информационный бюллетень, аналогичный VIPER, под названием DREAMER [13] , использовался для обмена играми CHIP-8 для этого интерпретатора. В 1981 году Electronics Today International (ETI) опубликовала серию статей о создании компьютера ETI-660, который также был очень похож на VIP (и использовал тот же микропроцессор). ETI использовала обычные колонки ETI-660 и CHIP-8 общего назначения. [14] до 1985 года.

В 1990 году Андреас Густавссон создал интерпретатор CHIP-8 под названием CHIP-48. [15] для HP-48 графических калькуляторов . Позже Эрик Бринце создал еще один интерпретатор на основе CHIP-48. [16] под названием «СУПЕР-ЧИП», часто сокращаемым до SCHIP или S-CHIP. SCHIP расширил язык CHIP-8, добавив большее разрешение и несколько дополнительных кодов операций, призванных упростить программирование. [17]

Интерпретатор, дизассемблер и расширенная техническая документация Дэвида Винтера популяризировали CHIP-8/SCHIP на других платформах. В нем изложен полный список недокументированных опкодов и функций. [18] и был распространен на форумах любителей. Многие переводчики использовали эти произведения как отправную точку. [ нужна ссылка ]

Однако CHIP-48 слегка изменил семантику некоторых кодов операций, и SCHIP продолжал использовать эту новую семантику в дополнение к изменению других кодов операций. Многие онлайн-ресурсы о CHIP-8 распространяют эту новую семантику, поэтому многие современные игры CHIP-8 не имеют обратной совместимости с исходным интерпретатором CHIP-8 для COSMAC VIP, даже если они специально не используют новые расширения SCHIP. [19]

Некоторые расширения берут коды операций или поведение из нескольких расширений, например XO-CHIP, который частично заимствует поведение из SCHIP и CHIP-8E. [20]

Описание виртуальной машины

[ редактировать ]

CHIP-8 чаще всего реализовывался в системах 4K, таких как Cosmac VIP и Telmac 1800. Эти машины имели 4096 (0x1000) ячеек памяти, каждая из которых имеет размер 8 бит (байт ) , отсюда и возник термин CHIP-8. . Однако сам интерпретатор CHIP-8 занимает на этих машинах первые 512 байт памяти. По этой причине большинство программ, написанных для исходной системы, начинаются с ячейки памяти 512 (0x200) и не обращаются к памяти ниже ячейки 512 (0x200). Самые верхние 256 байтов (0xF00-0xFFF) зарезервированы для обновления дисплея, а 96 байтов ниже (0xEA0-0xEFF) были зарезервированы для стека вызовов, внутреннего использования и других переменных.

В современных реализациях CHIP-8, где интерпретатор изначально работает за пределами пространства памяти 4 КБ, нет необходимости избегать нижних 512 байт памяти (0x000-0x1FF), и данные шрифтов обычно хранятся там.

Регистры

[ редактировать ]

CHIP-8 имеет 16 8- битных данных регистров с именами от V0 до VF. Регистр VF служит флагом для некоторых инструкций; таким образом, этого следует избегать. В операции сложения VF является флагом переноса , а в операции вычитания — флагом отсутствия заимствования. В инструкции рисования VF устанавливается при столкновении пикселей.

Адресный регистр I имеет ширину 12 бит и используется с несколькими кодами операций , включающими операции с памятью.

Стек вызове используется только для хранения адресов возврата при . подпрограмм Исходная версия RCA 1802 выделяла 48 байт для 12 уровней вложенности; [21] современные реализации обычно имеют больше. [22] [23]

CHIP-8 имеет два таймера. Они оба ведут обратный отсчет с частотой 60 Гц , пока не достигнут 0.

  • Таймер задержки: этот таймер предназначен для отсчета времени событий в играх. Его значение можно установить и прочитать.
  • Звуковой таймер: этот таймер используется для звуковых эффектов. Когда его значение не равно нулю, раздается звуковой сигнал. Его значение можно только установить.

Ввод осуществляется с помощью шестигранной клавиатуры с 16 клавишами от 0 до F. Клавиши «8», «4», «6» и «2» обычно используются для направленного ввода. Для обнаружения ввода используются три кода операции. Один пропускает инструкцию, если нажата определенная клавиша, а другой делает то же самое, если конкретная клавиша не нажата. Третий ожидает нажатия клавиши, а затем сохраняет его в одном из регистров данных.

Графика и звук

[ редактировать ]

CHIP-8 Оригинальное разрешение дисплея составляет 64×32 пикселей , цвет монохромный . Графика выводится на экран исключительно путем рисования спрайтов , которые имеют ширину 8 пикселей и высоту от 1 до 15 пикселей. Пиксели спрайта подвергаются операции XOR с соответствующими пикселями экрана. Другими словами, установленные пиксели спрайта меняют цвет соответствующего пикселя экрана, а неустановленные пиксели спрайта ничего не делают. Флаг переноса (VF) устанавливается в 1, если какие-либо пиксели экрана переворачиваются из установленного в неустановленное состояние при рисовании спрайта, и устанавливается в 0 в противном случае. Это используется для обнаружения столкновений.

Как описано ранее, звуковой сигнал воспроизводится, когда значение звукового таймера не равно нулю.

Таблица кодов операций

[ редактировать ]

CHIP-8 имеет 35 опкодов , все из которых имеют длину два байта и хранятся с прямым порядком байтов . Коды операций перечислены ниже в шестнадцатеричном формате и со следующими символами:

  • ННН: адрес
  • NN: 8-битная константа
  • N: 4-битная константа
  • X и Y: 4-битный идентификатор регистра.
  • ПК: счетчик программ
  • I: 12-битный регистр (для адреса памяти) (аналогично указателю void);
  • ВН: Одна из 16 доступных переменных. N может быть от 0 до F (шестнадцатеричный);

С 1978 года было множество реализаций набора команд CHIP-8. Следующая спецификация основана на спецификации SUPER-CHIP 1991 года (но без дополнительных кодов операций, обеспечивающих расширенную функциональность), поскольку сегодня это наиболее часто встречающийся набор расширений. . Сноски обозначают несовместимость с исходным набором инструкций CHIP-8 1978 года.

Код операции Тип C Псевдо Объяснение
0NNN Вызов Вызывает процедуру машинного кода ( RCA 1802 для COSMAC VIP) по адресу NNN. Не требуется для большинства ПЗУ. [24]
00E0 Отображать disp_clear()Очищает экран. [24]
00EE Поток return;Возврат из подпрограммы. [24]
1ННН Поток goto NNN;Переходит к адресу NNN. [24]
2ННН Поток *(0xNNN)()Вызывает подпрограмму в NNN. [24]
3XNN Условия if (Vx == NN)Пропускает следующую инструкцию, если VX равно NN (обычно следующая инструкция представляет собой переход для пропуска блока кода). [24]
4XNN Условия if (Vx != NN)Пропускает следующую инструкцию, если VX не равно NN (обычно следующая инструкция представляет собой переход для пропуска блока кода). [24]
5XY0 Условия if (Vx == Vy)Пропускает следующую инструкцию, если VX равно VY (обычно следующая инструкция представляет собой переход для пропуска блока кода). [24]
6XNN Конст Vx = NNУстанавливает VX в NN. [24]
7XNN Конст Vx += NNДобавляет NN в VX (флаг переноса не изменяется). [24]
8XY0 Ассиг Vx = VyУстанавливает VX в значение VY. [24]
8XY1 БитОп Vx |= VyУстанавливает VX в VX или VY. (побитовая операция ИЛИ). [24]
8XY2 БитОп Vx &= VyУстанавливает VX на VX и VY. (побитовая операция И). [24]
8XY3 [а] БитОп Vx ^= VySets VX to VX xor VY. [24]
8XY4 Математика Vx += VyДобавляет VY в VX. VF устанавливается в 1, когда есть переполнение, и в 0, когда его нет. [24]
8XY5 Математика Vx -= VyVY вычитается из VX. VF устанавливается в 0, когда есть опустошение, и в 1, когда его нет. (т.е. VF устанавливается в 1, если VX >= VY, и в 0 в противном случае). [24]
8XY6 [а] БитОп Vx >>= 1Сдвигает VX вправо на 1, затем сохраняет младший бит VX до сдвига в VF. [б] [24]
8XY7 [а] Математика Vx = Vy - VxУстанавливает VX в VY минус VX. VF устанавливается в 0, когда есть опустошение, и в 1, когда его нет. (т.е. VF устанавливается в 1, если VY >= VX). [24]
8 ЛЕТ [а] БитОп Vx <<= 1Сдвигает VX влево на 1, затем устанавливает VF в 1, если старший бит VX был установлен до этого сдвига, или в 0, если он не был установлен. [б] [24]
9XY0 Условия if (Vx != Vy)Пропускает следующую инструкцию, если VX не равно VY. (Обычно следующая инструкция — это переход для пропуска блока кода). [24]
АНН МЕМ I = NNNУстанавливает I по адресу NNN. [24]
БННН Поток PC = V0 + NNNПереходит по адресу NNN плюс V0. [24]
CXNN Рэнд Vx = rand() & NNУстанавливает VX в результат побитовой операции со случайным числом (обычно: от 0 до 255) и NN. [24]
ДКСИН Отображать draw(Vx, Vy, N)Рисует спрайт по координатам (VX, VY) шириной 8 пикселей и высотой N пикселей. Каждая строка из 8 пикселей считывается как битовая, начиная с ячейки памяти I; Значение I не меняется после выполнения этой инструкции. Как описано выше, VF устанавливается в 1, если какие-либо пиксели экрана переворачиваются из установленного в неустановленное состояние при рисовании спрайта, и в 0, если этого не происходит. [24]
EX9E KeyOp if (key() == Vx)Пропускает следующую инструкцию, если нажата клавиша, хранящаяся в VX (обычно следующая инструкция представляет собой переход для пропуска блока кода). [24]
ЕХА1 KeyOp if (key() != Vx)Пропускает следующую инструкцию, если клавиша, хранящаяся в VX, не нажата (обычно следующая инструкция представляет собой переход для пропуска блока кода). [24]
FX07 Таймер Vx = get_delay()Устанавливает VX на значение таймера задержки. [24]
FX0A KeyOp Vx = get_key()Ожидается нажатие клавиши, а затем сохраняется в VX (операция блокировки, все инструкции приостанавливаются до следующего нажатия клавиши). [24]
FX15 Таймер delay_timer(Vx)Устанавливает таймер задержки на VX. [24]
FX18 Звук sound_timer(Vx)Устанавливает звуковой таймер на VX. [24]
FX1E МЕМ I += VxДобавляет VX к I. VF не затрагивается. [с] [24]
FX29 МЕМ I = sprite_addr[Vx]Устанавливает I в местоположение спрайта персонажа в VX. Символы 0–F (в шестнадцатеричном формате) представлены шрифтом 4x5. [24]
FX33 двоично-десятичный код
set_BCD(Vx)*(I+0) = BCD(3);*(I+1) = BCD(2);*(I+2) = BCD(1);
Сохраняет двоично-десятичное представление VX с цифрами сотен в памяти в ячейке I, цифрой десятков в ячейке I+1 и цифрой единиц в ячейке I+2. [24]
FX55 МЕМ reg_dump(Vx, &I)Сохраняет в памяти от V0 до VX (включая VX), начиная с адреса I. Смещение от I увеличивается на 1 для каждого записанного значения, но само I остается неизмененным. [д] [24]
FX65 МЕМ reg_load(Vx, &I)Заполняет значения из памяти от V0 до VX (включая VX), начиная с адреса I. Смещение от I увеличивается на 1 для каждого прочитанного значения, но само I остается неизмененным. [д] [24]

Примечания

[ редактировать ]
  1. ^ Перейти обратно: а б с д 1802 года Логические коды операций 8XY3, 8XY6, 8XY7 и 8XYE не были задокументированы в исходной спецификации CHIP-8, поскольку все 8000 кодов операций были отправлены на инструкции в ALU и не находились в самом интерпретаторе; Таким образом, эти четыре дополнительных кода операции, по-видимому, были непреднамеренной функциональностью.
  2. ^ Перейти обратно: а б Коды операций 8XY6 и 8XYE CHIP-8 (инструкции сдвига битов), которые на самом деле были недокументированными кодами операций в исходном интерпретаторе, сдвигали значение в регистре VY и сохраняли результат в VX. Реализации CHIP-48 и SCHIP вместо этого игнорировали VY и просто сдвигали VX. [19]
  3. ^ Инструкции FX1E большинства интерпретаторов CHIP-8 не влияют на VF, за одним исключением: интерпретатор CHIP-8 для Commodore Amiga устанавливает VF в 1, когда происходит переполнение диапазона (I + VX> 0xFFF), и в 0, когда происходит переполнение диапазона. нет. [25] Единственная известная игра, которая зависит от такого поведения, — это Spacefight 2091!, в то время как по крайней мере одна игра, Animal Race, зависит от того, не затрагивается ли VF.
  4. ^ Перейти обратно: а б В исходной реализации CHIP-8, а также в CHIP-48 I остается увеличенным после выполнения этой инструкции. В SCHIP I остается неизмененным.
[ редактировать ]
  • FPGA SuperChip Реализация Verilog спецификации SCHIP.
  • Octo — это онлайн-среда разработки CHIP-8, система разработки, компилятор/ассемблер и эмулятор с собственным языком сценариев.
  • Cadmium — это интерпретатор CHIP-8 для компьютеров с графическим интерфейсом , который позволяет выбирать точную эмуляцию различных расширений и реализаций CHIP-8.
  • Silicon8 Эмулятор CHIP-8 для веб-браузеров.

Дальнейшее чтение

[ редактировать ]

См. также

[ редактировать ]
  1. ^ «Простая система программирования». БАЙТ . Том. 3, нет. 12 декабря 1978 г. с. 108.
  2. ^ «Главная страница эмулятора CHIP-8» .
  3. ^ «Сцена взлома Nintendo Game & Watch переносит Pokémon, CHIP-8 и многое другое на портативный компьютер за 50 долларов» . 8 декабря 2020 г.
  4. ^ https://archive.org/details/dreamer_newsletter_01/mode/2up
  5. ^ « VIPER для VIP-владельцев RCA» . Журнал «Интеллектуальные машины» ( InfoWorld ) . Медиа-группа InfoWorld. 11 декабря 1978 г. п. 9 . Проверено 30 января 2010 г.
  6. ^ «[Что я узнал о] Python и эмуляторах, [путем] создания эмулятора Chip-8» . 15 декабря 2019 г.
  7. ^ «Главная страница эмулятора CHIP-8» .
  8. ^ «ПЗУ Chip-8 Public Domain — Домен Зофара» .
  9. ^ Архив ЧИП-8
  10. ^ Справочник по расширениям CHIP-8 Мэтью Миколея
  11. ^ https://github.com/trapexit/chip-8_documentation
  12. ^ https://archive.org/stream/EA1979/EA%201979-05%20May#page/n85/mode/2up
  13. ^ https://archive.org/details/dreamer_newsletter_01/mode/2up
  14. ^ https://archive.org/stream/ETIA1981/ETI%201981-11%20November#page/n113/mode/2up
  15. ^ «Исходный код CHIP-48» . Гитхаб .
  16. ^ Документация КОРАБЛЯ 1.1
  17. ^ Репозиторий HP48-Superchip на GitHub
  18. ^ CHIP8.pdf Дэвида ВИНТЕРА (HPMANIAC)
  19. ^ Перейти обратно: а б Освоение раздела совместимости SuperChip
  20. ^ «Спецификация XO-CHIP Джона Эрнеста» . Гитхаб .
  21. ^ RCA COSMAC VIP CDP18S711 Инструкция по эксплуатации . Сомервилл: Отдел полупроводников RCA. 1978. с. 36.
  22. ^ Грин, Томас П. (30 августа 1997 г.). «Технический справочник Cowgod's Chip-8» . devernay.free.fr . Архивировано из оригинала 3 января 2024 г. Проверено 3 февраля 2020 г.
  23. ^ Николай, Матвей. «Освоение CHIP-8: Подпрограммы» . mattmik.com . Проверено 3 февраля 2020 г.
  24. ^ Перейти обратно: а б с д и ж г час я дж к л м н тот п д р с т в v В х и С аа аб и объявление но из в ах есть Шуман, Штеффен «Гульрак». «Таблица вариантов кодов операций CHIP-8» . Chip8.gulrak.net .
  25. ^ «FX1E и VF · Проблема № 2 · Хроматофор/HP48-Superchip · GitHub» . Гитхаб .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b7c8891ed039a166dc9db85fcc5424a3__1722074340
URL1:https://arc.ask3.ru/arc/aa/b7/a3/b7c8891ed039a166dc9db85fcc5424a3.html
Заголовок, (Title) документа по адресу, URL1:
CHIP-8 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)