Пыль старых исходников
Неожиданно нашел как собирать старые исходники под новый sjasmplus - на нем стали шибко умные макросы, которые могут заменять текст внутри себя если имя входного параметра совпадает с сочетанием букв внутри макроса. Проблему решил добавлением перед параметрами макроса двойного подчеркивания: var -> __var.
Добавил вывод размеров некоторых секций, на сегодняшний день получается в целом вот такая радостная картинка:
> FX_SET 0xB512
> PROGRAM_ORG: 0x6000
> -----------------------------------------
> Code: 0x6000-0x6CA8, size: 3241
> Static: 0x6CA9-0xCFFF, size: 25431
> TILE_SET: 0x6CAA-0x87A9, size: 6912
> LANG_SET: 0x87AA-0xA4C4, size: 7451
> SCRIPT: 0xA4C5-0xA601, size: 317
> ENCOUNTER: 0xA602-0xB511, size: 3856
> FX_SET: 0xB512-0xBD85, size: 2164
> TRITONE: 0xBD86-0xC7D8, size: 2643
> [Free] 0xC7D9-0xC800, size: 39
> Font: 0xC800-0xD000, size: 2048
> Dynamic: 0xD000-0xD8CA, size: 2251
> MAP_MASK: 0xD000-0xD3FF, size: 1024
> MAP_SET: 0xD400-0xD7FF, size: 1024
> CHARS_SET: 0xD800-0xD80A, size: 11
> ITEM_ARRAY: 0xDA63-0xD80A, size: 600
> -----------------------------------------
TILE_SET - графоний, описание 192 спрайтов (конвертация с экрана 16 x 12).
LANG_SET - все текстовые сообщения, от названия ячеек и предметов до сообщений GAME OVER.
SCRIPT - базовый скрипт запуска движка
ENCOUNTER - описание энкаунтеров - скрипты поведения ячеек и предметов на воздействие игроком.
FX_SET - звуковая бибиотека
TRITONE - библиотека проигрывания мелодий на бипере плюс три мелодии от AER.
Font - шрифт 6x8, который используется для вывода текста в игре.
MAP_MASK - “тьма неизведанных областей”, не стал морочиться с битами, отвел такой же размер, как у настоящей карты.
MAP_SET - собственно карта, небольшая, 32 x 32 ячейки
CHARS_SET - описание героев, пока герой один
ITEM_ARRAY - таблица расположения предметов на карте, поддерживает максимум 100 предметов на карте, 32 уже занято, в основном стульями.
> -------- Snapshot ---------------------------------
> STATIC_BIN: 0x6000-0xCFFF, size: 28672
> DYNAMIC_BIN: 0xD000-0xD936, size: 2359
> DYNAMIC_BIN_PACK: 0xD937-0xDB4E, size: 536
> [Free] 0xDB4F-0xDFFF, size: 1201
> ---Interrupt---------------------------------------
> VECTOR: 0x00E0
> POINTER: 0x00E1
> TABLE: 0xE000-0xE100, size: 257
> [Free] 0xE101-0xE1E0, size: 224
> ROUTINE: 0xE1E1-0xE1E3, size: 3
> [Free] 0xE1E4-0xFFFF, size: 7707
> ---------------------------------------------------
STATIC_BIN - по большей части неизменяемая информация, - код и данные. Кое-что все же меняется - например есть переменная в которой запоминается каким финалом пользователь закончил предыдущий раунд игры, в зависимости от этого меняется музыка в стартовом “меню”.
DYNAMIC_BIN - изменяемая инфомрация - карта, параметры героя, предметы на карте, переменные движка.
DYNAMIC_BIN_PACK - упакованое исходное состояние изменяемой информации, чтобы не грузить игру заново например с ленты, содержимое распаковывается в DYNAMIC_BIN
Какое-то место еще затрачивается на обслуживание прерываний.
VECTOR - вектор прерываний, на самом деле 0xE0
POINTER - таблицу прерываний заполняем числом 0xE1, это будет указывать на адрес 0xE1E1 по которому располагается код ROUTINE
ROUTINE - три байта (переход на собственно программу обработки прерываний)
Таким образом остается еще где-то 7 килобайт непрерывного адресного пространства и килобайт “прерывного” :)
cell3326
]