Assembleur Z80 sur RC2014 - épisode 1 - les bases
Bonsoir à tous,
Voici le début des découvertes de l'assembleur Z80 sur RC2014. Maintenant que SCM (Small Computer Monitor) est configuré, il est possible de faire de l'assembleur directement sur le RC2014-Pro.
J'ai donc décidé de me baser sur les vidéos de Matt Heffernan relatif à la programmation Z80 sur Spectrum pour adapter les exemples au RC2014.
Episode 1: les bases
Voici donc la première vidéo de Matt Heffernan sur les bases de l'assembleur. Ensuite nous passerons aux exemples Z80 pour le RC2014
Premier programme Z80
Version Spectrum
Ce programme propose de charger la valeur dans $D6 (214) dans la mémoire vidéo du Spectrum à l'adresse $5800.
ld a, $D6 ld ($5800), a ret
Version RC2014
Puisque le RC2014 PRO n'a pas de carte/chip vidéo, il ne sera pas possible d'écrire à l'adresse $5800 (qui est d'ailleurs en ROM donc en lecture seule). Le RC2014 dispose d'un espace RAM de 32 Kio à partir de $8000 pour les programmes assemblés avec SCM et pour stocker les données.
SCM peut uniquement assembler un programme dans un espace mémoire accessible en lecture/écriture... donc en RAM.
Qu'allons nous faire?
Etape 1: Inspecter le RAM
Commençons par examiner la mémoire à $8500 avec "m 8500. C'est là que nous écrirons nos données.
*m 8500 8500: B3 FC 1D DB 64 9C F3 5E A9 C0 D3 8C 7E 21 74 F3 ....d..^....~!t. 8510: EE 13 14 4C C4 6A 54 E2 94 8D C1 A3 53 15 E5 78 ...L.jT.....S..x 8520: B5 C3 71 BA 6E DC 62 5E 81 F4 B6 BC D8 11 07 E5 ..q.n.b^........ 8530: D1 D0 22 C2 01 EC 21 18 6C 36 10 BA 44 5A 28 6D .."...!.l6..DZ(m 8540: 01 B1 35 AD B3 BE F4 D6 5A 0F 64 56 E3 3B DC 91 ..5.....Z.dV.;.. 8550: 41 57 6E 99 DB 8A 18 91 74 76 78 11 B3 26 46 C3 AWn.....tvx..&F. 8560: D5 57 1B 5C 75 C3 79 3F 14 38 F3 6D F6 EA 2B 35 .W.\u.y?.8.m..+5 8570: 41 33 79 0C 50 80 3C 4B B0 9A CC 12 80 7C 10 5A A3y.P.<K.....|.Z
Cette portion de la RAM contient des informations aléatoire. Nous allons donc commencer par nettoyer cet espace pour faciliter notre lecture. Remplissons cet espace avec des 0 puis en ré-inspecter le contenu.
Etape 2: Initialiser la RAM
Initialisation de la RAM située entre $8500 et $8570 avec des zéros à l'aide de la commande "fill 8500 8570 0" puis ré-affichage de la mémoire avec "m 8500".
*fill 8500 8570 0 *m 8500 8500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8570: 00 33 79 0C 50 80 3C 4B B0 9A CC 12 80 7C 10 5A .3y.P.<K.....|.Z
Etape 3: Assembler le programme
Nous allons maintenant pouvoir écrire le programme qui place la valeur $D6 à l'adresse $8500.
ld a,$D6 ld ($8500), a ret
Le programme d'assemblage est démarré avec "a 8000" et terminé par l'instruction "." .
*a 8000 8000: 00 . NOP > ld a,$D6 8000: 3E D6 >. LD A,$D6 8002: EE 8C .. XOR $8C > ld ($8500),a 8002: 32 00 85 2.. LD ($8500),A 8005: 2C , INC L > ret 8005: C9 . RET 8006: 8E . ADC A,(HL) > . *
Le programme se termine avec RET (à $8005) pour revenir au Moniteur SCM. Le programme encodé peut être contrôlé/relu avec "d 8000".
Au delà de $8005, les instructions sont aléatoires (comme le contenu de la mémoire). Cela n'a pas d'importance puisqu'elle ne seront pas exécutées (grâce au RET).
* d 8000 8000: 3E D6 >. LD A,$D6 8002: 32 00 85 2.. LD ($8500),A 8005: C9 . RET 8006: 8E . ADC A,(HL) 8007: A9 . XOR C 8008: A0 . AND B
Etape 4: Exécuter et résultats
Nous pouvons maintenant exécuter le programme avec "g 8000" (Go 8000).
*g 8000 *
Le programme n'affiche rien mais fait son job. Nous pouvons à nouveau inspecter le contenu de la mémoire à l'adresse $8500 (là où nous avons écrit le $D6)
*m 8500 8500: D6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8570: 00 33 79 0C 50 80 3C 4B B0 9A CC 12 80 7C 10 5A .3y.P.<K.....|.Z
Voilà, c'est tout pour notre premier programme assembleur.
Le prochain article se penchera sur les modes d'adressages.
Dominique
Écrire un commentaire