CHIP-8

Cores para comprobar algún aspecto específico de la placa / Test cores to check the working status of the ZX-Uno board
Responder
azesmbog
Mensajes: 268
Registrado: 17 Feb 2016, 23:07

CHIP-8

Mensaje por azesmbog » 01 Mar 2020, 22:13

CHIP-8 — интерпретируемый язык программирования, разработанный Джозефом Уэйсбекером (англ. Joseph Weisbecker) для коммерческих 8-ми разрядных микрокомпьютеров RCA COSMAC VIP и Telmac 1800, в середине 70-х.
Все программы CHIP-8 запускаются на виртуальной машине CHIP-8. Сделано это было для облегчения создания игр для компьютеров.
TELMAC 1800 и COSMAC VIP имели процессор CDP-1802 (как и приставка RCA Studio II). В комплекте с ними шла кассета с 12 играми (1977 год). Оригинальное разрешение экрана CHIP-8 составляло 64x32 пикселя.
Выпускались компьютеры с разрешением 64x48 или 64x64, например у TELMAC была вторая версия интерпретатора - CHIP-82 для "высокого разрешения". Правда, в наше время не найдено ни одной программы, использующей это проемущество, так что, CHIP8 использует только режим 64x32.
Простота языка позволила без особых затруднений написать игры класса Pong, Brix, а позже Invaders и Tank. Некоторые из них имели размер в районе 256 байт! Из-за маленького объёма памяти (COSMAC VIP – 2Кб, TELMAC – 4Кб), CHIP-8 был очень компактным и занимал всего 512 байт. Интерпретатор обрабатывал менее 40 инструкций, отвечающих за арифметический операции, а так же работу с графикой и звуком.
Спустя почти 12 лет CHIP-8 стал использоваться в некоторых графических калькуляторах. Увидели свет такие "современные игры" как Tetris и Pac-Man.
CHIP-8 портировали на многие платформы, от современных, до самых примитивных: DOS, Windows, Linux, Atari XL/XE, Atari Lynx, калькуляторы TI, Commodore 64, GameBoy, Coleco ADAM, MSX, ColecoVision, ZX Spectrum, Sega Master System. Список далеко не полный.
Описание виртуальной машины
Память
CHIP-8 имеет 4 кБ основной памяти, в которой хранятся шрифты, загружается игра и т.д. Первый 512 байт памяти (адреса с 0x000h до 0x200h) зарезервированы – в них хранится оригинальный интерпретатор CHIP-8. Так что игре доступен диапазон памяти 0x200h – 0xFFFh, т.е. 3584 байт.
Регистры
CHIP-8 имеет 16 восьмибитных регистров общего назначения. Это регистры V0 – VF. Регистр VF представляет собой флаг переноса - специальный флаг, устанавливаемый в результате арифметического переноса или сдвига со старшего значащего бита, и индикатор столкновения спрайтов. Адресный регистр I используется для хранения адресов памяти.
Стек
Стек используется для сохранения адреса возврата при завершении выполнения подпрограммы. У оригинальной версии приставки размер стека составляет 12 уровней вложения подпрограмм. Поскольку мы не ограничены в ресурсах, будем использовать 16 уровней вложений.
Таймеры
Также существует два восьмибитных таймера: задержки и звука. Оба таймера с частотой 60 Гц уменьшают своё значение, пока не достигнут нуля.
Таймер задержки: этот таймер используется для работы с событиями в приложениях. В него можно писать, и из него можно читать.
Звуковой таймер: этот таймер используется для звуковых эффектов. При ненулевом значении издаётся звук "БИП".
Ввод
Ввод осуществляется с помощью 16 клавиш. В оригинальной приставке клавиши имеют коды от 0h до Fh. За обработку вводка отвечают три опкода. Один пропускает инструкцию при нажатии определенной клавиши, другой делает то же самое, если определенная клавиша не была нажата. Третий ожидать нажатия клавиши и затем сохраняет её в один из регистров данных.
Графика
Приставки на основе CHIP-8 имели монохромный дисплей с разрешением 64x32 пикселя. Вывод осуществляется спрайтами, которые всегда имеют ширину 8 пикселей и высоту от 1 до 15. Если при рисовании один спрайт накладывается на другой, в точке наложения цвет инвертируется, а регистр VF принимает значение 1. Иначе он принимает значение 0.
Инструкции CHIP-8
CHIP-8 содержит 35 инструкций (опкодов) длиной по 2 байта, записанных в big-endian.

Всего 35! инструкций, Карл!!! :)
ну и то же самое на английском языке :
https://en.wikipedia.org/wiki/CHIP-8

Но кроме софтовых эмуляторов было сделано и некоторое количество хард-эмуляторов в ФПГА. И для MiST, и для MiSTer-a, Papilllo Pro и других. Это я думаю самая первая реализация 2014 года :
https://bitbucket.org/csoren/fpga-chip8/src/develop/
все остальные сделаны на ее основе, клоны.

Собрать ядро под одну игру не составляет проблем. Так я поиграл в тетрис , а потом в одну из уже современных игр - 2048 - вполне интересно и играбельно
https://github.com/gergoerdi/2048-chip8
правда из исходников не получилось собрать, пришлось искать уже готовую игру. И даже дизассемблировать ее :))
Imagen
Это я играл и выиграл, потом правда еще два дня доигрывал до победного конца))

Кстати, вот архив с несколькими эмуляторами и играми
https://yadi.sk/d/VtE2BZri3FizPg

Так вот.вся проблема для ФПГА - это загрузка файлов. Одно хорошо, они без заголовка и загружаются всегда с одного и того же адреса - $0200. Поэтому самое простое решение и самое верное - это сделать загрузку на основе zpu-flex, с экранным меню OSD? ну например как то так :
Imagen

Так что тестовое ядро с OSD я собрал, теперь если avlixa поможет с zpu - тогда будет еще ядро, а пока только можно собрать с какой нибудь одной игрой, тетрис или 2048 или любой другой на выбор :)

Avatar de Usuario
desUBIKado
Mensajes: 841
Registrado: 05 Ago 2016, 22:33

Re: CHIP-8

Mensaje por desUBIKado » 07 Mar 2020, 00:10

Hola azesmbog,

Si has hecho un port del CHIP-8 para ZX-Uno ¿dónde está el core para poder probarlo?

azesmbog
Mensajes: 268
Registrado: 17 Feb 2016, 23:07

Re: CHIP-8

Mensaje por azesmbog » 17 Mar 2020, 18:58

Это не совсем порт, скорее всего - прототип. Для полноценного порта надо сделать загрузку файлов, а для этого надо научится компилировать zpu flex в Linux :((( Для меня это слишком сложно, порог вхождения высокий.
Если бы мне хоть раз показали на примере, или тулчейн собрали, чтобы он хотя бы под CygWin32 работал - тогда бы я может и разобрался. А так - это еще не скоро будет, уж извините.
В архиве три ядра , на пробу. Только посмотреть.
upd:
Original CHIP-8 keyboard layout is mapped to PC keyboard as follows by default:
|1|2|3|C| => |1|2|3|4|
|4|5|6|D| => |Q|W|E|R|
|7|8|9|E| => |A|S|D|F|
|A|0|B|F| => |Z|X|C|V|
Adjuntos
chip8.zip
(261.81 KiB) Descargado 182 veces

Responder