[A83] Re: A Routine To Display Big Sprites
[Prev][Next][Index][Thread]
[A83] Re: A Routine To Display Big Sprites
My suggestion would be to modify the sprite routine, so that it reads four
pieces of 8x8 (from the 16x16 sprite) and displays them.
>
> Does anybody has a routine to display 16x16 sprites, especially a XOR
> routine. Movax's routine is only for 8x8. Or do I have to program it for ION
> using, ION putbigsprite.
> I have also a problem with text. When I display text on the screen and after
> that I put a moving 8x8 sprite on the screen, the text dissapears.
> Also when I displayed an 8x8 moving sprite, using Movax routine, the
> movement was terribly slow, I could do it faster in basic, I used this
> code(don't look at the crappy sprite:
> .NOLIST ;Necessary stuff,
> #define end .end
> #define END .end
> #define equ .equ
> #define EQU .equ
> #include "ti83asm.inc"
> #include "tokens.inc"
> .LIST
> #DEFINE shipx 8265h
> #DEFINE shipy 8266h
>
> KClear .equ 191
> .org 9327h ; Begin
> progstart:
> call _clrLCDFull
> ld hl,256*0+1 ; in the routine
> ld (pencol),hl
> ld hl,nameandversion
> call _vputs
> ld b,0
> ld c,56
> ld d,94
> ld e,56
> ld h,1
> call _Iline
> ld a,0
> ld (shipx),a
> ld a,20
> ld (shipy),a
> clearloop:
> ld a,0ffh
> out (1),a
> ld a, 0fdh
> out (1),a
> in a,(1)
> cp KClear
> jp z, startgame
> flyship:
> call drawship
> ld a,(shipx)
> inc a
> ld (shipx),a
> call drawship
> jr clearloop
> drawship:
> ld a,(shipy)
> ld e,a
> ld a,(shipx)
> ld bc,ship ;Load sprite name to bc
> call SPRXOR ;Call movax' Sprite Routine
> call _grbufcpy_v
> ret
>
>
> startgame:
> ret
> ship:
> .db %0000000000000000
> .db %0000000000000000
> .db %0100000001000000
> .db %0011101100111011
> .db %0100010001000100
> .db %0111111101111111
> .db %0000000000000000
> .db %0000000000000000
> 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
>
> nameandversion:
> .db "Ultimate Bomber v 0.11",0
>
> .end
> END
>
> ------------------------------------------------
> "If I have seen farther than others, it is because I was standing on the
> shoulders of giants." - scientist Sir Isaac Newton, in a letter to his
> colleague Robert Hooke, February 1676.
>
>
>
>
> _________________________________________________________________
> Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
>
>
>
References: