Цитата Сообщение от 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%.