User Tag List

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 38

Тема: ПЗУ безопасные места

  1. #21

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    мой осциллограф теплый и ламповый (притом буквально )
    Такой (тёплый и ламповый) у меня из кабинета на утилизацию вынесли давеча...
    Заодно зачерпнув пару литров ртути...
    (я начальнику в очи заглянул - и увидел только что ему пофик как у него сотрудники тут живут...)
    Ну лады...
    До смерти как-нибудь дотянем, но неужели ни понимания, ни стыда...
    (а откуда в *опе алмазы, конечно тупо в коровьи глаза заглянул - он даже не понял о чём я )
    Было смешно...
    Ну ладно, ртуть вычерпали... Примерно литров 200 ещё под полом осталось...
    Ну дышим...
    Осциллограф тёплый, ламповый вынесли на свалку...
    Я даже не успел его толлком освоить (производственная модель, хотя такими сейчас уже не оперируют, этот был примерно 3 метра в ширину, куча задающих генераторов, но я не про этот...)
    Я про другой. Который у бати был, бытовой, обычный, хз, не обращал я тогда на модели внимания...
    Теперь-бы конечно обратил, но уже всё равно...

  2. #22

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 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. При больших изменениях, когда сдвигаются адреса некоторых важных подпрограмм, почти весь софт перестанет работать с таким образом ПЗУ.

  3. #23

    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    438
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    50 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Вообще говоря, лучше не менять ничего. Совсем.
    Это понятно.
    Хочу реализовать работу с программами для режиме Спектрума 48кб из режима CP/M на Профи. А значит нужно куда-то вставить код для возврата и взаимодействия с CP/M, нужно перехватить ввод/вывод на магнитофон и подменить его чтением/записью в файл на винчестер и т.п. Придется действовать путём установки прыжков со входа в подпрограммы ПЗУ. Но всё равно нужно где-то разместить относительно небольшой код переключение на страницу с кодом реализующие взаимодействие с CP/M.

  4. #24

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tae1980 Посмотреть сообщение
    Придется действовать путём установки прыжков со входа в подпрограммы ПЗУ. Но всё равно нужно где-то разместить относительно небольшой код переключение на страницу с кодом реализующие взаимодействие с CP/M.
    нет ну
    когда шина стабильная
    то вектор прерывания всегда считывается с одного адреса (2 байта)
    так же начало вектора прерываний только по адресам кратным $100

    ТОЕСТЬ
    оставляем 2 байта с $FF в нужном месте
    и можем использовать 255 остальных байта из этой "256 байтной страницы"

    ну а таких целых 4 39xx 3Axx 3Bxx 3Cxx

    если пзу позволяет

    то сделать несколько вариантов с размещением в разных местах
    чтоб если не работает один
    пробовать другой

    и по крайней мере
    софт который юзает пзу для вектора прерываний
    падать уже не будет
    Последний раз редактировалось NEO SPECTRUMAN; 20.02.2020 в 04:24.

  5. #25

    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    438
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    50 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    NEO SPECTRUMAN, на первом этапе я вообще не хотел трогать прерывание.
    Для работы CP/M нужны первые 255 байт и часть адресов в конце. Планирую реализовать переключение на страницу с кодом CP/M с адресов #C000, в ней производить подмену первых 256 байт и последующие необходимые действия (нужны ещё будут буфера для операций чтения/записи), по окончанию восстанавливаем целостность ПЗУ.
    Вот сам подобные переход планировался во время операций чтения/записи, для чего нужно перехватывать обращения к профильным подпрограммам ПЗУ. По сути вставить "JP NNNN" на входе в подпрограммы на кусок кода который переключит страницу и сделает переход на подпрограмму обработчик.
    Вмешательство в ПЗУ минимальное. Из минусов возврат в CP/M можно будет реализовать только в момент работы с магнитофоном. В этом случае должно открываться окно позволяющее выбрать файл для загрузки/записи из которого уже можно вернуть в CP/M.

  6. #26

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tae1980 Посмотреть сообщение
    на первом этапе я вообще не хотел трогать прерывание.
    а к чему здесь прерывания?
    я говорю про свободное место которое можно занять
    и про не свободное, которое лежит среди свободного, которое занемать низя

  7. #27

    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    438
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    50 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а к чему здесь прерывания?
    Да, действительно. Что-то я не того.
    Видно наложились два потока информации. Всё думаю как можно реализовать возврат в CP/M по какой либо комбинации клавиш, у Профи часто ИВМ клава, да и расшиерный кнопки дублируются комбинациями на обычной клавиатуре. Как получу первые положительные результаты, думаю всё таки внести незначительные правки в подпрограмму ПЗУ опроса клавы и задать нужные комбинации. Работать конечно будет только если запущенная программа использует профильные подпрограммы ПЗУ, но уже что-то
    Последний раз редактировалось tae1980; 21.02.2020 в 11:07.

  8. #28

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tae1980 Посмотреть сообщение
    правки в подпрограмму ПЗУ опроса клавы и задать нужные комбинации
    а профи нету nmi на кнопке?

  9. #29

    Регистрация
    09.09.2018
    Адрес
    г. Саратов
    Сообщений
    438
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    50 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а профи нету nmi на кнопке?
    Не понял. Не знаком с понятием "nmi". Если это магик кнопка. То есть, но на моём старом Профике не была выведена. Но что бы она для данного случая корректно работала, если не ошибаюсь, нужно править ПЗУ уже самого Профика. В работе CP/M она ни как не участвует.

  10. #30

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tae1980 Посмотреть сообщение
    Хочу реализовать работу с программами для режиме Спектрума 48кб из режима CP/M на Профи. А значит нужно куда-то вставить код для возврата и взаимодействия с CP/M, нужно перехватить ввод/вывод на магнитофон и подменить его чтением/записью в файл на винчестер и т.п.
    Для этого не обязательно менять ПЗУ. Тем более, что изменённое ПЗУ не каждый потенциальный пользователь твоей системы сможет и захочет прошить.

    Почему бы не воспользоваться приёмами, типичными для "расширений Бейсика" типа Beta-Basic, Laser-Basic или ПЗУ Interface 1?

    Общий принцип там такой, что подменяется содержимое адреса возврата при ошибке (два байта, находящиеся по адресу, который хранится в системной переменной ERR_SP). Твоя подпрограмма обработки ошибок смотрит, что за ошибка была. Если это ошибка синтаксиса (C Nonsense in BASIC, 10:1) - то анализируется содержимое бейсик-программы, вызвавшей ошибку (для этого используется системная переменная, содержащая адрес следующего интерпретируемого символа - забыл название). Если содержимое бейсик-программы соответствует реализованным тобой расширениям - то это содержимое обрабатывается твоим кодом (происходит переход в CP/M и т.д.), в противном случае управление передаётся обратно бейсику, чтобы тот выругался по поводу NONSENSE.

    Когда отработали твои программы обращения к винчестеру и т.д. - то указатель на интерпретируемый символ передвигается туда, где, с точки зрения бейсика, ошибок больше быть не должно. И происходит прыжок в соответствующую точку ПЗУ, как будто никакой ошибки синтаксиса не было. Исполнение программы продолжается бейсиком.

    В такой системе менять содержимое ПЗУ вообще не нужно.

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 76
    Последнее: 22.08.2019, 21:33
  2. Спектрумовские места в СПб
    от _Andrey в разделе Разный софт
    Ответов: 4
    Последнее: 03.11.2009, 20:34

Ваши права

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