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

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

Moderator: Shaos

User avatar
alexcp
Maniac
Posts: 200
Joined: 11 Jun 2012 07:30

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

Post by alexcp »

Благодарю! Это было невероятно быстро :)

Уточняющий вопрос: базы периферии должны быть кратны 2000 (окно 8 КБ) - именно так работает журнальный вариант РК. Можно ли смягчить это требование для не-классических вариантов?

Большие окна по 8Кб были сделаны в "классике", чтобы весь дешифратор адресов уместился в одной К555ИД7. С тремя периферийными устройствами (2 шт. ВВ55 и одна ВГ75) суммарный объем ПЗУ и ОЗУ ограничен 64-(3*8)=40Кб. Сегодня в железе можно сделать другой дешифратор, сократить размер окна, выделенного под каждое периферийное устройство и добавить ПЗУ, ОЗУ и (или) периферии. Например, в РК86/SRAM восемь окон по 4Кб (два заняты ПЗУ, три не используются - и на совместимость с "классикой" это, похоже, не повлияло, за 14 лет я жалоб не слышал), в Микроше - восемь окон по 2Кб (в одном таймер ВИ53, которого не было в "классике", еще три выведены наружу). Я бы сделал 32кБ ОЗУ, 16Кб ПЗУ и, скажем, восемь окон по 2Кб. Монитор придется подправить, но это не проблема.
begoon
Maniac
Posts: 293
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

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

Post by begoon »

Сделал так

В классическом РК86 дешифратор на одной К555ИД7 смотрит только на A13..A15, поэтому каждая микросхема периферии занимает окно 8 КБ, а под ОЗУ и ПЗУ остаётся 40 КБ. В современных вариантах дешифратор полнее: 4 КБ в РК86/SRAM, 2 КБ в Микроше. Поле Окно периферии (peripheral_window) в профиле задаёт этот размер (от 8 КБ до 256 байт). Из него вычисляется маска старших бит адреса, базы ВВ55/ВГ75/ВТ57 должны быть кратны размеру окна, а внутри окна регистры зеркалируются, как в железе. Классический профиль остаётся с окном 8 КБ, старые профили и снапшоты без поля читаются как классические.
You do not have the required permissions to view the files attached to this post.
User avatar
alexcp
Maniac
Posts: 200
Joined: 11 Jun 2012 07:30

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

Post by alexcp »

Замечательно, спасибо! В варианте RK86/SRAM с 4Кб окном, как и ожидалось, работает без изменений. Другие варианты опробую в ближайшее время и отпишу.
User avatar
alexcp
Maniac
Posts: 200
Joined: 11 Jun 2012 07:30

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

Post by alexcp »

Обнаружил две небольшие проблемы. Первая - кнопка Run на https://demin.ws/asm8/ запускает не-исправленный эмулятор, где запись в регистры контроллера ПДП меняет содежимое ПЗУ. На https://rk86.ru/asm/ все исправлено, как обсуждалось выше.

Вторая - в Firefox нажатие кнопки '/' (и некоторых других - зависит от раскладки клавиатуры) включает в браузере Quick Find - в нижней части окна появляется строка для ввода. Эмулятор при этом теряет фокус и попадет в бесконечный цикл ввода этого символа автоповтором (см. видео), выйти из которого удается только по reset. Workaround - отключение Quick Find (about:config -> accessibility.typeaheadfind.manual -> toggle, поиск по странице через Ctrl-F при этом продолжает работать) или переход на Chrome или Edge.
rk86.mp4
You do not have the required permissions to view the files attached to this post.
begoon
Maniac
Posts: 293
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

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

Post by begoon »

Хотел было пошутить типа кто еще в 2026 использует это недоразумение под название firefox :ebiggrin:

В общем, обе проблемы вроде исправил. По ходу выяснилось, что рендеринг в сафари был сломан, но видимо столько много пользователей с сафари, что никто не жаловался :-)

Поводу demin.ws/asm8. Лучше использовать rk86.ru/asm, если именно для РК, ибо проект ассемблера и его playground на demin.ws/asm8 по сути не зависит от проекта РК, и его возможность запускать на РК скорее side effect, нежели фича.

Я стараюсь их синхронизировать, но иногда забываю, а деплоятся они в разные места.
User avatar
alexcp
Maniac
Posts: 200
Joined: 11 Jun 2012 07:30

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

Post by alexcp »

Супер, спасибо!

Firefox я использую под Windows и Debian+XFCE больше по привычке - лет 7-8 назад он был ничего - и из неприязни к продуктам Google и Microsoft. Правда, в последнее время чаще приходится использовать Chrome, у которого получше с совместимостью.
User avatar
alexcp
Maniac
Posts: 200
Joined: 11 Jun 2012 07:30

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

Post by alexcp »

Нашел, как мне кажется, неточность в интерактивном ассемблере.

В тексте программы на ассемблере знак доллара означает текущий адрес:
With MACRO-80, the dollar sign ($) is a defined constant that indicates the value of the location counter at the start of the statement.
Например, в приведенном ниже фрагменте 16-битное слово по адресу 088D должно быть равно разнице между адресом, соответствующем метке ULES1 (0899), и собственным адресом слова (088D), т.е. 0899 - 088D = 000C.

Однако интерактивный ассемблер ставит туда 000E:
Screenshot 2026-09-12 152840.png
В результате код из этого фрагмента работает неверно.

Можно предположить, что используется не адрес слова 088D, а адрес, с которого начинается строка с DW, т.е. 088B. Такая трактовка не вполне логична, так как с ней код:

Code: Select all

DW 1000, 2000-$
компилируется иначе, чем

Code: Select all

DW 1000
DW 2000-$
You do not have the required permissions to view the files attached to this post.
begoon
Maniac
Posts: 293
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

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

Post by begoon »

Да, интересный corner case.

Исправил.
User avatar
alexcp
Maniac
Posts: 200
Joined: 11 Jun 2012 07:30

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

Post by alexcp »

Спасибо, все работает.

Еще одна мелочь - на

Code: Select all

MVI E,-1
ругается, что

Code: Select all

MVI: 8-bit value out of range: 65535
Кстати, об ошибках вроде 0FF (вместо корректного 0FFh) не сообщает, а тихо подставляет ноль.
begoon
Maniac
Posts: 293
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

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

Post by begoon »

Ага. Исправил.
Damir
Senior
Posts: 110
Joined: 21 Feb 2017 06:54
Location: Казань

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

Post by Damir »

begoon wrote: 13 Sep 2026 07:13 Ага. Исправил.
Есть ещё 2 маленьких неудобства при работе с Ассемблером:
1 Если открыты несколько вкладок с программами, то при переключении из одной проги в другую всегда
в текущёй устанавливается в последнюю строку программы, маленько неудобно, особенно когда в программе более
1000 строк и приходиться копировать куски в разные места.

2 Иногда при вставке пустой строки (Энтер) эта строка улетает вверх за пределы экрана ...
begoon
Maniac
Posts: 293
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

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

Post by begoon »

Исправлено.
User avatar
alexcp
Maniac
Posts: 200
Joined: 11 Jun 2012 07:30

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

Post by alexcp »

Теоретический вопрос: Можно ли, в принципе, использовать тот же или аналогичный отладчик для отладки в железе?

Понятно, что в 8080 не имеет на борту никакой поддержки для этого, поэтому единственный известный мне способ - это заменять в точке останова команду (или ее первый байт) на RST x, которая передаст управление хранящемуся в ПЗУ обработчику. Тот отгрузит отладчику - скажем, через WebSerial - состояние регистров процессора и переменных в памяти и будет ждать команды.

Примерно так работает NoICE. У него есть свой монитор размером в килобайт, который я когда-то модифицировал для работы на РК c дополнительным портом на FT245R. Протокол, по которому этот монитор связывается с отладчиком, документирован.

Жаль, конечно, что в РК нет стандартного последовательного порта, но если его добавить, то можно было бы с удобством отлаживать программы как в эмулятор, так и в железе.

Оговорюсь, что, хотя NoICE у меня работал в железе, весь текст выше - это просто пришедшая в голову идея для обсуждения, ничего больше.
begoon
Maniac
Posts: 293
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

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

Post by begoon »

Я бы, например, выпилил просто отладчик в отдельный проект. Это несложно сделать. Ну, зная, как проект организован. :-)

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

Просто если центральная вещь здесь отладчик, то тягать за собой эмулятор особого резона нет. Ну, по крайней мере, пока так кажется.

Так что если договориться о протоколе, можно отладчик выпилить и будет отдельный веб-апп.

Да и протокол можно будет как-нибудь конфигурировать, если нужно. Но сначала можно начать с какой-нибудь конкретной реализации протокола.
User avatar
alexcp
Maniac
Posts: 200
Joined: 11 Jun 2012 07:30

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

Post by alexcp »

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