Просмотр полной версии : ЮТ-88: CHIP-8 виртуальная машина
В принципе, никто не мешает делать дисплейные модули разные, лишь бы дрова кто то для них смог написать.
Не хотел писать пока не запущу полностью, но напишу в виде анонса :)
Когда-то, давным давно, в далеких 70-х был компьютер COSMAC VIP на процессоре RCA 1802, прародитель ЮТ-88, практически та же минимальная конфигурация, но был видеовыход:
http://www.chip8.com/cosmacvip/CosmacVip3.jpg
http://www.chip8.com/cosmacvip/CosmacVip4.jpg
Позже появились разные аналогичные компьютеры, например, Dream 6800 с процессором M6800.
https://www.hobbyking.com/hobbyking/forum/uploads/2928/Dream6800-600.jpg
Эти компьютеры, несмотря на разные процессоры могли запускать одни и те же программы - они работали с CHIP8 (некоторые говорят, что это практически первая виртуальная машина!). К чему я это все? Да к тому, что в наш ЮТ достаточно добавить соответствующий видео-модуль и он превратится в CHIP8-совместимую машину! Такой модуль я взял как раз из Dream 6800, написал интерпритатор и получил к "Лабиринту" и "Крестикам-Ноликам" еще сотни программ! Это все сделано на минимальной конфигурации, с журнальным расширением памяти на двух РУ10 (0x3000-0x3FFF), в которых по адресам 0x3100-0x31FF расположена видеопямять с режимом 64 x 32, с 0x3200 - программы CHIP8, сам интерпритатор расположен в адресах 0x0400-0x0754 между Монитором и Калькулятором. Запуск такой - грузим программу с 0х3200, запускаем интерпритатор с 0х0400. Видеомодуль отключаемый, т.е. хоть он подключен, хоть отключен - ЮТ его не замечает!
Пока этим всем добром не делюсь, где-то провтыкал - на эмуле все работает, в железе в каждую ячейку видео-памяти вручную могу писать (отображается на экране), а вот при запуске программ все рисуется только в средней части... Да еще надо проверить счетчик и звук - все на ВИ53...
Вот в общем и дисплейный модуль и дрова... :)
Kakos_nonos
07.10.2015, 13:23
Отлично! Я тоже разбирался с CHIP-8, даже написал интерпретатор (для ПК). Да, можно сказатьэто одна из первых виртуальных машин.
---------- Post added at 14:23 ---------- Previous post was at 14:20 ----------
А ведь можно обойтись без видеомодуля, эмулируя режим CHIP8 на ют- экране. Это возможно, использую псевдографику, у CHIP8 разрешение 64*32, а у ЮТ 128*50, то есть, вполне поместится.
Правда, вывод будет медленней.
Прошу пардону, немного упустил за последние годы: а ограничение на использование первых 512 байт уже снято? А то вроде для работы CHIP8 они раньше были необходимы, почему на 6502 у меня и был затык с ними. Если уже можно использовать любую область памяти, то хорошо...
Kakos_nonos
07.10.2015, 15:59
rw6hrm, необязательно приравнивать адресное пространство CHIP8 к адресному пространству ЮТ, оно может быть в любом месте. Только немного упадёт скорость, но стандартная скорость эмуляции CHIP8 - 2 Кгц (да, кгц), поэтому, думаю, ЮТ с 2 мгц успеет выполнить дополнительную серию команд LXI DAD.
С ЮТом понятно, в принципе Alex_LG разжевал в своём посте достаточно подробно. Я к своей конструкции уже прицеливаюсь... :v2_dizzy_coder: , а то придётся эмулировать CHIP8 на эмуляторе 8080 на процессоре 6502 xD
Kakos_nonos
07.10.2015, 16:03
В Cosmac VIP в первых 512 байт находился интерпретатор CHIP8. Там стоял дико необычный и тормозной проц RCA 1802, с быстродействием около 108 тыс операций. 8080 гораздо быстрее.
а вот при запуске программ все рисуется только в средней части
... не в этом ли дело, http://www.mjbauer.biz/VDG_Timing_Diagram.jpg ?
а ограничение на использование первых 512 байт уже снято?
Ограничение одно - программы начинаются с адреса 0х0200, вот и всё! Всё остальное - обрабатывается интерпритатором, в ЧИП8 обращение к регистрам идет по индексам, а к видео - по координатам. Это, конечно, если не использовать вставки в кодах процессора, а их никто и не собирается использовать, т.к. "чистых" ЧИП8 программ - "да просто завались!"
---------- Post added at 16:19 ---------- Previous post was at 16:15 ----------
... не в этом ли дело,
Нет, Вы не правильно поняли. С диаграммами и выводом на экран все ок - если ручками писать в видеопамять, то на экране все рисуется очень замечательно, думал память не успевает на блочных операциях - копировал блоки, тоже все ок. Но вот когда запускаю ЧИП8 программу - рисует в средней трети экрана с наложением. Скорее всего дело в интерпритаторе, хотя в эмуле все рисует правильно... :(
---------- Post added at 16:25 ---------- Previous post was at 16:19 ----------
то придётся эмулировать CHIP8 на эмуляторе 8080 на процессоре 6502 xD
Вот здесь есть исходники на М6800 для ЧИП8
http://www.mjbauer.biz/DREAM6800.htm
Чип-8 - вот это было бы оптимально для такого "калькулятора".
Какие проблемы. Вот за вечер состряпал:
http://zx-pk.ru/attachment.php?attachmentid=53687&stc=1&d=1444292537
Только таймер и звук ещё не сделал. С этим у ЮТ-88 проблемы :)
Вот, думаю, как таймер сделать. В принципе, среднюю длительность выполнения каждой команды чип-8 можно замерить и сделать счётчик приблизительного количества тактов, а на его основе уже таймер замутить. А звука, видимо, вообще не будет.
где файлик для получения счастья? Зажал? :)
Качай на здоровье. Таймер доделал, но это почти четверть всей программы :) К интерпретатору прилеплена программа brix, пересылается в область 0200h в самом начале (сам интерпретатор располагается по адресу 1000h), если нужно что-то другое, запускай с адреса 100Сh. Реализован только базовый CHIP-8, продвинутая версия SCHIP не реализована. На счёт скорости - всё равно есть сомнения, хоть я и старался, чтобы выполнялось примерно 2000 команд в секунду.
Позапускал игрушки, из всего набора всего две-три играбельные (blinky, blitz, hidden, tetris), а из-за дикого расположения клавиш, играть иногда не интересно. Я замапил стрелки на 2,4,6,8, но эти клавиши не всегда используются, так что мало помогает.
На вики есть ссылка на www.pong-story.com/chip8, программы брал оттуда (из архива с досовским эмулятором).
А таймер ВИ53 в качестве генератора звука?
Я у себя так и сделал на 0-1 канале, а 2 использую как счетчик, все синхронизирую от кадровой, как и в ЧИП8, только там 60Гц, а у меня 50Гц. ВИ53 прикручена к портам:
VI53_0 .EQU 10h
VI53_1 .EQU 11h
VI53_2 .EQU 12h
VI53 .EQU 13h
ВИ53 прикручена к портам:
Может, не будем плодить сущности?
Рядом тема с таблицей портов.
Там всеобщим голосованием отдали для ВИ53 порты с адресацией 50-53, дабы созвучно было :)
И уже есть софт, работающий по этим адресам с таймером.
Переделай, пожалуйста!
Там всеобщим голосованием отдали для ВИ53 порты с адресацией 50-53
"Мухи - отдельно, котлеты- отдельно". Это не "та" ВИ53. То что принято общим голосованием так и остается и используется как "муз. сопроцессор", а эта ВИ53 только для ЧИП8, в ней порт 0 и 1 завязаны аппаратно и функционально - это БИПЕР, а порт 2 не имеет выхода, т.к. используется как счетчик и связь с внешним миром имеет только через свой регистр.
Разобрался со своим ЧИП8, вроде заработало. Все отлаживал на маленьких демках "Maze" и "Maze (alt)", первая отличается от второй только тем, что нет обнуления регистров 0 и 1, а при старте в РУ10 куча мусора, вот и выводило ерунду, ну и генератор случайных чисел глючил...
Звук и счетчик еще не тестировал - надо программы грузить (писать тесты лень), а пока нечем, надо доделать свой цифровой магнитофон для РК и под ЮТ...
Наверное надо "отпочковываться" в отдельную тему ЮТ+ЧИП8...
У Микро-80 экран 64х32, как раз для CHIP-8. Новая версия с некоторыми расширенными функциями SCHIP, например режим экрана высокого разрешения 128х64 :) (кроме скроллинга). Работает и на ЮТ-88, но нижние 4 строчки соответственно не видно.
http://zx-pk.ru/attachment.php?attachmentid=53704&stc=1&d=1444408397
Вот.
У Микро-80 экран 64х32, как раз для CHIP-8.
Вот так вот ненавязчиво Микро и ЮТ получили новый софт и новую жизнь с ЧИП8... :)
Вот потихоньку доделываю ЧИП8 в железе. Вроде получается :)
Пока глюк со встроенным шрифтом и игра "Lunar Lander" виснет на заставке, буду разбираться...
Есть артефакты на экране, но это железо, где-то задержки надо делать или еще что-то, пока лень разбираться - занимаюсь софтом.
Видео https://yadi.sk/i/2qmSy1DYqEMQR
Скорость большая, трудно в Пин-Понг (на видео нет) и УФО играть, надо затормозить... :)
На первом фото ЮТ-88 в минимальной конфигурации, слева вверху плата ОЗУ (журнальный вариант, 0x3000-0x3FFF, здесь располагается все рабочее пространство и видеопамять ЧИП8)+ПЗУ (Калькулятор, интерпритатор CHIP8), слева внизу плата видеоконтроллера (почти клон от Dream6800) со встроенным бипером и счетчиком (для ЧИП8) на 580ВИ53.
vlad6502
18.03.2016, 01:59
Интересная штука этот CHIP8, как бы на Микро-80 себе прикрутить ?
Напрямую к Микре не получится, CHIP работает только с графическим экраном. Как вариант (как раз буду пытаться делать) - прикрутить графический ЖКИ-дисплей на отдельный порт, хотя бы 128х64 (тогда программы под SuperCHIP пойдут).
Напрямую к Микре не получится, CHIP работает только с графическим экраном.
А у меня тогда что получилось?
Получилось что-то интересное ;), эмуляция графики CHIP в текстовом экране (одно знакоместо Микры = одна точка CHIP) на эмуляторе, но вот если бы "это" получилось не в эмуле, а в железе - было бы ещё интереснее.
вот если бы "это" получилось не в эмуле, а в железе - было бы ещё интереснее.
А откуда сомнения, что "это" не будет работать на реальном Микро-80?
vlad6502
19.03.2016, 00:12
Микро-80 в режиме псевдографики rкак раз имеет разрешение 128x64, даже бейсик умеет рисовать
http://vlad6502.livejournal.com/10039.html
Ну вот и всё, доделал ЧИП8 в железе, всё в архиве: исходник, бинарник, схемы видеоконтроллера и памяти в формате Eagle и PDF. Плата контроллера односторонняя, с перемычками и проводами. Лаконичностью и красотой код не отличается - делал в свободное время и "шоб було". В схеме ЮТ-88 нужно сделать одно изменеие - "разбить" адресное пространство ПЗУ, т.е. на DD10 и DD11 вместо сигнала AB12 подать "АВ11 ИЛИ АВ12". Схема в файле "UT-88.png". Прошивка занимает 1кБ, записана в РФ2, у которой вывод А10 посажен на "землю" (на схеме подключен к сигналу А10 - неправильно!).
Запуск ЧИП8-программ так:
1. Отключаем HOLD конпкой S1 (нажать) - мешает работе ПП чтения с магнитофона.
2. Загружаем прогу с адреса 0x3200.
3. Включаем HOLD конпкой S1 (отжать).
4. Стартуем с 0х0400.
Скорость работы приближена к скорости работы эмулятора ЧИП8 (реального железа нет), если нужно изменить скорость, то в ячейку 0х3016 заносим число от 1 (быстро) и выше (0хА0 - примерная скорость ЧИП8 по эмулятору), запускаем с адреса 0х0405.
https://yadi.sk/d/BBWANBdaqvJpc
Ну и замены для ретро:
74125 - 155ЛП8
7493 - 155ИЕ5
74123 - 155АГ3
74165 - 555ИР9
7404 - 155ЛН1
7420 - 155ЛА1
7411 - 555ЛИ3
74245 - 555АП6
4520 - 561ИЕ10
4040 - 561ИЕ20 (найти не удалось)
8253 - 580ВИ53
диоды - КД522
транзистор - КТ315
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot