[Coco] real-time mouse cursor
Robert Gault
robert.gault at worldnet.att.net
Sun Jan 27 09:56:42 EST 2008
Roger Taylor wrote:
> At 09:54 PM 1/26/2008, you wrote:
>
>> Or better yet, replace the TST $FF03, BPL a@ with a SYNC instruction.
>> (Of course, time isn't really crucial if you're spending the bulk of
>> it doing
>> nothing while waiting for the next interrupt.)
>
>
>
> Doesn't this SYNC to any interrupt, though?
>
> Btw, it just dawned on me after all the years... why do sprite calcs
> like this:
>
> LDD ,X screen data
> ANDA ,U mask data
> ANDB 1,U
> ORA 128,U sprite data
> ORB 129,U
> STD ,X
>
> when this is the same:
>
> LDD ,X screen data
> ANDA ,U mask data
> ANDB 1,U
> ADDD 128,U sprite data
> STD ,X
>
> No reg.a/b OR'ing is needed. You can do a 16-bit simulated OR with the
> ADDD instruction.
> And the speed increase is very noticeable over 64 sprites! Actually, 65
> now... for the mouse cursor.
>
> I'm using direct offsets into the sprite and screen data instead of auto
> incs ( ,r++) because an entire sprite is plotted with precalced byte
> offsets like the above. Spaghetti and meatballs, anybody?
>
> With the 6309, "ANDD" is even possible for the masking.
>
> LDD ,X screen data
> ANDD ,U mask data
> ADDD 128,U sprite data
> STD ,X
>
It might work for you but I can see one cause for failure trying to
replace ORA ORB with ADDD.
Let's take and example.
start ldd #$1234
ora T1
orb T2
swi
T1 fcb $BB
T2 fcb $FF
regD will = $BBFF
start ldd #$1234
addd T1
swi
T1 fcb $BB
T2 fcb $FF
regD will = $CE33
I think you will find you can only use ADDD if your mask is $0000. OR
may look like addition but it is not equivalent.
More information about the Coco
mailing list