Цитата Сообщение от tae1980 Посмотреть сообщение
Возникает пара вопросов:
2. В какие места ПЗУ наиболее безопасно вносить изменения для сохранение совместимости? А может есть места которые лучше не трогать? Или таких мест не существует?
Вообще говоря, лучше не менять ничего. Совсем. Вот неполный перечень граблей, на которые я и другие в своё время наступали:
1) Клавиатура, таблицы соответствия скан-кодов буквам ("BHY65TG..."). Эту таблицу перемещать или изменять нельзя. Некоторые программы её используют, при этом не используя код опроса клавиатуры из ПЗУ;
2) "Свободное место" между кодом Бейсика и знакогенератором. Многие программы ставят на эти адреса регистр I, предполагая, что там записаны FFы, и ставя на адрес FFFF обработчик прерываний IM 2. Если по этим адресам в ПЗУ находятся не FFы - то первое же прерывание отправляет программу в отключку;
3) Код программ рисования линий, точкек и окружностей. Мне встречалась защита, которая помещает зашифрованный код программы в экранную область, затем вызывает подпрограмму "LINE" рисования линии в режиме OVER 1, тем самым модифицируя строго определённые части зашифрованного кода обратимым образом. В моём случае алгоритм LINE не менялся, так что линия рисовалась правильно... Только вот регистр R после отработки программы имел другое значение, в результате чего дальнейшая расшифровка программы шла неверно, и происходил полный сбой;
4) Коды подпрограмм калькулятора. Я в них исправлял ошибки, найденные Логаном и О-Харой, а также исправил "самозатирание" ПЗУ одной из таких подпрограмм. Всё бы ничего, но предательский регистр R, на который полагаются защиты, снова имел не то значение, что нужно;
5) Код обработчика NMI. Некоторые защиты его проверяют и, если он нестандартный - отказываются работать (это защита от разнообразных мониторов-отладчиков на основе NMI).

Были и другие сюрпризы, сейчас уже всех не вспомнишь. Но общий вывод такой, что какими бы малыми и безобидными ни были изменения ПЗУ, они могут привести к неработоспособности некоторых программ. И тут не важно, кто виноват - автор такой программы или автор изменений ПЗУ. Факт налицо - с изменениями ПЗУ программа не работает, без изменений - работает. Хочешь запускать программу - откати изменения ПЗУ назад.
Цитата Сообщение от tae1980 Посмотреть сообщение
3. Есть ли декомпилирование ПЗУ в виде код в txt, asm или аналогичных файлах?
Зачем? Для понимания работы ПЗУ это не нужно. Есть книга Логана и Хары. Чтобы компилировать ПЗУ назад? А зачем? При малых изменениях в этом нет смысла, достаточно просто изменить содержимое двоичного файла-образа в нужных местах. Смотри мою тему про BOGOBASIC. При больших изменениях, когда сдвигаются адреса некоторых важных подпрограмм, почти весь софт перестанет работать с таким образом ПЗУ.