[stella] Don't say you weren't warned....

Subject: [stella] Don't say you weren't warned....
From: Pete Holland <petehollandjr@xxxxxxxxx>
Date: Fri, 13 Aug 1999 14:30:13 -0700 (PDT)
Okay, gang.  A ton of questions requiring your expertise.  Open your
hymn books to Nick Bensema's "How To Draw A Playfield" and follow the
bouncing ball.

The actual space for the programs is from $F000 on up.  Where is the
stack located so I don't accidentally write instructions onto it? 
Also, is the memory that I would use to store scores, cards, etc.
located in the $F000 on up, or is it lower?  Once the cartridge is
loaded and the game switched on, can I, say, write to location $F555
and read from it, write something different to it, etc?  What are my
memory limitations as far as the values generated and tracked by the
game?  The memory limitations for the program is 4K at a time, right?

It mentions setting up VBLANK at the start of the overscan period. 
Why?  Is there that much of a difference between VSYNC 3 times/start
VBLANK and VBLANK/VSYNC 3 times?

I'm working on an IBM.  Keeping in mind I've been told DASM (which I
haven't had a chance to play with yet) lets you label a location with a
name (like TEMP, presumably) and any operations that require that
memory spot don't need the hex number in the instructions, just type in
the label and DASM will convert it later.  Assuming this is how it
works, I think I remember seeing TIM64T in the Stella manual.  Is this
an actual part of memory, like the VSYNC register, or is this just a
label generally used so everyone can keep track of it, a sort of
standardization for programmers?  And what function does setting TIM64T
serve?  I thought the TIA takes care of the linear movement itself and
the programmer only has to worry about the top-to-bottom counting.

Checking the console switches:  by my count, there are five switches on
the console--color, select, reset, and the two difficulty (mine has a
TV channel switch, but I would bet that that's attatched to the actual
video unit and has nothing to do with the CPU).  Since these are just
switches, I imagine that individual bits (on/off) are used to keep
track of their position.  But a byte is 8 bits long, right?  Which bit
tracks the switches, and, if it is 8 bits long, what are the other
three used for?

The program gets to:
LDA INTIM
BNE DrawScreen
STA WSYNC
STA VBLANK
INTIM is not listed previously in the document.  Since the Atari powers
up in a random state, INTIM might not necessarily be 0 and might not
switch off the WSYNC and VBLANK.  Or was it assigned 0 and I didn't
notice it?  By the way, WSYNC has to be shut off?  Is this placed after
the WSYNC command so that the CPU does whatever it does as the scanline
is moving, gets here, waits for the beam to catch up, then move to the
next instruction?  I guess what I'm asking is, is WSYNC an automatic
command (computer waits until raster catches up then continues) or is
it like a switch that the program throws (computer waits until a
command tells it to stop waiting)?  And if it gets turned on and off by
the program, will putting in fewer commands that produce fewer cycles
to do than for the raster to move throw everything off?  How close in
cycle counting do you have to get to make the program flow properly?

Also, referring to the program nugget above, I don't see a Compare
command before the Branch instruction.  Is the Compare IN the Branch
instruction, or is this something Bensema left out to make us catch and
pay attention?

"This is a decremental loop...which is why the graphics at the end of
this file are stored 'bottom-up'.  In a way, one could say that's how
the screen is drawn."  In the disassembled code for Adventure, I can
make out the paterns for drawing the dragons, bat, chalice, etc.  But
they're right-side up.  Or is what Bensema is refering to just for the
background graphics?

Finally, I'm a little confused with the layout of the Graphics data. 
What part of this is just commentary and not part of the program?  And
what does all this do?
PFData0; H   4 5 6 7
.byte $00 $f0 $00 $A0 $E0 $A0 $A0
If the playfield generator looks at the bits and draws where a 1 is and
leaves blank where a 0 is, can't the letter H be drawn using just one
byte at the most?  Or is this complication necessary?  What am I
missing?

Thank you for this.
_________________________________________________________
Do You Yahoo!?
Bid and sell for free at http://auctions.yahoo.com


--
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/

Current Thread