A83: Sprite routine problem
[Prev][Next][Index][Thread]
A83: Sprite routine problem
I am attempting to write my own sprite routine that will display a 8x16
sprite. However, when I try running the program, all I get is the x & y
axis for the graph screen and no sprite. The code is as follows.
call _clrLCDFull
ld d,48
ld e,32
ld ix,big_sprite
call _Big_Sprite
call _grbufcpy_v
loop:
call _getkey
ret nz
;Input: d-x coord, e-y coord, ix-sprite address
;Output: 8x16 XOR sprite written to 8e29h
_Big_Sprite:
ld hl,0
ld d,0
;*********Calculate addy in graphbuf********
sla e ;Do y*12
sla e
add hl,de
add hl,de
add hl,de
ld e,d
srl e ;Do x/8
srl e
srl e
add hl,de
ld de,8e29
add hl,de
ld de,00000111b
and d
cp 0 ;checks if sprite is aligned
jr z,Aligned_Sprite ;If so, goto aligned sprite bit
;********Non-aligned sprite bit starts here********
ld b,a ;Shift counter
ld c,16 ;Line counter
Line_Loop:
ld d,(ix+0)
push bc
Shift_Loop:
srl d
rr e
djnz Shift_Loop
pop bc
ld a,d ;Write line to graphbuf
xor (hl)
ld (hl),a
inc hl
ld a,e
xor (hl)
ld (hl),a
ld de,11
add hl,de
inc ix
dec c
cp 0
jr nz,Line_Loop
ret
;********Aligned sprite bit starts here********
Aligned_Sprite:
ld c,16 ;Line counter
Aligned_Loop:
ld d,(ix+0)
ld a,d
xor (hl)
ld (hl),a
ld de,12
add hl,de
inc ix
dec c
cp 0
jr nz,Aligned_Loop
ret
big_sprite:
.db 11111111b
.db 11000011b
.db 10100101b
.db 10011001b
.db 10011001b
.db 10100101b
.db 11000011b
.db 10000001b
.db 10000001b
.db 11000011b
.db 10100101b
.db 10011001b
.db 10011001b
.db 10100101b
.db 11000011b
.db 11111111b
.end
END
If someone could help me out with this, I would really appreciate it.
Thanx in advance.
P.S. If anyone could tell me how to create a side-scrolling background,
like the one used in Mega Man 83-ASM, I would be forever grateful.
--
Pizza of Hut
http://www.antishrine.sacone.com/
References: