Так ведь можно весь код, который не относится к работе с экранами, раскидать по нужным банкам и вызывать. К примеру вот так
Скрытый текст
Код:;--------этот кусок всегда в основной банке
FUNCTION
LD B,1 ;это номер банки с функцией
LD HL,FUNCTION_PG1 ;адрес тела функции
CALL PAGE_PROC ;вызов функции
RET
;...........
PAGE 1
;--------этот кусок будет уже банке 1
FUNCTION_PG1
;тут основной код функции
ret
;---------------------------
PAGE 2
;эта функция в основной памяти
;временно подключает нужную банку и запускает в ней функцию
PAGE_PROC
LD (PROC_ADDR+1),HL ;запишем адрес в CALL
LD A,(PORT_COPY) ;текущая конфигурация порта
PUSH AF ;сохраним её
LD A,B
CALL BIND_BUF_A ;подключим банку с функцией
PROC_ADDR CALL 0 ;вызовем её
POP AF ;восстановим состояние порта
CALL BIND_BUF_A
RET
;---------------------------
PAGE 2
;эта функция в основной памяти
;Бинд буффера A
BIND_BUF_A
DI
LD B,A
LD A,(PORT_COPY)
AND 248
OR B
LD (PORT_COPY),A
LD BC,#7FFD
OUT (C),A
EI
RET
[свернуть]
или я чего-то не понял насчёт откусывания памяти?
пс: я вчера бухой писал, так что если чего не обращайте внимания
чуть чуть по тактам побыстрее(можно придумать что-то ещё быстрее) можно так, вместо call использовать jp
Скрытый текст
Код:;--------в основной банке
FUNCTION
LD B,1 ;это номер банки с функцией
LD HL,FUNCTION_INPG;указатель на адрес тела функции
CALL PAGE_PROC ;вызов функции
RET
FUNCTION_INPG DEFW FUNCTION_PG1
;...........
PAGE 1
FUNCTION_PG1
;тут основной код функции
JP RET_ADDR
;---------------------------
PAGE 2
PAGE_PROC
LD A,(PORT_COPY) ;текущая конфигурация порта
PUSH AF ;сохраним её
LD A,B
CALL BIND_BUF_A ;подключим банку с функцией
JP (HL) ;вызовем её
RET_ADDR POP AF ;восстановим состояние порта
CALL BIND_BUF_A
RET
[свернуть]

