Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Moderator: Shaos
-
alexcp
- Senior
- Posts: 183
- Joined: 11 Jun 2012 07:30
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Видео записал, см. вложения.
При записи понял, куда делся "=": при вводе текста в промпт Монитора в симуляторе ракладка клавиатуры не совпадает с PC-шной, поэтому "=" - это Shift+"-", а не та кнопка, на которой "=" и "+". Круглые скобки - Shift+8 и Shift+9, а не привычные Shift+9 и Shift+0, и так далее.
При записи понял, куда делся "=": при вводе текста в промпт Монитора в симуляторе ракладка клавиатуры не совпадает с PC-шной, поэтому "=" - это Shift+"-", а не та кнопка, на которой "=" и "+". Круглые скобки - Shift+8 и Shift+9, а не привычные Shift+9 и Shift+0, и так далее.
You do not have the required permissions to view the files attached to this post.
Last edited by alexcp on 20 Jun 2026 18:11, edited 1 time in total.
-
Shaos
- Admin
- Posts: 25120
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Видосы сюда можно цеплять как видосы 
Аттачем а потом его урл в тэг video
Аттачем а потом его урл в тэг video
-
alexcp
- Senior
- Posts: 183
- Joined: 11 Jun 2012 07:30
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Размер ограничен 5МБ, а получилось восемь. Сжать было проще, чем перекодировать, да и интереса это видео большого не представляет. Удивительно, что ужалось в пять раз - вроде бы MP4 должен быть уже сжат.
-
Shaos
- Admin
- Posts: 25120
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Ну можно было пережать с уменьшением разрешения 
Наверное у тебя кодек фиговый юзался (типа mjpeg) если так хорошо сжалось
Обычно если это реально MPEG4, то он уже не сжимается
P.S. mp41isom?
2849.2 kbps это ту мач - ща пережму
Наверное у тебя кодек фиговый юзался (типа mjpeg) если так хорошо сжалось
Обычно если это реально MPEG4, то он уже не сжимается
P.S. mp41isom?
Code: Select all
Playing Screen Recording 2026-06-20 174934.mp4.
libavformat version 58.45.100 (external)
libavformat file format detected.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f4f57885180]Protocol name not provided, cannot determine if input is local or a network protocol, buffers and access patterns cannot be configured optimally without knowing the protocol
[lavf] stream 0: video (h264), -vid 0
[lavf] stream 1: audio (aac), -aid 0, -alang und
VIDEO: [H264] 1154x616 24bpp 30.000 fps 2849.2 kbps (347.8 kbyte/s)
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
libavcodec version 58.91.100 (external)
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
Clip info:
major_brand: mp42
minor_version: 0
compatible_brands: mp41isom
creation_time: 2026-06-20T21:49:12.000000Z
Load subtitles in ./
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 48000 Hz, 2 ch, floatle, 192.0 kbit/6.25% (ratio: 24000->384000)
Selected audio codec: [ffaac] afm: ffmpeg (FFmpeg AAC (MPEG-2/MPEG-4 Audio))
==========================================================================
AO: [pulse] 48000Hz 2ch floatle (4 bytes per sample)
Starting playback...
Movie-Aspect is 1.87:1 - prescaling to correct movie aspect.
VO: [vdpau] 1154x616 => 1154x616 Planar YV12
A: 22.1 V: 22.1 A-V: 0.033 ct: 0.104 0/ 0 13% 4% 0.3% 4 0
-
alexcp
- Senior
- Posts: 183
- Joined: 11 Jun 2012 07:30
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Быстро
Я, правда, тоже пережал.
-
Shaos
- Admin
- Posts: 25120
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Ну тогда вот твои файлы в обрамлении тэга video
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Разгадка «загадки» E008 → A4
Короткий ответ: ассемблер(ы) и .rk-файл абсолютно корректны — в E008 лежит E1. Значение портится уже в эмуляторе, потому что адрес E000 выбран неудачно: он попадает прямо на регистры контроллера ПДП (DMA) К580ВТ57.
Цепочка фактов (всё проверено экспериментально):
Механизм в эмуляторе. Это запись (store), а не чтение. В memory.write() байт сначала кладётся в ячейку (if (addr < 0xF800) buf[addr] = byte) — поэтому мы его потом и видим, — а затем та же запись по маске addr & 0xE00F интерпретируется как программирование ВТ57.
Весь диапазон E000–FFFF — это периферия и ПЗУ (выборка по A15..A13 = 111), а не ОЗУ: E000–E008 — ВТ57, C000/C001 — ВГ75, 8000–8003 — ППА.
Для информации -- rk86_memory.ts
Короткий ответ: ассемблер(ы) и .rk-файл абсолютно корректны — в E008 лежит E1. Значение портится уже в эмуляторе, потому что адрес E000 выбран неудачно: он попадает прямо на регистры контроллера ПДП (DMA) К580ВТ57.
Цепочка фактов (всё проверено экспериментально):
- Ассемблер корректен. И классический i8080asm, и asm8 дают E006: CD DA E1 (CALL E1DAh), то есть E008 = E1.
- .rk-файл корректен. На диске байты ... 21 DB E1 CD DA E1 .... Сборщик .rk (заголовок big-endian start/end + контрольная сумма) собирает их правильно.
- Сразу после загрузки память тоже корректна. Если загрузить файл и не запускать процессор, в E008 честно лежит E1.
- Портит значение монитор, а не программа. Я проверил вариант с HERE: JMP HERE (программа крутится на месте и ничего не пишет в E000) — её собственные байты на E009 уцелели, а E004/E005/E008 всё равно затёрлись.
- Кто именно пишет. Трассировка записей показала, что монитор (ПК в ПЗУ, адреса FAEC–FAFB) выполняет инструкции записи в E004/E005/E008:
Итог: E004=76, E005=49, E008=A4 — ровно наша «порча».
Code: Select all
E008 = 80 ; сброс команды ВТ57 E004 = D0,76 ; адрес видеопамяти 0x76D0 (мл./ст. байт) E005 = 23,49 ; счётчик E008 = A4 ; команда «разрешить ПДП»
Механизм в эмуляторе. Это запись (store), а не чтение. В memory.write() байт сначала кладётся в ячейку (if (addr < 0xF800) buf[addr] = byte) — поэтому мы его потом и видим, — а затем та же запись по маске addr & 0xE00F интерпретируется как программирование ВТ57.
Весь диапазон E000–FFFF — это периферия и ПЗУ (выборка по A15..A13 = 111), а не ОЗУ: E000–E008 — ВТ57, C000/C001 — ВГ75, 8000–8003 — ППА.
Для информации -- rk86_memory.ts
Last edited by begoon on 21 Jun 2026 03:42, edited 3 times in total.
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Забыл добавить: кнопка "upload" в моем ассемблере загружает результат ассемблирования в эмулятор без запуска, чтобы не нужно было постоянно через точку останова останавливать запуск.
-
alexcp
- Senior
- Posts: 183
- Joined: 11 Jun 2012 07:30
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Спасибо! Про регистры ПДП я не подумал. Однако такое поведение эмулятора не соответствует поведению РК в железе. В железе при чтении по адресам E000-FFFF читается ПЗУ, а при записи по тем же адресам пишутся регистры ПДП. (Кстати, старшие биты адреса при записи не декодируются, поэтому 16 регистров ПДП занимают все 8Кб, но вряд ли кто этим пользуется.) Прочитать регистры ПДП на РК невозможно в принципе. Что ни запишешь по адресу E006, прочитаешь оттуда всегда один и тот же байт из ПЗУ.
Last edited by alexcp on 21 Jun 2026 04:53, edited 4 times in total.
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
О как! Я этого в точности не знал -- как именно дешифруется регион с E000 по F7FF -- что читается и что пишется.
Исправим.
Исправим.
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Будет так:
1. В read() для addr >= 0xe000 возвращать зеркало ПЗУ (buf[0xf800 | (addr & 0x07ff)]) вместо buf.
2. В write() сузить запись в ОЗУ до addr < 0xe000 (а не < 0xf800), убрав фантомное ОЗУ E000–F7FF и заодно случайное загрязнение buf на DMA-адресах.
1. В read() для addr >= 0xe000 возвращать зеркало ПЗУ (buf[0xf800 | (addr & 0x07ff)]) вместо buf.
2. В write() сузить запись в ОЗУ до addr < 0xe000 (а не < 0xf800), убрав фантомное ОЗУ E000–F7FF и заодно случайное загрязнение buf на DMA-адресах.
-
alexcp
- Senior
- Posts: 183
- Joined: 11 Jun 2012 07:30
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Это будет корректно для оригинального РК, но не для варианта со статической памятью и 8Кб ПЗУ.
Нельзя ли сохранить возможность грузить из ассемблера и отлаживать код в ПЗУ по адресам E000-FFFF? Собственно, код, который я грузил в эмулятор, предназначен для ПЗУ. Я с самого начала хотел разместить что-то полезное в дополнительных 6Кб по адресам E000-F7FF.
Нельзя ли сохранить возможность грузить из ассемблера и отлаживать код в ПЗУ по адресам E000-FFFF? Собственно, код, который я грузил в эмулятор, предназначен для ПЗУ. Я с самого начала хотел разместить что-то полезное в дополнительных 6Кб по адресам E000-F7FF.
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Может так?
Загрузка внешнего файла, например, из ассемблера, может ложится куда угодно из 0000-7fff и E000-F7FF.
Запись E000-F7FF работать НЕ будет, но чтение - будет.
Загрузка внешнего файла, например, из ассемблера, может ложится куда угодно из 0000-7fff и E000-F7FF.
Запись E000-F7FF работать НЕ будет, но чтение - будет.
-
alexcp
- Senior
- Posts: 183
- Joined: 11 Jun 2012 07:30
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Замечательно! Это позволит отлаживать код в ПЗУ, в том числе Монитор. В железе такая отладка невозможна без доп. оборудования, так что симулятор - единственный практический вариант.
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Эмуляторы I8080/КР580ВМ80A и Радио-86РК на JavaScript
Готово. Сейчас твой код для региона E000 не должен искажаться.
You do not have the required permissions to view the files attached to this post.
