Jump to content
IGNORED

Atari 800 RAM Selection


ClausB

Recommended Posts

Here's a topic which piqued my curiosity 30 years ago and has recently recaptured my interest. I have never seen anything written about it, so I'll write it now. If you have seen something before, please post it here.

 

One of many clever design aspects of the Atari 800 is how it addresses its RAM. At a time when adding RAM to a microcomputer involved arranging jumper blocks or switches in strange patterns laid out in cryptic instructions, Atari managed to make the task consumer-proof. And they did it without today's fancy Plug and Pray hardware and software schemes. The 800 has three RAM slots and originally two different sizes of RAM modules to plug in, 8K and 16K. Each module's cover has a diagram of nine combinations to give total RAM between 8K and 48K:

post-18605-129880716764_thumb.jpg

Any collection of up to three modules could be arranged according to the diagram, which gives the impression that 16K modules must be in front of 8K ones. In fact, the slot design allows any order of 8K and 16K modules, with only one rule: no empty slots in front of occupied ones. That works out to 14 combinations:

8

16

8 8

8 16

16 8

16 16

8 8 8

8 8 16

8 16 8

8 16 16

16 8 8

16 8 16

16 16 8

16 16 16

 

So how does the 800 know the size of each module and how to make all those combinations into one contiguous block of memory? The 800 schematic shows a decoder on the top three address lines which creates eight memory select lines, one to enable each 8K block of memory. The upper two lines go to ROM and I/O, so the lower six are available for RAM or cartridge ROM. The lower two, S0 and S1, go to slot 1. That's logical enough, because the first RAM module must plug in there. An 8K module would act whenever the S0 line becomes true and a 16K module would act on either S0 or S1. The schematic shows the remaining four selects, S2 through S5, all going to slot 2 and none to slot 3. "Huh?" It also shows a jumble of lines passing from one slot to another, four between slot 1 and slot 2, and two between 1 and 3. "What?" The RAM board schematics show that those lines just loop over to each other, with no electronic components involved. "Uhh..."

 

Back in '81, to understand how the select lines get to the RAM modules, I wrote a BASIC program to diagram the slots, the select lines between them, and the modules to go in them:

RAMSLOTS.ATR

Running the program and entering all possible combinations above, you notice that every one results in contiguous memory. For example:

post-18605-129880698114_thumb.pngpost-18605-129880703358_thumb.png

 

The selection system is ingenious. Notice that each slot has five select lines in and three out. An 8K module takes the first input line and passes the next three to the output lines. A 16K module takes the first two inputs and passes the last three on. The BASIC program extends the system to include hypothetical 24K and 32K modules and, as long as they are in the first two slots, they work properly as well. Atari never sold them, but other companies did make 32K boards. Most did not understand this system of select lines, however, and had restrictive rules about which combinations would work. This program's 32K design works correctly in either slot 1 or 2 and even in the 400's single slot.

 

This clever system requires eight card edge connections to function, and I have wondered whether it could be done with fewer. Recently I wrote a quick and dirty C program to try all possible ways to connect only six lines, four in and two out. It found that, out of the 3,628,800 possibilities, none supports all 14 combinations above. There are, however, 480 ways to support the nine combinations shown on the module's diagram. Many of them even support a 32K module in at least one slot.

 

Taking it further, I modified the C program to find ways to connect only four lines, three in and one out. None works with all nine diagrammed combinations, but seven of them do work with variations of all nine. For example:

post-18605-129880706147_thumb.png

This scheme handles the following combinations:

8

16

8 8

8 16

16 16

8 8 8

16 8 8

16 16 8

16 16 16

 

It also frees up four card edge connections for additional useful signals. Using A14 and A15, a 32K, 64K, or larger module could work in slot 3, leaving slots 1 and 2 free for I/O expansion. Those slots could have an I/O page select signal and up to 3 I/O lines routed internally to an external connector. Then you could plug in an RS-232 card, an 80-column card, or other useful devices.

 

Atari's RAM select system was well designed, but ultimately it limited the 800's opportunity for future expansion.

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

But what about RAM expansions that give you pages C0-CF ? I guess they need some cut and join work to the motherboard.

Yes, the RAM slots are missing S6 and S7 and A14 and A15. Some of those are on the OS ROM slot, and could be jumpered over.

 

And RAM slot 3 has a useful signal, -EXSEL, which can disable the OS ROMs and allow RAM above page D8. I modded my 800 to do just that:

Posted here

  • Like 2
Link to comment
Share on other sites

Pretty nice way of doing it. So basically, any expansion will take the select-lines it'll need for its own operation, and loop over any lines it doesn't need, for the next module to pick up. All based on 8k block usage, thus ensuring the Ram to be contiguous no matter what module type you stick into which slot, as long as you use the slots in order.

 

Neat system, but not really usable outside of RAM modules.

Link to comment
Share on other sites

At MSU in 1981, I had a stats professor who would lug his 800 to class in a big canvas backpack and run programs he wrote to demonstrate probability experiments and statistical analyses. Very cool.

 

One day his Atari acted up, flashed weird characters and colors, and crashed. After class I suggested he check whether the RAM modules had come loose but he gruffly dismissed my diagnosis. The next class he thanked me and explained he had never opened the back before and had indeed found a loose module. We became friends and helped found the Atari club CHAOS.

  • Like 1
Link to comment
Share on other sites

Seeming as though we are talking about the a800 and memory addressing, was there any reason why the big A changed the location of bankswitching in the xl systems from where it was on the a800 (i'm pretty sure it wasn't anything to do with the xl having two less joystick connectors)

Link to comment
Share on other sites

Seeming as though we are talking about the a800 and memory addressing, was there any reason why the big A changed the location of bankswitching in the xl systems from where it was on the a800 (i'm pretty sure it wasn't anything to do with the xl having two less joystick connectors)

 

 

where did Atari have the bankswitching in the 800?

 

just wondering...

 

sloopy.

Link to comment
Share on other sites

The prototype 800 had a less ambitious scheme (see this old thread). It held only up to 36K RAM in 4K and 16K modules and slot 1 could address only 4K. Even so, not every combination was valid, only these:

4

4 4

4 4 4

4 16

4 16 4

4 16 16

 

It used sixteen 4K select lines and had no overlap between RAM and cartridge ROM. Only one select line passed from slot 2 to slot 3:

post-18605-129926010872_thumb.png

Link to comment
Share on other sites

There was no Atari bank switching in the 800. Other companies, notably Axlon, made bank-switched RAM modules. The Axlon RAMdisk used a proprietary scheme because of the lack of I/O page select lines on slot 2.

 

yes i know ;')

 

sloopy.

Link to comment
Share on other sites

Seeming as though we are talking about the a800 and memory addressing, was there any reason why the big A changed the location of bankswitching in the xl systems from where it was on the a800 (i'm pretty sure it wasn't anything to do with the xl having two less joystick connectors)

 

Somebody PLEASE take Carmel back to his padded cell!

Link to comment
Share on other sites

Did the 32k cards (a al 400) work in the 800 as well? (ie have 32k with one card or 48k with 32k+16k)

 

 

Edit, found my answer:

http://www.best-electronics-ca.com/800.htm

"800, replaces middle 16K Ram card only, remove back / last 16K Ram card"

 

So to use the 32k card in the 800, you can only put it in the middle slot and optionally add the final 16k in the front slot. (with nothing in the rear slot)

Edited by kool kitty89
Link to comment
Share on other sites

it was i think d800h, though something tells me it might be d500h (or is that for cartridge bankswitching)

d500h is for cartridge bankswitching sure enough, and you are in error about the d800h location. BUT I have seen it documented that indeed d800h is where the 800 bank selects if you set up your modification to do that. ADDMEMA.ARC and ADDMEMB.ARC it seems are the source for that information IIRC, but I can't find it when I need it to come to your aid in fending off sloopy's baiting scheme of course. Uh, oh. Another taunter has joined the pursuit...

 

But that was not the Big A that did that, the 800 normally can't bankswitch memory for nuffin.

 

From the start AXLON used 4000h - 7FFFh to bank in memory at and the actual control 'register' location is 0FF0h thru 0FFFh to select which bank is used. That memory location just happens to have a mirror at CFF0h thru CFFFh because of the way the 800 is put together - you can poke either range and the AXLON card doesn't know the difference. There is no real register at any location, it can not be read from to determine what bank is being used. After AXLON 'set' a standard everybody including the Big A hopped on board and started using it.

 

And then finally, when Atari removed the 3rd and 4th joystick for the XL/XE series, it left them with an actual read/write register just begging to be used for a built in memory expansion but they just didn't get around to it themselves until the 130XE came out. So it had everything to do with the missing joysicks as to why portB is used today.

 

I puzzled for a full week before that d800h location made any sense to me when I read that stuff way back when, and it stuck just because of that. Which is the only reason I understand where you are coming from now and how you just got confused about the details like that. It DOES make you sound a tad bit batty though. And I hope you'll take that all in good fun as it's meant here at least.

Link to comment
Share on other sites

Did the 32k cards (a al 400) work in the 800 as well? (ie have 32k with one card or 48k with 32k+16k)

Depends who made it.

 

The Axlon RAM-Cram 32K board could work in a 400 or in slot 2 of an 800, but not in slot 1 (because they did not follow Atari's scheme, as noted in the first post).

 

The Intec 32K board could work in either slot 1 or 2 but not in a 400 (they didn't quite get it either).

 

The Austin Franklin flyer claimed their 32K board worked in either slot 1 or 2 and in a 400 (maybe they got it, though I have never seen one to verify).

 

I don't know about the Best 32K board.

 

No 32K board could work by itself in the 800 because no slot has all the select lines S0, S1, S2, and S3 (without loopbacks or jumper wires). So, all the boards above required another RAM board in the other slot.

Edited by ClausB
Link to comment
Share on other sites

Seeming as though we are talking about the a800 and memory addressing, was there any reason why the big A changed the location of bankswitching in the xl systems from where it was on the a800 (i'm pretty sure it wasn't anything to do with the xl having two less joystick connectors)

 

 

it was i think d800h, though something tells me it might be d500h (or is that for cartridge bankswitching)

d500h is for cartridge bankswitching sure enough, and you are in error about the d800h location. BUT I have seen it documented that indeed d800h is where the 800 bank selects if you set up your modification to do that. ADDMEMA.ARC and ADDMEMB.ARC it seems are the source for that information IIRC, but I can't find it when I need it to come to your aid in fending off sloopy's baiting scheme of course. Uh, oh. Another taunter has joined the pursuit...

 

But that was not the Big A that did that, the 800 normally can't bankswitch memory for nuffin.

 

From the start AXLON used 4000h - 7FFFh to bank in memory at and the actual control 'register' location is 0FF0h thru 0FFFh to select which bank is used. That memory location just happens to have a mirror at CFF0h thru CFFFh because of the way the 800 is put together - you can poke either range and the AXLON card doesn't know the difference. There is no real register at any location, it can not be read from to determine what bank is being used. After AXLON 'set' a standard everybody including the Big A hopped on board and started using it.

 

And then finally, when Atari removed the 3rd and 4th joystick for the XL/XE series, it left them with an actual read/write register just begging to be used for a built in memory expansion but they just didn't get around to it themselves until the 130XE came out. So it had everything to do with the missing joysicks as to why portB is used today.

 

I puzzled for a full week before that d800h location made any sense to me when I read that stuff way back when, and it stuck just because of that. Which is the only reason I understand where you are coming from now and how you just got confused about the details like that. It DOES make you sound a tad bit batty though. And I hope you'll take that all in good fun as it's meant here at least.

 

i am not trying to bait anything, i was trying to understand carmels question in post #7 (see above), as i didnt know there was any banking scheme in the 800 by atari, only by third party memory card makers, and in carts...

 

the $4000-$7FFF section wasnt chosen by Atari because of Axlon necessarily... it was probly chosen for the same reason Axlon chose it, it is a 2 contiguous 8k 'banks' that didnt have to worry about paging/banking with the carts in the $8000-$BFFF; and ROM/OS in the $C000-$FFFF; and page 0, stack, system varibbles in $0000-$1FFF; and lastly, DOS, and small part of your 'resident' part of your app in the $2000-$3FFF...

 

and interesting theory about memory upgrade being 'gotten around to' in the XE...

 

sloopy.

Link to comment
Share on other sites

i am not trying to bait anything, i was trying to understand carmels question in post #7 (see above), as i didnt know there was any banking scheme in the 800 by atari, only by third party memory card makers, and in carts...

 

the $4000-$7FFF section wasnt chosen by Atari because of Axlon necessarily... it was probly chosen for the same reason Axlon chose it, it is a 2 contiguous 8k 'banks' that didnt have to worry about paging/banking with the carts in the $8000-$BFFF; and ROM/OS in the $C000-$FFFF; and page 0, stack, system varibbles in $0000-$1FFF; and lastly, DOS, and small part of your 'resident' part of your app in the $2000-$3FFF...

 

and interesting theory about memory upgrade being 'gotten around to' in the XE...

 

sloopy.

My misunderstanding then as a good natured ribbing I have no problem with and it seemed to me, to be going down just that very road at a pretty good clip. I knew that the d800 banking scheme mentioned by Carmel was going to be so far out in left field that almost no one would remember it from that very old upgrade that no DOS supported and may not have even been done a total of a dozen times because it was so unusable. As I recall they took the d8xx region signal from one board and slot, and used a backplane jumper to get it to the upgrade slot and all to no real purpose or utility. And again NOT done by Atari, which was Carmel's first wrong assumption. And to be fair to Carmel, the text of that upgrade is very suggestive that Atari was responsible for the d800 banking scheme when they were NOT involved at all.

 

Quite possibly, I agree completely. Just like the invention of the transformer and subsequent use of AC for power distribution is credited to Tesla, somebody(anybody?) else would eventually have 'discovered' the same thing and it all would have been credited to him instead and Tesla would today be seen to be the one trick pony of a charlatan that he actually was. Some things are just pre-determined to exist. Just as PortB begs to be used for a memory upgrade, the memory region 4000h - 7FFFh is the perfect place to put it as you state. AXLON got there first - so what, someone had too.

 

Thanks, sometimes I think all we have left is the theories of how it all might have come to pass. All the engineers who did such a good job designing these puppies are retired and probably were the first to get run off anytime things started sliding downhill at Atari. I just wish we had a few really good pictures of Candy, Collen, and all the rest... To be used for our own inspirations as it were. And to put a face on it. Ahemm.

Link to comment
Share on other sites

At MSU in 1981, I had a stats professor who would lug his 800 to class in a big canvas backpack and run programs he wrote to demonstrate probability experiments and statistical analyses. Very cool.

 

One day his Atari acted up, flashed weird characters and colors, and crashed. After class I suggested he check whether the RAM modules had come loose but he gruffly dismissed my diagnosis. The next class he thanked me and explained he had never opened the back before and had indeed found a loose module. We became friends and helped found the Atari club CHAOS.

 

I just got an Atari 800 (my first Atari computer) and when I put in a cart and powered it up I got a blank green screen. I bought it untested so my first thought was "Oh NO!!" But a quick reseating of the RAM modules and it is working fine

Link to comment
Share on other sites

For the time it would have been a plausible scheme to use a $D80x write to do banking. Given that no official standard existed, PORTB was still a controller port and the $C000-$CFFF region was undefined use.

 

Don't some $C000-$CFFF upgrades on the 400/800 actually steal address $CFFF for the banking register?

 

The Commodore Plus/4 uses 2 locations that you just write any value to which allow you to quickly switch the OS/BASIC ROMs in and out... in a situation where it's a simple case of having either RAM or ROM without only one RAM bank available, a simple address strobe scheme is perfectly OK.

Link to comment
Share on other sites

i am not trying to bait anything, i was trying to understand carmels question in post #7 (see above), as i didnt know there was any banking scheme in the 800 by atari, only by third party memory card makers, and in carts...

 

the $4000-$7FFF section wasnt chosen by Atari because of Axlon necessarily... it was probly chosen for the same reason Axlon chose it, it is a 2 contiguous 8k 'banks' that didnt have to worry about paging/banking with the carts in the $8000-$BFFF; and ROM/OS in the $C000-$FFFF; and page 0, stack, system varibbles in $0000-$1FFF; and lastly, DOS, and small part of your 'resident' part of your app in the $2000-$3FFF...

 

and interesting theory about memory upgrade being 'gotten around to' in the XE...

 

sloopy.

My misunderstanding then as a good natured ribbing I have no problem with and it seemed to me, to be going down just that very road at a pretty good clip. I knew that the d800 banking scheme mentioned by Carmel was going to be so far out in left field that almost no one would remember it from that very old upgrade that no DOS supported and may not have even been done a total of a dozen times because it was so unusable. As I recall they took the d8xx region signal from one board and slot, and used a backplane jumper to get it to the upgrade slot and all to no real purpose or utility. And again NOT done by Atari, which was Carmel's first wrong assumption. And to be fair to Carmel, the text of that upgrade is very suggestive that Atari was responsible for the d800 banking scheme when they were NOT involved at all.

 

Quite possibly, I agree completely. Just like the invention of the transformer and subsequent use of AC for power distribution is credited to Tesla, somebody(anybody?) else would eventually have 'discovered' the same thing and it all would have been credited to him instead and Tesla would today be seen to be the one trick pony of a charlatan that he actually was. Some things are just pre-determined to exist. Just as PortB begs to be used for a memory upgrade, the memory region 4000h - 7FFFh is the perfect place to put it as you state. AXLON got there first - so what, someone had too.

 

Thanks, sometimes I think all we have left is the theories of how it all might have come to pass. All the engineers who did such a good job designing these puppies are retired and probably were the first to get run off anytime things started sliding downhill at Atari. I just wish we had a few really good pictures of Candy, Collen, and all the rest... To be used for our own inspirations as it were. And to put a face on it. Ahemm.

 

well the split in the road where it branches off into learning or into a ribbing, hadnt been reach yet...

 

altho i know alot A8, i do not know all... and there are many mysteries to the 800 i do not know... with that said, i was hoping to learn more about the 800 that i didnt know before (as the 800 was my first A8). the facts show the idea of predetermination would have made my journey turn left down the road of ribbing :')

 

sloopy.

Link to comment
Share on other sites

AFAIK, no banking scheme for the 800 used $D8xx because that is the address of the Math ROM. Maybe you are all thinking of the XL PBI which has a signal to disable the Math ROM?

 

On the 800, the only RAM slot which has any I/O page selects was slot 3, and it has two: $D5xx and $D6xx. $D5xx also goes to the cart slots. My 64K mod for the 800 uses $D6xx from slot 3 (see link in post #3 above).

 

The Axlon RAMdisk works in slot 2, which has no I/O page selects, so it decodes the bus at $CFxx or $0Fxx for its switching register (as 1050 posted above). A15 and A14 are not available on any RAM slots, so that is the best it could do from slot 2.

Link to comment
Share on other sites

Does anyone have a schematic of the Mosaic 64K Select board? Or the installation instructions with solder connections? Or a good photograph? I'm curious how those work.

 

Thanks for your RAM select info on the 8K/16K boards.

 

The Mosaic boards were pretty unique. There was an auction on eBay one time for the interconnect cable and documentation, but missed out on that one. I'm not 100% on this because information is sparse, as opposed to the Axlon stuff that I physically own, but here's my understanding of how they work. I base this on information from emulators and the Mosaic Superdrive floppy I have.

 

- There can be up to three 64K Mosaic boards installed. This gives up to 144K (192K-48K) extended RAM. One card enables 4 banks, two have 20 banks, three have 36 banks.

- Banks are 4K, visible at $C000-$CFFF.

- RAM is enabled through an address latch (not data). Writes to $FFC0-$FFE3 enable the bank ($FFC0=bank 0, $FFC1=bank 1, etc), writes to $FFXX not in that range disable the memory.

 

I, too, would like to see what they physically look like.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...