Re: A86: Sprites


[Prev][Next][Index][Thread]

Re: A86: Sprites



Strange...  I used the same routines, and even a PutSprite that I wrote in my
test for sprites in my Mario game, and it doesn't display the sprites...  I
used Dan Eble & James Yopp's FindPixel routine and the PutSpriteXOR that
Trent Lillehaugen posted (and it looks like you're using the same ones), but
0 into bc, pointed hl to sprite (same format as yours) and called
PutSpriteXOR and it did nothing...  Is that what's happening to you?

~Steve

In a message dated 97-09-27 11:23:20 EDT, Ahmed El-Helw writes:

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


Follow-Ups: