Адрес LDBYTE в ПЗУ это адрес входа в подпрограмму. Но Вы эту п/п-мму реально не прогоняете, а химичите, заменяя прогон этой подпрограммы лезущей в МГ-порт 8-ми разрядки, считывающей фронты и компонующей из считанных битов целый байт, на примитивное чтение очередного байта из открытого файла. Т.е в тот момент когда в регистре PC эмулируемого КР580 вдруг оказался адрес LDBYTE=C377, что было задано строчкой в Вашем конфиге, Вы неожидано прекращаете эмуляцию, считываете очередной байт из открытого файла и заносите его в эмулируемый регистр A (т.к эта подпрограмма возвращает результат в A). И вот что Вы делаете дальше это Ваш большой секрет.Сообщение от pYK
Эмулятор EMU от b2m в этом месте, зная точку выхода из LDBYTE, просто переустанавливает регистр PC на адрес точки выхода и продолжает эмуляцию прогона программы с этой точки. Просто и эффектно. И весь код, что исполняет подпрограмму LDBYTE в ПЗУ можно забить нулями или матерными фразами, это не повредит.
Ну а вот, что делаете Вы, т.к Вам неизвестна точка выхода, это большой и тщательно скрываемый Вами секрет. Могу предположить, что Вы пошли мазохистским путём, а именно продолжаете с этой точки уже не прогон, а трассировку программы. Т.е просто отслеживаете только регистр PC, трассируете и ищете команды которые меняют стек, т.е PUSH, POP, LD SP,nnnn, LD SP,HL и др. И ждёте когда стек станет ровно на 2 адреса выше того, что был в момент входа в точку LDBYTE, что означает, что прошла команда RET и произошел возврат, т.е была целиком прогнана подпрограмма LDBYTE.
Какие другие варианты узнать момент возврата из CALL LDBYTE могут быть ещё ?
- - - Добавлено - - -
Почему Вас волнует, что КООП SP580, чтобы освовободить адреса F800...FFFF для ПЗУ совместимого с РК86 решил перенести ППА клавиатуры с FF00 на F000. Они совершенно справедливо решили, что совместимость с РК86 важнее, чем совместимость с базовым вариантом, т.к для СПЕЦИАЛИСТА тогда вообше не было программ, а для РК86 были.Сообщение от zx_
Только они ещё не знали о мониторе Орлова на C800 и потому не догадались, что для совместимости достаточно совместить только входы в подпрограммы, т.е F803, F806, F809... и т.д. Остальные адреса F839...FFFF совмещать не требуется. Потому и возможно с помощью 2-х дидов получить и совместимость с РК86 и сохранить адрес порта на FF00. И тогда все системные программы РК86 (кроме программ извращенцев, что лезут внутрь ПЗУ РК86 на нестандартные входы) будут работать на СПЕЦИАЛИСТЕ.
Идеи и схемы КООП SP580 не имеют никакого отношения к РК-КНГМД, хотя если РК-КНГМД ставить на вариант железа SP580, то да, возникнет конфликт, т.к по F000 у них стоит клавиатура, а РК-КНГМД как раз использует адрес F000. Но какая проблема? Если у Вас СПЕЦИАЛИСТ по варианту SP580, так перетранслируйте РК-КНГМД на какой-нибудь другой адрес. А вообще какой смысл в варианте SP580. Для него программ гораздо меньше, его использовали единицы, да и то, только до момента пока не понимали, что совместимость с остальными пользователями важнее.




Ответить с цитированием