К основному контенту

ZXEVO: Вывод спрайта в TS-CONFIG

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 HL,#200;  вносим данные о спрайте
                
LD A,10;  координата по оси Y

                LD (HL),A
                INC HL
                LD A,SPSIZ32+SPACT
                SET 0,A;    включаем нулевой бит
                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

spbufxx     LD A,SPSIZ32
                SET 0,A
                LD (HL),A
                RET

spbufyy     LD A,SPSIZ32+SPACT
                SET 0,A
                LD (HL),A
                RET

spbufx       DW 0
spbufy       DW 0


Комментарии

Популярные сообщения из этого блога

Печать спрайта в TS CONF 256 color

  TS-CONF по умолчанию имеет аппаратные спрайты и тайлы которые используют 16 цветов, однако это не значит, что нет возможности использовать спрайты в 256 цветов. Для того, чтобы вывести такой спрайт, нужно воспользоватся DMA в режиме BLT1. В этом режиме перекидываются любые данные если они не равны нулю. Рисуем спрайты любыми цветами, но нулевой цвет оставляем для фона который нужно будет вырезать. Как всегда процедура и спрайты для теста тут: SPR.TRD Ниже привожу пример процедуры:             ORG       30000              LD            HL,0; X COORDINATE            LD            BC,0; Y COORDINATE             LD            (XX),BC LD            D,#C0; ADDRESS SPRITE IN MEMORY LD            E,#10; START VIDEO PAGE CALL       PERECHET; GET NUMBER PAGE PUSH     DE POP        HL LD            DE,16 SBC         HL,DE LD            DE,(XX) ADD        HL,DE PUSH     HL POP       DE LD           (PAGETO),A LD            B,6; SPRITE SIZE X ABSCISSA LD            C,15; SPRIT

Софт для быстрого старта

Список необходимого софта для работы с  ZXEVOLUTION под Win . Некоторые программы я закачал к себе на хостинг, может это и не правильно по отношению к авторам, но лично мне так удобно, когда все лежит в одном месте. Эмулятор ZXEVOLUTION :   http://pmc-wagner.su/Unreal.rar Рисуем спрайты:   https://graphicsgale.com/us/ Конвертим спрайты для TSConfig :   http :// pmc - wagner . su/Tga2ts.rar Плагин для Total Commander работа с TRD : http :// pmc - wagner . su / INTRD 640. zip И кратко пройдемся по каждой программе: Эмулятор Unreal , настроен так, что сразу запускается в TSCONF . Жмем правый Shift + F 12 попадаем в БИОС, ставим CS RESET TO : ROM #00. Сохраняем настройки. Теперь если в системе нажать левый Shift + F 12, то вылетит обычное меню ZX - Spectrum 128, что может быть удобно, если надо запустить стандартный TRD с винды. Дальше выбираем в меню File нужный образ и наслаждаемся. В моем архиве есть тестовый TRD с примером игры под ZXEVO с исходниками под XAS