User Tag List

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя
Показано с 51 по 60 из 71

Тема: Пишу эмулятор БК0011М для FPGA MiST.

  1. #51

    Регистрация
    27.11.2015
    Адрес
    г. Самара
    Сообщений
    341
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Patron,
    я так понял, пультовой режим в том ПЗУ не имеет локальной консоли и требует UART.

    Patron,
    А по клавиатуре не подскажите?

  2. #52

    Регистрация
    27.11.2015
    Адрес
    г. Самара
    Сообщений
    341
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Еще возник вопрос по поводу переключения отображаемой видео страницы. Возможно ли переключение в пределах одной строки или фиксация отображаемого буфера происходит только в начале строки?

  3. #53

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    609
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    175
    Поблагодарили
    135 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Я же вроде давал вам верилог-модель ВП1-014. У неё такая схемотехническая особенность - фактом отжатия считается "ни одна нажатая клавиша", т.е. на всех входах X высокий уровень.
    Цитата Сообщение от Saar Посмотреть сообщение
    2) детекция нажатия в пассивном режиме посредством опроса регистров клавы.
    Когда прерывания запрещены, есть два метода.
    1) Путём опроса бита готовности регистра клавиатуры, при этом не получается автоповтор, поскольку бит готовности появится снова только при отжатии и следующем нажатии клавиши
    Код:
    1$:   tstb @#177660
          bpl 1$
          movb @#177662,r0
    2) Путём опроса бита 6 регистра 177716, там фиксируется факт нажатия клавиши, пока что-то нажато - бит 6 == 0, когда ничего не нажато, бит 6 ==1, так что тут возможен автоповтор
    Код:
    1$:   bit #100,@#177716
          bne 1$
          movb @#177662,r0
    Цитата Сообщение от Saar Посмотреть сообщение
    Возможно ли переключение в пределах одной строки или фиксация отображаемого буфера происходит только в начале строки?
    Я тут не уверен, мне и самому интересно, как оно на самом деле, но думаю, что теоретически должно быть возможно.
    Счётчик D28 по схеме БК11 в принципе повторяет функцию счётчика PC по тексту верилога ВП1-037, и они синхронизируются между собой сигналом WTI. По схеме БК11 получается, что сигнал с регистра буфера экрана начинает влиять на генерацию адреса экрана через 4 такта (6МГц) следующие 4 такта после импульса WTI, т.е. каждый цикл работы с экраном. А менять значение регистра буфера экрана можно в любое время.
    Последний раз редактировалось gid; 16.03.2016 в 09:17.

  4. #54

    Регистрация
    27.11.2015
    Адрес
    г. Самара
    Сообщений
    341
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Я же вроде давал вам верилог-модель ВП1-014
    Хмм.. Не помню такого. вы перевели 014 в читабельный формат? Выложите ее тут, пожалуйста, если так.
    Я пока остановился на версии когда нажатие следующей кнопки отменяет нажатие предыдущей. Да, это не так как в БК, но зато играть удобнее

    С 037 не все так гладко. Есть версия что при переделке vp_037.v в va_037.v закралась ошибка в формировании RPLY сигнала. По крайней мере они работают по-разному у меня в проекте. Но обе, кстати, работают иначе(этот момент надо перепроверить на реальной БК) чем в реальной БК. Речь идет про так называемые тайминги contendent memory.

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

    Цитата Сообщение от gid Посмотреть сообщение
    Когда прерывания запрещены, есть два метода.
    Как опрашивать клаву я знаю У меня просто нет реальной БК чтобы уточнить поведение. Но вы полностью ответили о поведении 014. Хотелось бы увидеть читабельную версию 014 в верилоге. Модель от Vslav у меня есть - она сгенерированная и не читабельная.
    Последний раз редактировалось Saar; 16.03.2016 в 14:31.

  5. #55

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    609
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    175
    Поблагодарили
    135 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Saar Посмотреть сообщение
    вы перевели 014 в читабельный формат?
    Да, вот тут и было дело http://zx-pk.ru/showthread.php?t=260...l=1#post854057
    Цитата Сообщение от Saar Посмотреть сообщение
    Есть версия что при переделке vp_037.v в va_037.v закралась ошибка в формировании RPLY сигнала.
    Да, и Vslav в курсе был, даже планировал когда-нибудь исправить. По моим наблюдениям, RPLY на полтакта раньше выдаётся в va_037.v, из-за чего модель в общем работала быстрее, чем vp_037.v

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

    У меня кстати есть предположение, как поправить дело.
    В оригинале в данном alwaysе
    Код:
    always @(*) if (RASEL) TRPLY = 1'b1; else if (PIN_nDIN & PIN_nDOUT) TRPLY = 1'b0;
    вместо RASEL используется сигнал VASEL = ~(~RASEL), проходящий через 2 инвертора, вносящих задержку 4 (не знаю чего, то ли наносек., то ли ещё чего-то) каждый.
    Поэтому можно попробовать переписать это так:
    Код:
    reg VASEL;
    always @(*){
      VASEL <= RASEL;
      if (VASEL) TRPLY = 1'b1; else if (PIN_nDIN & PIN_nDOUT) TRPLY = 1'b0;
    }
    Но скорее всего не всё так просто.

  6. #56

    Регистрация
    27.11.2015
    Адрес
    г. Самара
    Сообщений
    341
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Да, вот тут и было дело
    видимо в запарке я потерял тот пост

    Цитата Сообщение от gid Посмотреть сообщение
    VASEL <= RASEL;
    думаю так не исправить дело. В комбинаторной логике врядли квартус что-то путное из этого синтезирует.
    Там еще, кстати AMUXSEL сигнал в va версии сокращен. А он тоже через триггеры проходит и вносит задержку.

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

    вот как различаются тайминги va и vp на тесте с первой картинки.
    Нажмите на изображение для увеличения. 

Название:	bk_test2.jpg 
Просмотров:	429 
Размер:	22.3 Кб 
ID:	56476Нажмите на изображение для увеличения. 

Название:	va_037.jpg 
Просмотров:	386 
Размер:	22.4 Кб 
ID:	56473Нажмите на изображение для увеличения. 

Название:	vp_037_1.jpg 
Просмотров:	416 
Размер:	21.2 Кб 
ID:	56474Нажмите на изображение для увеличения. 

Название:	vp_037_2.jpg 
Просмотров:	393 
Размер:	21.4 Кб 
ID:	56475
    1) прога 2) vp_037_1 3) vp_037_2 4) va_037

    Причем vp обеспечивает более быструю работу, если судить по картинкам. Еще vp выдает иногда другую картинку. Думаю, что ВП1-037 имеет разные тайминги в момент вывода информационной части и пустого места (гашение, развертка) - поэтому я получаю разные картинки. VA модель всегда одну картинку выдает.

    подключал модели в таком виде:
    Код:
    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)
    );
    CPU у меня QBUS версии, но немного с переделанными сигналами - а-ля WB: все сигналы позитивные. bus_stb = dout | din;

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

    а вот тот же тест на реале.
    Нажмите на изображение для увеличения. 

Название:	real_test2_1.jpg 
Просмотров:	421 
Размер:	21.8 Кб 
ID:	56477

    Я, честно не подгадывал тест, но получилось вот так красиво

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

    немного рассуждений на тему: а вдруг у меня что-то не так помимо 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М попробовал мой тест.
    БК, на которой это тестировалось, чудом выжила среди остальных, над которыми поработали охотники за драгметаллами. Со слов владельца, на этой БК всё же успели выкусить некоторые конденсаторы. К сожалению, я не знаю что там повыкусывали. Не думаю, что при общей рабочести этой БК, это могло отразиться на ее скорости работы.

  7. #57

    Регистрация
    27.11.2015
    Адрес
    г. Самара
    Сообщений
    341
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    упростил схему 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, но разобрать совершенно невозможно. Интересно было бы узнать что там написано. В инете скан этого листа, похоже с одного и того же ресурса - везде идентичные копии неразборчивого текста.

  8. #58

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    609
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    175
    Поблагодарили
    135 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Saar Посмотреть сообщение
    ремарка у C8
    Там написано "Доп. замена на КМ-6а-М47 - 300пФ±20%" Ничего интересного. У меня есть бумажная ксерокопия оригинального листа, там если напрячься, прочитать можно. Сканы в высоком разрешении выложены у меня на сайте эмулятора.

    Я кстати предполагал, что надо было бы уточнить времянки DIN DOUT модели ВМ1, вдруг они тоже не совпадают с настоящим ВМ1, потому что, помню, что они у моделей QSync и ASync вроде бы незначительно различались. Для ДВК и других изделий это непринципиально, а для БК весьма важно.

    А ещё, насколько оправданно совмещение моделей ВП1-037 и ВП1-014 в один модуль с точки зрения синтеза? Моя экспериментальная модель на С++ от этого значительно выиграла.

  9. #59

    Регистрация
    27.11.2015
    Адрес
    г. Самара
    Сообщений
    341
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Я кстати предполагал, что надо было бы уточнить времянки DIN DOUT модели ВМ1, вдруг они тоже не совпадают с настоящим ВМ1, потому что, помню, что они у моделей QSync и ASync вроде бы незначительно различались. Для ДВК и других изделий это непринципиально, а для БК весьма важно.
    хм.. Я как-то принял за аксиому, что модель QSync совпадает с оригиналом. Но, как мне показалось, что задержка DOUT на 3 такта решила проблему. Вот бы еще на реальной БК0011М посмотреть какая там задержка. Я считал по общей формуле T=R*C. Понятно, что это очень сильное упрощение, но пока другого варианта не нашел. Есть друг с БК и осциллографом, но не знаю когда он сможет посмотреть.

    Цитата Сообщение от gid Посмотреть сообщение
    А ещё, насколько оправданно совмещение моделей ВП1-037 и ВП1-014 в один модуль с точки зрения синтеза?
    Никак не оправдывается. Между ними ничего общего нет. Один сигнал лишь пробросить между ними - не вижу оптимизации в этом.
    Я от 037 только формирование RPLY взял. Остальное написал по-своему, более понятно и удобно.

    Цитата Сообщение от gid Посмотреть сообщение
    Моя экспериментальная модель на С++ от этого значительно выиграла.
    В чем именно выиграла?

  10. #60

    Регистрация
    21.09.2012
    Адрес
    г. Йошкар-Ола
    Сообщений
    8
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Saar
    Возможно ли переключение в пределах одной строки или фиксация отображаемого буфера происходит только в начале строки?
    Цитата Сообщение от gid Посмотреть сообщение
    Я тут не уверен, мне и самому интересно, как оно на самом деле, но думаю, что теоретически должно быть возможно.
    Счётчик D28 по схеме БК11 в принципе повторяет функцию счётчика PC по тексту верилога ВП1-037, и они синхронизируются между собой сигналом WTI. По схеме БК11 получается, что сигнал с регистра буфера экрана начинает влиять на генерацию адреса экрана через 4 такта (6МГц) следующие 4 такта после импульса WTI, т.е. каждый цикл работы с экраном. А менять значение регистра буфера экрана можно в любое время.
    Было время когда делалось так: видеостраница 5 окрашивалась предварительно в белый, видеостраница 6 была черной. Для оценки быстродействия выполнения какой-либо подпрограммы (в пределах одного тика системного таймера IRQ2 или 20 мс.) :
    Настраиваем обработчик прерывания таймера:
    1) при каждом вызове включать в окно отображения 5-ю страницу
    2) делаем свои вычисления, например идущие подряд n команд ХХХ
    3) включить в окно отображения 6-ю страницу
    Включить системный таймер.
    Далее можно было наблюдать частичное закрашивание белым цветом части экрана. Т.е. при наблюдении закрашивания 50% экрана делаем вывод о времени выполнения 10 мс. Делим время выполнения на количество команд n и вычисляем время исполнения одной команды ХХХ. Сбоку наносились штрихи для точного вычисления времени. Насколько помню полоски закрашивались не кратно длине строки, хотя могу ошибаться

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ремонт БК0011м
    от лю в разделе БК-0010/0011
    Ответов: 17
    Последнее: 25.06.2015, 19:14
  2. Замена ОЗУ БК0011М
    от Woland в разделе БК-0010/0011
    Ответов: 35
    Последнее: 09.03.2013, 14:34
  3. СПб. Меняю БК0011М на ДВК.
    от SKcorp. в разделе Барахолка (архив)
    Ответов: 5
    Последнее: 08.12.2011, 20:32
  4. [Москва, Мир] Обменяю БК0011М
    от Mixey в разделе Барахолка (архив)
    Ответов: 40
    Последнее: 03.05.2010, 02:02

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •