Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > Updating sprite X msb
2016-03-26 15:50
ChristopherJam

Registered: Aug 2004
Posts: 1409
Updating sprite X msb

Slack bastard time. Recs for updating $d010 if I've got an eight bit x-position in my object table, but all my sprites are offset a constant number of pixels to the right? Current draft is this:
	clc
	lda mobX,x
	adc xoffset
	sta $d000,y
	lda #0
	adc #255
	eor #255
	eor $d010
	and hibit,x
	eor $d010
	sta $d010

(x is both object ID and sprite number (I'll change how I index mobX later), y is double the sprite number. hibit contains 2**i)
 
... 4 posts hidden. Click here to view all posts....
 
2016-03-26 18:43
The Human Code Machine

Registered: Sep 2005
Posts: 112
It's faster to unroll the code:

lda mobX
clc
adc xoffset
sta $d000
ror xhi
lda mobX+1
clc
adc xoffset
sta $d002
ror xhi

and so on

lda xhi
sta $d010
2016-03-26 18:49
Rastah Bar
Account closed

Registered: Oct 2012
Posts: 336
Quoting The Human Code Machine
It's faster to unroll the code:

lda mobX
clc
adc xoffset
sta $d000
ror xhi
lda mobX+1
clc
adc xoffset
sta $d002
ror xhi

and so on

lda xhi
sta $d010


Nice! Yes, and you can use zeropage for xhi :-)
2016-03-26 18:55
The Human Code Machine

Registered: Sep 2005
Posts: 112
Yes, but it's only one cycle faster.
2016-03-26 20:25
ChristopherJam

Registered: Aug 2004
Posts: 1409
Quoting Color Bar
When you update all sprites in one loop, you may update $d010 as follows..


Ah yes, I should probably have mentioned that my use case is a multiplexer component; for the first eight sprites I will indeed shift the bits in one by one.
2016-03-27 07:46
Hoogo

Registered: Jun 2002
Posts: 105
I wonder if that multiplexer reuses the sprites in order, so that for every call y will increased by 2 and start with 0 again? Not sure if that can make a difference, just thinking...
I guess offset is variable and not available when mobX is generated?
And are you already in need of rastertime, or is it just about making this a little more pretty?
	clc
	lda mobX,x
	adc xoffset
	sta $d000,y
	lda $d010
	bcc clear
	ora hibit,y
	bcs store
clear	and hibit+1,y
store	sta $d010
hibit	!by 1, 255-1, 2, 255-2, 4, 255-4...
2016-03-27 08:26
Hein

Registered: Apr 2004
Posts: 954
8 pieces of code to jump to, all other stuff is done outside multiplexer. Y holds the current list index.

    lax (sprite_index_lo),y
    lda sprite_y,x
    sta $d001
    lda sprite_x,x
    sta $d000
    lda sprite_a,x
    sta screen+$3f8
    cmp sprite_x_msb,x	;$00 if cleared, $ff if set
    lda $d010
    and #%11111110
    bcs +
    ora #%00000001
+   sta $d010
    lda sprite_c,x
    sta $d027
2016-03-27 08:39
Rastah Bar
Account closed

Registered: Oct 2012
Posts: 336
2016-03-27 09:59
Rastah Bar
Account closed

Registered: Oct 2012
Posts: 336
Quoting Hoogo
I wonder if that multiplexer reuses the sprites in order, so that for every call y will increased by 2 and start with 0 again? Not sure if that can make a difference, just thinking...



If you can use a separate piece of code for each sprite, maybe you could do (for example for sprite 3)?
clc
lda mobX+3
adc xoffset
sta $d006
lda $d010
and #f7 ; clear first
bcc store
ora #$08
store
sta $d010
2016-03-27 12:23
Skate

Registered: Jul 2003
Posts: 494
Quote: Quoting Hoogo
I wonder if that multiplexer reuses the sprites in order, so that for every call y will increased by 2 and start with 0 again? Not sure if that can make a difference, just thinking...



If you can use a separate piece of code for each sprite, maybe you could do (for example for sprite 3)?
clc
lda mobX+3
adc xoffset
sta $d006
lda $d010
and #f7 ; clear first
bcc store
ora #$08
store
sta $d010


I remember writing a macro like this one, using sprite number as a parameter and generating these and/or values according to the number. this way code looks fine, things speed up, memory usage sucx, speed rocx. :)
2016-03-27 17:50
Rastah Bar
Account closed

Registered: Oct 2012
Posts: 336
Quoting Color Bar

If you can use a separate piece of code for each sprite, maybe you could do (for example for sprite 3)?

Now I look more carefully I see that this is what Hein is doing ...
Previous - 1 | 2 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
Walt/Bonzai
Mike
MCM/ONSLAUGHT
iAN CooG/HVSC
MWR/Visdom
Korodny
Copyfault/Extend^tsn..
Scrap/Genesis Project
McMeatLoaf
katon/Lepsi De
t0m3000/hf^boom!^ibx
Chesser/Blazon
Magic/Nah-Kolor
saimo/RETREAM
Steffan/BOOM!
Andy/AEG
Freeze/Blazon
4gentE/ΤRIΛD
Guests online: 121
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Mojo  (9.7)
4 Coma Light 13  (9.6)
5 Edge of Disgrace  (9.6)
6 What Is The Matrix 2  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Comaland 100%  (9.6)
10 Wonderland XIV  (9.6)
Top onefile Demos
1 Layers  (9.6)
2 No Listen  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.6)
6 Dawnfall V1.1  (9.5)
7 Rainbow Connection  (9.5)
8 Onscreen 5k  (9.5)
9 Morph  (9.5)
10 Libertongo  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Triad  (9.3)
5 Censor Design  (9.3)
Top Musicians
1 Rob Hubbard  (9.7)
2 Mutetus  (9.7)
3 Jeroen Tel  (9.7)
4 Linus  (9.6)
5 Stinsen  (9.6)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.095 sec.