Routine de Movax
Voici le code :
; Z80 Sprite83 Movax
; Sprite xor routine v1.0
; Coded by Hannes Edfeldt in 1997
; This routine uses xor to draw the sprite, therefore
; you can erase the sprite by just drawing it again at
; the same x and y coordinates. See xordemo.z80 for an
; example of how to use this routine.
; Feel free to use this routine in your own productions
; as long as you give me some credit.
; This file should of course be viewed in a DOS texteditor ;)
; Hannes Edfeldt -+- movax@algonet.se -+- http://www.algonet.se/~movax
; SPRXOR
; Xor 8x8 sprite þ a=x, e=y, bc=sprite address
SPRXOR:
push bc ; Save sprite address
;==== Calculate the address in graphbuf ====
ld hl,0 ; Do y*12
ld d,0
add hl,de
add hl,de
add hl,de
add hl,hl
add hl,hl
ld d,0 ; Do x/8
ld e,a
srl e
srl e
srl e
add hl,de
ld de,8e29h
add hl,de ; Add address to graphbuf
ld b,00000111b ; Get the remainder of x/8
and b
cp 0 ; Is this sprite aligned to 8*n,y?
jp z,ALIGN
;==== Non aligned sprite blit starts here ====
pop ix ; ix->sprite
ld d,a ; d=how many bits to shift each line
ld e,8 ; Line loop
LILOP: ld b,(ix+0) ; Get sprite data
ld c,0 ; Shift loop
push de
SHLOP: srl b
rr c
dec d
jp nz,SHLOP
pop de
ld a,b ; Write line to graphbuf
xor (hl)
ld (hl),a
inc hl
ld a,c
xor (hl)
ld (hl),a
ld bc,11 ; Calculate next line address
add hl,bc
inc ix ; Inc spritepointer
dec e
jp nz,LILOP ; Next line
jp DONE1
;==== Aligned sprite blit starts here ====
ALIGN: ; Blit an aligned sprite to graphbuf
pop de ; de->sprite
ld b,8
ALOP1: ld a,(de)
xor (hl)
ld (hl),a
inc de
push bc
ld bc,12
add hl,bc
pop bc
djnz ALOP1
DONE1:
ret
; SPRXOR
; Z80 Sprite83 movax