А точные такты процессоров и железа?)
Вид для печати
А точные такты процессоров и железа?)
Суббота -- взял MESS из svn и откомпилировал пользуясь инструкциями micko. Поправил в драйвере uknc настройки памяти, сделал получение начальных PC и PSW для PPU. В отладчике стало можно пройти по шагам первые инструкции из ПЗУ.
Воскресенье -- реализовал порты 177010 и 177014 -- заработал цикл копирования ПЗУ в ОЗУ ПП, проходит стартовые тесты ПЗУ и ОЗУ.
Понедельник -- реализовал ещё часть портов ПП, сделал процедуру отрисовки экрана. Дальше стал кропотливо сравнивать поведение с тем что показывает UKNCBTL. Но тут случился облом. Оказалось, что процессор T11, имеющийся в наличии, местами недотягивает до ВМ2 -- в частности, инструкции ASH нету как факта. В общем, сначала нужно реализовать ВМ2 в стиле MESS, а там видно будет.
Вторник -- micko прислал для кода эмуляции T11 патч "который сделал какой-то итальянец" -- инструкции MUL, DIV, ASH, ASHC. Походу, процессор в целом заработал нормально. Реализовал ещё часть портов ПП, на скорую руку сделал запуск ЦП. Дальше нужно смотреть как ЦП шагает, там пока ни одного порта не реализовано. Ясно, что для MESS придётся делать свою реализацию ВМ2.
Среда -- прошагал стартовый код ЦП, споткнулся на инструкции MFUS. Добавил инструкции MFUS и MTUS в код T11. Не помогло. ЦП при старте должен крутиться в режиме HALT. На экране пока ничего нет.
Суббота -- проверил что экран формируется правильно. Сделал цвет 8 палитры серым вместо чёрного -- чтобы видеть что хотя бы фон формируется.
http://img-fotki.yandex.ru/get/4705/...718_c05fa529_L
nzeemin, т.е. скоро УКНЦ появится в mess?
Пока не могу обещать. Возможно.
Насколько я сейчас вижу, нужно делать реализацию ВМ2 в MESS. Сейчас для этого нужно взять код процессора T11, добавить туда разделение режимов на USER/HALT, сделать поле памяти в 128 КБ вместо 64 КБ (16 линий адреса + сигнал SEL), команды EIS, FIS, HALT-режима, прерывания. Без этого можно разве что налепить ещё пару заплаток на код T11, но как ВМ2 он всё равно не заработает.
Примерно 24 июля 2006 года я начал работу над эмулятором УКНЦ.
Добрый день уважаемые форумчане и любители эмулятора УКНЦ. Прежде всего хочу выразить благодарность автору за эмуляцию УКНЦ.
Прошу о помощи! Подскажите пожалуйста более подробно и иллюстративно, как можно запустить диск с играми на эмуляторе УКНЦ beta 20. Сколько мучаюсь, но у меня ничего не получается.
С Уважением.
Dota, да там всё просто.
вот держи пояснения:
ZEman, Спасибо но ничего не получается команда набора глючит и срывается и непонятно чтото там грузится. мне бы иллюстративно посмотреть.
---------- Post added at 17:01 ---------- Previous post was at 16:53 ----------
Да и еще вопросик. Кто знает игра "замок гоблинов" была только на укнц или еще на каких либо платформах типа бк, спектруум. Припоминаю тот факт, что я играл в нечто похожее в 87-88 годах в тогдашних компьютерных клубах, как помню игры передавались по сети был еше цветной монитор электроника Ц-202 черная клавиатура и черный блок питания. Но тогда в те года я так и не уточнил название игры. Помню что по лабирину бегал человечек стрелял и пробивал кирпичные стены и доставал клад.
Dota, прошу прощения что не ответил, но если нужна помощь -- задавайте конкретные вопросы и описывайте точнее что именно не работает.
Игра "Замок гоблинов" -- это один из множества вариантов "Lode Runner", который был портирован в том или ином виде очень на многие платформы. Например, на БК был "Клад" и другие варианты.
nzeemin, Добрый вечер! Никак не получается запустить игровой диск на эмуляторе УКНЦ.
ZEman, прислал инструкцию как запустить игры, все делаю как описано, но при наборе команы DIR MZ1:*.sav проихходит срыв курсора (нажимаешь на кнопку и обна буква появляется несколько раз). Прошу более подробно описать как запускать игры на УНКЦ. С уважением.
Dota, нажмите кнопку включения звука -- это выравнивает скорость работы эмулятора, нажатия клавиш будут восприниматься нормально.
Спасибо попробую.
У меня вопрос - как пользоваться Save state? Вот загрузил я его, а дальше что делать? Все застыло и не двигается. Как запустить?
Пробовал. Точнее я её даже не отжимал. Толку нет.
nzeemin, ну там поди делов на пять минут, может выделите время?
save state во вложении. кстати попутно - имеется неудобство такого плана - в сохраненке стоит фильтр *.uknc, а файлы сохраняются вообще без расширения. Тоже попутно надо было поправить.
пингую, может дошли руки?
Пускай тут повисит - возможно пригодится для проверки, если функция
заработает, там начало 8-го уровня в игре Knight :redface:
Кстати, в UKNCBTL до сих пор с ошибкой работают команды ASH и ASHC. У меня версия от 28-08-2010.
http://code.google.com/p/ukncbtl/dow...+DownloadCount - там сборки с бета 9 по бета 20. Соответственно бета-15 с уже фиксенным EIS, далее там ничего не изменялось. Гарантированно правильно работает только под Win32, а как в x64, Mac OS и Linux - не знаю, там уже QtUkncBtl.
Alex_K, спасибо! У меня катастрофически не получалось увидеть такой полный список( ) Штука в том (могу баг-репорт в лс написать), что есть один плавающий ошибк, который отсутствует в сборке за ноябрь 2009 (где ещё нет харда), но появляется в более поздних. Я конечно только про игры говорю сейчас (специфика).
Нет, исходники нельзя) Это набросок. Да и не поможет вам исходник, т.к. там просто идет перебор всех комбинаций сдвига, и в какой из них ошибка - выявить невозможно, т.к. финальное число - это сумма всех предыдущих.
На реальном работает.
Да я вам и так скажу, почему ошибка.
Счетчик сдвига - это 6-битное число со знаком -32..31.
Тогда как в эмуляторе делается следующее:
src |= (src & 040)?0177700:0;
Как мы видим, если знак отрицательный, то он расширяется в старшие биты. Тогда как если знак положительный, то ничего не расширяется, а остается, как есть. Т.е. все биты 6..15 будут такие, как в операнде источнике.
Попробуйте поставить перед этой строкой такую, может заработает:
src = src & 0x3F;
Пожалста)
Кстати, процессор написан достаточно точно в смысле совместимости по командам. Сами писали, или уже взяли готовые наработки?
Тогда как растактовка никуда не годится. Я бы сказал даже, что если захотите написать эмулятор с точными тактами, весь придется переделывать.
Насколько я знаю, в качестве основы nzeemin брал исходники эмулятора БК. Потом уже процессор капитально переделывался. Написан в соответствии с результатами тестов на реальном УКНЦ. Введены режимы HALT и USER, переходы между ними. Уделялось внимание реакции процессора на нестандартные ситуации (Trap to 4 во время исполнения команды). В качестве алгоритма исполнения команд бралось описание из книги И.В.Захарова "Тех.обслуживание и эксплуатация микроЭВМ ЭЛЕКТРОНИКА-60М". Там система команд довольно хорошо описана. Естественно все проверено на реальном УКНЦ.
По растактовке действительно сложно, т.к. шина асинхронная и узнать точные тайминги команд невозможно. ОЗУ распределяется между видеоадаптером и процессором, поэтому в зависимости от того в какой момент процессор запросил чтение слова, это время может разниться в 2-3 раза. На магистрали ПП слово из ОЗУ вообще читается за два приема, так что код из ОЗУ выполняется значительно медленнее, чем из ПЗУ.
Есть - ссылка.
Почему же невозможно..
При наличии осциллографа (хотя, конечно, лучше использовать логический анализатор) можно провести комплексное исследование таймингов и вывести обобщённые формулы для определения точной продолжительности каждой команды, как функции от тактовой частоты процессора, задержки памяти и состояния конвеера предвыборки.
Начать можно хоть сейчас.
У кого из фанатов PDP-11 есть под рукой и рабочий процессор, и осциллограф ?
Сразу вопрос - исправление доступно будет для фанатов? Может плавающий глюк о котором я писал происходил именно по этой причине?
Спасибо!
Игрушки проверенные в эмуляторе, можно взять тут. Ничего пока нового (всё Арсением или мной уже выкладывалось).
Исправление могу сбросить в репозиторий, выложить могу exe-шник, но только собран он на VC++ 2008 Express Edition, а Никита собирает на VC++ 2005 со статической компоновкой библиотек (так размер exe хоть и побольше, но работает побыстрее).
Вряд глюки происходили по этой причине, программисты обычно знают об использовании только 6-ти разрядов и вряд ли используют больше, но всякое может быть. Так что по глюку надо смотреть конкретно в эмуляторе в отладчике.
Реализовано многое хоть и с большой долей совместимости, но абсолютно точно все сделать нереально, где нибудь глюки и есть. Знаю точно, что остались они в реализации дисковода (1801ВП1-128), бывает подвисает во время чтения, бывает не сбрасывает буфер дорожки после записи в файл. Есть проблемка с каналами 0,1,2 - видно в ТурбоБейсике в программе демонстрации графики. Еще надо добить реализацию сброса по сигналам INIT и DCLO.
Просто на это надо много свободного времени, а его увы, нет.
ТурбоБейсик находится на диске turbo.dsk. Грузитесь, даете команду TURBO в RT-11. Затем в Бейсике загрузите файл TESTGR.BAS и запустите. В главном меню в надписи "Circle Demo" пропущена буква "i". Слева также есть буковка "r". Эти надписи скопом вываливаются через канал 0. Видно что-то происходит при переполнении буфера. Наверное где-то нарушена работа с прерываниями. На реальной машине прерывание происходит примерно где-то через одну команду после установки обеих разрядов 6 и 7. В эмуляторе оно запрашивается сразу же. Может и в этом собака порылась. К тому же механизм выдачи запроса на прерывания отличается у канала 0 от каналов 1 и 2, но в эмуляторе это учтено.
Если есть желание, можно скачать репозиторий и поковыряться в Visual C++. Отладочная консоль есть, повставлять свои команды, чтобы проследить как заполняется буфер канала 0 в ПП и как п/п обработки прерывания реагирует на это.