[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: