Patron,
я так понял, пультовой режим в том ПЗУ не имеет локальной консоли и требует UART.
Patron,
А по клавиатуре не подскажите?
Patron,
я так понял, пультовой режим в том ПЗУ не имеет локальной консоли и требует UART.
Patron,
А по клавиатуре не подскажите?
Еще возник вопрос по поводу переключения отображаемой видео страницы. Возможно ли переключение в пределах одной строки или фиксация отображаемого буфера происходит только в начале строки?
По клавиатуре:
Если нажали кнопку 1, ВП1-014 зафиксировал факт нажатия, и перешёл в режим ожидания отжатия, теперь что бы вы не нажимали из цифро-буквенных клавиш, последующие нажатия игнорируются, после того, как будут отжаты все клавиши, ВП1-014 зафиксирует факт отжатия и:
а) если предыдущий скан код был считан, зафиксирует в регистре клавиатуры скан-код первой нажатой кнопки;
б) если предыдущий скан код был считан, и если прерывания разрешены, выдаст запрос на векторное прерывание.
иначе - всё проигнорирует, т.е. с программной точки зрения ничего не произойдёт.
Я же вроде давал вам верилог-модель ВП1-014. У неё такая схемотехническая особенность - фактом отжатия считается "ни одна нажатая клавиша", т.е. на всех входах X высокий уровень.
Когда прерывания запрещены, есть два метода.
1) Путём опроса бита готовности регистра клавиатуры, при этом не получается автоповтор, поскольку бит готовности появится снова только при отжатии и следующем нажатии клавиши
2) Путём опроса бита 6 регистра 177716, там фиксируется факт нажатия клавиши, пока что-то нажато - бит 6 == 0, когда ничего не нажато, бит 6 ==1, так что тут возможен автоповторКод:1$: tstb @#177660 bpl 1$ movb @#177662,r0
Я тут не уверен, мне и самому интересно, как оно на самом деле, но думаю, что теоретически должно быть возможно.Код:1$: bit #100,@#177716 bne 1$ movb @#177662,r0
Счётчик D28 по схеме БК11 в принципе повторяет функцию счётчика PC по тексту верилога ВП1-037, и они синхронизируются между собой сигналом WTI. По схеме БК11 получается, что сигнал с регистра буфера экрана начинает влиять на генерацию адреса экрана через 4 такта (6МГц) следующие 4 такта после импульса WTI, т.е. каждый цикл работы с экраном. А менять значение регистра буфера экрана можно в любое время.
Последний раз редактировалось gid; 16.03.2016 в 09:17.
Хмм.. Не помню такого. вы перевели 014 в читабельный формат? Выложите ее тут, пожалуйста, если так.
Я пока остановился на версии когда нажатие следующей кнопки отменяет нажатие предыдущей. Да, это не так как в БК, но зато играть удобнее
С 037 не все так гладко. Есть версия что при переделке vp_037.v в va_037.v закралась ошибка в формировании RPLY сигнала. По крайней мере они работают по-разному у меня в проекте. Но обе, кстати, работают иначе(этот момент надо перепроверить на реальной БК) чем в реальной БК. Речь идет про так называемые тайминги contendent memory.
- - - Добавлено - - -
Как опрашивать клаву я знаюУ меня просто нет реальной БК чтобы уточнить поведение. Но вы полностью ответили о поведении 014. Хотелось бы увидеть читабельную версию 014 в верилоге. Модель от Vslav у меня есть - она сгенерированная и не читабельная.
Последний раз редактировалось Saar; 16.03.2016 в 14:31.
Да, вот тут и было дело http://zx-pk.ru/showthread.php?t=260...l=1#post854057
Да, и Vslav в курсе был, даже планировал когда-нибудь исправить. По моим наблюдениям, RPLY на полтакта раньше выдаётся в va_037.v, из-за чего модель в общем работала быстрее, чем vp_037.v
- - - Добавлено - - -
У меня кстати есть предположение, как поправить дело.
В оригинале в данном alwaysе
вместо RASEL используется сигнал VASEL = ~(~RASEL), проходящий через 2 инвертора, вносящих задержку 4 (не знаю чего, то ли наносек., то ли ещё чего-то) каждый.Код:always @(*) if (RASEL) TRPLY = 1'b1; else if (PIN_nDIN & PIN_nDOUT) TRPLY = 1'b0;
Поэтому можно попробовать переписать это так:
Но скорее всего не всё так просто.Код:reg VASEL; always @(*){ VASEL <= RASEL; if (VASEL) TRPLY = 1'b1; else if (PIN_nDIN & PIN_nDOUT) TRPLY = 1'b0; }
видимо в запарке я потерял тот пост
думаю так не исправить дело. В комбинаторной логике врядли квартус что-то путное из этого синтезирует.
Там еще, кстати AMUXSEL сигнал в va версии сокращен. А он тоже через триггеры проходит и вносит задержку.
- - - Добавлено - - -
вот как различаются тайминги va и vp на тесте с первой картинки.
1) прога 2) vp_037_1 3) vp_037_2 4) va_037
Причем vp обеспечивает более быструю работу, если судить по картинкам. Еще vp выдает иногда другую картинку. Думаю, что ВП1-037 имеет разные тайминги в момент вывода информационной части и пустого места (гашение, развертка) - поэтому я получаю разные картинки. VA модель всегда одну картинку выдает.
подключал модели в таком виде:
CPU у меня QBUS версии, но немного с переделанными сигналами - а-ля WB: все сигналы позитивные. bus_stb = dout | din;Код:wire nrply; wire vp037_ack = ~nrply; wire [15:0] nAD = bus_sync ? 16'o177777 : 16'hZZZZ; vp_037 vp_037 ( .PIN_CLK(clk_037), .PIN_R(0), .PIN_C(0), .PIN_nAD(nAD), .PIN_nSYNC(~bus_sync), .PIN_nDIN(1), .PIN_nDOUT(~(legacy_ram & valid & bus_stb)), .PIN_nWTBT(0), .PIN_nRPLY(nrply) );
- - - Добавлено - - -
а вот тот же тест на реале.
Я, честно не подгадывал тест, но получилось вот так красиво
- - - Добавлено - - -
немного рассуждений на тему: а вдруг у меня что-то не так помимо vp037.
сигнал bus_sync и bus_stb (см выше) идут напрямую из vm1_qbus - тут какие-то задержки с моей стороны исключены.
legacy_ram и valid формируются на момент перехода bus_sync в активное состояние и держатся на протяжении всего действия bus_sync.
Получается что в этой связке задействованы тайминги только vm1_qbus и vp_037.
Вчера c Vslav выяснили разрешение у vp037 - 384х320, что соответсвует тому что у меня. Может быть общий сдвиг изображения, но не его искажение.
В общем, я не вижу где бы я мог ошибиться. Всё сходится на проблемы в модели vp_037.
- - - Добавлено - - -
Кстати, хорошо бы если кто-то на другой БК0011М попробовал мой тест.
БК, на которой это тестировалось, чудом выжила среди остальных, над которыми поработали охотники за драгметаллами. Со слов владельца, на этой БК всё же успели выкусить некоторые конденсаторы. К сожалению, я не знаю что там повыкусывали. Не думаю, что при общей рабочести этой БК, это могло отразиться на ее скорости работы.
упростил схему 037, оставив только то, что имеет отношение к RPLY:
037_RPLY.ZIP
- - - Добавлено - - -
есть подозрение что в схеме 037 элементы K14, K29, K21 должны инверсны относительно того что есть. По крайне мере в va модели именно так.
- - - Добавлено - - -
в БК0011М есть задержка сигнала DOUT сделанная на R13 C8.
Кто-нибудь может на реальной БК посмотреть на сколько задержан срез сигнала на 6 ноге D7 относительно 3 ноги D1?
- - - Добавлено - - -
рискну предположить, что я решил проблему.
Недостающая задержка нашлась как раз в этой цепочке R13 C8. Там по схеме у БК0011М 1К и 300пф(180пф у БК0010). По прикидкам у меня вышло около 2 тактов частоты CPU. В реальности получилось что надо на 3 такта задерживать DOUT чтобы мой тест совпал с картинкой на реальной БК0011М.
Прогнал так называемые реальные тесты-демки: Shock2 (мультиколорная часть), Lyra II (с танцующей девушкой), Insult(часть 19) - везде 100% попадание в развертку.
Если кто-то знает еще подобные проги, где точное попадание в развертку важно - готов проверить.
Весь этот разбор по тактам начался как раз из-за этих демок. В Shock2 я добился чтобы было правильно, а в Insult были лесенки. Если Insult выравнять, то в Shock получалось криво.
Теперь везде правильно отображается.
По поводу va_037 модели - получается, что она правильная. Я написал verilog со схемы что выше выложил - результат получился идентичный va_037 (код verilog несколько отличается, но не принципиально).
Почему vp_037 выдает другую картинку? Возможно потому что она не подходит для синтеза. Там много временных задержек, которые не синтезируются, а лишь моделируются в тестах для modelsim.
- - - Добавлено - - -
кстати, в перечне элементов для БК0011М написана какая-то ремарка у C8, но разобрать совершенно невозможно. Интересно было бы узнать что там написано. В инете скан этого листа, похоже с одного и того же ресурса - везде идентичные копии неразборчивого текста.
Там написано "Доп. замена на КМ-6а-М47 - 300пФ±20%" Ничего интересного. У меня есть бумажная ксерокопия оригинального листа, там если напрячься, прочитать можно. Сканы в высоком разрешении выложены у меня на сайте эмулятора.
Я кстати предполагал, что надо было бы уточнить времянки DIN DOUT модели ВМ1, вдруг они тоже не совпадают с настоящим ВМ1, потому что, помню, что они у моделей QSync и ASync вроде бы незначительно различались. Для ДВК и других изделий это непринципиально, а для БК весьма важно.
А ещё, насколько оправданно совмещение моделей ВП1-037 и ВП1-014 в один модуль с точки зрения синтеза? Моя экспериментальная модель на С++ от этого значительно выиграла.
хм.. Я как-то принял за аксиому, что модель QSync совпадает с оригиналом. Но, как мне показалось, что задержка DOUT на 3 такта решила проблему. Вот бы еще на реальной БК0011М посмотреть какая там задержка. Я считал по общей формуле T=R*C. Понятно, что это очень сильное упрощение, но пока другого варианта не нашел. Есть друг с БК и осциллографом, но не знаю когда он сможет посмотреть.
Никак не оправдывается. Между ними ничего общего нет. Один сигнал лишь пробросить между ними - не вижу оптимизации в этом.
Я от 037 только формирование RPLY взял. Остальное написал по-своему, более понятно и удобно.
В чем именно выиграла?
Было время когда делалось так: видеостраница 5 окрашивалась предварительно в белый, видеостраница 6 была черной. Для оценки быстродействия выполнения какой-либо подпрограммы (в пределах одного тика системного таймера IRQ2 или 20 мс.) :Сообщение от Saar
Настраиваем обработчик прерывания таймера:
1) при каждом вызове включать в окно отображения 5-ю страницу
2) делаем свои вычисления, например идущие подряд n команд ХХХ
3) включить в окно отображения 6-ю страницу
Включить системный таймер.
Далее можно было наблюдать частичное закрашивание белым цветом части экрана. Т.е. при наблюдении закрашивания 50% экрана делаем вывод о времени выполнения 10 мс. Делим время выполнения на количество команд n и вычисляем время исполнения одной команды ХХХ. Сбоку наносились штрихи для точного вычисления времени. Насколько помню полоски закрашивались не кратно длине строки, хотя могу ошибаться
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)