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: 319
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: 1002
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: 319
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 375 veces

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

Re: CHIP-8

Mensaje por desUBIKado » 13 Abr 2021, 09:30

azesmbog escribió:
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|
Para ZX-DOS+ ya ha salido tu port de CHIP-8 con soporte de carga realizado con ZPUFlex por Antonio Silva.

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

Re: CHIP-8

Mensaje por azesmbog » 13 Abr 2021, 20:16

desUBIKado escribió:
13 Abr 2021, 09:30
Para ZX-DOS+ ya ha salido tu port de CHIP-8 con soporte de carga realizado con ZPUFlex por Antonio Silva.
Да, я уже пробовал этот порт два дня назад. У меня были замечания, небольшие.
Я про этот проект не забыл, если Antonio Silva не сделает порт под ZX Uno, то я немного попозже им займусь.
сейчас занят очень интересным другим проектом для ZX DOS +
И на него уже можно даже посмотреть, многое уже работает почти хорошо :) :enelPC:

Avatar de Usuario
avlixa
Mensajes: 9
Registrado: 19 Dic 2018, 08:40

Re: CHIP-8

Mensaje por avlixa » 25 Abr 2021, 13:50

Ya tenéis el core del CHIP-8 disponible en github, con el menú ZPUFlex funcional:
https://github.com/zxdos/zxuno/raw/mast ... 210424.ZX1

También hay versiones para ZXDOS y ZXDOS+:
https://github.com/zxdos/binaries/raw/m ... 210424.ZX2
https://github.com/zxdos/zxdos-plus/raw ... 210424.ZXD

Avatar de Usuario
avlixa
Mensajes: 9
Registrado: 19 Dic 2018, 08:40

Re: CHIP-8

Mensaje por avlixa » 22 May 2021, 19:53

Nueva versión ZXUNO + con salida VGA, RGB y Video compuesto:
https://github.com/zxdos/zxuno/raw/mast ... 210523.ZX1

Para cambiar de video se utiliza Scroll lock que rota entre los tres modos VGA -> RGB (NTSC) -> Video compuesto (NTSC).

Versión ZXDOS solo VGA y RGB (NTSC) , aunque el RGB es inestable en la TV que he probado.
https://github.com/zxdos/binaries/raw/m ... 210523.ZX2

Versión ZXDOS+ solo VGA y RGB (NTSC):
https://github.com/zxdos/zxdos-plus/raw ... 210523.ZXD

Editado: cambiado el tamaño de pixel para que se vea bien en VGA ya que hay monitores que no muestran todo el ancho de pantalla y se recortan juegos como tank.

Responder