Не, я уже в пути на дачу, а там нет железного корвета. Теперь только в воскресенье смогу.
Не, я уже в пути на дачу, а там нет железного корвета. Теперь только в воскресенье смогу.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
лучше отдыхай![]()
Дачный воздух пошел мне явно на пользу - я разобрался с BDOS ERROR в игрушке.
Опишу последовательность поиска, если кому интересно. Как мы тут уже заметили, BDOS error вылезает на ровном месте - к контроллеру обращений никаких нет. Я взял в зубы отладчик, поставил в биосе бряк и стал смотреть. Вижу - пришло обращение на чтение сектора. Форимруется запрос, пакет отсылается в порт. В логе эмулятора - тишина. Блин. Прикручиваю к эмулятору лог обращений к каналу А. Все 5 байт команды в порт уходят - и тишина. Уже думал, баг в эмуляторе. Но оказалось все проще. Опустился сигнал control. Это ППИ2 С7. Мы его используем для синхронизации начальной загрузки и отлова перезагрузки. Когда сигнал опущен - контроллер на команды не реагирует. Данные, идущие в порт А, просто тихо игнорируются, и все.
Приделал в лог трассировку этого сигнала. Оказалось, что через 5 примерно секунд после запуска игры он начинает делгаться туда-сюда с интервалом примерно полсекунды.
Теперь осталось найти, кто его дергает. Эмулятор с исходниками - великая вещь. Дописываю в лог вывод текущего PC в момент обращения к порту. Выявилось 2 точки - по адресу 2d1 и 33с. Обе точки, естественно, входят в адресное пространство программы. Смотрю туда в отладчике - точно. mov m,a. В HL - адрес ППИ2С.
Вот так. Придурок, писавший эту игрушку, решил, что срать от балды в произвольный порт - это прикольно.Я понимаю, когда лезут, например, к таймеру, или контроллеру прерываний. Но сюда-то зачем? Единственная функция этого сигнала - управление внешним ПЗУ.
И это только первая ласточка. Как я вижу, в мире корвета разгильляйство - норма жизни. Во всем - от ОПТС и журнальных статей до игрушек.
Самое поганое, что это не лечится. В эмуляторе можно, конечно, после загрузки системы игнорировать этот сигнал. А в железке - нельзя. По этому сигналу отслеживается момент перезагрузки системы. Еще одно, кстати, разгильдяйство - не вывести на боковой разъем сигнал RESET.
Исправить ситуацию можно, только пропатчив игрушку, забив 00 на место этих 2 команд. Но это тоже непросто - на диске runner.com выглядит совсем не так, как после загрузки в память. Упакован он там, что ли?
Это не может быть опросом джойстика?
Я считал, что джойстик висит на канале В ППИ 3. Зачем ему сигнал control?
Если же этот сигнал и правда для чего-то реально использовали, то мы имеем глубкую жопу. Ну или надо программно отключать реакцию контроллера на этот сигнал. Следствием чего будет невозможность перезагрузки корвета без ручной перезагрузки контроллера.
А может атавизм портирования?
А что, эту игрушку откуда-то портировали? Я просто в игрушках мало разбираюсь, хотя название - runner - что-то мне напоминает.
Все может быть, даже то, что на исходной платформе по этому адресу был какой-то полезный порт. Но попасть так прицельно именно на сигнал control...
В любом случае, игрушка в таком виде как сейчас использована быть не может. Патчить надо. И сколько еще таких программ найдется, подумать страшно.
В воскресенье приделаю к контроллеру желтый светоодиод, отображающий состояние сигнала control. Чтобы больше не вляпаться в такую же ситуацию.[COLOR="Silver"]
там нельзя добавить еще один провод - сигнал выбора режима накопителя?Если же этот сигнал и правда для чего-то реально использовали, то мы имеем глубкую жопу
В смысле - сигнал на этом проводе заставит контролеер забить на сигнал Control? Это можно и без провода сделать, просто вызовом api. Только что будем делать, когда юзер нажмет кнопку Reset? Ведь тут же получим сообщение ОШИБКА ШИНЫ.
а при ресете выводы вв55 не сбросятся в ноль?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)