10

For the Apple //e, it was very common to have an extended 80-column card installed which brought the machine up to 128KB of RAM via 2 banks of 64KB each. There are soft switches in the $C0xx space which allow you to specify which bank is in use. In these banks, the CPU could directly access and execute code if the switches were set the right way.

The thing is, it seems that the built in support for additional memory was limited only to the two banks and thus going beyond 128KB was not really in the design.

How did programs access the banks beyond the 128KB limit? To be clear, the question is about the RAM being directly accessible by the CPU and could be used for data and code.

1
  • I replaced memory chips of my Pravetz 8A (sort of //e clone) AUX card, which was also sort of 80-column clone card with higher capacity memory chips that I got from one 16-bit module computer (Izot 1036C). In this way my memory card increased from 128K to 1024K and it was fully recognized by some programs like Locksmith 6.0/6.1. Actually I had 1080K computer - 64K onboard (48K + 16K onboard implemented on Pravetz 8A, using slot 0 for ][+ compatibility) + 1024K on AUX (slot 3 address space). It should be 1088K but 8K were lost somewhere, I got over this anyway :) Basically I had more than 1 MB
    – SEGStriker
    Feb 14, 2020 at 11:08

4 Answers 4

10

TL;DR

The thing is, it seems that the built in support for additional memory was limited only to the two banks and thus going beyond 128KB was not really in the design.

Jup. It was on purpose intended to not have any banks beyond 128k.

How did programs access the banks beyond the 128KB limit?

No banks, no access mechanism needed. Third party memory cards used different schemes - like emulating language cards (as on the II+), or switching 2 KiB blocks into the I/O ROM area.

While cards based on emulating multiple language cards can still be used as main memory, block based are purely usable as I/O devices not much different from floppies or hard disks. Code to be executed had to be moved from those into main memory.

The very extreme are cards that provide their storage via a single byte wide port, most notably the so called 'Slinky Cards'. The provide three registers to set a 24 bit address and a single byte wide port to read or wirte a byte from or to that address within the devices memory.

The most well known are Apples Memory Expansion Cards, the A2B4156 for the IIc and A2B2086 for the Apple II and IIe. While marketed as memory expansion, they do not expand mein memory in any way but offer a RAM based storage drive - which in turn is recognized by ProDOS' SmartPort drivers right away.


When Apple realized that the Apple III wasn't the instant success as expected, the LCA (Low Cost Apple) project, on hold for some time, was (re)started. They still believed that the III would take off eventually, so the major goal was a cost-reduced Apple II design that could extend the profitability for a year or two even though sales prices were expected to drop. While the LCA should have 64KiB (to reduce chip cost) and maybe 80 column display (which was originally a reserved feature for the professional III), its memory capabilities should stay for sure below what the Apple III offered - which started originally at 128 KiB (III+ started at 256 KiB) and was expandable to 512 KiB.

When Walt Broedner, the main designer for the LCA, came up with the idea for using a 1k RAM and bank switching to implement the 80 column display, he also realized that this was a way to expand the II series to 128 KiB without adding any cost, as the few needed gates would slip into the custom MMU (one of the two custom ASICs of the LCA, the other being the IOU) anyway. Management let them go thru as this solution wasn't in any way extendable beyond 128 KiB, thus keeping the Apple III's superiority.

At that time many third party companies offered RAM cards to expand way beyond 128k, by extending the language card logic (Saturn most prominent). This design allowed next to infinite memory (ok, in reality anything beyond 2 MiB would have needed an extended approach), and an implementation as part of the LCA wouldn't have been a big deal, but not in line with what Apple envisioned at that time.

Edit: As usual when it comes to Apple II development, Steven Weyhrich's Apple II History provides a great read, even with a Woz citation describing the mindset that lead to this rather limited bank switching scheme.

Don't get me wrong, being able to switch a large chunk of memory in at once was handy for an overlay-like program structure, but the huge bank size killed any other effect. And for data, more but smaller chunks would have been favourable.

19
  • 1
    Apple did similar things to the IIgs line. Keeping it slow with little memory so that it wouldn't compete with the Mac. A IIgs running at 8 MHz and 1 MiB RAM would blow the doors of the original Mac. :-)
    – cbmeeks
    Sep 7, 2017 at 18:01
  • 1
    That should have been "off" not "of". :-/
    – cbmeeks
    Sep 7, 2017 at 18:11
  • Now, the GS memory map was from the begining on designed to have up to 8MiB of RAM. Third party cards offered up to 12 MiB. And quite frankly, a 2.8 MHz IIgs did run circles aroudn most Macs at the time :)) Also, unlike the 68k with it'S rather long memory cycles, the IIgs did need 100ns RAMs, as the 65816, like the 6502 does only utilize half of a bus cycle for access, thus needing twice as fast memory.
    – Raffzahn
    Sep 7, 2017 at 18:12
  • 1
    I meant more long-term. By 1989 the Mac SE/30 was running at 16 MHz (68030) with 120ns RAM. Surely, if Apple put their best engineers into the IIgs, the "IIgs +" or "IIIgs" could have had speeds up to 10-14 MHz by the late 80's. Sure, it would have been expensive but Apple has never been shy of releasing expensive computers.
    – cbmeeks
    Sep 8, 2017 at 12:44
  • 2
    @cbmeeks Well, with 120ns RAM a 6502 or 816 can only run at 4 MHz at max, due the access timing used. The 68k has a way slower timing in relation to processing speed. Also the 6502 ISA is designed toward cloesed, embedded systems. A usage as PC was never intended and is rather cumbersome (read slow). The 65816 didn't realy change this. We need to be objective here, no matter how much I love the 6502.
    – Raffzahn
    Sep 8, 2017 at 13:23
10

Depends on the type of card. By the late '80s, two main standards had emerged.

First was the RamWorks-type card, named for the first product of its type, the RamWorks from Applied Engineering. This installed in the IIe aux slot and behaved exactly like multiple extended 80-column cards, with an additional softswitch that let you choose which 64K bank you wanted to address in the usual extended-80-column-card way. Numerous clones (e.g. Checkmate) copied AE's technique and there were compatible cards for the Apple IIc as well (which you installed by pulling the CPU and MMU chips, plugging the memory card into the empty sockets, and then installing the CPU and MMU on the memory card... not for the faint of heart). You could install a driver that would let ProDOS use this memory as a RAM disk, and most such cards included utilities to let you split the memory on the card between a RAM disk and AppleWorks.

The other major type was the Slinky-type card, which was the code name for Apple's own memory card. This could be installed in any slot and was compatible with the II+ as well as the IIe and IIgs, where multiple such cards could be installed. It was seen as a SmartPort device by ProDOS and was automatically configured as a RAM disk, though it could also be accessed directly, for example by AppleWorks. The Slinky did not use bank-switching but rather a peephole technique. Its softswitches included three to set the 24-bit address of a byte of memory on the card you were interested in, and then you would read from or write to a fourth softswitch to access that byte. Reading or writing the card advanced the "peephole" to the next byte, which meant that transferring data between the card and main memory could actually be faster than transferring it between two locations in main memory! But you couldn't actually run code on the card, like you could with a RamWorks-style card, it was strictly storage (though it worked with AppleWorks). Other manufacturers (including Applied Engineering) offered clones of this card -- AE also offered a way to keep their memory card powered up when the computer was turned off, so you could boot from it! -- and Apple offered a revision of the Apple IIc motherboard that supported a Slinky-style card. (With a little creative soldering and case modification, you could actually install both a RamWorks-style card on top of the IIc logic board, and a Slinky card underneath!)

Before the IIe came out, there were numerous other proprietary schemes, which I could not tell you much about, although from what I hear, they were typically seen as multiple 16K "language cards."

1

Accessing the additional banks was simply a matter of accessing the appropriate soft-switch to enable a 64kb window in the auxiliary bank, and then using it directly. After selecting the window, the interface is the same as for regular auxiliary access, including the language-card bank-switching mechanism to reach all 64kb.

0

This answer uses the Apple definition of "RAM Expansion," which incuded RAM accessed via SmartPort. (The original question wasn't clear that it was looking for answers only about RAM expansions directly addressable by the CPU.) I leave this here in order to help make clear that what Apple called "RAM expansion" does not use the same definition as the one now in the question.

"[G]oing beyond 128KB was not really in the design" of the Apple IIe, just like going beyond 64K was not in the design of the Apple II+, and going beyond 48K was not in the design of the Apple II before the 16K Language Card (which offered one bank of RAM switched with ROM in the top 8K and two banks of ram switched with ROM in the 4K below that).

But support for more than 128K was added by Apple no later than September 1986 with the release of the revised motherboard (offering a memory expansion connector) and ROM version 3, which added the software support for this. Memory expansion cards of up to 1 MB were released both for the Apple IIc using this dedicated connector and for the Apple II/II+/IIe.

As described in the technical reference manual,

The memory expansion card provides up to 1Mb of RAM, in 256K steps, for storage of program and data files. In this sense, it is like a very fast disk drive. Programs can be loaded into the memory expansion card's RAM, but in order to be executed they must be moved, in whole or in part, to the Apple He's main memory.

The memory expansion card is a block-type device, so I/O operations involving the card use the operating system or Smartport I/O interface. The Smartport I/O interface is described later in this chapter.

Access is done via the READ BLOCK and WRITE BLOCK calls, with various other calls for initialisation, formatting, and suchlike. You can read on in that chapter if you want all the gory details of how to do SmartPort I/O.

11
  • That card (A2B4156)is a Smartport I/O device. It does not provide any additional RAM for the CPU but works like disk drives. Access is done by writing a 24 bit address into three registers (C0n0/n1/n2) and reading or writing a data byte to the fourth (C0n3) - while keeping the auto increment in mind :))
    – Raffzahn
    May 14 at 10:38
  • @Raffzahn Err...yes; that was what I said in my answer, was it not?
    – cjs
    May 15 at 7:13
  • No. your answer claims "support for more than 128K was added by Apple no later than September 1986", which is not true, as those cards do not add RAM (in)to the address space. they are storage devices. Otherwise every disk drive must as well count as supported RAM, wouldn't it?
    – Raffzahn
    May 15 at 7:26
  • 1
    @Raffzahn "The memory expansion card provides up to 1Mb of RAM...." Apple called it "RAM," even if you don't. I'm not going to judge whether the OP was using Apple's definition or your personal definition.
    – cjs
    May 15 at 7:45
  • My intent was more focused on Saturn/RamWorks type expansions as they're banks that can be switched in and executed by the CPU. That being said, I never used a //c with one of these RAM boards but to agree with Raffzahn it does seem to be more of a /RAM disk since you can't execute from it; it would be more like a swap device. But I also understand why cjs includes it in the definition since, frankly, Apple makes it seem more like a RamWorks device than a RAM disk. Up until today I would have thought the //c RAM expansion was more RamWorks than RAM drive.
    – bjb
    May 16 at 18:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .