Вектор-06Ц/Вывод спрайта
Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0. |
(Права на описание — Emuverse, права на фрагменты кода — см. в шапке фрагмента.)
Вывод спрайта с маской
https://zx-pk.ru/threads/29144-programmirovanie-na-assemblere.html?p=1163800&viewfull=1#post1163800
Один план, с использованием стека:
; by ivagor ;SP - маска, байт спрайта, маска, байт спрайта, ... ;HL - VRAM pop b\ mov a,m\ ana c\ ora b\ mov m,a\ dcr l ;12+8+4+4+8+8=44 такта/байт
Один план, без использования стека:
; by ivagor ;HL - маска, байт спрайта, маска, байт спрайта, ... ;DE - VRAM ldax d\ ana m\ inx h\ ora m\ inx h\ stax d\ dcr e ;8+8+8+8+8+8+8=56 тактов/байт
https://zx-pk.ru/threads/29144-programmirovanie-na-assemblere.html?p=1163804&viewfull=1#post1163804
Один битплан, маска и пиксели отдельно — можно использовать для нескольких битпланов, каждый раз возвращая маску на начало:
; by ivagor ;HL - маска ;DE - спрайт ;BC - VRAM ldax b\ ana m\ inx h\ xchg\ ora m\ inx h\ xchg\ stax b\ dcr c ;8+8+8+4+8+8+4+8+8=64 такта/байт
В два битплана стеком:
; by ivagor ;SP - маска, байт спрайта, байт спрайта, маска, байт спрайта, байт спрайта, ... ;HL и DE - VRAM ;начало pop b\ mov a,m\ ana c\ ora b\ mov m,a\ dcr l ldax d\ ana c\ pop b\ ora c\ stax d\ dcr e ;установившийся режим dcx sp\ pop b\ mov a,m\ ana c\ ora b\ mov m,a\ dcr l ldax d\ ana c\ pop b\ ora c\ stax d\ dcr e ;(12+12+8+4+4+8+8)+(8+4+12+4+8+8)=100 тактов/2 байта=50 тактов/байт
https://zx-pk.ru/threads/29144-programmirovanie-na-assemblere.html?p=1163822&viewfull=1#post1163822
В два битплана стеком, совместимо с методом Медноногова:
; by ivagor ;SP - маска, байт спрайта, байт спрайта, маска, байт спрайта, байт спрайта, ... ;HL и DE - VRAM pop b\ mov a,m\ ana c\ ora b\ mov m,a\ dcr l ldax d\ ana c\ pop b\ ora c\ stax d\ dcr e ;12+8+4+4+8+8+8+4+12+4+8+8=88 тактов mov a,b\ sta $+10\ ana m\ pop b\ ora c\ mov m,a\ dcr l ldax d\ ani 0\ ora b\ stax d\ dcr e ;8+16+8+12+4+8+8+8+8+4+8+8=100 тактов ;(88+100)/4=47 тактов/байт