Пыль старых исходников

Неожиданно нашел как собирать старые исходники под новый 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 килобайт непрерывного адресного пространства и килобайт “прерывного” :)

Written on February 3, 2024
[ cell3326  ]