
Сообщение от
psndcj
основное время занимает распихивание эффектов по банкам и обработка взаимодействия между модулями... ну и всякий мелкий код - типа управление перемещениями, то есть работа с переменными...
Ну ... От этого практически не уйти ... Это и есть искусство программирования на Speccy ... Однако я тебя очень хорошо понимаю, и сам по сегодняшний день в каждом новом проекте пытаюсь применить новые способа решения подобных задач. В мучаемом мною уже два года CuberDie, я использовал макросы для заполнения банков.
В итоге код выглядит так:
Код:
;Выбираем сегмент в который мы поместим эффект (кусок) демки для будущего исполнения
;Мой "SEG" переключится на страницу 17 и установит адрес компиляции (ORG) в предыдущий для этой странице, допустим сейчас это 49152, этот адрес будет храниться в переменной "BP17.S" но из этого значения вычитается 49152, то есть размер блока для 17-ой страницы составляет "0"
SEG 17
SuperEffect_2 ;Адрес эффекта в сегменте
;Адрес компиляции останется в 49152, но компилятор будет думать что весь код помещается по адресу "FreeSpace", допустим это 35000. Этот адрес указывает на свободное место для исполнения эффектов. Допустим у нас их 10-ть. Первый уже тут лежал, в "FreeSpace" исполнился и освободил память. То есть каждый эффект будет компилироваться с учёт адреса на "FreeSpace".
PHASE FreeSpace
;Далее, собственно, эффект ... Ну типа покажем на экране мега картинку.
HALT
LD HL,22528
LD DE,22529
LD BC,767
LD (HL),L
LDIR
LD HL,MegaPicture
LD DE,16384
LD BC,6144
LDIR
WaitLinePos (16,3) ;Типа ждём музыку
LD B,3
LDIR
RET
MegaPicture IncTRD "GFX\gfx.trd","pic.c" ;Загружаем мегакартинку из TRD модуля
UNPHASE
;Далее самое главное. Пакуем то что накодили. Сейчас адрес $=49152+6912+??? короче много.
DSQ.Pack SuperEffect_2,$-SuperEffect_2
;Теперь адрес $=49152+??? вообщем теперь меньше.
EndSeg ;Теперь в "BP17.S" сохранён новый размер этого блока
Ну а распаковка становится банальна, знаешь адрес в странице, знаешь куда "FreeSpace" ...
Единственное, что нужно - следить за размером блока в странице, что бы не вылез за 16384 !
Как ты сам понимаешь, сам эффект можно хранить как отдельный файл, его инклудить между PHASE и UNPHASE ... Таким образом легко автоматизировать труд. И главное - постоянно запакованная дема до последнего битика.
А вот как такое реализовывать в СИ я не представляю. А в асме нет ограничений и можно писать практически на языке высокого уровня. Да и что над от него ? Математику, возможность в скобках получать значения из процедур. Это главное. А это всего 10%.