PDA

Просмотр полной версии : Эмулятор БК-0010 на ESP8266



konst_st
21.09.2018, 19:57
Всем доброго времени суток.
Недавно купил поиграться модуль на ESP8266. Решил изучить его, а за одно и поностальгировать.
В общем делаю эмулятор БК-0010 на ESP8266 на основе эмулятора Радио-86РК от heave http://zx-pk.ru/threads/28907-apparatnyj-emulyator-radio-86rk-na-esp8266.html
Графика только в Ч/Б варианте.
Клавиатура PS/2 с автоматической перекодировкой русских букв и спец.символов.
Звук выводится на GPIO14.
Загрузка файлов из flash (реализован перехват обращения к функции чтения / записи на магнитную ленту).
Железка подключается к WiFi сети и через веб интерфейс можно заливать файлы во flash.
Бейсик работает. Пробовал запускать десяток разных игр - работают.
Есть режим турбо (включается нажатием кнопки Scroll Lock) - получается скорость раз в 6 выше оригинальной БК.
Страница проекта на GitHub https://github.com/konst-st/BK8266

Отличие от других проектов - ультра низкая цена. Всё железо - это ESP8266 (например, ESP-01 за ~100рублей) и одна микросхема 74HC00 (за ~10 рублей). Плюс немного мелочевки - резисторы, регулятор 5->3.3В и разъемы.
Жду Ваши комментарии и предложения.

Manwe
21.09.2018, 22:58
Крутая идея, но почему не на основе кода эмулятора gid.pdp-11.ru?
Важно же чтобы тайминги команд были правильные.

konst_st
21.09.2018, 23:39
Крутая идея, но почему не на основе кода эмулятора gid.pdp-11.ru?
Важно же чтобы тайминги команд были правильные.
Тайминги я из этого эмулятора и взял.
Но код писал свой - пытался максимально все упростить. Думаю что код оттуда вряд ли влез бы в ESP.

CLR
22.09.2018, 06:59
Почему вы не используете ESP32? Тут уже не 100, а ~300 руб, но железка намного мощнее.

Manwe
22.09.2018, 10:20
Тайминги я из этого эмулятора и взял.
Но код писал свой - пытался максимально все упростить.Это круто!
А почему не БК-0011м?

konst_st
22.09.2018, 12:39
Почему вы не используете ESP32? Тут уже не 100, а ~300 руб, но железка намного мощнее.
1. Разница в стоимости.
2. Совместимость по железу с эмулятором Радио-86рк.
3. БК0010 влез в ESP8266 без проблем. В режиме "турбо" скорость эмуляции раз в 6 выше оригинальной. По памяти пока запас есть.
4. За одно хотел изучить ESP8266.

Впрочем ESP32 у меня тоже лежит - до него пока руки не дошли.

- - - Добавлено - - -


Это круто!
А почему не БК-0011м?
БК11 туда ни как не впихнуть. ОЗУ мало.
А вот в ESP32 вполне можно.

SoftLight
22.09.2018, 13:04
А если /в теории/ кто-то решится делать на ESP32 цвет реально реализовать?

tank-uk
22.09.2018, 13:29
это типа на этой ?
https://ru.aliexpress.com/item/TTGO-MINI32-V2-0-ESP32-rev1-rev-WiFi-Bluetooth-D1/32845357819.html?spm=a2g0v.10010108.1000013.1.34b2 6182lL2bDu&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.90158.0&scm_id=1007.13339.90158.0&scm-url=1007.13339.90158.0&pvid=2ff42d6c-6343-4e92-9db6-68c0c850b5c0

konst_st
22.09.2018, 13:37
А если /в теории/ кто-то решится делать на ESP32 цвет реально реализовать?
Цвет можно реализовать и на ESP8266.
Но придется добавить пару микросхем.
Вот, типа того: https://www.youtube.com/watch?v=rbVDYLhc94Y
На ESP32 тоже так же можно сделать.

- - - Добавлено - - -


это типа на этой ?
https://ru.aliexpress.com/item/TTGO-...6-68c0c850b5c0
Да. Я заказывал здесь https://ru.aliexpress.com/item/ESP32-WI-FI-Bluetooth-IoT-ESP-WROOM-32-ESP-32/32849567377.html?spm=a2g0s.9042311.0.0.30e233edk4s Ckl

Manwe
22.09.2018, 21:22
Железка подключается к WiFi сети и через веб интерфейс можно заливать файлы во flash.Это нереально круто!



Графика только в Ч/Б варианте.В идеале бы, конечно, иметь переключатель монохром/цвет.



Клавиатура PS/2 с автоматической перекодировкой русских букв и спец.символов.Кстати, а раскладка клавиатуры совпадает с эмулятором gid?



Звук выводится на GPIO14.Как на счёт эмуляции 8-битного Covox на порту 177714?



БК11 туда ни как не впихнуть. ОЗУ мало. А вот в ESP32 вполне можно.Как развитие проекта - было бы круто. БК-0011м в общем больше востребована.

hobot
22.09.2018, 23:04
Графика только в Ч/Б варианте.
что за интерфейс видео и куда имеется возможность подключить (вывести изображение)
Фотки проекта бы ) условия распространения )

SoftLight
22.09.2018, 23:57
Ай, как здорово! :v2_dizzy_roll:Прошился работает!
WiFi настроил, сбросил игрущку на девайс по воздуху.
А как в меню попасть чтобы игрушки грузить?! ESC не работает! Я уже исходники покурил ничего не понял ) Какие файлы годятся для эмулятора (чтобы грузить через пункт "Игры" в бразузере?
А как потом в БК ее грузить? Через BLOAD?
https://thumb.ibb.co/kPWs6p/IMG_20180922_233013.jpg (https://preview.ibb.co/nx6QRp/IMG_20180922_233013.jpg)

- - - Добавлено - - -


что за интерфейс видео и куда имеется возможность подключить (вывести изображение)

Однобитное видео с миганием и инверсией. Вывести тюльпаном можно куда угодно, где есть композитный вход. Я через SCART-адаптер подключал.


Фотки проекта бы )
Так фотки у каждого свои! Зависят от уровня рукожопости )
https://thumb.ibb.co/jC6Rj9/p_RMQDaf_Ve_KE.jpg (https://image.ibb.co/gNMFcU/p_RMQDaf_Ve_KE.jpg) https://thumb.ibb.co/drVu49/9_Xt_UZMVjt_Ok.jpg (https://image.ibb.co/nscJWp/9_Xt_UZMVjt_Ok.jpg)

Manwe
23.09.2018, 00:04
А как в меню попасть чтобы игрушки грузить?! ESC не работает! Я уже исходники покурил ничего не понял ) Какие файлы годятся для эмулятора (чтобы грузить через пункт "Игры" в бразузере?
А как потом в БК ее грузить? Через BLOAD?Может быть просто набрать в Бейсике:
1. MO (выход в монитор)
2. M (загрузка с магнитофона)
3. имяфайла (наверное в формате .bin надо закидывать по воздуху)

SoftLight
23.09.2018, 00:07
3. имяфайла (наверное в формате .bin надо закидывать по воздуху)
Я закинул xenon.bin. А там еще в архиве лежали какие-то оверлеи xenon.ov1 и xenon.ov2 а еще xenon.doc. Все это барахло загрузил, но, наверное, как в rk8266 есть какая-то волшебная кнопка для меню (http://zx-pk.ru/threads/28907-apparatnyj-emulyator-radio-86rk-na-esp8266.html?p=954564&viewfull=1#post954564)?! ESC у меня не работает, пробовал на двух разных клавах.

konst_st
23.09.2018, 01:08
В идеале бы, конечно, иметь переключатель монохром/цвет.
С той доработкой схемы о которой я писал выше это можно будет делать. Там можно будет синтезировать любой пиксель любым цветом из палитры 64 цвета (RRGGBB). Т.е. можно будет делать и цветные пиксели и белый.


Кстати, а раскладка клавиатуры совпадает с эмулятором gid?
Раскладка немного отличается.

Соответствие клавишам БК-0010-01:

любой Alt - АР2
любой Shift - Нижний регистр
любой Ctrl - СУ
Caps Lock - Переключение ЗАГЛ / СТР
левый Win - РУС
правый Win - ЛАТ
Pause - СТОП
F1 - ПОВТ
F2 - КТ
F3 - =|=>|
F4 - |<==
F5 - |==>
F6 - ИНД СУ
F7 - БЛОК РЕД
F8 - ШАГ
F9 - СБР

Клавиши эмулятора:

Scroll Lock - Переключение режима Турбо
Esc - выход в меню эмулятора


Как на счёт эмуляции 8-битного Covox на порту 177714?
В принципе его можно эмулировать на выход ШИМ.
Если Вы подскажете чего нибудь работающее с Covox на БК-0010, что бы проверить работоспособность, я могу попробовать сделать.
В ближайших планах сделать эмуляцию джойстика. Вот думаю к каким клавишам привязывать его, что бы не конфликтовало с основной клавиатурой. Или сделать переключение режима (типа Num Lock-ом) переключающее кнопки управления курсором либо в режим клавиатуры, либо в режим джойстика?

- - - Добавлено - - -


ESC у меня не работает, пробовал на двух разных клавах.
Пока меню я не сделал. В планах.
Загрузить можно как писали выше:
В Бейсике набираете
MO (Enter)
Попадаете в монитор.
В мониторе набираете
M (Enter)
Он попросит ввести имя файла. Указываете имя файла которое вы хотите загрузить типа
ИМЯ: xenon.bin (Enter)
И все загрузится.

- - - Добавлено - - -


что за интерфейс видео и куда имеется возможность подключить (вывести изображение)
Фотки проекта бы ) условия распространения )
Софт - стандартная лицензия GPL 3.0
Исходники доступны на GitHub https://github.com/konst-st/BK8266
На остальные вопросы вроде уже ответили.

andykarpov
23.09.2018, 09:05
Страница проекта на GitHub https://github.com/konst-st/RK8266

Кстати, в Github форки можно переименовывать...

Manwe
23.09.2018, 11:11
В принципе его можно эмулировать на выход ШИМ.
Если Вы подскажете чего нибудь работающее с Covox на БК-0010, что бы проверить работоспособность, я могу попробовать сделать.Вот подходящая программа для теста covox:
http://bk0010.my1.ru/load/programmy/muzykalnye_redaktory/covox/66-1-0-12

konst_st
25.09.2018, 00:48
Переименовал проект на GitHub.
Теперь он доступен по ссылке: https://github.com/konst-st/BK8266

Готов новый билд 32:
https://github.com/konst-st/BK8266/blob/master/builds/32/0x00000.bin
https://github.com/konst-st/BK8266/blob/master/builds/32/fota.bin

Добавил эмуляцию джойстика.

Клавиши джойстика:
Up - Вверх
Right - Вправо
Down - Вниз
Left - Влево
Пробел - Кнопка 1
A - Кнопка 2
S - Кнопка 3
D - Кнопка 4
F - Кнопка 5

Num Lock - блокировка клавиш джойстика (т.е. при нажатом Num Lock клавиши джойстика используются только для эмуляции джойстика и не посылают коды нажатия клавиш на клавиатуре).

Manwe
25.09.2018, 09:06
А эмуляция таймера есть в планах? Нужная вещь, некоторые игры его используют.

konst_st
25.09.2018, 11:07
А эмуляция таймера есть в планах?
Да. Подскажите, кстати, что его использует (что бы проверить)?
И еще вопрос: правильно ли я понимаю, что 50 Гц таймера с прерыванием по вектору 100 в БК0010 нет?

Manwe
25.09.2018, 13:26
Да. Подскажите, кстати, что его использует (чтобы проверить)?Игра "Kings Valley", кажется. Может быть другие форумчане подскажут точней. Я прям так не ковырял каждую игру.
Но я писал свой тест таймера для БК-0010. Заодно сверите тайминги выполнения команд. Прикладываю к сообщению:
66385


И еще вопрос: правильно ли я понимаю, что 50 Гц таймера с прерыванием по вектору 100 в БК0010 нет?Верно. Такой таймер есть только в БК-0011м

svinka
25.09.2018, 14:15
Цитата Сообщение от konst_st Посмотреть сообщение
И еще вопрос: правильно ли я понимаю, что 50 Гц таймера с прерыванием по вектору 100 в БК0010 нет?
Верно. Такой таймер есть только в БК-0011м Не вводите в заблуждение читателей форума.

MM
25.09.2018, 14:47
И еще вопрос: правильно ли я понимаю, что 50 Гц таймера с прерыванием по вектору 100 в БК0010 нет
В 10-ке есть просто вход 100-го вектора на разъемах МПИ и УП, и 270-го вектора на разъеме УП ( запаивается перемычкой ), в некотрых редакциях 641-х плат был разведен.
Кстати, на БК частота кадров 48.5 гц, соответственно и таймер в БК11/М такой.

- - - Добавлено - - -

Насчет быстродействия БК :
1. Выборка из ДОЗУ - 1 шт. в 3 мкс, зависит от фазы прихода запроса от асинхронного 1801ВМ1 в жестко привязанный к сетке частот контроллер ЭЛТ/ДОЗУ.
Если предположить, что 1801ВМ1 имеет 100 мгц скорость, то максимальная скорость выборки ДОЗУ будет ~355 т. рег-рег.
2. Быстродействие ПЗУ - 100 нс факт, т.е. 0 тактов задержки 1801ВМ1.

Manwe
25.09.2018, 15:06
Не вводите в заблуждение читателей форума.Очень конструктивно...


Кстати, на БК частота кадров 48.5 гц, соответственно и таймер в БК11/М такой.По моим замерам 48.83 Гц. Причём, сначала я рассчитал в теории по показаниям внутреннего таймера процессора, а потом проверил на практике, снимая экран и подкручивая частоту кадров на камере.


Выборка из ДОЗУ - 1 шт. в 3 мкс, зависит от фазы прихода запроса от асинхронного 1801ВМ1 в жестко привязанный к сетке частот контроллер ЭЛТ/ДОЗУ.А есть где-нибудь более подробное описание? Так чтобы на словах, а не «смотри электрическую схему».


Быстродействие ПЗУ - 100 нс факт, т.е. 0 тактов задержки 1801ВМ1.Вопрос к gid’у: эмулятор учитывает то, что ПЗУ быстрее?

MM
25.09.2018, 15:12
А есть где-ни удь более подробное описание?
Фрагменты ТО БК11 , в составе которого 1801ВП1-037, должно гуглится.
По крайней мере, кто-то его сканировал.
Там будут временные диаграммы работы 037 БИС, с привязкой к 6 мгц.
И подробно рассматривается участок коммутатора 565РУ5 на основе выдачи сканов из 037 для 565РУ6.

svinka
25.09.2018, 15:26
подробное описание
http://forum.pk-fpga.ru/viewtopic.php?f=52&t=5420



Выборка из ДОЗУ - 1 шт. в 3 мкс, зависит от фазы прихода запроса
Цикл начинается каждые 1.33мкс. Среднее время доступа получается 2мкс

MM
25.09.2018, 15:32
Цикл начинается каждые 1.33мкс.
Там баг сцепки 2-х циклов, т.е. 2.66 мкс по ЛА + ~полцикла дрожания фазы относительно ВМ1.
Я давно предлагал Вслав г.Киев наладить выпуск патченной пин-то-пин 037 без этого бага, но никаких конструктивных ответов не получал.

konst_st
25.09.2018, 16:41
Вопрос к gid’у: эмулятор учитывает то, что ПЗУ быстрее?
Как я уже писал, я взял тайминги из http://gid.pdp-11.ru
Судя по исходникам, там нет разницы откуда код выполняется.
Но для БК10 и БК11 тайминги отличаются.

Manwe
25.09.2018, 17:03
Как я уже писал, я взял тайминги из http://gid.pdp-11.ruСудя по исходникам, там нет разницы откуда код выполняется.Жаль. Вот поэтому нашу демку приходится запускать на 7 МГц в эмуляторе, чтобы она шла с нужной скоростью как на настоящей БК-0011м 4 МГц (наш код выполняется в статической памяти контроллера HDD, скорость которой, наверное, как у ПЗУ).

- - - Добавлено - - -


Там баг сцепки 2-х циклов, т.е. 2.66 мкс по ЛА + ~полцикла дрожания фазы относительно ВМ1.
Я давно предлагал Вслав г.Киев наладить выпуск патченной пин-то-пин 037 без этого бага, но никаких конструктивных ответов не получал.Это сильно повлияло бы на производительность?

MM
25.09.2018, 17:30
Это сильно повлияло бы на производительность?
Это зависит от частоты ЦП БК.
Для БК0010 +~10%, для БК11/М ( 4 мгц ) +~15%, для 6 мгц БК +~20%.
Если сделать 0 тактов главное СОЗУ БК - можно и 600 т.рег-рег на 6 мгц получить, а с процем 1806ВМ2-6 мгц - и все 1100 т. рег-рег, при Высокой совместимости софта с 1801ВМ1.

Manwe
25.09.2018, 21:59
Да, прирост существенный. А в чём изначальная проблема - плохой дизайн схемы или плохие компоненты? (037 - это что?)

MM
26.09.2018, 00:57
плохой дизайн схемы или плохие компоненты? (037 - это что?)
037 = 1801ВП1-037 - БМК контроллера ЭЛТ/ДОЗУ.
По версии авторов 037 - "нехватат всего, особенно времени" .
ИМХО - бухарикам не место в разработчиках.

Кстати, бабули на БМК БК11 были выделены, но в период 1985...1990 г. "исчезли".
Зато "кое-кто" построил 2-х этажный кирпичный домину на Носовихинском шоссе, еще во времена 1992-1993 г.
А "некотрые" купили новенький СААБ летом 1991 г...
И даже господа "совсем не участвующие в БКшке" в 1993 г. открывают магазинчик, тогда как простые работники 21-го отдела ОКБ Э. буквально голодали...

konst_st
26.09.2018, 02:09
Готов новый билд:

https://github.com/konst-st/BK8266/blob/master/builds/33/0x00000.bin
https://github.com/konst-st/BK8266/blob/master/builds/33/fota.bin

Добавил эмуляцию моно Covox на порту 177714 (младшие 8 разрядов).

Суммарный звук от пищалки и от Covox по прежнему передается на GPIO14, но теперь в виде сигма-дельта модуляции (типа ШИМ). Так что нужно на выходе делать фильтр (RC).

- - - Добавлено - - -

Кстати, есть смысл эмулировать AY? На БК10 есть софт который его использует?

- - - Добавлено - - -

Забыл упомянуть:
Выход в режим WiFi осуществляется по нажатию кнопки Print Screen. Это временное решение.
В дальнейшем планируется вызов меню по Esc. Пока меню нет.

MM
26.09.2018, 02:27
есть софт
Вроде что-то было...
На БК11М - есть несколько программ.

Manwe
26.09.2018, 09:22
Кстати, есть смысл эмулировать AY? На БК10 есть софт который его использует?Нет. Сейчас кое-кто скажет “не вводите людей в заблуждение”, поэтому сразу поясню:
Лично у меня в 90-е была БК-0010.01 с таймером по 100-му вектору и с AY. В Москве Арсений Винников занимался такой модификацией. Также Арсений портировал 9 частей TopDemo Дениса Сотченко на БК-0010 с AY и назвал их PotDemo.
И это всё. Несколько экземпляров БК-0010 с AY и несколько относительно бесполезных программ, портированных с БК-0011м.
Поэтому в целом можно говорить, что на БК-0010 не было ни таймера, ни AY.

- - - Добавлено - - -


037 = 1801ВП1-037 - БМК контроллера ЭЛТ/ДОЗУ.Почитал про 1801ВП1-037 здесь (http://forum.pk-fpga.ru/viewtopic.php?f=43&t=5506). Получается, надо выпаивать её из БК и впаивать на её место модифицированную? Но тогда, действительно, стоит пересмотреть работу этого контроллера и перевести всю БК на статическую память. Вот уж где точно ускорение получится.


Кстати, бабули на БМК БК11 были выделены, но в период 1985...1990 г. "исчезли".
Зато "кое-кто" построил 2-х этажный кирпичный домину на Носовихинском шоссе, еще во времена 1992-1993 г.
А "некотрые" купили новенький СААБ летом 1991 г...
И даже господа "совсем не участвующие в БКшке" в 1993 г. открывают магазинчик, тогда как простые работники 21-го отдела ОКБ Э. буквально голодали...Считаю, что у таких преступлений не должно быть срока давности, всё это разворовывание бюджета должно быть расследовано с последующей конфискацией имущества.

Manwe
27.09.2018, 12:16
Как я уже писал, я взял тайминги из http://gid.pdp-11.ruСъездил вчера к другу, у него есть БК-0010-01. Прогнали мои тесты. Пожалуйста, запусти их на своём эмуляторе, чтобы сверить результаты. Тесты выложил сюда (http://zx-pk.ru/threads/14702-raschjot-tochnogo-vremeni-vypolneniya-komand-razlichnymi-protsessorami-arkhitektury-pdp-11.html?p=980256&viewfull=1#post980256)

Вот такие результаты должна выдавать БК-0010, работающая на частоте 3 МГц:
66399664006640166402

konst_st
27.09.2018, 13:02
Прогнали мои тесты. Пожалуйста, запусти их на своём эмуляторе, чтобы сверить результаты.
Ок проверю. Я так понимаю им будет нужен таймер?

Manwe
27.09.2018, 13:56
Ок проверю. Я так понимаю им будет нужен таймер?Совершенно верно, нужен таймер по адресам 177706, 177710, 177712

konst_st
28.09.2018, 02:10
Готов новый билд:
https://github.com/konst-st/BK8266/blob/master/builds/37/0x00000.bin
https://github.com/konst-st/BK8266/blob/master/builds/37/fota.bin

Из нового - реализована эмуляция таймера по адресам 177706, 177710, 177712.


Прогнали мои тесты. Пожалуйста, запусти их на своём эмуляторе, чтобы сверить результаты.

Проверил. Результат отличается. Но совпадает с результатом эмулятора http://gid.pdp-11.ru что не удивительно, так как я брал тайминги из него.

Manwe
28.09.2018, 12:00
Проверил. Результат отличается. Но совпадает с результатом эмулятора http://gid.pdp-11.ru что не удивительно, так как я брал тайминги из него.В эмуляторе gid музыка под Covox звучит заметно медленней, чем на реальной БК. Это говорит о неверных таймингах, некоторые команды слишком заторможены. У тебя есть уникальная возможность сделать более правильный эмулятор!
;)

Update: удивительно при этом, что эмулятор выполняет некоторые команды быстрей, чем на реальной БК!
Видимо, надо учитывать "штрафы", которые описаны здесь (http://zx-pk.ru/threads/11557-testy-vm1.html?p=980327&viewfull=1#post980327).

konst_st
28.09.2018, 14:03
Это говорит о неверных таймингах, некоторые команды слишком заторможены. У тебя есть уникальная возможность сделать более правильный эмулятор!

В http://gid.pdp-11.ru такие тайминги:

БЕЗОПЕРАНДНЫЕ КОМАНДЫ

68 HALT
12 WAIT
40 RTI
16 Bxx
16 BR
32 RTS
56 MARK
64 TRAP
64 EMT
20 SOB
40 INT
12 Sxx
12 Cxx
104 BPT
104 IOT
-----------------------------------------------

ОДНООПЕРАНДНЫЕ КОМАНДЫ

TST

00 10 20 30 40 50 60 70 Метод адресации приемника
----------------------------
12 24 24 36 28 40 36 48 Число тактов
-----------------------------------------------

SWAB, CLR, COM, INC, DEC, NEG, ADC, SBC, ROR, ROL, ASR, ASL, SXT, MFPS

00 10 20 30 40 50 60 70 Метод адресации приемника
----------------------------
12 28 28 40 32 44 40 52 Число тактов
-----------------------------------------------

MTPS

00 10 20 30 40 50 60 70 Метод адресации приемника
----------------------------
24 32 32 44 36 48 44 56 Число тактов
-----------------------------------------------

XOR

00 10 20 30 40 50 60 70 Метод адресации приемника
----------------------------
12 32 32 44 32 44 44 56 Число тактов
-----------------------------------------------

JMP

00 10 20 30 40 50 60 70 Метод адресации приемника
----------------------------
08 20 24 32 24 32 32 44 Число тактов
-----------------------------------------------

JSR

00 10 20 30 40 50 60 70 Метод адресации приемника
----------------------------
08 32 36 40 36 40 40 52 Число тактов
-----------------------------------------------

ДВУХОПЕРАНДНЫЕ КОМАНДЫ

MOV

Метод адресации приемника
00 10 20 30 40 50 60 70
---------------------------- Метод адресации источника
12 32 36 44 36 44 44 56 | 00
28 40 40 48 40 48 48 60 | 10
28 40 40 48 40 48 48 60 | 20
40 52 52 60 52 60 60 72 | 30
28 44 44 52 44 52 52 64 | 40
40 56 56 64 56 64 64 76 | 50
40 52 52 60 52 60 60 72 | 60
52 64 64 72 64 72 72 84 | 70
-----------------------------------------------

CMP, BIT

Метод адресации приемника
00 10 20 30 40 50 60 70
---------------------------- Метод адресации источника
12 32 32 44 32 44 44 56 | 00
28 36 36 48 36 48 48 60 | 10
28 36 36 48 36 48 48 60 | 20
40 48 48 60 48 60 60 72 | 30
28 40 40 52 40 52 52 64 | 40
40 52 52 64 52 64 64 76 | 50
40 48 48 60 48 60 60 72 | 60
52 60 60 72 60 72 72 84 | 70
-----------------------------------------------

BIC, BIS, ADD, SUB

Метод адресации приемника
00 10 20 30 40 50 60 70
---------------------------- Метод адресации источника
12 36 36 48 36 48 48 60 | 00
28 40 40 52 40 52 52 64 | 10
28 40 40 52 40 52 52 64 | 20
40 52 52 64 52 64 64 76 | 30
28 44 44 56 44 56 56 68 | 40
40 56 56 68 56 68 68 80 | 50
40 52 52 64 52 64 64 76 | 60
52 64 64 76 64 76 76 88 | 70
-----------------------------------------------

В исходниках это прописано таблицами, т.ч. поменять значения в таблицах не проблема.
Но у меня возникает несколько вопросов:
1. Команды условных переходов выполняются одинаковое время вне зависимости от того происходит переход или нет?
2. Будут ли инструкции выполнятся всегда одно и то же время в разных комбинациях сочитания с другими инструкциями? Ведь циклы выборки чтения видео ОЗУ будут по разному синхронизироваться с разным потоком инструкций?
В общем если будет четкое представление о том как это все работает, можно будет сделать точные тайминги.

Manwe
28.09.2018, 14:19
1. Команды условных переходов выполняются одинаковое время вне зависимости от того происходит переход или нет?всегда одинаковое (если я правильно провёл тесты :) ).


2. Будут ли инструкции выполнятся всегда одно и то же время в разных комбинациях сочитания с другими инструкциями? Ведь циклы выборки чтения видео ОЗУ будут по разному синхронизироваться с разным потоком инструкций?Чтение из динамического ОЗУ очень сильно сдвигает синхронизацию на БК-0011, где частота процессора 4 МГц, а частота видеоконтроллера 6 МГц - таким образом одна и та же команда может в одном месте выполняться 32 такта, а в другом 48. Среднее время такой команды получается 37.33 такта (и, возможно, его-то и стоит прописывать в таблицу). Но это на БК-0011. А на БК-0010 с 3 МГц, которые кратны 6 МГц видеоконтроллера, должно быть попроще. Я ещё не изучал БК-0010 в этом вопросе досконально. Но собираюсь вскоре.

konst_st
28.09.2018, 14:30
Еще вопрос по джойстику. Какая должна быть правильная распайка кнопок на периферийном порту? Т.е. на каких пинах должны сидеть кнопки "Вверх", "Вниз", "Вправо", "Влево" и т.п.?
А то похоже есть проблемы в некоторых играх - другая привязка кнопок.

Manwe
28.09.2018, 15:54
Еще вопрос по джойстику. Какая должна быть правильная распайка кнопок на периферийном порту? Т.е. на каких пинах должны сидеть кнопки "Вверх", "Вниз", "Вправо", "Влево" и т.п.? А то похоже есть проблемы в некоторых играх - другая привязка кнопок.вот здесь описано: http://zx-pk.ru/threads/25991-bk-0010-voprosy-novichka-faq.html?p=979848&viewfull=1#post979848

konst_st
28.09.2018, 20:19
Готов новый билд:
https://github.com/konst-st/BK8266/blob/master/builds/38/0x00000.bin
https://github.com/konst-st/BK8266/blob/master/builds/38/fota.bin

Исправлен глюк в эмуляции таймера. Глюк проявился на игре King's Valley.
Теперь King's Valley нормально работает.

konst_st
28.09.2018, 23:40
Готов новый билд:
https://github.com/konst-st/BK8266/blob/master/builds/40/0x00000.bin
https://github.com/konst-st/BK8266/blob/master/builds/40/fota.bin

Исправлена привязка джойстика к битам порта (сделал как писали выше).
Реализована запись во flash из эмулятора (перехват обращения к функции записи на магнитную ленту)

- - - Добавлено - - -

Подскажите, это нормальное поведение БК, когда бейсик не хочет загружать программу если в памяти уже есть программа?

Manwe
28.09.2018, 23:41
Реализована запись во flash из эмулятора (перехват обращения к функции записи на магнитную ленту)Это круто!
Ещё вопрос про время исполнения команд: задержки идут после каждой команды или накапливается N команд и потом идёт одна длинная суммарная задержка на них всех (как в эмуляторе gid)?

P.S. тут люди печатают миниатюрные корпуса на 3D-принтере. Надо к этому проекту корпус в виде копии БК сделать!

6641866419

konst_st
29.09.2018, 00:28
задержки идут после каждой команды или накапливается N команд и потом идёт одна длинная суммарная задержка на них всех (как в эмуляторе gid)?
Задержка (если мы опережаем) вставляется перед каждой командой.
Но надо учитывать, что кроме эмулирования команд есть еще прерывания, обслуживание клавиатуры и т.п.
Т.е. иногда что либо из этого будет прерывать процесс эмуляции, следовательно в эмуляции может возникать опаздывание, которое потом придется нагонять. Фактически задержки не большие. Если интересно могу замерить на сколько максимум происходит запаздывание.

-=RUS=-
29.09.2018, 19:20
Подскажите, это нормальное поведение БК, когда бейсик не хочет загружать программу если в памяти уже есть программа?

Нет не нормальное поведение, должно всё загружаться.

konst_st
29.09.2018, 19:53
Нет не нормальное поведение, должно всё загружаться.

В gid поведение такое же. Я так понял что перед загрузкой нужно дать команду new (очистить память). Тогда все загружается. Или все же должно грузиться и без очистки памяти?

konst_st
04.10.2018, 18:11
Готов новый билд:

https://github.com/konst-st/BK8266/blob/master/builds/42/0x00000.bin
https://github.com/konst-st/BK8266/blob/master/builds/42/fota.bin

Из нового:
Сделал меню по Esc. Теперь можно удалять и переименовывать файлы во flash. При загрузке файлов без указания имени так же открывается меню файлового менеджера из которого можно выбрать файл для загрузки.
Сделал отключение джойстика при неактивном NumLock. Раньше джойстик был активен всегда, отключалась только клавиатура (для клавиш джойстика) при активном NumLock. В результате в некоторых играх возникал конфликт, и нельзя было даже настроить джойстик (а по умолчанию настройка не совпадала), т.к. нажатие любой кнопки джойстика воспринималось как старт игры.

- - - Добавлено - - -


задержки идут после каждой команды или накапливается N команд и потом идёт одна длинная суммарная задержка на них всех (как в эмуляторе gid)?


Задержка (если мы опережаем) вставляется перед каждой командой.
Но надо учитывать, что кроме эмулирования команд есть еще прерывания, обслуживание клавиатуры и т.п.
Т.е. иногда что либо из этого будет прерывать процесс эмуляции, следовательно в эмуляции может возникать опаздывание, которое потом придется нагонять. Фактически задержки не большие. Если интересно могу замерить на сколько максимум происходит запаздывание.

В общем измерил я максимальные задержки (запаздывания). Получается 8.23 микросекунды. Не думаю что джиттер 8.23 микросекунды на что то заметно повлияет.

Manwe
04.10.2018, 22:52
Не думаю что джиттер 8.23 микросекунды на что то заметно повлияет.Быстрые команды типа NOP выполняются за 4 мкс, TST (R0) - 8 мкс. Отставание может влиять на достоверность звука (и на пищалке, и на Covox'е), а также на эффекты с лучом и рулонным сдвигом экрана (как в 4kb-intro "Scroller").

konst_st
05.10.2018, 00:33
Быстрые команды типа NOP выполняются за 4 мкс, TST (R0) - 8 мкс. Отставание может влиять на достоверность звука (и на пищалке, и на Covox'е), а также на эффекты с лучом и рулонным сдвигом экрана (как в 4kb-intro "Scroller").

На счет звука - спектрально искажения будут в области высоких частот. В диапазоне разумных слышимых частот искажения будут небольшими. И, думаю, что будут мало заметны на фоне того качества звука, который может сгенерить БК. Но, конечно, идеального соответствия оригинальной БК не будет.
На счет видео - да тут могут проявляться эффекты эмуляции. Ну тут дело даже не в джиттере, а в буферизации. У меня, например, строка изображения считывается из памяти БК одномоментно в начале строчного синхроимпульса и помещается в буфер DMA для отправки на видеовыход. Теоретически, конечно, можно было бы заполнять буфер строки последовательно, эмулируя выборку из видео ОЗУ на реальной БК, но это прилично сложнее и очень мало где даст положительный эффект. Да и на реальной БК во многих играх можно наблюдать неприятные видеоэффекты типа пропадания спрайтов при перерисовке и т.п. И таймера по кадровому синхроимпульсу на БК10 нет для синхронизации с видео.
Кстати, на сколько я понимаю содержимое регистра рулонного сдвига вступает в силу только в начале кадра. Т.е. если менять его значение в процессе прорисовки кадра, то это не будет влиять на отображение текущего кадра. Это так?
Кинь ссылку на 4kb-intro "Scroller" - посмотрю как у меня будет работать.

Manwe
06.10.2018, 12:37
Кинь ссылку на 4kb-intro "Scroller" - посмотрю как у меня будет работать.Лови: 66478


Кстати, на сколько я понимаю содержимое регистра рулонного сдвига вступает в силу только в начале кадра. Т.е. если менять его значение в процессе прорисовки кадра, то это не будет влиять на отображение текущего кадра. Это так?Кажется, стартовый адрес рулонного сдвига определяется один раз в начале отрисовки кадра, а вот режим расширенной памяти можно включать и выключать когда захочешь - так делают мерцание строк.

konst_st
06.10.2018, 17:18
Лови: SCROLLER.zip
Проверил - вроде нормально работает. Но конечно не хватает цветности. Особенно когда три плоскости движутся - в черно белом не тот эффект.


а вот режим расширенной памяти можно включать и выключать когда захочешь - так делают мерцание строк.
Не знал. Спасибо за информацию.

roma
14.10.2018, 08:22
Не подскажите где скачать NONOS_SDK_BY_HEAVY_v1.5.3 ?
А то в стандартных СДК отсутствует определение RAMFUNC и возникают другие ошибки компиляции.

konst_st
14.10.2018, 11:14
Не подскажите где скачать NONOS_SDK_BY_HEAVY_v1.5.3 ?
Я попросил у heavy. Если он разрешит я выложу. В принципе там ничего особенного не добавлено. Добавлено extern "C" что бы в C++ можно было использовать функции SDK. макрос RAMFUNC - для помещения кода в IRAM. Может еще чего по мелочам, но можно догадаться чего не хватает.

roma
14.10.2018, 16:08
Ну выложи тут хотя бы Definition этих макросов. Я нашёл в других исходниках такое определение
#define RAMFUNC __attribute__((section(".entry.text")))
но этого недостаточно и я не уверен что именно так было у автора …

Просто непонятно зачем выкладывать на гитхаб исходники, если их недостаточно для сборки проекта ...

hobot
14.10.2018, 16:55
Подскажите, это нормальное поведение БК,
все штатные ошибки Бейсик-Вильнюс пронумерованы
опишите ситуацию подробнее?
перед загрузкой новой программы всегда надо перезапускать БК (эмулятор) - по другому
и не получиться
Причём тут Бейсик, если речь идёт о bin-файле?

- - - Добавлено - - -

мы о 0010-01 говорим я надеюсь )

- - - Добавлено - - -


P.S. тут люди печатают миниатюрные корпуса на 3D-принтере.
Ребята искренне желаю вам отладить код до идеального, отлить миникорпуса и сделать красивый упакованно красочный подарочно юбилейный тираж БК0010-01 - с местной библиотекой игр и вашей реализацией для удобства использования - это супер фетиш для ностальгирующих фанатов ( предусмотрите работу от пальчиковых батареек вообще будет фан!)

konst_st
14.10.2018, 20:24
Причём тут Бейсик, если речь идёт о bin-файле?
Я имел в виду программу на бейсике. И как я понял перед загрузкой новой программы на бейсике (если в памяти уже есть программа на бейсике) нужно очистить память оператором "new".

- - - Добавлено - - -


Ну выложи тут хотя бы Definition этих макросов. Я нашёл в других исходниках такое определение
У меня нет оригинального SDK что бы найти отличия.
Напишите heavy.
Я вероятно на днях с ним буду в контакте. Спрошу по поводу выложить.

Макросы:

#define RAMFUNC __attribute__((section(".iram.text")))
#define ROMDATA __attribute__((section(".irom.text")))

hobot
14.10.2018, 21:36
Я имел в виду программу на бейсике.
эмулятор тов. gid особенно касабельно БК0010-01 это сплошной глюк )
3.0 версия эмулятора работала лучше (в плане данной модификации БК!)
Железная натурал машинка скорее всего (я не помню точно, свой БК врубить возможности нет)
нормально загрузит по LOAD, CLOAD, BLOAD корректно записанную программу не зависимо от состояния памяти.

Для меня в вашем проекте самый слабый момент - эмулятор от GID как начинка = это не гуд!
Замены ему к сожалению нет, вообще абсолютно нормального эмулятора БК0010-01 фактически до сих пор нет,
у всех существующих есть довольно "странные" недочёты. И это печально. Машинка = не сложнее ДВК вроде бы?
Жаль Патрон не взялся делать БКашку )

konst_st
14.10.2018, 22:56
эмулятор тов. gid особенно касабельно БК0010-01 это сплошной глюк )
Да, глюки есть. Столкнулся у себя, что некоторые игры (например Rick) не работают. Долго разбирался в чем проблема - не совсем корректно сделана эмуляция чтения/записи с магнитофона с перехватом обращения к этой подпрограмме. Я реализацию этой функции подсмотрел в GID. Уже после того как разобрался решил проверить в GID, и оказалось там оно тоже не работает.
Я и не претендую на совершенство, но потихоньку исправляю глюки, которые нахожу. К сожалению оригинальной БК нет - не с чем сравнивать. Не на чем проверить тайминги и т.п.
А по поводу загрузки бейсиковской программы при наличии в памяти уже загруженной бейсиковской программы просьба, у кого есть БК, проверьте действительно не грузится или это баг эмулятора?

hobot
14.10.2018, 23:05
А по поводу загрузки бейсиковской программы
а сейчас то, если "нью" не набрать что происходит = просто повисает или что или как?
напишите подробнее, может кому из знатоков сразу что то проясниться?

так соблазнительно крохотную, но полнофункциональную БК0010-01 иметь на цепочке на шее, снял поиграл - одел.
Будете доращивать проект до продукта? Было бы сильно - скоро рождество (буржуи тоже БК0010-01 любят) и Новый Год
= такое будут покупать, только не как обычно тут делается - куча макарон и какие-то железки мутные, это должен быть ТОВАР - НАДО БРАТЬ! ))) Блестящий как пряник. Не совсем я понимаю эмуляцию БК внутре - так это не gid в чистом виде?

konst_st
15.10.2018, 00:24
а сейчас то, если "нью" не набрать что происходит = просто повисает или что или как?
Пишет "ОШИБКА 5"


Будете доращивать проект до продукта?

такое будут покупать
Нет, меня это совсем не интересует - это так, хобби + ностальгия + изучение ESP8266.


Не совсем я понимаю эмуляцию БК внутре - так это не gid в чистом виде?
Нет, это совсем не gid. Эмуляцию я делал полностью свою, но кое чего подсматривал в gid.

hobot
15.10.2018, 00:33
Пишет "ОШИБКА 5"




5 - значение аргумента оператора (или функции) выходит
за пределы допустимого интервала.
Неправильная запись команд оператора DRAW.



http://gid.pdp-11.ru/books/programming_BK10.html#__RefHeading__154

konst_st
15.10.2018, 01:34
5 - значение аргумента оператора (или функции) выходит
за пределы допустимого интервала.
Неправильная запись команд оператора DRAW.
Да, я это видел. Но каким образом это применимо к команде CLOAD?
Если выполнить оператор NEW, то после него команда CLOAD с точно такими же аргументами срабатывает нормально, без ошибки.

gid
15.10.2018, 12:10
Я и не претендую на совершенство, но потихоньку исправляю глюки, которые нахожу.
Где можно поглядеть исправления глюков? Я тоже хочу, чтобы у меня в эмуляторе их было меньше.
В истории коммитов на гитхабе ничего нету.
Я имею в виду глюки эмуляции БК-0010.


А по поводу загрузки бейсиковской программы при наличии в памяти уже загруженной бейсиковской программы просьба
БКшный бейсик так устроен, что если в памяти есть программа и попытаться загрузить ещё программу, она начнёт грузиться поверх
прошлой программы, ибо никто ничего не проверяет. Для формата COD, обычно после этого если новая программа по размеру больше, то она полностью затерёт старую, и может быть работоспособной, а если меньше - то псевдокод старой проги смешивается с псевдокодом новой, и возможны разные чудеса.
Поэтому в документации прямо сказано, перед загрузкой программы всегда надо делать new.

konst_st
15.10.2018, 12:27
Где можно поглядеть исправления глюков? Я тоже хочу, чтобы у меня в эмуляторе их было меньше.
В истории коммитов на гитхабе ничего нету.
Я еще в процессе решения этой проблемы. Думаю на сколько глубоко есть смысл эмулировать поведение функции драйвера магнитофона. Пока проблема связана с тем, что драйвер магнитофона сохраняет результат операции в ячейке 301 (восьмеричное). Некоторые программы это используют. Можно конечно пока и этим ограничиться, но можно и полностью сэмулировать поведение. В драйвере много еще каких ячеек памяти изменяется.

heavy
16.10.2018, 07:34
Я попросил у heavy. Если он разрешит я выложу. В принципе там ничего особенного не добавлено. Добавлено extern "C" что бы в C++ можно было использовать функции SDK. макрос RAMFUNC - для помещения кода в IRAM. Может еще чего по мелочам, но можно догадаться чего не хватает.

Классный проект :) Выкладывай !

konst_st
16.10.2018, 15:13
Не подскажите где скачать NONOS_SDK_BY_HEAVY_v1.5.3 ?


Классный проект Выкладывай !

https://drive.google.com/open?id=1ODndTz46n-URzM_m_3RWeKkjQQuLbG9a

Jarik65535
20.10.2018, 01:03
Я даже и подумать не мог о таком использовании ESP8266! Вот на что хватило моей фантазии http://zx-pk.ru/threads/27879-ustrojstvo-dlya-zagruzki-bk-cherez-magnitofon-po-wifi.html. Как я понял wifi одновременно с эмулятором не работает.

konst_st
20.10.2018, 01:23
Как я понял wifi одновременно с эмулятором не работает.
Да. Bootloader загружает одно из двух - эмулятор или Web-сервер c WiFi.
Можно перегружаться из одного режима в другой.

Manwe
03.11.2018, 19:49
Вчера проверил на тестах, оказалось что реальная БК-0010 на 3 МГц выполняет команду MOV R1,(R2) за 36 тактов, а эмулятор gid выполняет её за 32 такта. Подправьте свои тайминги, господа! ;)
А вот БК-0011 на 4 МГц за 32 такта.

konst_st
03.11.2018, 20:49
А вот БК-0011 на 4 МГц за 32 такта.
Вообще странно. По идее БК-0011 должен тратить на это больше тактов чем БК-0010. Там же одинаковые контроллеры памяти/видео? Работают на одинаковой частоте. А т.к. частота процессора на БК-0011 выше, то простоев должно быть больше.

Manwe
03.11.2018, 21:23
Вообще странно. По идее БК-0011 должен тратить на это больше тактов чем БК-0010. Там же одинаковые контроллеры памяти/видео? Работают на одинаковой частоте. А т.к. частота процессора на БК-0011 выше, то простоев должно быть больше.В теории да, а на практике вот фото с БК-0010:
http://www.imageup.ru/img6/3205114/a7a4746b-a3fe-4119-ba9e-4dc1cccf8b8c.jpeg (http://www.imageup.ru/img6/3205114/a7a4746b-a3fe-4119-ba9e-4dc1cccf8b8c.jpeg.html)

И БК-0011М:
http://www.imageup.ru/img6/3205115/2a91f47a-a135-4003-a968-f476e069a2a3.jpeg (http://www.imageup.ru/img6/3205115/2a91f47a-a135-4003-a968-f476e069a2a3.jpeg.html)

Спутать фотки я не мог, потому что БК-0010 у меня подключена только к ЭЛТ, а БК-0011М только к ЖК-монитору.

CodeMaster
03.11.2018, 21:40
а на практике
Странно, что только эта команда на 11М отличается от аналогичных.

Manwe
04.11.2018, 00:02
Странно, что только эта команда на 11М отличается от аналогичных.На БК-0011М с быстрой памятью (контроллер SMK-512) всё ещё странней :)

http://www.imageup.ru/img28/3205203/de21678a-2a9a-4274-9347-74fc0c1c7183.jpeg (http://www.imageup.ru/img28/3205203/de21678a-2a9a-4274-9347-74fc0c1c7183.jpeg.html)

Отклонение в 0.1 такта (42.6 и 42.7), разумеется, просто погрешность измерения.

balu_dark
04.11.2018, 10:59
Простите пожалуйста - а как количество тактов процессора необходимое для выполнения одной команды, может зависеть от скорости памяти ? Еще раз уточню - мы говорим о КОЛИЧЕСТВЕ циклов , а не о периоде, длительности такта и прочих вещах связанных со временем.
Похоже тест меряет просто абстрактные попугаи.

Manwe
04.11.2018, 11:14
Простите пожалуйста - а как количество тактов процессора необходимое для выполнения одной команды, может зависеть от скорости памяти? Еще раз уточню - мы говорим о КОЛИЧЕСТВЕ циклов, а не о периоде, длительности такта и прочих вещах связанных со временем.Когда у команды несколько аргументов, процессор считывает их из памяти. Пока память готовится выдать ответ, такты процессора продолжают тикать и он ждёт прихода аргумента. Медленная память - ждёт больше тактов. Быстрая память - ждёт меньше тактов. Длительность тактов постоянная, а их количество - разное.

CodeMaster
04.11.2018, 11:31
Длительность тактов постоянная, а их количество - разное.

А откуда дробная часть появилась на SMK?

Manwe
04.11.2018, 13:13
А откуда дробная часть появилась на SMK?Очень просто: чтобы вычислить время выполнения команды с точностью до десятых долей такта, я выполняю команду много раз подряд (команда размножена в памяти) и затем делю получившееся время на число команд.
Так вот, поскольку частота процессора (4 МГц) не совпадает с частотой видеоконтроллера (6 МГц), одна и та же команда может выполниться за разное число тактов: процессор пытается считать из памяти аргумент, а память может быть не готова отвечать. А в другой раз может быть сразу готова.

Итого, надо рассматривать блок из трёх команд.
Например, в быстрой памяти MOV (R2),R1 выполняется (попутно считывая аргумент из медленной памяти) за 16 тактов, следующая такая же команда снова за 16 тактов, а вот третья уже за 32, потому что в это время контроллер памяти занял шину и не позволяет считать команду. Вот и получаем (16+16+32)/3 = 21,3 такта в среднем на команду MOV (R2),R1.
А в медленной памяти эта команда всегда выполняется за 32 такта.

Для демки «Good Apple» я ещё писал тест блока произвольных команд, так как разные команды в разной последовательности в разное время обращаются к памяти и перестановкой местами некоторых команд можно устранить лишние простои.

konst_st
04.11.2018, 15:12
Итого, надо рассматривать блок из трёх команд.
Например, в быстрой памяти MOV (R2),R1 выполняется (попутно считывая аргумент из медленной памяти) за 16 тактов, следующая такая же команда снова за 16 тактов, а вот третья уже за 32
Т.е. в тестах с быстрой памятью, результаты которых вы привели, из быстрой памяти выполнялся только код, а данные пересылались в/из медленную (динамическую) память? А не могли бы прогнать тест, который работает только с быстрой памятью? Или, может, где нибудь можно посмотреть растактовку команд ВМ1 без учета задержек памяти?

Manwe
04.11.2018, 16:04
Т.е. в тестах с быстрой памятью, результаты которых вы привели, из быстрой памяти выполнялся только код, а данные пересылались в/из медленную (динамическую) память?Да, я даже написал об этом жёлтым карандашом на скриншоте :)


А не могли бы прогнать тест, который работает только с быстрой памятью? Или, может, где нибудь можно посмотреть растактовку команд ВМ1 без учета задержек памяти?Правильной таблицы тактов, по-моему, нет нигде.
Я собираюсь дописать тест, чтобы он прогонял все возможные сочетания быстрой и медленной памяти. У команды может быть до шести аргументов и все они могут лежать в любой памяти, как и сама команда.

gid
04.11.2018, 20:17
Правильная таблица тактов есть в ТО. Которого нет в свободном доступе, то ли потому, что с него гриф секретности не снят, то ли потому что оно хранится не у тех людей.
Однако добрый anonymous на форуме bk0010.org делился листочками из ТО, на которых была таблица. Дохлые ссылки ещё можно найти в этой ветке: https://bk0010.org/forum/?id=3799&old в сообщении "? anonymous - 26.02.2011 00:45".
У меня эти листочки в оригинале не сохранились, поэтому во вложении 66820 просто таблицы. Без пруфов и подтверждения правильности.

Manwe
04.11.2018, 23:08
Однако добрый anonymous на форуме bk0010.org делился листочками из ТО, на которых была таблица.Если в эмуляторе использована эта таблица, то она не совсем верна. Потому что музыкальное демо «In Your Space (http://www.pouet.net/prod.php?which=75938)» в эмуляторе тормозит по сравнению с реальной БК-0011М (по тону звука хорошо слышно). Быстрая память в демо не используется, разумеется.
Либо можно предположить, что запись в порт 177714 должна происходить быстрее, чем в ОЗУ. С другой стороны, первая-то часть демо не тормозит, хотя там тоже есть запись в порт 177714.

konst_st
05.11.2018, 02:36
Если в эмуляторе использована эта таблица, то она не совсем верна.
Нет. В gid и в моем эмуляторе другие тайминги - выше в этой теме я приводил.


поэтому во вложении timings.zip просто таблицы. Без пруфов и подтверждения правильности.
Не понимаю я логики в этих таймингах.
Например почему однооперандные команды с методом адресации 3 выполняются 27T+3tn - т.е. всего 3 обращения к памяти. В то же время для метода адресации 5 выполняются 28T+4tn - т.е. честные 4 обращения к памяти (чтенике кода команды, чтение адреса, чтение операнда, запись операнда).
Для двухоперанднеых команд похоже к приемнику происходит только одно обращение. Или в ВМ1 есть режим чтение-модификация-запись за одно обращение к памяти? Если так то почему это не используется в однооперандных командах?

- - - Добавлено - - -

Вот здесь нашел много интересного по растактовке команд: https://zx-pk.ru/threads/14702-raschjot-tochnogo-vremeni-vypolneniya-komand-razlichnymi-protsessorami-arkhitektury-pdp-11.html
Patron тоже обратил внимание на эти странности. Скорее всего ошибка.

CodeMaster
05.11.2018, 10:04
Не понимаю я логики в этих таймингах.
Столько копий сломано вокруг таймингов... А можно же это проверить в Quartus по моделям Vslav для 1801ВМ1А и 1801ВП1-037?

MM
05.11.2018, 17:03
Обращаю внимание, что БИС 1801ВМ1 не может функционировать при 0 тактах задержки ОЗУ ( регистров ) по записи, это баг.
Внутри БКшки для исключения 0 тактов на запись применяется замедляющая DOUT цепочка RC, но на разъем МПИ выведены собственно сигналы 1801ВМ1 без этой задержки.
Именно этим объясняется зависание изрядного к-ва блоков КНГМД с ВП1-128 при форматировании трека диска, т.к. задержка по записи в 128-й не нормирована.
И, кстати, чем ниже частота БКшки, тем выше вероятность зависания блока КНГМД, т.к. на высоких частотах 1801ВМ1 может таки усматривать "1 такт задержки записи".

konst_st
05.11.2018, 23:39
Правильной таблицы тактов, по-моему, нет нигде.
Вот здесь https://zx-pk.ru/threads/14702-raschjot-tochnogo-vremeni-vypolneniya-komand-razlichnymi-protsessorami-arkhitektury-pdp-11.html?p=560139&viewfull=1#post560139 Patron приводит формулы для ВМ1:

[Время выполнения команды] = [Суммарное время всех циклов шины] + [Суммарное время всех штрафов]

Циклы шины:
DATI : [ 7*T+tn] - цикл чтения шины
DATO : [10*T+tn] - цикл записи шины
DATIO: [13*T+2*tn] - цикл чтения-записи шины (чтение + запись приемника)
tn - время задержки памяти (для динамической памяти БК с частотой процессора 3 МГц равно 4 тактам)

Штрафы:
[Штраф исполнения]: 1*T (для всех команд)
[Штраф второго операнда]: 1*T (для команд, использующих два операнда, если один из них в памяти)
[Штраф отмены предвыборки]: 2*T (для команд, выполняющих больше одного цикла шины)
[Штраф префиксной адресации]: 1*T - для каждого операнда с префиксной адресацией)
[Штраф невзаимности]: 5*T (для MOV = 4*T) (для команд, у которых первый операнд не обращается к памяти, а второй - обращается)

Так же надо учесть, что циклы шины могут начинаться только каждые 4 такта (если частота процессора 3 МГц). Т.е. если по этим формулам длительность команд не кратна 4 тактам, то ее необходимо увеличить до кратного 4 тактам значения.

Я просчитал для всех команд MOV (длительность которых, измеренную на БК-0010, вы привели), и у меня сошлось все такт в такт.
Могу в эмулятор внести новые тайминги с учетом этих формул, но желательно проверить теорию на других командах тоже.

PS: Конечно, по правильному надо учитывать в какие моменты (от начала команды) начинаются циклы шины, и каждый цикл уже выравнивать (в большую сторону) до 4 тактов. Но как рассчитать время каждого цикла - это вопрос. Нужно понять где (в каком месте по тактам) вставляются штрафы и где (в каком месте по тактам) в циклах шины формируется запрос на чтение/запись контроллеру памяти (т.е. какой именно такт цикла шины должен быть кратным 4 тактам).

Manwe
06.11.2018, 09:38
PS: Конечно, по правильному надо учитывать в какие моменты (от начала команды) начинаются циклы шины, и каждый цикл уже выравнивать (в большую сторону) до 4 тактов.Да, это нужно учитывать. Оно особенно проявится когда процессор работает на частоте 4 МГц.

SoftLight
08.11.2018, 11:01
А какие параметры композитного PAL-сигнала в этом эмуле? Что-то нестандартное? Спрашиваю потому, что сигнал отказался принимать вот такой video-to-vga converter (https://www.ebay.com/itm/TV-RCA-Composite-S-Video-AV-In-To-PC-VGA-LCD-Out-Converter-Adapter-Box-US-TO-/162273283497). При этом LCD-телевизоры через SCART-адаптер отлично показывают.

konst_st
08.11.2018, 11:58
А какие параметры композитного PAL-сигнала в этом эмуле? Что-то нестандартное? Спрашиваю потому, что сигнал отказался принимать вот такой video-to-vga converter (https://www.ebay.com/itm/TV-RCA-Composite-S-Video-AV-In-To-PC-VGA-LCD-Out-Converter-Adapter-Box-US-TO-/162273283497).
Тут может быть много проблем:
1. Нет несущей цветности. Я сталкивался с одним устройством записи видео, которое не работало потому, что вначале пыталось определить стандарт (PAL / SRCAM), а так как несущей цветности нет, ему этого не удавалось.
2. На мой взгляд в схемотехнике heavy видеовыход сделан не совсем корректно. Если его ни к чему не подключать, он формирует нужные напряжения (уровень черного 0.3 В и белого 1 В). Но если его подключить к нагрузке 75 Ом (стандартный импеданс видеовхода), то напряжения падают в два раза. Правильным решением было бы сделать выход с эмиттерным повторителем, как собственно и сделано в оригинальной БК.
3. У меня немного нестандартная строчная частота - 15527.95 Гц (пиксельная частота 11.428571 МГц). Идеальным была бы пиксельная частота 12 МГц (как на оригинальной БК), но к сожалению на ESP8266 ее ни как не получить. Стандартную строчную частоту можно так же получить на пиксельной частоте 10 МГц. При этом по стандарту в строку влезает (но впритык) 512 пикселей, но по факту телевизоры прилично обрезают справа и слева.

konst_st
13.12.2018, 19:19
Сделал новый билд:
https://github.com/konst-st/BK8266/blob/master/builds/45/0x00000.bin
https://github.com/konst-st/BK8266/blob/master/builds/45/fota.bin
Сделал более точную эмуляцию драйвера магнитофона (некоторые игрушки, например rick, раньше не работали, теперь все OK).
Немного изменил эмуляцию клавиатуры.

konst_st
13.12.2018, 22:37
Сделал новый билд:
https://github.com/konst-st/BK8266/blob/master/builds/47/0x00000.bin
https://github.com/konst-st/BK8266/blob/master/builds/47/fota.bin
Изменил драйвер клавиатуры Wifi режима - сделал как в эмуляторе (раньше клавиатура при переключении в режим WiFi иногда повисала).
Сделал свой приоритетный реентерабельный диспетчер прерываний в эмуляторе. Теперь строчная синхронизация не дрожит (раньше иногда немного подергивалась при нажатии клавиш на клавиатуре).

konst_st
08.02.2019, 18:12
Оптимизировал я свой эмулятор БК-0010 (https://zx-pk.ru/threads/29542-emuly...a-esp8266.html).
Получилось таки впихнуть БК-0011М в ESP8266.

Проект на github: https://github.com/konst-st/BK8266/tree/BK0011M

Билд 55:
https://github.com/konst-st/BK8266/b...55/0x00000.bin
https://github.com/konst-st/BK8266/b...ds/55/fota.bin

Эмулятор использует все 160 кБ ОЗУ ESP8266 (из которых 128 кБ выделено под ОЗУ БК0011М).
ПЗУ БК11М подгружаются из флэш (используется программное кэширование).
Код эмулятора частично разбит на оверлеи, подгружаемые из флэш по мере необходимости.

Пока не реализовано:

Прерывание по вектору 14 после выполнения каждой команды при установленном в PSW бите T (трассировка).
Прерывание от таймера 50 Гц.
Чтение и запись файлов (планирую эмулировать дисковод).
Так же планирую реализовать эмуляцию звукового сопроцессора AY-3-8910.

Кстати, судя по всему эмулятор ZX Spectrum 128 тоже вполне реально на ESP8266 реализовать.

Создал новую тему: https://zx-pk.ru/threads/30072-emulyator-bk-0011m-na-esp8266.html