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: