ZXEVO: Вывод спрайта в TS-CONFIG
Процедура вывода спрайта на ZXEVO под TSCONFIG адаптированная для отладчика XAS.
Файл с портами TSCONFI2 на диске тут. Также на диске есть пример кода вывода спрайта SPRITE.XAS и тестовый ковер со спрайтами I.C
LTEXT “TSCONFI2”; подгружаем файл со списком портов
ORG 26000
Sprite LD BC,SGPAGE; страница
памяти где находятся ваши спрайты
LD A,#C0
OUT (C),A
LD BC,FMADDR
LD A,FMEN
OUT (C),A
; в
адрес #200 кидаем шесть байт данных спрайта,
; Y,SIZE кратно
8-ми, X,SIZE кратно
8-ми, в BC выбираем номер нашего спрайта, они идут по порядку один за другим
LD HL,#200; вносим
данные о спрайте
LD A,10; координата
по оси Y
LD (HL),A
INC HL
LD (HL),SPSIZ32+SPACT; размер спрайта по X от 8 до 64 pix
INC HL
LD A,20; координата
по оси X
LD (HL),A
INC HL
LD (HL),SPSIZ32; размер спрайта по Y от 8 до 64 pix
INC HL
LD BC,00; номер
спрайта в вашем ковре 512х512
LD A,(BC)
LD (HL),A
INC HL
LD (HL),#F0
LD BC,TSCONFI; выводим
спрайты на экран
LD A,TSUSEN
OUT (C),A
RET
Как задавать координаты от 0 до 256 понятно, а если надо задать больше?
Если в байте в котором указывается размер спрайта, включить нулевой бит SET 0,A то координаты будут задаваться со значением + 256 пикселей. Например у вас по Y задана координата 100, вы включаете нулевой бит в байте размера спрайта и он выводиться в координате 100+256=356. Это функция нужна, если ваше разрешение свыше стандартного 256х192. Также эта функция полезна, если нужно плавно вывести спрайт на экран с левого и верхнего края, спрайт пройдя 512 пикселей возвращается в нулевую точку плавным появлением из-за края экрана.
LD A,10; координата по оси Y
LD (HL),A
INC HL
LD (HL),A; размер спрайта по X от 8 до 64 pix
И пример процедуры с выводом спрайта в координатах 512х512 пикселей.
Sprite LD HL,100; координата X
LD BC,100; координата Y
LD A,0; расчет координаты X
LD (spbufxx),A
LD A,H
CP 0
JR Z,sp1
PUSH BC
LD BC,256
SBC HL,BC
POP BC
LD A,1
LD (spbufx),A
JR sp1
Sp1 LD E,L; расчет координаты Y
PUSH BC
POP HL
LD A,0
LD (spbufy),A
LD A,H
CP 0
JR Z,sp2
PUSH BC
LD BC,256
SBC HL,BC
POP BC
LD A,1
LD (spbufy),A
JR SP2
Sp2 LD D,L
LD BC,SGPAGE; страница памяти где находятся ваши спрайты
LD A,#C0
OUT (C),A
LD BC,FMADDR
LD A,FMEN
OUT (C),A
; в адрес #200 кидаем шесть байт данных спрайта,
; Y,SIZE кратно 8-ми, X,SIZE кратно 8-ми, в BC выбираем номер нашего спрайта, они идут по порядку один за другим
LD HL,#200; вносим данные о спрайте
LD (HL),D;----------COORD Y
INC HL
LD A,SPSIZ32+SPACT; размер спрайта по X от 8 до 64 pix
RES 0,A
LD (HL),A
LD A,(spbufy); проверяем с какого края печатать лево или право
CP 1
CALL Z,spbufyy
INC HL
LD (HL),E; координата по оси X
INC HL
LD A,SPSIZ32; размер спрайта по Y от 8 до 64 pix
RES 0,A
LD (HL),A
LD A,(spbufx); проверяем с какого края печатать лево или право
CP 1
CALL Z,spbufxx
INC HL
LD A,00; номер спрайта в вашем ковре 512х512
LD (HL),A
INC HL
LD (HL),#F0
LD BC,TSCONFI; выводим спрайты на экран
LD A,TSUSEN
OUT (C),A
RET
SET 0,A
LD (HL),A
RET
spbufyy LD A,SPSIZ32+SPACT
SET 0,A
LD (HL),A
spbufx DW 0
spbufy DW 0
Комментарии
Отправить комментарий