PDA

Просмотр полной версии : загрузка файлов SNA-128



coffee
29.03.2021, 18:20
Подскажите плиз, как правильнее восстанавливать регистры для файлов в формате SNA-128 в железном ZX с Z80 на борту (не FPGA или эмуль!). Для SNA-48 все ясно, хидер из 27 байт впереди файла содержит регистры Z80 и прочие настройки. Но в SNA-128 добавлены еще 4 байта: PC (2), port 0x7ffd setting (1), TR-DOS rom paged (1). Вот насчет PC у меня вопрос...
Насколько я знаю, Z80 не умеет загружать PC напрямую (в отличии от эмулей и FPGA) - надо использовать SP и команды ret/retn. Но тогда выходит что это лишняя сущность: PC и так загружается корректно без этих 2 байт по первому хидеру (там есть SP, а сам адрес в дампе памяти). Я проверил - вроде работает и без PC, но возникает вопрос: как сделать правильнее, чтобы избежать возможных глюков? Вообще зачем он?
Если можно то черкните кусок кода для этого.
Спасибо!

Описание форматов брал отсюда:
https://worldofspectrum.org/faq/reference/formats.htm

goodboy
29.03.2021, 20:17
в программах иногда используют стек не совсем по назначению (для быстрого переноса данных)
и если ты сделаешь sna48 (в этот момент) то эти данные запорются.
.............
а где предполагается хранить значения регистров и кусок кода для их установки ?

coffee
29.03.2021, 21:36
в программах иногда используют стек не совсем по назначению (для быстрого переноса данных)
и если ты сделаешь sna48 (в этот момент) то эти данные запорются.
Про это в курсе, но снимок делаю эмулем (а он просто срисовывает регистры и дамп памяти). К тому же снятые снапы проверяю. Но повторюсь, вопрос про формат sna-128. Зачем там кроме SP (и его содержимого в дампе памяти), добавили содержимое регистра PC? В чем смысл? Восстановление/загрузка PC возможна лишь через ret/retn, а значит через SP. Просто избыточные данные? Но как лучше действовать? Восстанавливать значение из первого хидера +дамп или второго (что явно дольше и как то ... коряво)?
.............

а где предполагается хранить значения регистров и кусок кода для их установки ?
С этим проблем нет. Теневая область ОЗУ (лишняя память), которая на время операции открывается на месте ПЗУ.

Eltaron
29.03.2021, 21:53
Восстановление/загрузка PC возможна лишь через ret/retn
Ещё JP при условии некоторой поддержки со стороны маппера памяти.
Но вообще SNA128 - это же чисто эмуляторный формат, поэтому не стоит искать логику в том, как там что внутри хранится. Сохранить такой файл на немодифицированном аппаратно реале тоже не получится (состояние 7ffd не достать, он же write-only).

- - - Добавлено - - -


Я проверил - вроде работает и без PC
А не должно. Там же в описании формата


fixes the problem with the PC being pushed onto the stack - now it is located in an extra variable in the file (and is not pushed onto the stack at all)

coffee
29.03.2021, 23:13
Ещё JP при условии некоторой поддержки со стороны маппера памяти.
интересный вариант. Во всяком случае и SP и PC пойдут в дело.

вообще SNA128 - это же чисто эмуляторный формат, поэтому не стоит искать логику в том, как там что внутри хранится. Сохранить такой файл на немодифицированном аппаратно реале тоже не получится (состояние 7ffd не достать, он же write-only).
У меня можно :). Но тем не менее для меня основной источник SNA128 - это эмули. Сам буду записывать их лишь для сэйвов в игре.

А не должно. Там же в описании формата
Не знаю, может случайно, но в диззи5 запустился корректно. А робокоп2 нет.
Пожалуй JP универсальное решение для железного Z80. Спасибо за подсказку!

coffee
30.03.2021, 20:42
Да, в общем неплохо работает JP для загрузки PC с образов SNA-128. Не работают только снапы с ТР-Дос (и не должны). И ещё с некоторыми другими играми непонятки, но похоже это мои заморочки с INT - не стоило переходить на 60 Гц видео.