stringtranslate.com

ЧИП-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 для пользователей COSMAC VIP или 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 году Андреас Густафссон [15] создал интерпретатор CHIP-8 под названием CHIP-48 для графических калькуляторов HP-48 . Эрик Брынце позже создал другой интерпретатор на основе CHIP-48, [16] названный "SUPER-CHIP", часто сокращаемый до 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 опкодов , все из которых имеют длину два байта и хранятся в порядке от старшего к младшему . Опкоды перечислены ниже в шестнадцатеричном формате и со следующими символами:

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

Примечания

  1. ^ abcd Логические коды операций 8XY3, 8XY6, 8XY7 и 8XYE не были документированы в исходной спецификации CHIP-8, поскольку все 8000 кодов операций были отправлены инструкциям в АЛУ 1802 , а не находились в самом интерпретаторе; поэтому эти четыре дополнительных кода операций, по-видимому, были непреднамеренной функциональностью.
  2. ^ ab Коды операций CHIP-8 8XY6 и 8XYE (инструкции по сдвигу битов), которые на самом деле были недокументированными кодами операций в исходном интерпретаторе, сдвигали значение в регистре 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. ^ ab В оригинальной реализации CHIP-8, а также в CHIP-48, I увеличивается слева после выполнения этой инструкции. В SCHIP I остается неизмененным.

Внешние ссылки

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

Смотрите также

Ссылки

  1. ^ "Простая система программирования". BYTE . Том 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 для владельца RCA VIP". Журнал Intelligent Machines ( InfoWorld ) . InfoWorld Media Group. 11.12.1978. С. 9. Получено 30.01.2010 .
  6. ^ «[Что я узнал о] Python и эмуляторах, [создав] эмулятор Chip-8». 15 декабря 2019 г.
  7. ^ "Домашняя страница эмулятора CHIP-8".
  8. ^ «Chip-8 Public Domain ROM — Домен Зофара».
  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". GitHub .
  16. ^ Документация SCHIP 1.1
  17. ^ Репозиторий HP48-Superchip на GitHub
  18. ^ CHIP8.pdf Дэвида ВИНТЕРА (HPMANIAC)
  19. ^ ab Mastering Раздел о совместимости SuperChip
  20. ^ "Спецификация XO-CHIP Джона Эрнеста". GitHub .
  21. ^ Руководство по эксплуатации RCA COSMAC VIP CDP18S711. Сомервилль: RCA Solid State Division. 1978. стр. 36.
  22. ^ Грин, Томас П. (1997-08-30). "Технический справочник Cowgod's Chip-8". devernay.free.fr . Архивировано из оригинала 2024-01-03 . Получено 2020-02-03 .
  23. ^ Миколай, Мэтью. «Освоение CHIP-8: Подпрограммы». mattmik.com . Получено 03.02.2020 .
  24. ^ abcdefghijklmnopqrstu vwxyz aa ab ac ad ae af ag ah ai Шуман, Штеффен «Гулрак». «Таблица вариантов кодов операций CHIP-8». Chip8.gulrak.net .
  25. ^ "FX1E и VF · Выпуск № 2 · Chromatophore/HP48-Superchip · GitHub". GitHub .