Вход

Просмотр полной версии : Эмулятор Радио-86РК на JavaScript



begoon
07.10.2012, 15:04
Основан на ядре i8080-js (http://github.com/begoon/i8080-js). Можно посмотреть вживую на demin.ws/rk (http://demin.ws/rk). Проект rk86-js (http://github.com/begoon/rk86-js) на github'e.

Старая версия на radio86.googlecode.com (http://radio86.googlecode.com) заморожена.

ОБНОВЛЕНИЕ / 14.10.2012

Добавил онлайновый каталог игр и остальных программ со скринами и микро-описаниями. Можно одним кликом сразу запускать в эмуляторе.

http://demin.ws/rk/catalog/

ОБНОВЛЕНИЕ / 22.10.2012

Добавил консоль с возможностью пошагового выполнения.

http://demin.ws/images/blog/rk86/rk86-js-console.png

ОБНОВЛЕНИЕ / 23.10.2012.

Эмулятор переехал на отдельный домен - http://rk86.ru

ОБНОВЛЕНИЕ / 30.10.2012.

Выложил версию 1.5. В ней две мега-фичи: visualizer, который показывает исполняемые в данный момент команды процессора (для полного выключения вижуалайзера надо полность перезагрузить страницу эмулятора), и режим fullscreen (выход из него - двойной клик). Особенно аутентично смотрится в Chrome Presentation View.

begoon
27.01.2021, 16:02
Добавлено в эмулятор:

1. Кнопка “Save memory” скачивает текущую память эмулятора.
2. Функция “dd” в консоли для скачивания куска памяти с нужного адреса и нужного размера.
3. Функция “bd” в консоли для удаления брейкпойта.
4. Брейкпойты на доступ к памяти, отдельно на чтение и запись. До этого были только брейкпойты на выполнения по адресу.

Вся эта тема в брейкпоинтами вред-ли кому-то полезна, кроме меня, но как я старый ломальщик игрушек под дос хотел схожего для РК, поэтому сделал брейкпоинты и снапшоты памяти.

Техника классическая:
- начинаешь игру
- делаешь дамп
- умираешь на одну жизнь
- снова делаешь дамп
- … повторяешь N раз

Сравниваешь бинари дампов (программой конечно, не руками), на предмет увеличивающейся или уменьшающейся последовательно в какой-то ячейке. Пробуешь ставить брейкпоинты по адекватным кандидатам и находишь, в каком месте ячейка меняется. Все!

А теперь главная плюшка - ЗВУК!

Через Web Audio API. Эмулятор ловит обращения на команды EI/DI и так рассчитывает период звука. Расчеты ведутся по тикам i8080, то есть частоты вычисляются на 100% точно, и от плавающей скорости эмулятора ничего не зависит.

Вот видос! РК в фулскрин со звуком на ЖК телеке 46” - это просто песня.

Звук проверен на Chrome 88+, Firefox 85+, Safari 14+.


https://www.youtube.com/watch?v=bTCxb3UpqXY

begoon
09.03.2021, 00:00
загрузка внешних файлов в эмулятор (https://rk86.ru/help.html#file-load)
эмуляция записи на магнитную ленту (https://rk86.ru/help.html#tape-output)

Наконец написал какое-то подобие документации (https://rk86.ru/help.html). Документ будет обновляться.

Раздел про консоль пока пустой, но именно там есть чего описать.

begoon
09.03.2021, 16:30
Добавил в документацию пример цикла разработки (https://rk86.ru/help.html#development-example), когда код компилируется локально, но запускается в эмуляторе на rk86.ru.

Пример вполне работоспособный.

Pyk
09.03.2021, 21:54
Очень интересный подход к эмуляции звука, не помню, чтобы где-то встречал что-то подобное...
Не очень похоже на оригинал, но звучит просто здорово! :)

begoon
09.03.2021, 22:28
Добавлена поддержка светового пера (https://rk86.ru/help.html#light-pen).

Добавил в эмулятор поддержку пера - демонстрационная программа (https://rk86.ru/index.html?file=https://gist.githubusercontent.com/begoon/a40634729121a69e3235b565f4abbcfb/raw/beta_bas_test.bin).

UPDATE: Исправил ссылку на демо. До этого она указывала на localhost.

Когда эмулятор запустится, сказать "G0", потом "N" в бейсике, и потом "RUN 1000".

- - - Добавлено - - -


Не очень похоже на оригинал, но звучит просто здорово! :)

Вот еще показательнее пример (https://rk86.ru/index.html?file=MUZUKRED.RKR).

Только надо сразу после запуска страницы эмулятора включить галочку звука в левом нижем углу.

begoon
10.03.2021, 19:17
Добавленая поддержка загрузки локальных файлов в эмулятор (https://rk86.ru/help.html#upload).

begoon
20.03.2021, 03:21
Поддержка снапшотов (https://rk86.ru/help.html#snapshot).

Примеры снапшотов:
Демо "РК86" (https://rk86.ru/index.html?file=https://gist.githubusercontent.com/begoon/abbc0d1cc565167bd56866612b984da0/raw/rk86-demo.snapshot.json) (текст (https://gist.github.com/begoon/abbc0d1cc565167bd56866612b984da0)).
Дамп памяти (https://rk86.ru/index.html?file=https://gist.githubusercontent.com/begoon/30a883d6f0ed6e8770a5c0dec34f5ce4/raw/rk86-dump.snapshot.json) (текст (https://gist.github.com/begoon/30a883d6f0ed6e8770a5c0dec34f5ce4)). Данные снапшот демонстрирует имитацию нажатия на клавиатуру после загрузки снапшота. Подается команда печати дампа памяти и через 3 секунды вывод прерывается "нажатием" на CC+C.
Демо светового пера (https://rk86.ru/index.html?file=https://gist.githubusercontent.com/begoon/f316eddc78c510a1402ac8cbda9fec17/raw/rk86-lightpen-demo.snapshot.json) (текст (https://gist.github.com/begoon/f316eddc78c510a1402ac8cbda9fec17)).

kolk
20.03.2021, 15:19
Может, нужен и wave-режим эмуляции звука тоже?

begoon
20.03.2021, 15:21
Может, нужен и wave-режим эмуляции звука тоже?

А что значит wave-режим? Чем отличается от нынешнего способа эмуляции звука?

kolk
20.03.2021, 16:07
А что значит wave-режим? Чем отличается от нынешнего способа эмуляции звука?

Не пытаться воспроизводить ноты, а тупо воспроизводить поток бит. Наверно, масштабируя по временной оси. Думаю, для речи так было бы лучше. Или там есть выявление/поддержка многоголосия? (R1, DTMF)

begoon
20.03.2021, 17:43
Минимальные требования для запуска эмулятора??
у мну в трех браузерах не подает признаков жизни.
Раньше запускался, насколько помню.
*чОрный экран и одинокая надпись Loading...*

Chrome 88+, Firefox 85+, Safari 14+, Opera 74+.

В каких браузерах у вас не работает?

- - - Добавлено - - -


Не пытаться воспроизводить ноты, а тупо воспроизводить поток бит. Наверно, масштабируя по временной оси. Думаю, для речи так было бы лучше. Или там есть выявление/поддержка многоголосия? (R1, DTMF)

В эмуляции на JavaScript тактирование по реальному времени крайне не точно. Браузер не гарантирует, когда именно даёт время на выполнение, поэтому эмулятор тактируется по циклам виртуального процессора, выполняя команды группами, и тактируя приблизительно по десяткам миллисекунд. Это незаметно в общем, но надеяться на точное выполнение по времени каждой команды нельзя.

Поэтому просто воспроизведение потока бит будет далеко от реальности.

kolk
20.03.2021, 17:57
Поэтому просто воспроизведение потока бит будет далеко от реальности.

Имелось в виду формирование PCM потока на основе того же подсчета тактов, и по необходимости его ускорение/замедление (с задержкой порядка 20 мс?).