8.3. La mémoire de l'Apple //e

Voici un schéma de la mémoire d'un Apple //e 64Ko.

Figure 8-1. Bus mémoire de l'Apple //e

Le processeur accède seulement au bus mémoire principal (main memory bus). l'IOU est l'unité d'entrée/sortie.

Il y a un banc de 64Ko de RAM et plusieurs bancs de ROM :

Voici une explication de chacun des bus.

8.3.1. Bus mémoire principal (Main memory bus)

Ce bus est la partie visible de la mémoire (depuis le point de vue du processeur). Ce bus divise la mémoire en quatre parties :

8.3.2. Bus de la carte language (Language Card bus)

Référence : Apple IIe Technical Reference Manual pages 79 to 83 (PDF pp113-117)

Le bus de la carte langage est en charge des 12Ko les plus hauts de la mémoire. Cet espace était originellement dédié à la ROM Basic et moniteur dans les Apple ][ 48Ko. Sur les Apples 64Ko, une nouvelle possibilité était d'adresser de la RAM dans cet espace. Cette fonctionnalité est utilisé pour charger des langages alternatifs en mémoire (comme le basic Integer du ][+ sur un //e).

La lecture et l'écriture peuvent être modifiés indépendamment. Ceci permet d'écrire en RAM pendant que la ROM est visible. C'est particulièrement pratique lorsque l'on prépare la RAM car bien des routines bas niveau sont en ROM (affichage du texte, lecture du clavier...).

Comme 16Ko de RAM sont disponibles mais l'espace ne fait que 12Ko, les 4Ko inférieurs ($D000-$FFFF) peuvent adresser deux bancs de RAM. Les 8Ko supérieurs sont toujours connectés à la même RAM.

Ce bus est piloté par l'Unité de carte langage en utilisant les interrupteurs logiciels LCRAM, LCWRITE et LCBNK2.

Par défaut (LCRAM et LCWRITE sur off), la ROM est lisible et les écritures n'ont aucun effet.

Les requêtes d'écriture sont transmises à la RAM si LCWRITE est actif. Sinon, les requête d'écriture n'ont pas d'effet (comme pour une ROM).

Les requêtes de lecture sont transmises à la RAM si LCRAM est actif et à la ROM sinon.

Les 8Ko supérieurs ($E000-$FFFF) sont connectés aux 8Ko supérieurs de la RAM ($E000-$FFFF).

Les 4Ko inférieurs ($D000-$DFFF) sont connectés à la RAM en $D000-$DFFF si LCBNK2 est actif ou à celle en $C000-$CFFF sinon.

8.3.3. Bus de la ROM E/S (I/O Rom Bus)

L'Apple //e et les modèles suivants ont plus que 12Ko de ROM. Pour accéder au reste de la ROM, l'espace $C100-$CFFF, habituellement réserver aux ROM des cartes périphériques peut être utilisé. Une fenêtre, en $C300-$C3FF, correspondant à la carte 80 colonnes, peut être sélectionnée spécifiquement.

Ce bus est piloté par l'unité de ROM E/S en utilisant les interrupteurs logiciels CXROM et C3ROM.

Si CXROM est actif, les requêtes sont transmises au bus des ROM périphériques. Si CXROM est actif, la ROM interne est visible.

C3ROM permet de voir la ROM interne en $C300-$C3FF quelque soit l'état de CXROM. Ceci est utilisé pour masquer la ROM de la carte d'extension 80 colonnes et pour utiliser les routines internes à la place.

8.3.4. Bus des ROM périphériques (Slot ROM Bus)

Chaque carte d'extension peut avoir 256 octets de ROM basique plus une extension ROM de 4Ko. La ROM basique est visible en $Cn00-$CnFF, où n est le numéro du port.

Lorsque la ROM basique est lue, l'extension ROM (s'il y en a une) est sélectionnée et devient visible en $C800-$CFFF. $CFFF est aussi un interrupteur logiciel (nommée CLRROM) qui désélectionne la ROM.

Ceci est expliqué dans le Apple IIe Technical Reference Manual page 132.

Le bus des ROM périphériques est en charge de transférer les requêtes de lecture à la bonne ROM. Comme l'unité des ports d'extension, il doit être informé des insertions et retraits de cartes.

8.3.4.1. Insérer et retirer des cartes

La méthode insert_card indique au bus qu'une carte a été insérée :

void CSlotRomBus::insert_card(int slot, CMemory *cardRom, CMemory *cardRomExt)

slot est le numéro du port (1-7). cardRom est la ROM basique de la carte et cardRomExt est sont extension.

La méthode remove_card indique au bus qu'une carde a été retirée :

void CSlotRomBus::remove_card(int slot)

slot est le numéro du port (1-7).