Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Moderator: Shaos
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Новый селектор файлов для запуска.
You do not have the required permissions to view the files attached to this post.
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Добавил Сквош
Благодаря этой игры выловил аж 3 (!) фундаментальных бага в эмуляторе, которые были в нем все эти годы.
VG75: специальные управляющие символы 0xF0..0xFF (End of Row / End of Frame)
В микросхеме i8275 (К580ВГ75) старший hex-блок 0xF0..0xFF
зарезервирован под специальные управляющие коды (Special Control
Characters). Эти байты не рисуются как глифы — VG75 их
интерпретирует как команды управления выводом:
- 0xF0..0xF7 — End of Row: оборвать текущую строку. VG75 не рисует
ни байт-команду, ни оставшиеся столбцы строки. Подварианты
отличаются атрибутами и наличием Stop-DMA.
- 0xF8..0xFF — End of Frame / End of Screen: оборвать текущую
строку и все последующие. Применяется для динамической
обрезки кадра.
В РК86 это широко используется для аккуратного обрезания строки
до меньшей ширины, чем запрограммированные 78 столбцов VG75.
IK57: повторное программирование канала через flip-flop первого/второго байта
В микросхеме i8257 (КР580ВТ57, она же ИК57) каждый из адресных
регистров каналов 16-битный, но обращение к нему идёт через 8-битные
порты. Внутренний flip-flop (F/F) определяет, в какую половину
попадёт следующая запись — в младшую или старшую. F/F сбрасывается
командой master-clear (E008 = 0x80) и переключается при каждой
записи в адресный регистр канала.
Старая реализация распознавала только начальную последовательность
инициализации:
E008,80 → E004,lo → E004,hi → E005,lo → E005,hi → E008,A4.
Любая последующая прямая запись в E004/E005 без повторного
master-clear считалась случайной и просто складывалась в RAM, не
оказывая влияния на DMA. Программы, которые после инициализации
перепрограммируют адрес видеопамяти на лету, не получали ожидаемого
эффекта: DMA продолжал читать кадр со старого адреса, и игровое
поле рисовалось в одну область памяти, а на экран отображалась
другая.
VG75: корректный сигнал VRTC в регистре состояния 0xC001
Чтение регистра состояния VG75 по адресу 0xC001 всегда возвращало
константу 0x20 — то есть бит 5 (VRTC, vertical retrace) был
постоянно поднят. Программы, использующие классическую идиому
ожидания вертикальной синхронизации (LXI H,C001 / MOV A,M / ANI 20 /
JZ), выходили из цикла ожидания мгновенно: кадровая синхронизация
полностью игнорировалась, и эмулируемая программа выполняла своё
тело кадра на максимальной скорости процессора, без покадровой
паузы.
Симптом, на котором это поймалось: игра Squash от Дмитрия Иванова
(2024). Полный цикл «splash → запуск игры → потеря 3 жизней → game
over → splash» проходил за ~35 мс CPU-времени — ниже порога
восприятия, экран не успевал ни обновиться, ни прокачать DMA, и
визуально это выглядело как «пробел не работает».
Благодаря этой игры выловил аж 3 (!) фундаментальных бага в эмуляторе, которые были в нем все эти годы.
VG75: специальные управляющие символы 0xF0..0xFF (End of Row / End of Frame)
В микросхеме i8275 (К580ВГ75) старший hex-блок 0xF0..0xFF
зарезервирован под специальные управляющие коды (Special Control
Characters). Эти байты не рисуются как глифы — VG75 их
интерпретирует как команды управления выводом:
- 0xF0..0xF7 — End of Row: оборвать текущую строку. VG75 не рисует
ни байт-команду, ни оставшиеся столбцы строки. Подварианты
отличаются атрибутами и наличием Stop-DMA.
- 0xF8..0xFF — End of Frame / End of Screen: оборвать текущую
строку и все последующие. Применяется для динамической
обрезки кадра.
В РК86 это широко используется для аккуратного обрезания строки
до меньшей ширины, чем запрограммированные 78 столбцов VG75.
IK57: повторное программирование канала через flip-flop первого/второго байта
В микросхеме i8257 (КР580ВТ57, она же ИК57) каждый из адресных
регистров каналов 16-битный, но обращение к нему идёт через 8-битные
порты. Внутренний flip-flop (F/F) определяет, в какую половину
попадёт следующая запись — в младшую или старшую. F/F сбрасывается
командой master-clear (E008 = 0x80) и переключается при каждой
записи в адресный регистр канала.
Старая реализация распознавала только начальную последовательность
инициализации:
E008,80 → E004,lo → E004,hi → E005,lo → E005,hi → E008,A4.
Любая последующая прямая запись в E004/E005 без повторного
master-clear считалась случайной и просто складывалась в RAM, не
оказывая влияния на DMA. Программы, которые после инициализации
перепрограммируют адрес видеопамяти на лету, не получали ожидаемого
эффекта: DMA продолжал читать кадр со старого адреса, и игровое
поле рисовалось в одну область памяти, а на экран отображалась
другая.
VG75: корректный сигнал VRTC в регистре состояния 0xC001
Чтение регистра состояния VG75 по адресу 0xC001 всегда возвращало
константу 0x20 — то есть бит 5 (VRTC, vertical retrace) был
постоянно поднят. Программы, использующие классическую идиому
ожидания вертикальной синхронизации (LXI H,C001 / MOV A,M / ANI 20 /
JZ), выходили из цикла ожидания мгновенно: кадровая синхронизация
полностью игнорировалась, и эмулируемая программа выполняла своё
тело кадра на максимальной скорости процессора, без покадровой
паузы.
Симптом, на котором это поймалось: игра Squash от Дмитрия Иванова
(2024). Полный цикл «splash → запуск игры → потеря 3 жизней → game
over → splash» проходил за ~35 мс CPU-времени — ниже порога
восприятия, экран не успевал ни обновиться, ни прокачать DMA, и
визуально это выглядело как «пробел не работает».
You do not have the required permissions to view the files attached to this post.
Last edited by begoon on 09 May 2026 10:15, edited 2 times in total.
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Добавил Dizzy
Игруха реально шедевр.
Кому лень рубиться самому - вот стрим, где человек реально прошел всю игру.
Игруха реально шедевр.
Кому лень рубиться самому - вот стрим, где человек реально прошел всю игру.
You do not have the required permissions to view the files attached to this post.
Last edited by begoon on 09 May 2026 10:16, edited 1 time in total.
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Добавил Trex
You do not have the required permissions to view the files attached to this post.
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Добавил Weird
You do not have the required permissions to view the files attached to this post.
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Добавил drag-and-drop в браузер эмулятора, чтоб быстрее запускать.
Как альтернатива "bunx rk86 --online squash.rkr".
Как альтернатива "bunx rk86 --online squash.rkr".
-
Shaos
- Admin
- Posts: 25057
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Кстати да - я было даже хотел сам добавить тонкое управление ВГ75 в свою версию rk86.js - мне даже Alikberov свои хаки давал, но как-то руки не дошли...
Может ещё и наш видепроигрыватель научишь у себя работать?
Может ещё и наш видепроигрыватель научишь у себя работать?
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
А что такое «ваш видео проигрыватель»? Где почитать?
-
Shaos
- Admin
- Posts: 25057
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Да вон же - двумя темами выше
http://www.nedopc.org/forum/viewtopic.php?t=22417
Там видео рисуется обрезанными до 5 строк символами знакогенератора плюс 1-битный звук
Сами бинари образов для 8-мегабайтных ромдисков можно найти в "секретах"
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Запилил цвет. Теперь Dizzy вот такой:
You do not have the required permissions to view the files attached to this post.
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Добавил Ёлку
You do not have the required permissions to view the files attached to this post.
-
Shaos
- Admin
- Posts: 25057
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Это круто 
А можно переключаться между Самоцветом, Толкалиным и Апогеевским цветом?
А можно переключаться между Самоцветом, Толкалиным и Апогеевским цветом?
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Добавил Rise
You do not have the required permissions to view the files attached to this post.
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Добавил цветной Питон
You do not have the required permissions to view the files attached to this post.
-
begoon
- Maniac
- Posts: 231
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Добавил Boulder Dash
You do not have the required permissions to view the files attached to this post.
