Subject: RE: [stella] Atari 7800 programmers reference From: Matt Pritchard <MPritchard@xxxxxxxxxxxxxxxxxxx> Date: Mon, 8 Jun 1998 15:22:08 -0500 |
What documentation are you referring to? The docs with the Monitor cart? or something else? -Matt Pritchard Graphics Engine and Optimization Specialist MS Age of Empires & Age of Empires ][ > -----Original Message----- > From: Keith Henrickson [SMTP:flipper@xxxxxxxx] > Sent: Friday, June 05, 1998 12:06 AM > To: stella@xxxxxxxxxxx > Subject: [stella] Atari 7800 programmers reference > > This is a preliminary programming doc for the atari 7800. It is > incomplete and probably inaccurate if not just plain wrong. I am well > aware that the documentation for the system was sold at one point, but > last I contacted the company that was selling it, they didn't think > they > had any left after the backorders were filled. Even if they did, I > don't > have the $150 they wanted. Since no one who was lucky enough to get > one > of these kits has made a posting of any docs as far as I have seen, > I've > started poking through the BIOS ROM to see how it worked. If anyone > can > fill in any details, or better yet post the docs that they have, that > would be great. > > Keith Henrickson > flipper@xxxxxxxx > 6/1/98 > > ---------------------------------------------------------------------- > -- > > Memory map: > > $0000-$0FFF - Probably IO devices, some RAM as well. > $1000-$3FFF - RAM, total of 4K, some kind of mirroring will occur. > $4000-$FFFF - Available to the cart port, all read/write? > > ---------------------------------------------------------------------- > -- > > Startup of a cart: > > There is a vector at $FFF8 that tells the authentication system where > to > look for the 'signature block', although I do not currently have the > format of the block itself. Several checks are performed to determine > the > 2600/7800 cart: > > 1. If the RESET vector ($FFFC) is $0000 then go 2600. > 2. If the RESET vector ($FFFC) is $FFFF then go 2600. > 3. If the low bit of $FFF8 is 0, then go 2600. > This means the auth table must occupy an odd numbered address. > 4. If the high nibble of $FFF8 is not $F, then go 2600. > This means the auth table must occupy the $xxFx block of memory. > 5. If the low nibble of $FFF9 is not $3 or $B then go 2600. > This means the auth table must start at $x3xx or $xBxx. > 6. If $FFF9 is less than $40, then go 2600. > The auth table MUST sit higher than this, as $4000 is the start of > ram. > 7. If $FFF9 - 1 is less than the RESET vector ($FFFC) than go 2600. > The auth table must sit somewhere between the start of program code > and the end of ram. > 8. Finally, if the low nibble of $FFF9 is $B, the title screen is > skipped. > > If all of these requirements are satisfied, then the BIOS will attempt > to > authenticate a cart. Unfortulately due to the 760 bit public key > system > used for authentication, cracking the key is beyond the capibilities > we > have today. If someone has more details (key size less than 760 bits > or > better yet, the key itself), then maybe something will open up along > these > lines. > > ---------------------------------------------------------------------- > ----- > > The 7800 seems to use a display list, as did the 5200, although it is > far > more complicated. The Maria chip is a little-endian processor, versus > the > 6502 microprocessor that is big-endian. Be careful when specifying > memory > addresses in your display lists. > > The high byte of the master display list is stored at $002C, and the > low > byte at $0030. The format of the master display list is as follows. > There are a series of 3 byte entries. I don't know yet how many 3 > byte > entries there are supposed to be. Each entry takes the following > format: > > +-----------+-----------+-----------+ > | byte 1 | byte 2 | byte 3 | > +-----------+-----------+-----------+ > | H | L | High byte | Low byte | > +-----+-----+ of second | of second | > | C | R | display | display | > | o | e | list | list | > | m | p +-----------+-----------+ > | a | e | | > | n | a | | > | d | t | | > +-----+-----+-----------+-----------+ > > Each entry is used for 'repeat' lines on the screen. The command > nybble > is unknown, but so far my guesses are: > > 8 - Set bitmapped mode, one color per screen line. > > -------------------------------------- > > The Secondary Display List > > This seems to be a very powerful configuration list, but it has a very > difficult format. However, this is where the actual drawing to the > screen > happens. Once you have a secondary display list to draw a certain > type of > screen line (blank line, solid line, whatever your heart can come up > with), you can call it as many places you like in the master display > list. > > Each entry can have a variable number of bytes in it, but all entries > end > with two consecutive zeros. Separate sub-functions in one secondary > display list entry are separated by a single zero byte. > > The basic 'mono bitmap' mode entry seems to be six bytes long: > > +----------+-----------+-----------+--------+----------+----------+ > | Low-byte | Data size | High-byte | Offset | zerobyte | zerobyte | > | of graph | | of graph | | | | > | data | | data | | | | > +----------+-----------+-----------+--------+----------+----------+ > > The graphdata pointer simply points to the beginning of the > variable-length graphics data itself. To set how much graphics data is > drawn, set the 'data size' byte to $20-(number of bytes of graphdata). > > INFO NEEDED: values greater than $20 seem to be valid too. What is > going > on? > > The offset is the horizontal delay in pixels times 2. This is used to > align pieces of graphics data of varied size on the screen. For > instance, > the atari logo on the boot screen uses the fewest number of bytes > needed > to hold the section of the 'arch', increasing as the logo symbol gets > wider. Then they are centered on the screen by using the 'offset' > location. > > INFO NEEDED: How does one set the colors?? > > ---------------------------------------------------------------------- > ----- > Chip Registers: > > $0028 -- VBLANK status. > > +---+---+---+---+---+---+---+---+ > | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | > +---+---+---+---+---+---+---+---+ > | V | --------UNUSED----------- | > | B | | > | L | | > | A | | > | N | | > | K | | > +---+---+---+---+---+---+---+---+ > > VBLANK - 0 : Not within VBLANK area. > 1 : Within VBLANK area. > > ------------------------------------------ > > $002C - High byte for master display list > $0030 - Low byte for master display list > > ------------------------------------------ > > > -- > Archives (includes files) at > http://www.biglist.com/lists/stella/archives/ > Unsub & more at http://www.biglist.com/lists/stella/stella.html -- Archives (includes files) at http://www.biglist.com/lists/stella/archives/ Unsub & more at http://www.biglist.com/lists/stella/stella.html
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[stella] Atari 7800 programmers ref, Keith Henrickson | Thread | RE: [stella] Atari 7800 programmers, Flipper |
Re: [stella] Activision-PSX?, Bob Colbert | Date | RE: [stella] Atari 7800 programmers, Flipper |
Month |