User:DMahalko/Historical computer memory and storage limitations

The purpose of this article is to document various computer memory and data storage limitations throughout the history of computing. This article is a continuous work in progress and should not be considered complete or accurate at this time.

Common definitions

 * The Zero page is a special memory region that can be accessed with a special set of opcodes that require fewer CPU clock cycles to read or write than any other parts of the system memory.
 * The Call stack is used to store recursive programming subroutines and data, assisting the CPU in keeping track of how to return to the previous software it was running.

Apple II Memory Architecture
The Apple II used a 6502 CPU which was capable of addressing a total of 64 kilobytes of memory without additional hardware support. Of this, the first 48kb was intended for used as RAM, while the remaining 16kb was intended for ROM. The memory was arranged as a series of 256-byte pages,

Early memory configurations and limitations
The very first Apple II motherboards were equipped with 4k - 16k RAM chips, which severely limited the system usefulness.
 * In a 4k system, the first 2k would be used for the zero page, stack, input, and text/low-resolution display, leaving only 2k for programming, and no high-resolution capability, and no disk operating system. Instead programs were loaded and saved on cassette tape using data storage software in the 4kb system ROM.
 * An 8k system could either use text-only/low-resolution programs up to 6k in length, or could the first high-resolution graphics page with a 2k program, and still no DOS.
 * A 12k system could support both high-resolution graphics pages, but no DOS.
 * A 16k system could support both high-resolution graphics pages, plus an additional 4k beyond that point. Careful BASIC programming could utilize the upper memory region since some data various were stored in memory starting from the highest accessible memory location and working backwards down into lower memory. But still no DOS.
 * A 32k system finally had enough for DOS support, which consumed about 10 kilobytes of available upper memory.
 * A 48kb system expanded the first generation Apple II to is maximum capability, with DOS consuming the uppermost 10 kilobytes.

Apple IIe architecture changes
The Apple IIe provided 64kb of memory, but because the entire address space was already in use, this memory was supported by bank-switching the D0-EF pages, replacing the floating point BASIC ROM with addressable memory. This memory was not easily accessible from older DOS 3.3 programs, but was utilized by the later ProDOS operating system to free up the lower 48k for user programs.

Extending the Apple IIe to 128kb of memory made use of further bank-switching to swap out the entire main memory with auxillary memory. Programming for use of the extra memory was difficult due to losing access to all data in the primary bank when switching to the secondary, and back again. This bank swapping did not replace reserved special hardware spaces such as the zero page and stack, but these could be swapped with an alternate zero page, stack, and memory in place of the 4k system ROM if desired. The same upper memory bank switching was also used due to the nonrelocatable slot ROM address space from pages C0-CF that prevented access to 4kb of auxillary memory.

The Apple IIe also had the abilitiy to generate a special 80-column text mode that interleaved the main memory 40x25 text page with its corresponding auxiliary 40x25 memory text page to produce a single 80x25 text page. However this special mode could not support text page 2.

The Apple IIe motherboard revision B added support for a double-high resolution graphics mode that interleaved the high-resolution graphics pages in a similar manner. This special mode supported 140x160 or 140x192 16-color graphics, or 560x160 or 560x192 monochrome graphics. It also supported a double-low resolution 16-color graphics mode of 80x40 or 80x48, though use of this was uncommon. These modes were only possible with text or graphics page 1 and did not function with either page 2.

Apple IIgs architecture changes
The Apple IIgs supported this contrived bank-switching methodology for backwards compatability, but also layered on top of it a new 16-byte addressing capability not directly available to standard 8-bit software.

(My architecture knowledge runs out here for the IIgs)

Cassette tapes
The first data storage available to Apple II users was programs stored as audio tones on cassette tapes. This storage tended to be unreliable since recording signal level and playback level could render data hard to read or inaccessible. The data density was extremely low.

5.25" floppy disks
Eventually Steve Wozniak developed the Apple II disk drive, which used a single-sided double-density disk of about 116 kilobytes capacity with the early 13-sector DOS 3.2. This later increased to 140 kilobytes with the 16-sector DOS 3.3 and later ProDOS. However no further changes such as double-sided or high-density disks were supported.

3.5" floppy disks
With the development of the Unidisk drive for the Apple II+/IIe computers, disk storage increased to 800 kilobytes using a double-sided, double-density disk with variable sectors per track and varying drive speed (continuous access velocity) as the head moved across the disk surface.

Hard drives
The first apple II hard drives were available as a 5 megabyte disk for approximately $700, and as a 10 megabyte disk for about $1400. As years passed the storage increased to 20 megabytes for a high-end Apple II system, and then further larger yet as the Apple II series become obsolete and poorly supported by Apple.

Apple II Storage partition sizes
Cassette tape used no file names, did not support a directory structure, and had no maximum partition size. It was physically only limited by the length of audio recording time available, but since it involved directly reading or writing raw blocks of RAM, it was necessarily limited to contiguous data blocks of 47.5kb or less (0200-BFFF).

DOS 3.2 and DOS 3.3 as designed by Apple were originally intended for very specific disk storage systems, and could not be significantly increased in capacity.

A specially-modified version of DOS 3.3 (UniDOS?) was written to support the UniDisk 3.5" drive, to permit a single 800k disk to be treated as two 400kb DOS 3.3 disks. It was backwards compatible with the original DOS 3.3 from Apple and could access 5.25" floppies.

ProDOS supported variable size drive partitions up to 32 megabytes, which was considered extremely large for the period. However capacity never expanded beyond 32 megabytes per partition, and as hard drive sizes began to significantly increase it became necessary for a single hard drive to contain multiple partitions. It was not uncommon to find a 250 megabyte partition containing 8 separate ProDOS partitions

Hard disk size limitations

 * Initially hard drives were very specific sizes such as 5, 10, 15, or 20 megabytes. Above this point sizes became more flexible, though most early hard drive controllers were limited to selecting specific hard drive types which each defined a specific size.
 * The first major limit on storage capacity occurred at 504 megabytes, due to most configuration programs and operating systems being unable to work with more than 1024 drive cylinders, 16 heads, and 63 sectors.
 * The next limit occurred at 2.1 gigabytes, due to configuration programs not permitting more that 4096 cylinders, 16 heads, and 63 cylinders.
 * 8 gigabytes was a limit due to disk configuration programs being unable to select more than 1023 cylinders, 63 heads, and 255 sectors.
 * 32 gigabytes was a limit due to disk configuration programs being unable to select more than 65535 cylinders, 63 heads, and 255 sectors.
 * 128 gigabytes was a limit due to the maximum addressable sectors of the original logical block addressing of the ATA interface.

Storage partition sizes

 * DOS FAT12 supported partitions up to 32 megabytes
 * DOS FAT16 initially only supported partitions of 32 megabytes but was incrementally improved until it supported up to 2 gigabytes
 * Under Windows 95/98 DOS FAT32 supported partitions up to approximately 128 gigabytes, though this was uncommon.
 * Initially a bug in Microsoft's FDISK software would cause partitions over 64 gigabytes to appear to be missing 64 gigs of storage. This limitation was not noticed until drive sizes increased to over 64 gigabytes.
 * Microsoft limits FAT32 to only 32 gigabytes when created under Windows XP.
 * 2 terabytes is a partition limit that is just now becoming well-known. It is due to design limitations of the partition tables of traditional PC file systems, and which can only be overcome by switching to a new disk partitioning scheme such as the GUID partition table.