Re: A86: Re: PutSprite
[Prev][Next][Index][Thread]
Re: A86: Re: PutSprite
Try this routine..
Matt S. made this XOR, but you can de-Xorisize it by replacing every XOR to
an Or.. that'll do the trick [ex. if it says xor a, change to or a..]
-Ahmed
ahmedre@bellsouth.net
http://asm8x.home.ml.org
;------------------
; Sprite Routine [XOR]
;------------------
;------------------
;This Routine was converted by AVD from Movax's 83
;------------------
;hl = image
;a = x coord
;e = y coord
PutSprite:
push hl ; Save sprite address
;лллл Calculate the address in graphbuf лллл
ld hl,0 ; Do y*12
ld d,0
ex de,hl
add hl,hl
add hl,hl
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,$FC00
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,15 ; 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) ; xor=erase/blit
ld (hl),a
inc de
push bc
ld bc,16
add hl,bc
pop bc
djnz ALOP1
DONE1:
ret
;мллллллллллллм SPRITE
мллллллллллллллллллллллллллллллллллллллллллллллллллллллл
-----Original Message-----
From: David Phillips <electrum@tfs.net>
To: assembly-86@lists.ticalc.org <assembly-86@lists.ticalc.org>
Date: Monday, June 01, 1998 6:21 PM
Subject: Re: A86: Re: PutSprite
>
>No offense, but I think he wants strictly 8x8, not a variable sized
>routine. I am also interested in a strictly 8x8 routine, since it would be
>faster and not require storing the size with the data.
>
>At 05:27 PM 6/1/98 -0400, you wrote:
>>
>>>What's the best, most efficient way to draw an 8x8 sprite a given
location
>>on
>>>the screen? (Not XORing it to the screen)
>>
>>I posted a PutSprite routine earlier for 8 by X or 16 by X sprites on May
>>7th. Check back on your messages folder
>>
>>
>
>
>// David Phillips
>// mailto:electrum@tfs.net
>// AIM: electrum32
>
Follow-Ups: