Просмотр полной версии : Эмулятор Радио-86РК на JavaScript
Основан на ядре 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.
Добавлено в эмулятор:
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
загрузка внешних файлов в эмулятор (https://rk86.ru/help.html#file-load)
эмуляция записи на магнитную ленту (https://rk86.ru/help.html#tape-output)
Наконец написал какое-то подобие документации (https://rk86.ru/help.html). Документ будет обновляться.
Раздел про консоль пока пустой, но именно там есть чего описать.
Добавил в документацию пример цикла разработки (https://rk86.ru/help.html#development-example), когда код компилируется локально, но запускается в эмуляторе на rk86.ru.
Пример вполне работоспособный.
Очень интересный подход к эмуляции звука, не помню, чтобы где-то встречал что-то подобное...
Не очень похоже на оригинал, но звучит просто здорово! :)
Добавлена поддержка светового пера (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).
Только надо сразу после запуска страницы эмулятора включить галочку звука в левом нижем углу.
Добавленая поддержка загрузки локальных файлов в эмулятор (https://rk86.ru/help.html#upload).
Поддержка снапшотов (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)).
Может, нужен и wave-режим эмуляции звука тоже?
Может, нужен и wave-режим эмуляции звука тоже?
А что значит wave-режим? Чем отличается от нынешнего способа эмуляции звука?
А что значит wave-режим? Чем отличается от нынешнего способа эмуляции звука?
Не пытаться воспроизводить ноты, а тупо воспроизводить поток бит. Наверно, масштабируя по временной оси. Думаю, для речи так было бы лучше. Или там есть выявление/поддержка многоголосия? (R1, DTMF)
Минимальные требования для запуска эмулятора??
у мну в трех браузерах не подает признаков жизни.
Раньше запускался, насколько помню.
*чОрный экран и одинокая надпись Loading...*
Chrome 88+, Firefox 85+, Safari 14+, Opera 74+.
В каких браузерах у вас не работает?
- - - Добавлено - - -
Не пытаться воспроизводить ноты, а тупо воспроизводить поток бит. Наверно, масштабируя по временной оси. Думаю, для речи так было бы лучше. Или там есть выявление/поддержка многоголосия? (R1, DTMF)
В эмуляции на JavaScript тактирование по реальному времени крайне не точно. Браузер не гарантирует, когда именно даёт время на выполнение, поэтому эмулятор тактируется по циклам виртуального процессора, выполняя команды группами, и тактируя приблизительно по десяткам миллисекунд. Это незаметно в общем, но надеяться на точное выполнение по времени каждой команды нельзя.
Поэтому просто воспроизведение потока бит будет далеко от реальности.
Поэтому просто воспроизведение потока бит будет далеко от реальности.
Имелось в виду формирование PCM потока на основе того же подсчета тактов, и по необходимости его ускорение/замедление (с задержкой порядка 20 мс?).
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot