RE: [stella] Superchip?

Subject: RE: [stella] Superchip?
From: Mark De Smet <desmet@xxxxxxxxxxxx>
Date: Fri, 15 Oct 1999 00:21:00 -0500 (CDT)
> Let me get this right, so in hardware it can flip bytes and do other 
> bitwise operations?  This would be really useful in saving memory for 

Yes.  The basic structure is that of 8 indirect addressing memory blocks.
There are extras thrown in there to make it more versitile, but that is
the jist of it.  There is a block of 2k of memory that is not directly
addressable.  However, the program can write an address into the indirect
registers(these are registers in the chip), then read the data out of the
memory at the address in the registers simply by reading a constant
address.(once it is read, the address in the indirect registers is
decremented so that it can be used for display data.)  Each of these
'indirect addressing memory blocks' can be read out of 6 different ports.
Depending on which port is read from, the data is altered.  In one, it
read s the data normally.  Then there is one that masks the data with a
'valid'(called flag) bit.(the bit is programmer setup to indicate where in
the data you are).  Then there are 4 more which do some bitwise
operations.  One does a nibble swap, one inverses the bit ordering, one
shifts left one bit, and one shifts right one bit.

One of the reasons I have become especially interested in this chip is
because of all the ways it can make a program work faster and more
efficiently.  Examples of things that can be done:
-As I already indicated, up to four channel sound.
-Easy graphics(player, playfield, whatever) updating.  for example.  most
kernals have a data segment containing all of the graphics in a row.  then
in the kernal, at the beginning of the display, an index is set, and
everyline, data is loaded indirectly from that address and put into the
graphics register.  Then the index is inc/dec.  That's 9 cycles every
line.  With this chip, you could instead put all your data in the
chip(therefore not taking  up you program space), load up the address at
the beginning of the frame, and then all you would need to do each line is
read from memory, then write to the graphics register.  This is only 5
cycles, and doesn't require an index register.
-easy vertical player/missle/ball positioning.  You can setup the
'indirect data registers' so that it only gives you the data for a
certain range of lines.  For example, in adventure, when drawing the
dragon, all you would have to do is setup the number of lines down you
want it to be drawn, and then on everyline simply read the indirect data,
and write it to the graphics register.  It will automatically mask out the
data if you are not in the preassigned line range.
-random number generation.  All you do is read an address, and it is
always a new random number.
-something about 'Draw line carry' which has something to do with drawing
sloped lines.  (I havn't gotten far enough to know what good this is yet.)


Note that I did not explain fully how all of this works as it is a little
hairy, and I did not use the same language that Crane used so that I could
explain it easier.

Archives (includes files) at
Unsub & more at

Current Thread