Ordinateur Rétro: Test du RC2014 avec Basic 56K
Bonjour à tous,
Dans le précédent article "Ordinateur Rétro: Premier test du RC2014 avec Basic 32K" à permis de tester l'ordinateur RC2014 Z80.
RC2014 Z80 avec PicoTerm |
A propos du Basic 56K
Dans l'article précédent il était question d'un basic 32K et voici un Basic 56K... Et c'est quoi ce 56K?
Dans l'article précédent, l'espace d'adressage était diviser en deux: les 32 Kio inférieures était réservés à la ROM et les 32 Kio supérieurs réservé à la RAM.
Or, le Basic tient dans 8 Kio de ROM, ce qui laisse un espace d'adressage ROM inutilisé de 24 Kio.
La Basic 56Kio utilise le signal PAGE pour activer la RAM inférieure lorsque le code sort de l'espace d'adressage de la ROM (quand l'adresse dépasse la taille de la page ROM qui est de 8Kio dans le cas du Basic).
C'est le module ROM qui modifie le signal PAGE pour indiquer qu'il sort de l'espace d'adressage
- Si addr < 8Kio --> PAGE = 0 --> Désactiver RAM
- Si addr >= 8Kio --> PAGE = 1 --> Activer RAM
Configuration des modules
Je reprends ici la configuration décrite dans le document "RC2014 Pro Jumper Settings" disponible depuis cette page de rc2014.co.uk. Celle que j'ai fini par faire fonctionner.
Configuration RAM
Les 3 cavaliers du haut indique l'adresse de départ de la RAM qui est 0x2000 (soit 8192 octets... soit après la ROM Basic qui fait 8 Kio), ce qui concerne bien évidement le module de RAM inférieur... mais qui ne doit pas être activé sur le bus en même temps que la ROM!
Le cavalier du bas (vert) permettra au signal PAGE (en provenance de la ROM) d'activer les 32 Kio de RAM inférieure... soit quand l'adresse est supérieure à 0x2000.
La RAM sera donc adressable de 0x2000 à 0xFFFFF.
Module ROM
Le Basic 56K (numéroté 4, voir la section codage de la ROM dans cet article) utiliser le deuxième bloc de 8 Kio en ROM qui démarre donc à l'adresse 0x2000 (des 64 Kio de ROM disponibles) la "Page Selection" est donc A13=1, A14=0, A15=0).
Et comme la Basic fait toujours 8Kio, le "Page Size Jumper" indique toujours une taille de page de 8 Kio. Là, rien ne change du Basic 32K. La seule différence, c'est que le signal "Page" sera utilisé par le module RAM.
Pourquoi une autre ROM Basic?
Dans le Basic 32K, le BASIC (dans la ROM) activait le module de RAM supérieur lorsqu'il voulait accéder à de la RAM. Il pouvait donc utiliser l'adresse à partir de 0x8000 et être certain de tomber sur de la RAM.
Basic avec 32 Kio RAM |
Dans le cas de la RAM 56K, la Basic peut utiliser l'adresse > 8Kio (0x2000) et espérer tomber dans la RAM. En dessous c'est forcement le code Basic dans la ROM. C'est pour cela que le signal Page est utilisé... pour désactiver la ROM si l'adresse >= 0x2000 et réactiver la ROM si l'adresse < 0x2000.
Basic avec 56 Kio RAM |
Mais faut il encore que le Basic sache qu'il peut écrire en RAM à partir de l'adresse 0X2000!!!! et qu'il peut aussi aller jusqu'à 0xFFFF.
Cette caractéristique est HARDCODé dans le programme l'assembleur du Basic! C'est pour cela qu'il faut une autre ROM Basic car l'assembleur contrôle le matériel différemment que le Basic 32K.
Module Horloge
configuré comme le Basic 32 Kio.
Module SIO/2
Configuré comme le Basic 32 Kio.
Le Basic commence donc à l'adresse ************************ 0x0000 de la ROM... cela a tombe bien, (ouf! dirais-je) la RAM n'utilise pas cet espace mémoire :-)
Signal Page
Le module ROM génère le signal PAGE qui permet qui indique si l'adresse est dans l'espace d'adressage de la ROM ou de la RAM.
Voici la règle:
- PAGE = 0 --> sélection ROM
- PAGE = 1 --> sélection RAM
Schéma RAM
Si on inspecte le /CS des premiers 32K du module RAM:
Sélection du module RAM |
Le jumper3 permet d'utiliser le signal PAGE pour agir sur la sélection du module RAM.
Si Page=0 (pour sélectionner la ROM) alors on constate que le module RAM inférieur est désactivé (/CS = 1).
Schéma ROM
Le schéma ci-dessous indique clairement que la ROM présente des données sur le BUS uniquement si PAGE=0.
Si malheureusement PAGE=1 (sélection RAM) alors le /OE désactivera les sortie de la ROM.
Activation du module ROM |
Comme déjà précisé, c'est le module ROM qui manipule le signal PAGE.
Le schéma ci-dessous montre que c'est à l'aide des IORQ du Z80 que cela est fait.
Le signal Page est contrôlé à l'aide des IORQ (IORequest) du Z80 en activant le port (adresse) 0x48 et 0x48... peu importe la donnée envoyée sur le bus de donnée durant l'IO Request.
Le signal PORT48 passe donc au niveau bas lorsque l'IO Request 0x48 est effectué. Celui-ci fait donc un Master Reset (Mr) du 74LS393 (compteur binaire 4 bit... donc de 0 à 15). Donc Page=0 --> ROM sélectionnée
Le signal PORT56 passe donc au niveau bas lorsque l'IO Request 0x56 est effectué. Celui-ci incrémente le compteur de 1. Q0 passe au niveau 1. Donc Page=1 --> RAM sélectionnée.
A mon avis, le compteur binaire n'est utilisé qu'entre 0 & 1 pour le signal Page. Le comptage se fait visiblement sur le flan descendant du signal /Cp (donc dès que le Port 56 est accédé).
Et ensuite?
Tout comme Basic 32K, il n'y a pas de moyen de sauvegarde, ce qui limite toujours l'utilité de ce Basic.
Je vais enfin pouvoir m'attarder sur la ROM 88 qui m'intéresse vraiment (voir codage des ROMs)
Écrire un commentaire