1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-26 08:49:37 +00:00

Minor correction on C0XX; it's not just RAM that doesn't appear. And switched to a more reader-friendly way of specifying ranges.

Thomas Harte 2018-08-08 16:43:14 -04:00
parent 973f11627d
commit 5067554a9e

@ -1,53 +1,53 @@
Apple provides multiple overlapping paging mechanisms which in total divide an Apple IIe's address space up into thirteen distinct segments. Apple provides multiple overlapping paging mechanisms which in total divide an Apple IIe's address space up into thirteen distinct segments.
# Segments # Segments
## [0000, 0200) ## 000001FF
Reading and writing: contains auxiliary RAM if `ALTZP` is set. Contains base RAM otherwise. Reading and writing: contains auxiliary RAM if `ALTZP` is set. Contains base RAM otherwise.
## [0300, 0400); [0800, 2000); [4000, C000) ## 030003FF; 08001FFF; 4000BFFF
Reading: contains base RAM if `RAMRD` is reset; contains auxiliary RAM otherwise. Reading: contains base RAM if `RAMRD` is reset; contains auxiliary RAM otherwise.
Writing: as per reading, but regarding `RAMWRT` rather than `RAMRD`. Writing: as per reading, but regarding `RAMWRT` rather than `RAMRD`.
## [0400, 0800) ## 040007FF
Reading: contains auxiliary RAM if either (i) both `80STORE` and `PAGE2` are set; or (ii) `80STORE` is reset and `RAMRD` is set. Contains base RAM otherwise. Reading: contains auxiliary RAM if either (i) both `80STORE` and `PAGE2` are set; or (ii) `80STORE` is reset and `RAMRD` is set. Contains base RAM otherwise.
Writing: as per reading, but regarding `RAMWRT` rather than `RAMRD`. Writing: as per reading, but regarding `RAMWRT` rather than `RAMRD`.
## [2000, 4000) ## 20003FFF
Reading: contains auxiliary RAM if either (i) `80STORE`, `PAGE2` and `HIRES` are set; or (ii) `80STORE` is reset and `RAMRD` is set. Contains base RAM otherwise. Reading: contains auxiliary RAM if either (i) `80STORE`, `PAGE2` and `HIRES` are set; or (ii) `80STORE` is reset and `RAMRD` is set. Contains base RAM otherwise.
Writing: as per reading, but regarding `RAMWRT` rather than `RAMRD`. Writing: as per reading, but regarding `RAMWRT` rather than `RAMRD`.
## [C000, C100) ## C000C0FF
Never mapped to RAM. Always contains the internal and card IO. Never mapped to RAM or ROM. Always contains internal and card IO.
## [C100, C300); [C400, C800) ## C100C2FF; C400C7FF
Contains ROM if `RDCXROM` is set. Otherwise is unmapped, allowing cards to respond. Contains ROM if `RDCXROM` is set. Otherwise is unmapped, allowing cards to respond.
## [C300, C400) ## C300C3FF
Contains ROM if `RDCXROM` is set or `SLOTC3ROM` is reset. Otherwise is unmapped, allowing card 3 to respond. Contains ROM if `RDCXROM` is set or `SLOTC3ROM` is reset. Otherwise is unmapped, allowing card 3 to respond.
## [C800, D000) ## C800CFFF
Contains ROM if `RDCXROM` or `RDC8ROM` is set. Otherwise is unmapped, allowing cards to respond. Contains ROM if `RDCXROM` or `RDC8ROM` is set. Otherwise is unmapped, allowing cards to respond.
`RDC8ROM` is documented only implicitly; it is set by any access within the C3 page while `SLOTC3ROM` is reset. It is reset by an access to `CFFF`, or by system reset. `RDC8ROM` is documented only implicitly; it is set by any access within the C3 page while `SLOTC3ROM` is reset. It is reset by an access to `CFFF`, or by system reset.
## [D000, E000) ## D000DFFF
Reading: contains ROM if the language card `read` flip flop is *disabled*. Contains base RAM if the flip flop is enabled and `ALTZP` is reset. Otherwise contains auxiliary RAM. Reading: contains ROM if the language card `read` flip flop is *disabled*. Contains base RAM if the flip flop is enabled and `ALTZP` is reset. Otherwise contains auxiliary RAM.
Writing: empty if the language card `write` flip flop is *enabled*. Contains base RAM if the flip flop is disabled and `ALTZP` is reset. Otherwise contains auxiliary RAM. Writing: empty if the language card `write` flip flop is *enabled*. Contains base RAM if the flip flop is disabled and `ALTZP` is reset. Otherwise contains auxiliary RAM.
The portion of RAM accessed depends upon the language card's `BANK2` flip flop. The portion of RAM accessed depends upon the language card's `BANK2` flip flop.
## [E000, FFFF] ## E000FFFF
As per D000—E000 except that `BANK2` does not affect the portion of RAM exposed. As per D000—E000 except that `BANK2` does not affect the portion of RAM exposed.
# Language Card Control # Language Card Control
The language card contains four flip flops: `BANK2`, `read`, `write` and `prewrite`. The language card contains four flip flops: `BANK2`, `read`, `write` and `prewrite`.
## BANK2 ## BANK2
This selects which of two 4kb segments will appear in the region [D000, E000); it is set directly by address line 3 upon any access of the language-card switches. This selects which of two 4kb segments will appear in the region D000DFFF; it is set directly by address line 3 upon any access of the language-card switches.
## Read [enable] ## Read [enable]
This selects whether RAM or ROM will be read in the language card area. When it is **enabled**, RAM is read. This selects whether RAM or ROM will be read in the language card area. When it is **enabled**, RAM is read.
@ -69,9 +69,9 @@ This switch affects the write flip flop; it is set to the value of address line
# Older Apple IIs # Older Apple IIs
Prior to the IIe there was no auxiliary RAM. A single block of RAM up to 48kb exists from 0000 upwards. Prior to the IIe there was no auxiliary RAM. A single block of RAM up to 48kb exists from 0000 upwards.
Internal ROM is 12kb, so there is no mechanism for selecting between cards and ROM in the [C000, D000) region. That area is always used by cards only. Internal ROM is 12kb, so there is no mechanism for selecting between cards and ROM in the C000CFFF region. That area is always used by cards only.
A language card can be fitted which enables an extra 16kb of RAM in an 8kb segment and two 4kb banks in the [D000, FFFF] region, as described above. A language card can be fitted which enables an extra 16kb of RAM in an 8kb segment and two 4kb banks in the D000FFFF region, as described above.
## 80-column cards ## 80-column cards
Neither the II nor the II+ has any internal hardware to support 80-column output. 80-column expansion cards were normally installed in slot 3 and accessed via their card ROM. The IIe's ability to page internal ROM in [C300, C400) only allows it to provide software compatibility with those cards. Neither the II nor the II+ has any internal hardware to support 80-column output. 80-column expansion cards were normally installed in slot 3 and accessed via their card ROM. The IIe's ability to page internal ROM in C300C3FF only allows it to provide software compatibility with those cards.