Просмотр полной версии : загрузка файлов SNA-128
Подскажите плиз, как правильнее восстанавливать регистры для файлов в формате 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
в программах иногда используют стек не совсем по назначению (для быстрого переноса данных)
и если ты сделаешь sna48 (в этот момент) то эти данные запорются.
.............
а где предполагается хранить значения регистров и кусок кода для их установки ?
в программах иногда используют стек не совсем по назначению (для быстрого переноса данных)
и если ты сделаешь sna48 (в этот момент) то эти данные запорются.
Про это в курсе, но снимок делаю эмулем (а он просто срисовывает регистры и дамп памяти). К тому же снятые снапы проверяю. Но повторюсь, вопрос про формат sna-128. Зачем там кроме SP (и его содержимого в дампе памяти), добавили содержимое регистра PC? В чем смысл? Восстановление/загрузка PC возможна лишь через ret/retn, а значит через SP. Просто избыточные данные? Но как лучше действовать? Восстанавливать значение из первого хидера +дамп или второго (что явно дольше и как то ... коряво)?
.............
а где предполагается хранить значения регистров и кусок кода для их установки ?
С этим проблем нет. Теневая область ОЗУ (лишняя память), которая на время операции открывается на месте ПЗУ.
Восстановление/загрузка 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)
Ещё JP при условии некоторой поддержки со стороны маппера памяти.
интересный вариант. Во всяком случае и SP и PC пойдут в дело.
вообще SNA128 - это же чисто эмуляторный формат, поэтому не стоит искать логику в том, как там что внутри хранится. Сохранить такой файл на немодифицированном аппаратно реале тоже не получится (состояние 7ffd не достать, он же write-only).
У меня можно :). Но тем не менее для меня основной источник SNA128 - это эмули. Сам буду записывать их лишь для сэйвов в игре.
А не должно. Там же в описании формата
Не знаю, может случайно, но в диззи5 запустился корректно. А робокоп2 нет.
Пожалуй JP универсальное решение для железного Z80. Спасибо за подсказку!
Да, в общем неплохо работает JP для загрузки PC с образов SNA-128. Не работают только снапы с ТР-Дос (и не должны). И ещё с некоторыми другими играми непонятки, но похоже это мои заморочки с INT - не стоило переходить на 60 Гц видео.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot