Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор УКНЦ (http://zx-pk.ru/showthread.php?t=6257)

Alex_K 2nd October 2011 20:59

Quote:

Originally Posted by Titus (Post 420273)
Кстати, процессор написан достаточно точно в смысле совместимости по командам. Сами писали, или уже взяли готовые наработки?
Тогда как растактовка никуда не годится. Я бы сказал даже, что если захотите написать эмулятор с точными тактами, весь придется переделывать.

Насколько я знаю, в качестве основы nzeemin брал исходники эмулятора БК. Потом уже процессор капитально переделывался. Написан в соответствии с результатами тестов на реальном УКНЦ. Введены режимы HALT и USER, переходы между ними. Уделялось внимание реакции процессора на нестандартные ситуации (Trap to 4 во время исполнения команды). В качестве алгоритма исполнения команд бралось описание из книги И.В.Захарова "Тех.обслуживание и эксплуатация микроЭВМ ЭЛЕКТРОНИКА-60М". Там система команд довольно хорошо описана. Естественно все проверено на реальном УКНЦ.
По растактовке действительно сложно, т.к. шина асинхронная и узнать точные тайминги команд невозможно. ОЗУ распределяется между видеоадаптером и процессором, поэтому в зависимости от того в какой момент процессор запросил чтение слова, это время может разниться в 2-3 раза. На магистрали ПП слово из ОЗУ вообще читается за два приема, так что код из ОЗУ выполняется значительно медленнее, чем из ПЗУ.

Titus 2nd October 2011 21:02

Quote:

Originally Posted by Alex_K (Post 420294)
бралось описание из книги И.В.Захарова "Тех.обслуживание и эксплуатация микроЭВМ ЭЛЕКТРОНИКА-60М". Там система команд довольно хорошо описана. Естественно все проверено на реальном УКНЦ.
По растактовке действительно сложно, т.к. шина асинхронная и узнать точные тайминги команд невозможно. ОЗУ распределяется между видеоадаптером и процессором, поэтому в зависимости от того в какой момент процессор запросил чтение слова, это время может разниться в 2-3 раза. На магистрали ПП слово из ОЗУ вообще читается за два приема, так что код из ОЗУ выполняется значительно медленнее, чем из ПЗУ.

Есть ссылка на книжицу?

Узнать-то время можно, только это все надо долго изучать.

Alex_K 2nd October 2011 21:12

Quote:

Originally Posted by Titus (Post 420295)
Есть ссылка на книжицу?

Есть - ссылка.

Patron 2nd October 2011 22:01

Quote:

Originally Posted by Alex_K (Post 420294)
По растактовке действительно сложно, т.к. шина асинхронная и узнать точные тайминги команд невозможно.

Почему же невозможно..

При наличии осциллографа (хотя, конечно, лучше использовать логический анализатор) можно провести комплексное исследование таймингов и вывести обобщённые формулы для определения точной продолжительности каждой команды, как функции от тактовой частоты процессора, задержки памяти и состояния конвеера предвыборки.

Начать можно хоть сейчас.

У кого из фанатов PDP-11 есть под рукой и рабочий процессор, и осциллограф ?

hobot 3rd October 2011 06:36

Quote:

Originally Posted by Alex_K (Post 420265)
Спасибо! Заработало. Упустили этот момент.

Сразу вопрос - исправление доступно будет для фанатов? Может плавающий глюк о котором я писал происходил именно по этой причине?
Спасибо!

Игрушки проверенные в эмуляторе, можно взять тут. Ничего пока нового (всё Арсением или мной уже выкладывалось).

Alex_K 3rd October 2011 11:50

Quote:

Originally Posted by hobot (Post 420391)
Сразу вопрос - исправление доступно будет для фанатов? Может плавающий глюк о котором я писал происходил именно по этой причине?
Спасибо!

Исправление могу сбросить в репозиторий, выложить могу exe-шник, но только собран он на VC++ 2008 Express Edition, а Никита собирает на VC++ 2005 со статической компоновкой библиотек (так размер exe хоть и побольше, но работает побыстрее).
Вряд глюки происходили по этой причине, программисты обычно знают об использовании только 6-ти разрядов и вряд ли используют больше, но всякое может быть. Так что по глюку надо смотреть конкретно в эмуляторе в отладчике.
Реализовано многое хоть и с большой долей совместимости, но абсолютно точно все сделать нереально, где нибудь глюки и есть. Знаю точно, что остались они в реализации дисковода (1801ВП1-128), бывает подвисает во время чтения, бывает не сбрасывает буфер дорожки после записи в файл. Есть проблемка с каналами 0,1,2 - видно в ТурбоБейсике в программе демонстрации графики. Еще надо добить реализацию сброса по сигналам INIT и DCLO.
Просто на это надо много свободного времени, а его увы, нет.

Titus 3rd October 2011 13:44

Quote:

Originally Posted by Alex_K (Post 420422)
Реализовано многое хоть и с большой долей совместимости, но абсолютно точно все сделать нереально, где нибудь глюки и есть. Знаю точно, что остались они в реализации дисковода (1801ВП1-128), бывает подвисает во время чтения, бывает не сбрасывает буфер дорожки после записи в файл. Есть проблемка с каналами 0,1,2 - видно в ТурбоБейсике в программе демонстрации графики. Еще надо добить реализацию сброса по сигналам INIT и DCLO.
Просто на это надо много свободного времени, а его увы, нет.

Не согласен, что нереально. Просто сложно и много работы.
Можно ссылку на бейсик с той демонстрацией, в которой глюки? И как ее запускать.

Alex_K 3rd October 2011 15:18

1 Attachment(s)
Quote:

Originally Posted by Titus (Post 420442)
Можно ссылку на бейсик с той демонстрацией, в которой глюки? И как ее запускать.

ТурбоБейсик находится на диске turbo.dsk. Грузитесь, даете команду TURBO в RT-11. Затем в Бейсике загрузите файл TESTGR.BAS и запустите. В главном меню в надписи "Circle Demo" пропущена буква "i". Слева также есть буковка "r". Эти надписи скопом вываливаются через канал 0. Видно что-то происходит при переполнении буфера. Наверное где-то нарушена работа с прерываниями. На реальной машине прерывание происходит примерно где-то через одну команду после установки обеих разрядов 6 и 7. В эмуляторе оно запрашивается сразу же. Может и в этом собака порылась. К тому же механизм выдачи запроса на прерывания отличается у канала 0 от каналов 1 и 2, но в эмуляторе это учтено.

Если есть желание, можно скачать репозиторий и поковыряться в Visual C++. Отладочная консоль есть, повставлять свои команды, чтобы проследить как заполняется буфер канала 0 в ПП и как п/п обработки прерывания реагирует на это.

Titus 3rd October 2011 15:51

Quote:

Originally Posted by Alex_K (Post 420453)
ТурбоБейсик находится на диске turbo.dsk. Грузитесь, даете команду TURBO в RT-11. Затем в Бейсике загрузите файл TESTGR.BAS и запустите.

Легко сказать - запустите. Я ведь специально спросил 'КАК?'.
Да, нашел F3 - это загрузка.
Даже с трудом нашел, что CapsLock+Insert (!) - это компиляция.
Все, на большее меня не хватило. Запустить не смог.

А, все, нашел - Ctrl+Insert )

Alex_K 3rd October 2011 16:43

Quote:

Originally Posted by Titus (Post 420456)
Легко сказать - запустите. Я ведь специально спросил 'КАК?'.

Так там же написано <F1>-помощь, жмем К1 и сразу же видим таблицу соответствий клавиш УКНЦ и IBM PC. <СТОП> - это F10 - выход в меню.


All times are GMT +4. The time now is 02:52.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.