Page 1 of 1

move sprites beyond 255 x - horizontal

Posted: Fri May 28, 2021 9:34 pm
by peppe56
hi, I was wondering how I can move the sprite
"penguino" over 255 position,
I tried, but it only works on first start, can you please tell me how to do it.
this is the portion of the code affected thanks.
the code is written in cbm prg studio

; 10 SYS (2064)

*=$0801

BYTE $0E, $08, $0A, $00, $9E, $20, $28, $32, $30, $36, $34, $29, $00, $00, $00

clear = $e544


*=$3000
incbin "pinguino.bin"
incbin "dog.bin"

*=$0810

jsr clear ;print chr$(147) cancella schermo
lda #00 ;A=0
sta $d020 ;poke53280,0 (bordo)
lda #02 ;A=2
sta $d021 ;poke53281,2 (sfondo)


lda #$01 ;A=1 (sprite 0 )
sta $d015 ;53269,3 (abilita sprite 0 )


lda #$c0 ;c0=192 (192*64 = 12288)
sta $07f8 ;2040,192


lda #$90 ;A=144
sta $d000 ;poke53248,144 (sprite 0 posiz. X) pinguino
sta $d001 ;poke53249,144 (sprite 0 posiz. Y) pinguino


muovix

ldx $d000 ;X= peek(53248)
ldy $d001 ;Y= peek(53249)

goto

lda #250 ;ritardo
cmp $d012 ;raster
bne goto

inx ;X=X+1

stx $d000 ;poke53248,x
sty $d001 ;poke53249,x
bne goto

lda#$01 ;A=1
sta$d010 ;53264,1 attiva bit HIGH

jmp muovix

lda#$0 ;A=10
sta$d010 ;53264,0 attiva bit LOW

rts

Re: move sprites beyond 255 x - horizontal

Posted: Wed Jun 16, 2021 6:13 am
by MarcWalters
Basically, what you need to do is to maintain a sprite X coordinate in memory that can be translated into the VIC Sprite X low byte and high bit registers.

The simplest way would be to store sprite X in a single byte of memory and alter its value using simple inc/dec instructions.

Then:
1) Load the sprite X value into the Accumulator (rA)
2) Use ASL to double the value
3) Store rA into the VIC sprite X low byte register
4) Based on the Carry Flag status from the ASL operation, either Clear or Set the appropriate bit in the sprite X 9th bit register

The sprite will move in 2-pixel steps, but that's fine for testing the logic of your code. IIRC, many later Ocean Software games used this method.

Re: move sprites beyond 255 x - horizontal

Posted: Fri Apr 22, 2022 4:58 pm
by stacbats
Hi,

Did you manage to get it to move across the whole width of the screen (not just the MSB?). Could yo share the code?