|
Subject: Re: [stella] Intelligent Job-System idea From: Manuel Polik <cybergoth@xxxxxxxx> Date: Sat, 04 Jan 2003 11:16:54 +0100 |
Hi there Christopher!
[Vectrexsnip]
Hey, thanks for your insights! This really seems to be
one funny little machine!
> For your purposes, I'd suggest a table for low-
> priority routines, ones that don't need to be called
> every frame. And then your NextRoutine offset variable
> would only be reset when the end of the table is
> reached. So calling the routines could be spread out
> over several frames. Something like:
This is a really excellent idea!
>low_priority_routine_handler:
>
> LDA INTIM
> CMP #$05 ; more than 6*64 cycles left?
> BCS end_VBLANK
>
> lda NextLowPriorityRoutine
> cmp NumberOfLowPriorityRoutines
> beq done_low_priority_routines
> asl
> tay
> lda LowPriorityRoutineTable,y
> sta RoutineOffset
> lda LowPriorityRoutineTable+1,y
> sta RoutineOffset+1
> inc NumberOfLowPriorityRoutines
> jmp (RoutineOffset) ;Routines need to end by
with: jmp low_priority_routine_handler
>done_low_priority_routines:
> lda #0
> sta NextLowPriorityRoutine
>
>end_VBLANK:
>
>;... (BTW - This is off the top of my head, may be
buggy as hell...)
>;...
>;...
>
>
> LowPriorityRoutineTable:
> .word FirstLowPriorityRoutineStartingAddress
> .word SecondLowPriorityRoutineStartingAddress
> .word ThirdLowPriorityRoutineStartingAddress
> .word FourthLowPriorityRoutineStartingAddress
Assimilated!
This is an excellent mechanism!
> You are adding the overhead of around 30 cycles per
> routine plus 1 byte RAM over you original idea, but
> otherwise you're probably going to be adding:
>
> LDA INTIM
> CMP #$05 ; more than 6*64 cycles left?
> BCC Continue
> RTS
>Continue
Well, I have to carefully consider this. A great deal of
routines I do are really required every frame.
Remember I have a scenario like this:
(Pseudo C code)
for(i=0;i<10;i++)
{
if (IDObject(i)==METEOR)
{
JSR dothis1
JSR dothis2
JSR dothis3
JSR dothis4
continue;
}
if (IDObject(i)==SHIP)
{
JSR dothis1
JSR dothis2
JSR dothat
JSR dothis4
continue;
}
if (IDObject(i)==MOTHERSHIP)
}
So one of the first not so trivial issues is finding the
proper XX here:
> LDA INTIM
> CMP #$XX ; more than X*64 cycles left?
> BCC Continue
> RTS
It's like this: For the first 5 objects, I can execute
"dothis4", but for the other 5 ships I should bail out.
They still should all excute dothis1-3 in time though.
Now, I can only estimate how long executing dothis1-3
takes - it's depending on the actual situation and on
the distribution of objects. For example dothis2 might
be done quicker for meteors than for ships...
Second thing is, that I don't know the order of the
objects. The more heavy calculation things might come
all first or all at the end...
Well, in the end XX just needs to be big _enough_. Being
the suicidal try & error coder, I think I will find a
proper value here :-)
> To the start of a bunch of routines (it'll only take a
> few before you're using more ROM than my routine) and
> you may have some problems ensuring that all those
> routines get called in a timely manor (Supposed you
> have 6 of those routines, each with the above timer
> check, it may sometimes take several frames to get
> down to the last couple routines while the first
> couple routines get called every frame. With my table
> you at least know they'll get called as part of the
> sequence of routines...)
Now here is a small advantage I have: Since my Objects
are constantly swapping their positions, I think their
lowlevel stuff will be executed just "often enough".
I think again I have to just test & balance my system
here...
>Anyway, there's my two cents...
Thanks for the brill concept. Maybe I should've known
that _before_ I started. :-)
Well, I'm wiser now, but this time I've just to live
with what I've got so far...
Greetings,
Manuel
----------------------------------------------------------------------------------------------
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [stella] Intelligent Job-System, Thomas Jentzsch | Thread | Re: [stella] Intelligent Job-System, Christopher Tumber |
| Re: [stella] commercial 2600 Progra, Russ Perry Jr | Date | Re: [stella] Mortal Kurling!, Fabrizio Zavagli |
| Month |