[A83] Re: Help!
[Prev][Next][Index][Thread]
[A83] Re: Help!
I may not have seen correctly, but as fat as I can tell,
you forgot to draw (XOR) the ship's sprite again (to erase it) before you write the sprite to the new location.
With an Xor routine, you need to write once to place it, and write it once more to erase it. If you don't erase it, it leaves a trail...
--PEter-Martijn
>
> I have problems with a program I am currently making. It first draws a Line
> and some text on the screen. After that there is an animation of a tiny
> spaceship flying by. But when the ship flies by, the letters are erased(do I
> have to write the letters to the graphbuffer?), and I used Movax routine but
> the ship leaves set bits on it's way so it isn't erased, anyone know what to
> do?
> Code:
>
> .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:
> 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 %00000000
> .db %00000000
> .db %10000000
> .db %01110110
> .db %10001001
> .db %11111111
> .db %00000000
> .db %00000000
>
> ;Hannes sprite routine, XOR.
>
> 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: