CartographieMemoire

ROM

ROM 0 ou x : Mon'o'gams (Moniteur, trace, désassembleur)
ROM y : Orgams (Assembleur, éditeur)

Le choix du numéro pour chacune des ROM est arbitraire. Mon'o'gams fait office de 'Hackeur' burné en ROM 0.

Parmi ces programmes seul l'éditeur est dépendant du système (nécessaire pour lecture/sauvegarde).
Cela dit, on doit pouvoir utiliser le système depuis le moniteur, à l'instar du Hackeur.

ROM Monogams

C000-DFFF : Init ROM, installation Breakpoint, Trace (Madram), Routines manipulation mémoire.
E000-EFFF : Moniteur (Hicks)
F000-FBFF : Désassembleur
FC00-FFFF : Fonte.

Points d'entrée :
C100: Mon_init   Initialisation générale. 
C103: ...

RAM

La bank de travail principale est sélectionnable (eg : ùo,&c7). Sans précision, on utilise la dernière bank détectée (l'idée étant de bien séparer la mémoire d'usage, les xxx premiers Ko, susceptible d'être observée, de la mémoire de l'outil observateur !).
Dans cette bank, les adresses de travail sont fixes. Par rapport au système des RSX, il s'agit d'une solution de facilité, justement beaucoup plus pratique et efficace ! La cohabitation avec les prochains outils OVLs (ou autres !?) se fera en attribuant une bank différente à chacun. Ah ! Oppulence occidentale !
L'assembleur stockera le source dans les banks précédentes. Eg, &c6 et au besoin &c5, &c4, etc. Cet ordre découle du choix par défaut de la dernière bank comme bank de base.

Variables

7D00 Temp buffer
7E00 "Monogams" (signature : permet de détecter où et si déjà installé)
7E08 (Numeros Rom Monogams/Orgams pour bascule)
7E0A-7E0F Reservé
7E10-7E2F Routine copie
7E40-7E5F Routine lecture RAM (pour trace)
7E60-7E7F Variables travail Trace

7E80-7EFF Pile (suffisant pour assembleur ? A verifier)

Puis viennent les différents registres (IO ou Z80).
Les valeurs IO sont collectées lors de la trace, ou renseignées lors d'un arrêt MultifaceII. 
Elles se voient précédés d'un octet indiquant le nombre d'écritures détectées (avec saturation à 255).
Ainsi 0 signifie qu'on ne connaît pas la valeur !

PPI
7F00 : port A
7F02 : port B 
7F04 : port C
7F06 : port contrôle

Les trois valeurs suivantes ne sont pas associées à des compteurs,
car elles doivent être nécessairement assignées.
7F08 : ROM
7F09 : RMR (et mode graphique)
7F0A : MMR, suivi du port utilisé lors de la sélection (eg #c4, #7f)

7F0C : stylo
7F0E : encres suivi de border (2*17)
7F30 : vga last address (port utilisé lors du dernier accès VGA) 0000 si non collecté.
7F32 : dernière valeur envoyé au vga (valable si valeur précédente non nulle)

7F33-7F39 : réservé

Registres Z80 (pas de compteur ici !)
7F3A : IM  (présumé à 1)
7F3B : IFF (00=DI, FF=EI)
7F3C : PC, IR (ie R puis I en mémoire), IY, IX, HL', DE', BC', AF', HL, DE, BC, AF, SP (*)

(*) C'est assez arbitraire, mais cet ordre possède les propriétés suivantes :

  • Sauvegarde naturelle des registres lors d'un breakpoint (on sauve SP en regs+24, puis on push à partir de SP=regs+24)
  • Les registres secondaires sont en +8, et de façon parallèle les primaires en +16.
  • ~ Ordre alphabétique (inversé) en mémoire (l, h, e, d, c, b, f, a).

NB : je n'ai pas reproduit l'ordre utilisé dans la multifaceII (http://quasar.cpcscene.com/doku.php?id=dossier:mf2), car :

  1. je le trouve biscornu
  2. on s'en fout
Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License