User Tag List

Страница 21 из 120 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя
Показано с 201 по 210 из 1199

Тема: Эмулятор УКНЦ - EmuStudio

  1. #201

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,399
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,220
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    В том драйвере передается адрес блока, равный 157346. Работа идет с дисководом.
    Т.е. программа в памяти CPU в этом месте ожидает, что ей PPU передаст адрес блока /загруженного с дисковода?/, а PPU ей его не передает?

  2. #202

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Т.е. программа в памяти CPU в этом месте ожидает, что ей PPU передаст адрес блока /загруженного с дисковода?/, а PPU ей его не передает?
    В этом месте программа в ЦП строит блок параметров для работы с дисководом и передает через канал 2 адрес ентого блока ПП. А он (ПП то есть) уже считывает по этому адресу блок себе, разбирает его и выполняет соответствующее задание. Потом в младший байт первого слова блока передается ответ.
    Все описано в книге "Работа с внешними устройствами", да и листинги ПЗУ помогут.

  3. #203

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,399
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,220
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Все описано в книге "Работа с внешними устройствами", да и листинги ПЗУ помогут.
    Мне бы ссылку на то, и на это)
    Судя по всему, это совсем стандартный драйвер. Тогда еще страннее, что именно в этих играх он глючит.

    ---------- Post added at 01:48 ---------- Previous post was at 00:32 ----------

    Приделал сниффер к этой функции на предмет того, чего она должна отправлять.
    Код:
    Packet to source-2: 0801, 8002, 0402, 0400, 6100
    Loading OKAY!
    Команда чтения, сторона 1, сектор 4, трек 2, адрес ЦП 0x400, загружать 0x6100 слово 
    Меню загружено успешно
    
    Переходим к загрузке игры Lode Runner:
    
    Packet to source-2: 0801, 8002, 041D, 0400, 6100
    Loading OKAY!
    Команда чтения, сторона 1, сектор 4, трек 29, адрес ЦП 0x400, загружать 0x6100 слово.
    Игра загружена успешно
    
    Write 0001 at ADRSP_CON at location PC = 0xAB56
    Первое ругательство драйвера кассеты ПЗУ
    
    Packet to source-2: 0801, 8002, 0402, 0400, 6100
    Loading error! Response 0x01, instead 0x00
    Как видно, попытка грузить опять меню, но загрузка не проходит,
    т.к. PPU уже не отвечает правильным образом.
    
    Write 0001 at ADRSP_CON at location PC = 0xAB56
    Packet to source-2: 0801, 8002, 0402, 0400, 6100
    
    И так по кругу.
    Как видно, и меню, и все игры, выглядят в виде одинаковых дампов памяти размером 0x6100. Загрузка игры происходит успешно, а потом что-то вешается и опять уходим в загрузчик меню. Но проблема явно не в загрузчике судя по всему, т.к. он не работает уже после какой-то иной внештатной ситуации.

  4. #204

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,399
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,220
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Примерно добрался до туда, где зависает.
    Значит загружается Lode Runner корректно, затем делает всякие свои действия, а потом хочет загрузить еще фрагмент уже самостоятельно. Подготавливает корректный блок данных для загрузки с дисковода, и оптравляет его в канал-2 функцией с адресом 27064. Все данные корректно считываются программой обработчиком прерываний в PPU (а именно, адрес массива и заглушка 0xFF, вторая 0xFF не считывается, чтобы канал-2 побыл пока занятым для CPU). Значит все считывается в буфер 23200, устанавливается флаг на 7062, сигнализирующий о том, что считали данные в буфер, а затем программа ППУ возвращается к тому месту, где была прервана.
    Но если в тех случаях, когда все грузилось нормально, основная программа была примерно такая:
    174206 4770 165150 JSR @-$12630(R0)
    --> переход на 111144, где чуть дальше проверяется 7062, и идет всякая обработка,

    то в случае с Lode Runner'ом, после
    174206 4770 165150 JSR @-$12630(R0)
    --> переход на 125030, где какая-то другая программа, которая совсем не хочет проверять 7062, и программа успешно повисает.

    Вот пока до куда примерно я дошел.

  5. #205

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Titus, еще раз БОЛЬШАЯ ПРОСЬБА писать все адреса и данные в восьмеричной форме, листинги ПЗУ все в восьмеричных адресах, а то переводить приходится.
    Сами листинги находятся здесь. В шестой части по адресу 175762 находится обработчик прерываний от канала 2. В ячейке 23200 содержится принятый адрес, а в 23202 - счетчик принятых байтов. После того как принят четвертый байт, устанавливается флаг вызова в ячейке 7062. А далее уже диспетчер процессов вызывает обработчик массива параметров канала 2 по адресу 125030.
    Обработчик массива параметров преобразует адрес для загрузки в регистр адреса планов и читает из массива параметров байт со смещением 2 (смещение 1 в формате адреса планов). Биты с 7 по 3 содержат код устройства. Если он больше 3, то идем на кассету ПЗУ, а если это дисковод (код 0), а контроллер отсутствует (7044 меньше нуля), то также на кассету ПЗУ.
    Так что сниффер надо ставить на адрес 125030, и уже смотреть, что в ячейке 23200, это и есть адрес массива параметров.

    Еще все дело в том, что драйвер на диске ITO90 не ждет чтения четвертого байта драйвером канала 2. Он просто ложит в байт ошибки единицу и ждет очищения этого байта, если он не очистился, то ошибка.

    ---------- Post added at 11:14 ---------- Previous post was at 11:04 ----------

    А судя по всему где-то происходит сбой в подсчете принятых байтов, в 23200 оказывается "левый" адрес, читается совершенно другое, естественно прочитанный код устройства не укладывается в рамки 0-3, ну и обращаемся к кассете ПЗУ. Так что надо капитально проверить работу канала 2, как в режиме опроса флагов, так и прерываний.

  6. #206

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,399
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,220
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Alex K, ты немножко невнимательно читаешь то, что я написал.

    Драйвер загрузчика игр ITO90 действительно не ждет четвертого байта. Но этот драйвер работает нормально. А вот уже драйвер загрузчика ВНУТРИ самих игр (в частности Lode Runner'а), работает иначе. Он ждет четвертый байт.

    Далее, сбой счетчиков байтов происходит, но он происходит не из-за сбоев работы канала-2, т.к. это все проверено, канал-2 действительно правильно получает все байты адреса и правильно складывает их в буфер. А вот уже сам диспетчер НЕ вызывается, и обработчик массива по адресу 125030 тоже. Или же вызывается как-то криво. Из-за этого и происходит сбой счетчика байтов, после чего все окривевает.

    p.s.: Я уж и так стараюсь все переводить в восьмеричный вид, когда выкладываю на форум. А у меня все в шестнадцатиричном, т.к. восьмиричную систему я не воспринимаю)

    ---------- Post added at 14:53 ---------- Previous post was at 14:22 ----------

    Кажется нашел глюк, буду проверять)

  7. #207

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,399
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,220
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Фух, наконец-то нашел глюк и исправил.
    Все было связано с битами разрешения прерываний PPU от приемников 0,1,2. Они и так там хитрые, из-за чего одно время не работала игра Saper. Оказалось, что не учел одну особенность, и это вылезло в играх от ITO. Теперь, надеюсь, все будет работать, и другие программы не окривеют. Если кто знает программы, критично относящиеся к правильности устройства каналов 0,1,2 - сообщите.

    Так же добавил бит определения типа дисковода, благодаря чему теперь головки в дисководе на всех системах перемещаются быстро (спасибо Alex_K).

    Плюс ко всему прочему, теперь второй диск тоже грузится по умолчанию под именем Work.dsk (по просьбе трудящихся).

    Смотрите обновленную версию в первом посте.

  8. #208

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Titus, сорри, но я внимательно читаю. И расписал алгоритм работы драйвера канала 2, из-за чего это может происходить. Пришлось так анализировать, т.к. встроенного отладчика нет, исходники недоступны, поэтому я и расписал ситуацию, из-за чего вызывается драйвер кассеты ПЗУ.
    Очень рад, что ошибка нашлась. А поподробнее можно узнать, если это не секрет.
    Диск с JEK-ом от группы KUARKO не грузится. Там в ПП загружается модуль KUARKO.SAV, который фактически заменяет собой системное ПЗУ. Ну и на этапе загрузки подвисает. Там кстати текущим диском назначается MZ1, поэтому лучше грузить с первого привода, или после успешной загрузки с нулевого дать команду DEA DK.
    Вложения Вложения
    • Тип файла: rar JEK.rar (143.4 Кб, Просмотров: 123)

  9. #209

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,399
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,220
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Очень рад, что ошибка нашлась. А поподробнее можно узнать, если это не секрет.
    Диск с JEK-ом от группы KUARKO не грузится. Там в ПП загружается модуль KUARKO.SAV, который фактически заменяет собой системное ПЗУ. Ну и на этапе загрузки подвисает. Там кстати текущим диском назначается MZ1, поэтому лучше грузить с первого привода, или после успешной загрузки с нулевого дать команду DEA DK.
    Не секрет. При обновлении регистра состояния приемников 177066, при каждой записи анализировалось, что если И бит разрешения прерывания, И бит готовности канала установлены, то устанавливался запрос на прерывание. Это неверно, т.к. при любой записи в этот регистр происходил повторный взвод запроса на прерывание, если оба бита были в 1. Теперь сделал все тоже самое, но запрос на прерывание устанавливается только если при записи в конкретные биты разрешения прерывания был переход 0->1. Если же было 1->1, то запрос прерывания заново не устанавливается.


    А jek не использует ловушку? У меня она не реализована.

  10. #210

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Теперь сделал все тоже самое, но запрос на прерывание устанавливается только если при записи в конкретные биты разрешения прерывания был переход 0->1. Если же было 1->1, то запрос прерывания заново не устанавливается.
    Это верно только для канала 0 со стороны ЦП. А для каналов 1 и 2 и 0 со стороны ПП немного по другому, я это описывал. UKNCBTL так же подвисал. В исходниках можно глянуть алгоритм работы.
    Цитата Сообщение от Titus Посмотреть сообщение
    А jek не использует ловушку? У меня она не реализована.
    Нет, не использует, насчет этого можете не беспокоится. С ловушкой работает драйвер GD, который выкладывал Vamos, JEK кстати тоже от него. У меня тоже есть JEK, дискета сделана чуть по другому, но зависает также.

Страница 21 из 120 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Эмулятор УКНЦ - UKNCBTL
    от nzeemin в разделе Эмуляторы отечественных компьютеров
    Ответов: 1114
    Последнее: 08.01.2025, 01:15
  2. PS/2 клавиатура в УКНЦ
    от balu_dark в разделе ДВК, УКНЦ
    Ответов: 83
    Последнее: 10.01.2021, 10:51
  3. Как проверить УКНЦ и КМД ? Help
    от Andrey_Ak в разделе ДВК, УКНЦ
    Ответов: 37
    Последнее: 23.07.2020, 15:50
  4. УКНЦ и шина МПИ
    от KALDYH в разделе ДВК, УКНЦ
    Ответов: 18
    Последнее: 14.03.2014, 14:30
  5. Продаю УКНЦ
    от Gryphon в разделе Барахолка (архив)
    Ответов: 10
    Последнее: 01.04.2009, 10:22

Ваши права

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