A86: Sprites
[Prev][Next][Index][Thread]
A86: Sprites
Hello Guys - I wonder if anyone can tell me what is wrong w/this ? I
stored 0 into landy and 0 into landx as a test, but the only way it works
is ld a,0 ld b,a , same w/c. Why ? Here is the part of the source ...
Please help if you can!
------------------------
dispLander:
ld a,(landy)
ld b,a
ld a,(landx)
ld c,a
ld hl,SHIP
call PutSpriteXOR
ret
---------------------------
And here are the sprite routines and the sprite.
-----------------------------
PutSpriteXOR: ; Puts a sprite stored at (HL) at B,C
push bc ; save BC
push de ; save DE
push hl ; save HL
push hl ; save HL
ld e,b
ld d,c
call FindPixel ; NOTE i did not include the FindPixel Routine..
;its the one found on this list earlier!
ld de,$FC00 ; DE points to VID MEM
ex de,hl ; DE = VID MEM + PIXEL LOC
pop hl ; HL = PIC LOC
ld b,(hl) ; get first byte from PIC LOC (width)
inc hl ; HL = next byte in PIC LOCATION
ld c,(hl) ; get second byte from PIC LOC (height)
inc hl ; HL = START OF PIC
push hl ; save HL
pop ix ; IX = START OF PIC
ex de,hl ; HL = VID MEM + PIXEK LOC DE = START OF
PIC
PS_NewRow:
push bc ; save BC
ld d,(ix) ; D = next byte of PIC
inc ix ; IX points to next byte
push af ; save AF
push hl ; save HL
PS_NewCol:
rl d ; Rotate Left D
ld e,a ; e = a
jr nc,PS_NoPixel ; if No Carry then goto NoPixel
;************ can be OR or XOR or AND or whatever :) *****
xor (hl) ; a = a or (hl)
;***************************************************
ld (hl),a ; hl = hl or a (basically)
jr PS_NextPixel
PS_NoPixel:
cpl
and (hl)
ld (hl),a
PS_NextPixel:
ld a,e ; get A back
rrca ; rotate right circular
jr nc,PS_SameByte ; if no carry then same byte
inc hl ; else HL points to next byte in PIC
PS_SameByte:
djnz PS_NewCol ; go to next column
pop hl
pop af
ld de,16
add hl,de
pop bc
dec c
jr nz,PS_NewRow
pop hl
pop de
pop bc
ret
FindPixel:
ld a,e
and $07 ; a = bit offset
ld b,0
ld c,a
ld hl,FP_Bits
add hl,bc
ld b,(hl) ; b = bitmask for (hl)
;56 t-states up to this point
ld a,d
rlca ; multiply y by 4
rlca
ld l,a
ld h,0
add hl,hl ; multiply y by 4 again
add hl,hl ; because there are 16 bytes in a pixel row
ld a,e
rrca ; divide x by 8 (8 pixels/byte)
rrca
rrca
and $0F
ld c,a
ld a,b ; now a = bitmask for (hl)
ld b,$FC
add hl,bc ; hl -> byte in LCD memory
;150 t-states up to this point
ret
FP_Bits: .db $80,$40,$20,$10,$08,$04,$02,$01
;-----------------------------------------------------
SHIP:
.db 8,8
.db %00011000
.db %00100100
.db %00100100
.db %00100100
.db %01000010
.db %01011010
.db %11100111
.db %00011000
------------------------------------
Thanks.
Ahmed El-Helw
ahmed3@worldnet.att.net
http://ahmed1.home.ml.org
The Ultimate TI-83 Site!
http://asm86.home.ml.org
The Ultimate TI-86 ASM Site
ICQ : 3350394
__________________________
Member of The TI-Files!
http://ti-files.home.ml.org
Member of KickASM
http://kickasm.home.ml.org
References: