Cellule 0001h |
R6510 |
---|---|
Commodore 64 |
Description
Cet octet contient le registre d'adresse de bloc d'une puce 6510.
Lecture/Écriture
Bits | Description |
---|---|
0 | Ce bit permet d'indiquer le signal LORAM. Sélectionne la ROM ou RAM à 40960 (A000h). 1 = BASIC, 0 = RAM. |
1 | Ce bit permet d'indiquer le signal HIRAM. Sélectionne la ROM ou RAM à 57344 (E000). 1 = Noyau, 0 = RAM. |
2 | Ce bit permet d'indiquer le signal CHAREN. Sélectionne la ROM de caractères ou les périphériques d'entrée/sortie. 1 = Entrée/sortie, 0 = ROM. |
3 | Ce bit permet d'indiquer la ligne de sortie des données de la cassette. |
4 | Ce bit permet d'indiquer la détection du commutateur de cassette. Lit 0 si un bouton est enfoncé, 1 sinon. |
5 | Ce bit permet d'indiquer la commande de commutateur de moteur de cassette. Mettre à 1 pour que le moteur en marche, ou 0 pour arrêter le moteur. |
6 à 7 | Ces bits ne sont pas utilisé. |
Remarques
- La fonction principale de ce registre est de déterminer à quels blocs de RAM et de ROM le microprocesseur 6510 s'adressera. Le Commodore 64 est livré avec 64 Ko de RAM, même s'il n'utilise normalement pas toute cette RAM à la fois. En outre, il possède une ROM d'interpréteur BASIC de 8 Ko, une ROM de noyau du système d'exploitation de 8 Ko, une ROM de générateur de caractères de 4 Ko, un périphérique d'interface audio (SID), un contrôleur d'interface vidéo 6566 (VIC-II) et deux puces d'adaptateur d'interface complexe 6526. Pour résoudre tous ces problèmes à la fois, il faudrait 88 Ko, 24 Ko au-delà de la limite d'adressage du microprocesseur 6510. Afin d'allouer l'espace d'adressage, le port d'entrée/sortie est utilisé pour affecter les lignes d'adressage et ainsi déterminer quels segments de RAM et de ROM seront supprimés à tout moment.
- Bit 0 : Ce bit contrôle le signal LORAM. Un 0 dans cette position de bit commute la ROM du BASIC et la remplace par de la RAM aux adresses mémoires 40960 à 49151 (A000h à BFFFh). La valeur par défaut de ce bit est 1.
- Bit 1 : Le bit 1 contrôle le signal HIRAM. Un 0 dans cette position de bit éteint le noyau en ROM et la remplace par de la RAM à 57344 à 65535 (E000h à FFFFh). Comme l'interpréteur BASIC utilise le noyau, il est également désactivé et remplacé par la RAM. La valeur par défaut de ce bit est 1.
- Le système permet d'utiliser une large gamme de combinaisons de RAM et de ROM. Bien entendu, le programmeur BASIC n'aura guère besoin, dans le cours normal des événements, de désactiver la BASIC en ROM et le noyau. Pour ce faire, il suffirait de raccorder le système. Mais une façon d'utiliser cette fonctionnalité est de déplacer le contenu de la ROM vers les adresses RAM correspondantes. De cette façon, vous pouvez facilement modifier et personnaliser l'interpréteur BASIC et les routines d'OS du noyau, étant généralement fixées dans la ROM. Par exemple, pour déplacer BASIC dans la RAM, tapez simplement :
- Bit 2 : Ce bit contrôle le signal CHAREN. Un 0 dans cette position active la ROM du générateur de caractères, afin qu'elle puisse être lue par le 6510 aux adresses 53248 à 57343 (D000h à DFFFh). Normalement, ce bit est mis à 1, de sorte que même si la puce VIC-II a accès à la ROM du générateur de caractères pour créer l'affichage à l'écran, l'utilisateur ne peut pas y jeter un coup d'oeil. Étant donné que cette ROM est commutée dans le système au même emplacement que les périphériques d'entrée/sortie (puce SID, puce VIC-II et 6526 CIA), des entrées/sorties peuvent se produire lorsque cette ROM est connectée. La possibilité de basculer dans la ROM du générateur de caractères est très utile pour le programmeur souhaitant utilisé des caractères définis par l'utilisateur. Les graphiques de caractères modifiés sont l'un des outils graphiques les plus puissants disponibles, mais souvent l'utilisateur ne voudra pas redéfinir un ensemble de caractères entier à la fois. En lisant la ROM des caractères et en dupliquant son contenu en RAM, l'utilisateur ne peut remplacer que quelques caractères de l'ensemble. La méthode de lecture de cette ROM dans la RAM depuis BASIC est la suivante :
- Bit 3 : Il s'agit de la ligne de sortie des données de la cassette. Cette ligne est connectée à la ligne d'écriture de données de cassette sur le port de cassette et est utilisée pour envoyer les données étant écrites sur bande magnétique.
- Bit 4 : Ce bit est la ligne de détection du commutateur de cassette. Ce bit permet à un programme de dire si l'un des boutons déplaçant l'enregistreur est enfoncé. Si le commutateur de l'enregistreur est en panne, ce bit aura la valeur 1. N'oubliez pas que le bit 4 du registre de direction des données à l'emplacement 0 doit contenir un 0 pour que ce bit reflète correctement l'état du commutateur.
- Bit 5 : Le bit 5 est la commande du moteur de cassette. Régler ce bit à zéro permet au moteur de tourner lorsque vous appuyez sur l'un des boutons de l'enregistreur, tandis que le régler sur la valeur 1 le désactive. La plupart du temps, le réglage de ce bit sera contrôlé par la routine d'interruption étant utilisée pour lire le clavier tous les soixantième de seconde. Si aucun des boutons de l'enregistreur n'est enfoncé, cette routine d'interruption arrête le moteur et met le verrouillage à l'emplacement 192 (C0h) à 0. Lorsqu'une touche est enfoncée, si l'emplacement de verrouillage est nul, le bit 5 de ce registre est mis à 0 pour mettre le moteur en marche. Lorsque l'emplacement de verrouillage contient un 0, la routine de balayage des touches ne vous permet pas de contrôler le réglage de ce bit du registre (et le verrouillage est toujours défini sur zéro lorsqu'aucun bouton n'est enfoncé). Pour que vous puissiez prendre le contrôle du moteur, vous devez mettre une valeur différente de 0 dans POKE dans 192 après avoir appuyé sur un bouton de l'enregistreur. Vous pouvez ensuite éteindre le moteur et le rallumer à votre guise, en manipulant ce bit, tant qu'un bouton reste enfoncé.
FOR I=40960 TO 49151:POKE I,PEEK(I):NEXT
Bien qu'il semble qu'un tel programme ne fasse rien, il copie en fait des octets de la ROM vers la RAM. En effet, toutes les données étant écrites dans un emplacement ROM sont entreposées dans la RAM résidente à la même adresse. Donc, pendant que vous jetez un oeil sur la ROM, vous êtes sur la RAM avec POKE. Pour basculer vers votre copie RAM de BASIC, tapez les instructions suivantes :
POKE 1,PEEK(1) AND 254
Vous êtes maintenant prêt à apporter des modifications. Des exemples de modifications simples incluent la modification du texte que l'interprète affiche, comme le prompt READY, le message de mise sous tension ou la table de mots-clefs. Un exemple de ce dernier serait :
POKE 41122,69
Cette exemple change le mot clef FOR en FER, de sorte que le BASIC répondrait normalement à une boucle FER-NEXT, mais ne reconnaît pas FOR comme syntaxiquement correct. Sur le plan plus pratique, vous pouvez modifier le prompt émise par INPUT en deux points plutôt qu'en point d'interrogation :
POKE 43846,58
Pour revenir à la ROM du BASIC, entrez :
POKE 1,PEEK(1) OR 1
Pour les applications en langage machine, il serait possible de remplacer les programmes ROM par un système d'exploitation entièrement différent, ou une application dotée de ses propres fonctions d'édition d'écran et d'entrée/sortie. Une telle application devrait d'abord être chargée du disque dans la RAM. Une langage de programmation autre que BASIC pourrait être chargée, et pourrait alors simplement désactiver la ROM du BASIC, tout en utilisant l'OS du noyau. Ou une application de feuille de calcul contenant ses propres routines d'entrée/sortie pourrait désactiver toutes les ROM et utiliser toute la RAM n'étant pas réellement nécessaire pour le programme lui-même, pour les données. Il faut cependant se rappeler qu'avant de commuter le noyau, il est nécessaire de désactiver les interruptions, car les vecteurs de ces interruptions sont contenus dans le noyau.
10 POKE 56333,127:POKE1,PEEK(1) AND 251:FOR I=0 TO 2048
20 POKE BASE+I,PEEK(53248+I):NEXT:POKE 1,PEEK(1) OR 4:POKE 56333,129
Le premier POKE est nécessaire pour désactiver l'interruption de la minuterie système. Étant donné que les périphériques d'entrée/sortie sont adressés dans le même espace que la ROM de caractères, le basculement de cette ROM commute toutes les entrée/sorties, obligeant à désactiver toutes les interruptions utilisant ces périphériques. Le deuxième POKE est celui basculant dans la ROM de caractères. La boucle de programme lit ensuite cette mémoire ROM dans la RAM, en commençant par l'adresse BASE. Notez que cette adresse doit commencer sur une limite égale à 2 Ko (une adresse également divisible par 2048) dans le bloc de mémoire étant actuellement des adresses par la puce VIC-II. Après avoir lu le contenu de la ROM dans la RAM, les POKE suivants éteignent la ROM de caractère et restaurent l'interruption. Il convient de noter que, bien que les bits 0 à 2 de ce registre permettent le contrôle logiciel de certains signaux déterminant la configuration de la mémoire étant utilisé par le Commodore 64 à un moment donné, ils ne sont pas le seul facteur déterminant. Les signaux peuvent également être générés au moyen de cartouches d'extension enfichables étant connectées au port d'extension, et celles-ci peuvent modifier la carte mémoire. Deux lignes situées sur le port d'extension sont appelées GAME et EXROM. Lorsqu'elles sont utilisées conjointement avec les lignes contrôlées par logiciel indiquées ci-dessus, ces deux lignes matérielles peuvent permettre à la cartouche ROM de remplacer divers segments de la ROM et/ou de la RAM. Les configurations possibles incluent 8 Ko de ROM de cartouche à commuter entre 8000h et 9FFFh, pour un programme d'amélioration BASIC; une ROM de cartouche 8 Ko à A000h à BFFFh, remplaçant BASIC, ou à E000h à FFFFh, remplaçant le noyau, ou une cartouche 16 Ko à 8000h à C000h. Lorsque la cartouche ROM est sélectionnée pour remplacer le noyau, un mode émulateur Max est entré, imitant les spécifications de la malheureuse Max Machine, une machine de jeu que Commodore n'a jamais produite pour la vente aux États-Unis. Dans ce mode, seuls les 6 premiers Ko de la RAM est utilisée, il n'y a pas d'accès à la ROM de caractères et les données graphiques telles que les données de points de caractère sont cartographiées de 57344 (E000h) à 8192 (2000h).