Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

begoon
Maniac
Posts: 304
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript

Post by begoon »

Все началось в 2012.

Обрадованный успехом использования 8080/8085 Exerciser'а для тестирования i8080-core, я вернулся к эмулятору РК на JavaScript. В итоге я полностью переписал ядро Intel 8080, выделив его в отдельный проект — i8080-js. Данная реализация проходит все тесты, что и i8080-core, включая 8080/8085 Exerciser.

После этого я переписал и эмулятор РК с использованием нового ядра. Пост по теме: demin.ws/blog/russian/2012/10/04/rk86-js.

ОБНОВЛЕНИЕ от 08.10.2026

Эмулятор полностью переписан заново на TypeScript (SvelteKit). Ядро Intel 8080 теперь живёт внутри проекта и по-прежнему проходит 8080/8085 Exerciser. Старая версия на vanilla JS сохранена в ветке classic.

Эмулятор: rk86.ru
Исходники: github.com/begoon/rk86-js
Экспериментальная сборка: rk86.ru/beta

Инструменты разработчика Эмуляция
  • точный тайминг 1,78 МГц, турбо-режим
  • два режима рендеринга экрана: ВГ75 (покадровый, с эффектами срыва синхронизации) и МОНИТОР
  • чистый звук — прямое моделирование 1-битного спикера
  • цвет (Толкалин, Акименко, Апогей), атрибуты ВГ75: мигание, инверсия, подчёркивание
  • световое перо с отображением координат
  • эмуляция записи на магнитную ленту
  • профили оборудования: адреса ОЗУ, ПЗУ и периферии, размер окна периферии, профиль сохраняется в снапшоте
  • карта занятой памяти
Загрузка и сохранение
  • загрузка локальных файлов и drag-and-drop (.rk, .rkr, .gam, .pki, .bin, .json)
  • текстовый hex-формат: файл начинается со строки #!rk86, далее hex-байты, теги !name, !start, !entry. Программу можно вставить прямо из поста на форуме.
  • автозагрузка через URL: ?file= / ?run= (загрузить и запустить), ?load= (только загрузить) — имя из каталога, прямая ссылка или data-URL, ?monitor=mon32-color.bin выбирает цветной монитор
  • снапшоты полного состояния в JSON с имитацией нажатий клавиш после загрузки
  • заморозка состояния — до 20 снимков с миниатюрами экрана и мгновенным восстановлением
  • сохранение дампа памяти с выбором диапазона
Клавиатура
  • экранная клавиатура с подсказкой раскладки
  • прямой ввод — символы с клавиатуры хоста переводятся в коды РК
  • конвертер кириллического текста в кодировку РК (KOI-7)
  • горячие клавиши: Cmd/Ctrl+K, затем буква
Каталог

Онлайновый каталог из 225 игр и программ со скриншотами и микро-описаниями. Любую можно запустить в эмуляторе одним кликом, скачать в нужном формате (в том числе RKS).

rk86.ru/catalog

Встраивание и терминал
  • веб-компонент <radio86-emulator> (npm-пакет radio86-emulator) — эмулятор на любой странице одной строкой HTML: 4 эмулятора, 12 эмуляторов
  • терминальный эмулятор (npm-пакет rk86): bunx rk86 CHESS.GAM, headless-режим со скриптовым вводом, дампы экрана и памяти для автотестов, флаг --online открывает локальный файл сразу на rk86.ru
Документация Примеры снапшотов
Демо «РК86» (текст).
Дамп памяти (текст). Данный снапшот демонстрирует имитацию нажатий на клавиатуру после загрузки: подаётся команда печати дампа памяти, и через 3 секунды вывод прерывается «нажатием» СС+C.
Демо светового пера (текст).
Last edited by begoon on 08 Oct 2026 02:45, edited 32 times in total.
User avatar
Shaos
Admin
Posts: 25379
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

begoon wrote:Обрадованный успехом использования 8080/8085 Exerciser'а для тестирования https://github.com/begoon/i8080-core, я вернулся к эмулятору РК на JavaScript. В итоге я полностью переписал ядро I8080, выделив его в отдельный проект -- https://github.com/begoon/i8080-js. Данная реализация проходит все тесты, что и i8080-core, включая 8080/8085 Exerciser.

После этого я также переписал и эмулятор РК с использованием нового ядра. Новая версия теперь работает на https://demin.ws/rk и хостится на https://github.com/begoon/rk86-js.
Быстрее работает?
begoon
Maniac
Posts: 304
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Post by begoon »

Shaos wrote:Быстрее работает?
Быстрее чего? Если старой версии, то не сравнивал, так как особо смысла нет. Даже если старая и была быстрее, то написана она ужасно и не проходит тесты. Можно просто над этой версией теперь колдовать, если надо (хотя у меня на MacAir работает с большим запасом по скорости). Например, использовать Typed Arrays, но мне это видится пока не особо нужным.
User avatar
Shaos
Admin
Posts: 25379
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Угу - я про старую версию и говорю
begoon
Maniac
Posts: 304
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Post by begoon »

Обновил головной пост ссылкой на онлайновый каталог программ для РК.
begoon
Maniac
Posts: 304
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Post by begoon »

Обновил головной пост про версию 1.5 в fullscreen и CPU visualizer.
User avatar
Shaos
Admin
Posts: 25379
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А что за какие-то странные серые подчёркивания у каждого знакоместа видны? Это так задумано или глюк 16-го файерфокса?

Потом я смотрю ты команды через switch пускаешь, а вызывать функции из массива не быстрее будет?
begoon
Maniac
Posts: 304
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Post by begoon »

Shaos wrote:А что за какие-то странные серые подчёркивания у каждого знакоместа видны? Это так задумано или глюк 16-го файерфокса?
Этот глюк FF. Так как я сам FF не пользую вообще, то нет пороха разбираться. ;-) Там что-то связано с аппаратным 2D-ускорением. Если у Хрома покрутить его экспериментальные флаги (chrome://flags), связанные с 2D, то иногда появляется тот же эффект. Буду признателен совету, как это вылечить. Если честно, под FF вообще многое ключит, особенно ресайзинги окон, фреймов и т.д.
Shaos wrote:Потом я смотрю ты команды через switch пускаешь, а вызывать функции из массива не быстрее будет?
Для JavaScript'а -- не знаю, может и будет быстрее. В реализации на JS я просто старался сделать красиво и понятно, практически без упора на производительность, ибо, опять-таки, нет возможность предсказать эффективность разных подходов.
User avatar
Shaos
Admin
Posts: 25379
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

OK, понятно

Я просто похожую задачу собираюсь решать (виртуальная машина на JS, крутящая некие байткоды) - через switch опять делать некрасиво, хочу через массив функций - вот и интересуюсь ;)

P.S. Поиграл в XONIX в твоём онлайн эмуле - занятно получилось :)
User avatar
Shaos
Admin
Posts: 25379
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript

Post by Shaos »

Форкнул себе репозиторий с исходниками этого суперэмулятора РК - буду делать поддержку 128К и сети :)

https://gitlab.com/shaos/rk86-js

Планирую превратить это в среду разработки ShaOS с возможностью сохранения подпрограмм на сервере ;)

P.S. Сайт с моей версией: http://rk86.net
Репа живёт на гитлабе с июня 2018 года
User avatar
Lavr
Supreme God
Posts: 17113
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript

Post by Lavr »

Shaos wrote:Форкнул себе репозиторий с исходниками этого суперэмулятора РК...
А что такое "Форкнул "? Уже не первый раз читаю у тебя это слово...
По смыслу мне напоминает завуалированное "с_3.1415926_здил"... я не ошибся?
iLavr
User avatar
Shaos
Admin
Posts: 25379
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript

Post by Shaos »

Lavr wrote:
Shaos wrote:Форкнул себе репозиторий с исходниками этого суперэмулятора РК...
А что такое "Форкнул "? Уже не первый раз читаю у тебя это слово...
в гитхабе есть официальная кнопочка "fork" на каждом репозитории :)

дословно (в данном контексте) можно перевести как "ответвить" (т.е. сделать себе копию чужого репозитория в какой то момент времени и продолжить его разработку независимо от основного репозитория, который может продолжать развиваться своим путём - т.е. чуть более радикальный шаг чем просто "отбранчевать"), а вообще:
fork - вилка (деталь); развилка; разветвление; ответвление; соединение вилкой; подкладная вилка (при бурении); вилы (для устройств); II разветвляться; работать вилами
http://translate.academic.ru/fork/en/ru/
User avatar
Shaos
Admin
Posts: 25379
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript

Post by Shaos »

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

Потом надо бы виртуальную клавиатуру добавить т.к. например на iOS девайсах (айфоны-айпады) в эмулятор ничего ввести не удается потому что клава запрещена - браузер не видит никаких текстовых полей ввода и т.д.

Ну и потом вместо локального сохранения (которое надо специальным образом разрешать) я хочу прикрутить "cloud" - все загрузки-сохранения будут происходлить на "облаке" с возможностью делиться наработками с другими...

P.S. И еще до кучи можно поддержать Микрошу и цветной Апогей :)
User avatar
Lavr
Supreme God
Posts: 17113
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript

Post by Lavr »

И приделай ещё "Покемон Go"... :mrgreen: Раз уж об iOS девайсах речь зашла... :lol:
iLavr
User avatar
Shaos
Admin
Posts: 25379
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript

Post by Shaos »

Lavr wrote:И приделай ещё "Покемон Go"... :mrgreen: Раз уж об iOS девайсах речь зашла... :lol:
Ну я думаю без покемонов тут вполне можно обойтись :)

Виртуальную клаву кстати уже прикрутил - см. тут: http://rk86.net