Вход

Просмотр полной версии : Ассемблирование 128к sjasm



zxlogin
13.03.2025, 10:23
Здравствуйте. Как правильно ассемблировать игру в sjasm если она занимает 128к. Я пишу device zxspectrum128. А sjasm пишет что памяти занято больше чем 65536.

Dexus
13.03.2025, 13:44
Никак.
Процессору z80 доступно только 64кб.

Нужно распределять данные и код по 16к страницам, и делать менеджер, который будет переключать страницы и переносить код куда надо. Обычно в страницах только данные держат, потому что с кодом в страницах работать нетривиально. Либо перекидывать в рабочую память, либо Swap'ать туда-сюда, либо дублировать один и тот же код на разных страницах чтобы при исполнении кода из самих страниц исполнение не оказалось где-то в спрайте или еще где-то не там.

zxlogin
13.03.2025, 16:32
Я хотел дизассемблировать игру seraphima. Сохранил снапшот. Дизассемблировал. А обратно ассемблировать не получается. А снапшот занимает 128кб памяти.

zebest
13.03.2025, 18:16
ну так и в снапшоте куча страниц по 16к, это надо формат снапшота смотреть, чего\куда.
А так то zx-игры в основном дизассемблят вот этим
https://skoolkit.ca/
Есть большая куча уже дизассемблерных игр, и примеры, как делать правильно.
https://skoolkit.ca/disassemblies/

Bedazzle
13.03.2025, 23:25
Я хотел дизассемблировать игру seraphima. Сохранил снапшот. Дизассемблировал. А обратно ассемблировать не получается. А снапшот занимает 128кб памяти.


Что-то типа такого можно сотворить:
https://pastebin.com/ndhW0sKd

CityAceE
14.03.2025, 08:19
Я хотел дизассемблировать игру seraphima. Сохранил снапшот. Дизассемблировал.
Для начала нужно разобрать снепшот на составляющие:


заголовок снепшота
основную область памяти 16384-65535
несколько страниц памяти 49152-65535


И только после этого дизассемблировать каждый участок памяти по отдельности. Код игры скорее всего будет основной области программы, а в дополнительных хранится графика, музыка, текст, уровни и т.д.

Просто так дизассемблировать, чтобы потом сходу собралось то же самое, увы, не получится.

Bedazzle
17.03.2025, 16:17
Просто так дизассемблировать, чтобы потом сходу собралось то же самое, увы, не получится.

За Серафиму не скажу, но другие проекты вполне себе получается разбирать и потом собирать -почти- то же самое (небольшая разница в том, что содержал стек до останова, или в экране).
После ассемблирования - запускаем побайтную сверку, чтобы чётко следить, не порушили ли шаловливыми руками.

Как отправную точку касательно Серафимы - можно использовать чистый снапшот, который генерится скулкитом:
https://github.com/skoolkid/t2sfiles/blob/master/t2s/s/seraphima.t2s