Ordinateur Rétro: RC2014 PRO avec ROM88 (SCM, CP/M, Basic)
Bonjour,
Je poursuis mes découvertes Retro autour du Z80 et viens d'atteindre un tournant intéressant. Les articles RC2014 vont devenir moins fréquents au profit de l'assembleur.
Je vais aussi pouvoir reprendre les articles habituels sur MicroPython, matériel Maker, etc.
ROM88 sur RC2014
La ROM88 (voir article sur décodage des ROMs du RC2014) est celle qui m'intéresse le plus.
RC2014 Z80 sous SCM (ROM-88) |
Cette configuration permet de faire un choix de démarrage de 3 firmwares distincts.
Cette ROM de 16 Kio contient:
- SCM : Small Computer Monitor - permet de faire de l'assembleur directement sur le RC2014. C'est le système par défaut.
- Basic Loader : permet de démarrer le Basic
- CP/M Loader : permettant de charger CP/M 2.2 depuis une CF card.
Nous passerons en revue les différentes options: SCM, Basic Loader et CP/M Loader.
Note:
il n'est pas obligatoire de passer par la ROM 88 pour utiliser SCM, Basic ou CP/M, SCM est accessible en ROM 6 et CP/M en ROM 9. Disposer d'un choix me paraît pertinent.
ROM 88 - configuration
Configuration RAM
RAM module - configuration |
Tel que configuré, la Paging est désactivé, ce qui veut dire que le module RAM inférieure ne sera pas activé par le signal PAGE. En conséquence, seul le module de RAM supérieur sera exploité.
Tel que configuré, l'adressage débute à 0x0000 pour les deux modules. Le module RAM inférieur n'étant pas sélectionné (c'est là que se trouvera la ROM), la RAM sera accessible à partir de 0x8000
Configuration ROM
ROM module - configuration pour ROM88 |
La ROM-88 utilise une page de 16Kio qui débute à 0x0000.
Module Horloge
configuré comme le Basic 32 Kio.
Module SIO/2
Configuré comme le Basic 32 Kio.
Résumé de la configuration sur RC2014 PRO
La ROM commence donc à l'adresse 0x0000 et la RAM débute à 0x8000.
Basic Loader
Ce loader permet de démarrer le Basic 32K que nous avons déjà rencontré dans le précédent article.
Le Basic est entièrement inclus dans la ROM.
CP/M Loader
Je m'intéresserais plus tard à CP/M (ancêtre du DOS mais disposant de nombreux logiciels).
Mon seul regret est qu'il sera limité à 32 Kio de RAM puisque la ROM n'utilise pas le signal PAGE. Le Loader ne contient pas CP/M lui-même mais recherche le module avec la carte CF puis charge le système d'exploitation depuis la carte CF.
Selon toute vraisemblance, les fonctions du BIOS CP/M devrait être présent dans la ROM-88. Du coup, ces fonctions BIOS sont aussi disponibles pour SCM et codes assembleur.
Small Computer Monitor
SCM : présentation
Small Computer Monitor (SCM pour les intimes) est un outils qui permet d'écrire des programmes assembleur, de désassembler du contenu, d'inspecter et/ou modifier le contenu de la RAM, inspecter/modifier les registres et même un mode de chargement à l'aide de HexLoader.
Bref, un couteau Suisse pour découvrir et/ou appendre l'assembleur.
Ecran d'accueil de Small Comupter Monitor |
Cet outil est vraiment très complet tout comme son guide utilisateur (voir ci-dessous).
SCM: guide utilisateur
Le guide utilisateur est accessible depuis le billet "Learning the Small Computer Monitor" (Google Group, Document PDF).
Ce document est très utile et détaille bien les fonctions de SCM.
Il reprend par ailleurs les détails de l'API (probablement celle de reprend les points d'entrée des différentes fonctions appelable depuis le code assembleur.
A propos de HEXLoader
Le format HEX d'Intel est une format texte très simple qui permet d'écrire des octets à une adresse donnée.
Initialement prévu pour initialiser une ROM, ce format permet aussi d'envoyer un programme assembleur quelque part en mémoire... comme par exemple à partir de 0X8000 (donc dans la RAM du RC2014).
Exemple de fichier HEX:
:1040000021354006090E80EDB3061A3E41F5DB80EE :10401000CB5728FAF1D3813CCD2A4010F0DB80CB7E :104020004728FADB81D38118F4C9F5C50E0911645C :1040300000F7C1F1C91814C403C105681100FFFFDE :00000001FF
Le format:
- commence par un ":"
- suivit de deux octets "ll" indiquant la longueur (ex: 0x10 dans le premier enregistrement = 16 octets).
- suivit de 4 octets "aaaa" pour l'adresse (ex: 0x4000 pour le premier enregistrement)
- suivit de 2 octets "tt" pour le type d'enregistrement
- 00 : enregistrement de donnée
- 01 : fin de fichier
- 02 : extended segment address record
- 04 : extended linear address record
- 05 : start linear address record (MDK-ARM only)
- suivit des données au format hexadécimale
- terminé par 2 octets "CC" contenant le checksum (complément à deux du modulo 256 de la somme des octets).
Ce format permet également de transférer des programmes assembleurs en RAM... de quoi transférer des programmes depuis la section Apps du site SCM.
Note: l'exemple ci-dessus ne fonctionne pas sur un RC2014-PRO car l'adresse 0x4000 présent dans l'exemple est un emplacement dans l'espace d'adresse de la RAM.
Quel intérêt?
Cela permet aussi de transférer un programme Z80 compilé et assemblé sur un ordinateur hôte vers la plateforme rétro (il suffit d'indiquer l'adresse 0x8000 comme adresse d'origine pour charger le code assembleur dans la section RAM du SCM).
Comment utiliser HexLoader ?
C'est très simple, SCM réagi à la présence d'un ":" en premier caractère d'une commande puis débute immédiatement le chargement.
Il suffit donc d'ouvrir un fichier Hex sur votre ordinateur puis de faire un copié/collé dans le terminal :-)
Note: si vous utilisez Putty sur Linux il faut presser le bouton centrale de la souris (souvent une roulette) pour faire un coller dans le terminal.
SCM : utilisation des deux ports séries
Comme vous le voir l'image d'accueil de l'article, j'utilise le module PicoTerm pour créer un système autonome.... du coup ce n'est pas facile d'utiliser HexLoader dans ces conditions.
La bonne nouvelle, c'est que SCM dispose de la commande CONSOLE permettant de passer d'un port série à l'autre sur le module DUAL Serial Module SIO/2 .
Voici la marche à suivre:
- Brancher une connexion USB/Série de sur le port 2 du module SIO/2 et démarrer le terminal sur l'ordinateur (Ex: Putty).
- Sur SCM exploitant le port 1 (PicoTerm dans mon cas): saisir CONSOLE 2 pour passer sur la deuxième connexion série.
- Maintenant que la connexion série a basculée vers l'ordinateur, le terminal (Putty) peut être utilisé pour dialoguer avec SCM.
- Copier/Coller le contenu du fichier HEX dans le terminal.
- Dans le terminal, saisir CONSOLE 1 pour rebasculer vers le port série 1 (et le module PicoTerm dans mon cas)
SCM API
SCM dispose d'une série d'API qu'il est possible d'appeler directement depuis SCM lui-même (ces API sont décrite dans le "Guide utilisateur de SCM").
- $01 - Input Character : attend la saisie d'un caractère à la console puis retourne sa valeur.
- $02 - Ouput Character : sortie d'une caractère sur la console.
Input character
Small Computer Monitor - RC2014 *api 1 61 0001
Output character
Small Computer Monitor - RC2014 *api 2 62 b62 0062L'appel d'API envoi le caractère "b" (0x62) que l'on peut voir juste avant la réponse de l'API (qui indique en retour le caractère envoyé vers la sortie).
Appel d'API en assembleur
from $8000:L'appel RST $30 est équivalent à CALL $0030 mais RST 30 nécessite uniquement 2 octets pour le coder alors de CALL $0030 nécessite 3 octets!
LD C,$02 ; call Output Char API
LD A,$62
RST $30 ; call API
RET ; return SCM
Ressources
- Le guide utilisateur est accessible depuis le billet "Learning the Small Computer Monitor" (Google Group, Document PDF).
- Retro Computing Infobase (for RC2014)
Écrire un commentaire