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

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     ...

TSolitaire под TS-Conf

       Исходники к пасьянсу TSolitaire под TS-Conf можно скачать ниже по ссылке. Немного пояснений к файлам на диске: 1 - Все файлы нужно запускать в Xasme (он уже есть на диске). 2- Главный файл XASASM 1, чтобы запустить его, в Хасме жмите Shift+Caps затем L. Появится каталог в котором нужно выбрать наш файл. Жмем Shift+Caps затем A, как проассемблируется жмем R. Алилуя!!! Игра запустилась. 3 - Файл Coloda - основной массив всех карт. 4- Файд - TSCONFI2 список портов TS CONFIG. Если нужно поменять графику под другие системы, то все карты печатаются DMA как обычные спрайты (запоминаем фон, печатаем карту, двигаем ее, восстанавливаем фон). Стрелочка это аппаратный спрайт, кроме стрелки аппаратных спрайтов я не использую. Скачать: http://pmc-wagner.su/tsolitedit.trd