www.cpcalive.com
Click here for english documentation
Pulsar aquí para la documentación en español





                                                                                                                                                                  
                                                    
* CpcAlive V1.08b *  DOCUMENTATION *
                                                                                                                                                                                                                      
note: Cette documentation ne concerne que les informations nécessaires à l'utilisation de l'émulateur CpcAlive. Une démonstration, des documentations sur l'exploitation du Cpc et sur les interruptions Bios et Dos, un assembleur Z80 ainsi qu'un assembleur X86 sont disponibles sur le site internet: www.cpcalive.com
                                                                                                                                                                                                                      

SOMMAIRE

I - Initialisations CpcAlive

II - Commandes à partir de la ligne de commande Dos:
        CpcAlive [fichier_d_entrée[:X]] [commande CpcAlive] [commande Cpc] [>fichier_de_sortie]
    - 1 - [fichier_d_entrée[:X]]
        - 1a - Chargement disquettes virtuelles au format .DSK -
        - 1b - Chargement  ROMs CPC -
        - 1c - Chargement fichiers au format intel hex  -
        - 1d - Chargement de fichiers de commandes CpcAlive
        - 1e - Chargement de fichiers au format texte
    - 2 - [commande Cpc] = commande Cpc
    - 3 - [>fichier_de_sortie]
III - Commandes à partir de l'interpréteur basic du CPC
IV- Marqueur :D (comme 'D'atas)
V - CARACTèRES ACCENTUéS
VI - ACCES AUX INTERRUPTIONS DU BIOS ET DU DOS VIA Z80
VII - ENVIRONNEMENT X86
VIII - PROGRAMMES UTILITAIRES
    - 1 - CreaDisc.bas: Crée une disquette virtuelle vierge au format data.
    - 2 - AniCrea.exe: Crée un fichier d'animation au format .FLI
    - 3 - Fli2Gif.exe: Pour lire un fichier d'animation au format .FLI (entre autre)
IX - EVOLUTION CPCALIVE

                                                                                                                                                                                                                      

I - Initialisations CpcAlive:
Crée un répertoire CpcAlive sur ton disque dur puis décompresse le fichier CpcAliveV1.08b.zip dans ce répertoire.

= Icône de lancement de l'émulateur CpcAlive
= Icône de lancement du système Dos sous Windows
Pour lancer l'émulateur CpcAlive à partir du bureau, crée un raccourci avec l'icône nommé CpcAlive.

Si un message "Ems error" s'affiche:
Windows émule la mémoire Ems mais ceci n'est pas forcément fait dans la configuration par défaut. Pour corriger cela,  referme la fenêtre et clique sur l'icône de lancement avec le bouton droit de la souris et séléctionne: "Propriétés", "Mémoire", "Mémoire paginée(EMS)>automatique".
Une autre solution est de faire la même chose avec le fichier "_default.pif" du répertoire "WINDOWS" (fichier nommé "_default" muni de l' icône MS-DOS
). Windows autorisera ainsi l'utilisation de la mémoire Ems pour tous les programmes Dos.

Remarques:
       - Les roms Amstrad ont un copyright, tu ne peux donc normalement
utiliser le programme CpcAlive seulement si tu possèdes un ordinateur Amstrad Cpc 6128 en état de fonctionner.
       - Les couleurs PAPER et PEN 1 ont été modifiées à l'initialisation pour des raisons d'ergonomie (moins fatiguantes pour les yeux).

II - Commandes à partir de la ligne de commande Dos:

CpcAlive [fichier_d_entrée[:X]] [commande CpcAlive] [commande Cpc] [>fichier_de_sortie]
ou
! [fichier_d_entrée[:X]] [commande
CpcAlive] [commande Cpc] [>fichier_de_sortie]


- 1 - [fichier_d_entrée[:X]]
~~~~~~~~~~~~~~~~~~~~~~~

fichier_d_entrée = disquette virtuelle au format .DSK  ( voir chapitre - 1a - )
                      ou  fichier Rom Cpc                           ( voir chapitre - 1b - )
                      ou  fichier au format intel hex              ( voir chapitre - 1c - )
                      ou  fichier de commande                     ( voir chapitre - 1d - )
                      ou  document texte                             ( voir chapitre - 1e -  )

X = voir chapitres 1a,1b et 1c

notes:
       - Les commandes de chargement de fichiers sont aussi disponibles à partir de
         l'interpréteur basic du Cpc avec l'instruction:

                   |INPUT,"fichier_d_entrée[:X]"[,@er%]

         Le paramètre de retour d'erreur @er% est faculatif. S'il est mis,
         la signification des valeurs récupérées dans la variable er% sont:
         0 = ok
         1 = erreur dans les paramètres
         2 = chemin non trouvé
         Ne pas oublier d'initialiser er% au départ du programme ou avant
         la commande.

         ex:    10 er%=0
                 20 |INPUT,"Disque.dsk",@er%
                 30 if er%<>0 then PRINT"ERREUR":STOP

       - Il est possible de mettre plusieurs noms de fichiers à la suite, il suffit de les séparer
         d'un espace. Dans ce cas, le code d'erreur er% concernera seulement le dernier
         fichier mentionné.


- 1a - Chargement disquettes virtuelles au format .DSK -

Faire suivre le nom de fichier du marqueur :A ou :B pour choisir le lecteur
destination.
(lecteur A par défaut)

ex: ! disque.dsk:A

Cette commande lance l'émulateur en chargeant la disquette virtuelle "disque.dsk" dans le
lecteur A.

note: pas d'espace entre le nom de fichier et le marqueur.

- 1b - Chargement  ROMs CPC -

Faire suivre le nom de fichier du marqueur :R.
CpcAlive recherchera le premier emplacement disponible.
CpcAlive accepte 256 roms supérieures. Ces 256 roms sont toutes reconnues par le système Cpc.

Charger une rom dans l'émulateur: 3 solutions

- Chargement à partir de la ligne de commande Dos:
       ! Z80ROM.
ROM:R
- Chargement à partir d'un fichier de commandes CpcAlive:
      
Z80ROM.ROM:R
- Chargement à partir de l'interpréteur basic du Cpc:
       |INPUT,"
Z80ROM.ROM:R":call 0

Au cas il est nécessaire d'avoir un numéro
d'emplacement fixe, remplacer la lettre "R" par le numéro d'emplacement désiré.
exemple à partir de la ligne de commande du dos:Z80ROM.ROM:10

notes:
- Les marqueurs doivent être indiqués en majuscules
- Le chargement des roms avec la commande |INPUT à partir de l'interpréteur basic ne sera pris en compte par le système Cpc seulement aprés une réinitialisation du Cpc par exemple avec un CALL 0 ou en actionnant la séquence de touches [CTRL][ALT][Home]
- Les numéros de roms déja utilisés par le Cpc sont 0 pour la rom basic et 7 pour la rom disque
- Les modules X86
(voir chapitre "Environnement X86") intégrant des mnémoniques utilisent aussi des emplacements de roms Z80. Les roms Z80 avec un  numéro d'emplacement spécifique doivent donc être chargées avant les modules X86, le meilleur moyen d'éviter les conflits étant de les charger au début du fichier de commandes ROM.INI situé dans le répertoire principal.

- 1c - Chargement fichiers au format intel hex  -

Chargement en rom:
Faire suivre le nom de fichier du marqueur :X où X représente le numéro
de rom destinataire.

ex: ! hex.obj:10 pour charger dans la rom numéro 10

note: Si la rom destinataire n'existe pas, CpcAlive la crée, il est alors possible d'utiliser le marqueur :R (voir chapitre "Chargement roms Cpc")
            
Chargement en ram:
Faire suivre le nom de fichier du marqueur :X où X représente le type
de configuration
de la ram destinataire.
Les valeurs hexadécimales valides pour le chargement en ram sont:
                0C0h,0C1h,0C2h,0C3h,0C4h,0C5h,0C6h et 0C7h

Tableau montrant le positionnement des blocs ram en foncion du type
de configuration:

                type      positions blocs
                0C0h          0,1,2,3
                0C1h          0,1,2,7
                0C2h          4,5,6,7
                0C3h          0,3,2,7
                0C4h          0,4,2,3
                0C5h          0,5,2,3
                0C6h          0,6,2,3
                0C7h          0,7,2,3

note: - Par défaut, le chargement se fait en ram avec la configuration 0C0h

- 1d - Chargement de fichiers de commandes CpcAlive

Les commandes internes de l'émulateur valides à partir de la ligne de commande du système Dos ou d'un fichier de commandes CpcAlive sont:

CpuFast                    ; vitesse maxi (par défaut)
CpuSlow                   ; vitesse
normale (vitesse de l'ordinateur Cpc)
Sleep                        ; mise en veille de l'émulateur         [AltGr][S]
Exit                          ; quitter l'émulateur                       
[Ctrl][Alt][Fin]
ROM=X                   ; sélectionner une rom supérieure (X=0à255)
                                ; (X=256 pour sélectionner la rom Bios du Cpc)
RAM=X                   ; sélectionner type RAM
                                ; voir chapitre II - 1c - "Chargement en ram"
                                ; pour les valeurs de configuration disponibles.
:LLAAAA00DDDD   ; ligne au format intel hex
                                ; pour info:  LL=taille bloc
                                ;                 AAAA=adresse de départ
                                ;                 00 toujours 00
                                ;                 DDDD=datas


exemple à partir de la ligne de commande du Dos:
Sélectionner la rom bios et poker la valeur 2 en 0B13h (mode écran de démarrage), puis sélectionner la vitesse lente:

! ROM=256
:010B130002 CpuSlow

(ne pas oublier l'espace entre les commandes)

Si une commande n'est pas reconnue elle sera interprétée comme une commande Cpc, ainsi que le reste de la ligne. Il est ainsi possible d'ajouter une ou plusieurs commandes Cpc à la suite des commandes CpcAlive. (seulement à partir de l'interpréteur Dos.)

exemple

! ROM=256 :010B130002 CpuSlow PRINT"OK"

notes:
- les commandes CpcAlive doivent êtres séparées par un espace.
- le crc normalement présent dans le standard Intel Hex n'est pas obligatoire ici.
- poker en ram dans les blocs 0,1,2 ou 3 avant l'initialisation du système Cpc est inutile puisque celle-ci est effacée au démarrage. (sauf adresses 0BE00h à 0BFFFh). Pour poker en ram
avec des lignes intel hex à partir de la ligne de commande du Dos, il faut que le système ait été lancé puis mis en veille auparavant.


fichiers de commandes

Ces fichiers sont destinés, comme leur nom l'indique, à commander l'émulateur à partir d'un fichier. Ce fichier doit commencer par la séquence "CDE:" sans les guillemets(entête).
Un bon exemple est le fichier ROM.INI qui est un fichier de commande qui est destiné à l'initialisation de l'émulateur. C'est à partir de celui-ci que sont chargées par exemple les roms du Cpc. Chaque ligne est interprétée de la même manière que pour les commandes CpcAlive à partir de la ligne de commande Dos. Noter la présence du séparateur ';' pour les commentaires.

Deux commandes internes sont ajoutées:

EndCde       : Indique la fin d'un fichier de commande. (facultatif)

KeyBoard    : Pour passer du mode "commandes CpcAlive" au mode "émulation clavier" (voir chapitre - 1e -). Il sera possible de rétablir l'interprétation du fichier en mode "commande" grâce à l'instruction |COMMAND.

notes:
- les commandes EndCde et KeyBoard rétablissent la configuration mémoire du Cpc effective au lancement du fichier de commandes ou de la séquence de commandes.
- ne pas utiliser la commande "KeyBoard" dans le fichier ROM.INI
- le fichier de commandes CPC.INI situé dans le répertoire principal est un fichier utilisateur qui est exécuté à chaque lancement de l'émulateur et peut donc recevoir des commandes de configuration. Ce fichier n'est éxécuté qu'une seule fois et ne sera donc pas rééxécuté dans le cas d'un relancement de l'émulateur après une mise en mode "veille".


exemple 1:

CDE:                ; entête fichier de commandes CpcAlive
ROM=256        ; sélection rom bios
:010B130002    ; poker la valeur 2 en 0B13h (mode écran de démarrage)
EndCde            ; ferme le fichier de commande

exemple 2:

CDE:                ; entête fichier de commandes CpcAlive
ROM=256        ; sélection rom bios
:010B130002    ; poker la valeur 2 en 0B13h (mode écran de démarrage)
KeyBoard        ; à partir d'ici chaque caractère est transmis au gestionnaire clavier du Cpc.
PRINT"OK"

exemple 3:

PRINT"OK1"
|COMMAND
    ; à partir d'ici le fichier est interprété par l'interpréteur de commandes CpcAlive
ROM=256        ; sélection rom bios
:010B130002    ; poker la valeur 2 en 0B13h (mode écran de démarrage)
KeyBoard        ; à partir d'ici chaque caractère est transmis au gestionnaire clavier du Cpc.
PRINT"OK2"



- 1e - Chargement de fichiers au format texte

Au cas ou le type de fichier n'est pas reconnu par CpcAlive comme étant un des fichiers détaillés plus haut, CpcAlive considère qu'il s'agit d'un fichier au format texte. CpcAlive traite ces fichiers de maniére simple. Chaque caractère du document
est lu, puis envoyé au gestionnaire clavier du système Cpc. Tu peux donc transmettre par cette fonction un fichier basic au format texte ou même commander un programme tournant déja dans l'émulateur à partir d'un fichier texte.

exemple à partir de la ligne de commande du dos:

! exemple.bas

Cette commande charge le programme nommé exemple.bas s'il existe, à travers le gestionnaire clavier du Cpc. Dans cet exemple, le fichier "exemple.bas" est situé dans le répertoire CpcAlive.  Si le fichier n'existe pas, la chaîne "exemple.bas" sera transmise au gestionnaire clavier du Cpc, ce qui débouchera vraisemblablement sur un message "Syntax error".

exemple à partir de l'interpréteur basic:

mode 2
10 |Input,"FILE_ID.DIZ"
20 line input a$:if a$="" then |STOP:end else goto 20
run

Cet exemple charge le document "FILE_ID.DIZ" jusqu'à ce qu'il rencontre une ligne vide. La commande |STOP ferme le fichier.

note:   L'ouverture d'un fichier texte ferme définitivement le fichier texte précédemment ouvert s'il y en avait un.


- 2 - [commande Cpc] = commande Cpc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Les commandes Cpc doivent toujours être placées en dernier dans la ligne de commande.

ex: ! PRINT"OK"
Lance l'émulateur et passe la commande PRINT"OK" au Cpc, à travers le gestionnaire
clavier du Cpc.

Cas particulier:
Le caractère '|' (obtenu en actionnant en même temp la touche [ALT GR] et
et la touche [6] en haut du clavier) est une commande dos. CpcAlive utilise
donc un caractère de substitution qui est le '§' situé juste à gauche de la
touche [SHIFT DROITE].

ex: ! §DISC
Lance l'émulateur et passe la commande |DISC au Cpc.

Remarque:  Cette touche de substitution sera toujours utilisée dans CpcAlive en
                  raison de sa facilité d'accès. Tu peux donc te servir de ce
"raccourci
                  clavier" à partir de la ligne de commande du basic du Cpc.

Il existe d'autres caractères réservés par Dos comme le '<' ou '>' qui ne
pouront donc pas êtres utilisés comme commande Cpc à partir de la ligne de
commande Dos. Pour plus d'information, lire la documentation du système Dos.


- 3 - [>fichier_de_sortie]
~~~~~~~~~~~~~~~~~~~~~
Par défaut la sortie imprimante du Cpc se fait dans le fichier CPC.PRN situé dans le répertoire principal. Cette commande redirige cette sortie vers le fichier_de_sortie. La commande équivalente à partir de l'interpréteur Cpc est la suivante:

|OUTPUT,"fichier_de_sortie"[,@er%]

Le paramètre de retour d'erreur @er% est faculatif. S'il est mis,
la signification des valeurs récupérées dans la variable er% sont:
0 = ok
1 = erreur dans les paramètres
3 = chemin non trouvé
4 = plus de handle disponible
5 = accès refusé
(Ne pas oublier d'initialiser er% au départ du programme ou avant la commande)

exemple à partir de la ligne de commande du dos:

! PRINT#8,"OK" inscrit le mot "OK" dans le fichier Cpc.prn
! PRINT#8,"OK">test.prn inscrit le mot "OK" dans le fichier test.prn

notes: 
- Un seul caractère '>' avant fichier_de_sortie indique au Dos qu'au cas ou le nom du fichier_de_sortie existe déjà, ce fichier sera recrée vierge avant de recevoir les données. (L'ancien fichier_de_sortie du même nom étant effacé sans préavis... prudence). Deux caractères '>>' avant fichier_de_sortie indique au Dos qu'il doit conserver le fichier et mettre les nouvelles données à suivre. (Il n'existe pas pour l'instant de commande équivalente à partir de l'interpréteur basic du Cpc)
           - le fichier Cpc.prn est vidé à chaque lancement de l'émulateur.

exemple à partir de la ligne de commande du dos:

! PRINT#8,"OK1":§Exit>test.prn inscrit le mot "OK1" dans le fichier test.prn
! PRINT#8,"OK2":§Exit>>test.prn inscrit le mot "OK2" à suivre dans le fichier test.prn

Le résultat dans le fichier test.prn donne:
OK1
OK2

Un petit programme qui redirige la sortie CATalogue vers le fichier de sortie:

10 POKE &BB5C,PEEK(&BD2D):POKE &BB5B,PEEK(&BD2C)
20 CAT
30 CALL &BD37:|DISC
RUN


III - Commandes à partir de l'interpréteur basic du CPC:

|CpuFast                    = vitesse maxi
|CpuSlow                   = vitesse normale (vitesse de l'ordinateur Cpc)
|Sleep                        = mise en veille de l'émulateur         [AltGr][S]
|Exit                          = quitter l'émulateur                        [Ctrl]
[Alt][Fin]
|Command                 = passe du mode "clavier" au mode "commande CpcAlive"
                                    (voir chapitre II paragraphe - 1d -)
|INPUT,"nom_de_fichier[:X]"[,@er%]
                                = charger un fichier (voir chapitre II paragraphe - 1 -)
|STOP                      = voir chapitre II paragraphe - 1e -
|GO,"chaine"[,@er%]
= déplacer le pointeur de fichier_d_entrée (voir chapitre IV)
|OUTPUT,"fichier_de_sortie"[,@er%]
                                = démarrer un nouveau
fichier_de_sortie (voir chapitre II paragraphe - 4 -)
|OUTASCDOS          = voir chapitre V
|OUTASCWIN          = voir chapitre V
|OUTASCOFF           = voir chapitre V
|PRINT,"chaine"        = sort une chaine de caractères vers fichier_de_sortie.
                                   Commande équivalente à la commande PRINT#8,"chaine";
|LPRINT,"chaine"     = sort une chaine de caractères vers fichier_de_sortie suivi
                                   d'un retour à la ligne.
                                   Commande équivalente à la commande PRINT#8,"chaine"
|INK,PEN,R,V,B       = change couleur PEN. Les lettres R,V,B représentent les
                                   composantes Rouge,Vert et Bleu comprises entre 0 et 255.
                                   ex: |INK,0,0,255,0 (change couleur PAPER)
                                   ex: |INK,1,255,0,0 (change couleur PEN 1)
|INKRESTORE         = restore encres originales.
|INKCPC                  = encres standard Cpc
|INKSOFT                = encres CpcAlive (encres par défaut)
                                   La palette est la même que la palette standard Cpc mais avec moins
                                   de luminosité, et
les valeurs Paper et Pen 1 sont modifiées au
                                   démarrage.
|OBMP,"nom_de_fichier"[,@er%]
                                = fabrique un fichier image de l'écran Cpc au format BMP
                                   - voir commande |OUTPUT pour la signification des codes
                                     d'erreurs.
CALL 0                    = réinit système Cpc [CTRL][ALT][Home]


IV- Marqueur :D
(comme 'D'atas)


Le marqueur :D
(comme 'D'atas) à la suite du nom de fichier indique à l'émulateur qu'il doit transmettre la valeur au format décimal de chaque octet du fichier précédent le marqueur, à travers le gestionnaire clavier du Cpc. Cette fonction à été développée pour permettre de traiter aisément les données d'un fichier à partir de l'interpréteur basic du Cpc.

Comme exemple, voici un petit programme dont la fonction est de lire quelques octets du fichier ROM.INI et de les afficher au format hexadécimal:

10 mode 2:window#0,1,80,2,25:window#1,1,80,1,1
20 |Input,"ROM.INI:D"
30 for i=0 to 100
40 input#1,a:Print hex$(a,2)" ";
50 next i
60 |STOP
run

La  commande |GO,"chaine"[,@er%] déplace le pointeur de fichier.
Dans ce cas, "chaine" représente la valeur du déplacement par rapport au début
du fichier.
Le paramètre de retour d'erreur @er% est faculatif. S'il est mis,
la signification des valeurs récupérées dans la variable er% sont:
0 = ok
1 = erreur
(Ne pas oublier d'initialiser er% au départ du programme ou avant la commande)

ex: |GO,"&100"   déplace le pointeur de fichier à la position
&100.
                          La valeur maximale est &FFFFFFFF
                          Cette valeur peut-être aussi écrite en décimal.



V - CARACTèRES ACCENTUéS

Initialisation à partir du Dos pour obtenir un clavier accentué:

! Accent.ini

Le fichier Accent.ini se termine par la commande |sleep, il faudra donc relancer l'émulateur à partir du Dos à la suite de cette commande.
Le fichier Accent.ini est un document texte composé de commandes basic facilement intégrables dans les programmes basics.

|OutAscDos et |OutAscWin à partir du Basic Cpc indiquent à l'émulateur qu'il
doit convertir les caractères 192 à 204 (redéfinis dans le fichier ROM.INI)
avant de les diriger vers le fichier_de_sortie:
Pour opérer une conversion texte au format Dos vers le fichier_de_sortie: |OutAscDos
Pour opérer une conversion texte au format Windows vers le fichier_de_sortie: |OutAscWin

Pour annuler cette conversion: |OutAscOff (Commande par défaut)
(Utile si l'on utilise le fichier_de_sortie pour autre chose que du texte).

Les caractères sont redéfinis de la façon suivante:
caractère:                ë     ù     û    ô     É    é     è     ê     à    â     ç     î      ï
ascii Cpc redéfini:   192 193 194 195 196 197 198 199 200 201 202 203 204
ascii dos:                137 151 150 147 144 130 138 136 133 131 135 140 139
ascii windows:        235 249 251 244 201 233 232 234 224 226 231 238 239

exemple:
Pour convertir le document "CreaDisc.bas" (qui est un document texte au format ascii Dos) au format ascii windows, entre la séquence qui suit à partir de la ligne de commande Dos:

! Accent.ini
!>CreaDisc.win

Puis à partir de l'interpréteur basic du Cpc:

mode 2
|OutAscWin
10 |Input,"CreaDisc.bas"
20 line input a$
30 |Lprint,a$:if a$<>"" then 20
run

Le résultat se trouve dans le fichier CreaDisc.win
après éxécution. (Seul les caractères redéfinis plus haut sont reconvertis)



VI - ACCES AUX INTERRUPTIONS DU BIOS ET DU DOS VIA Z80

Les interruptions du Bios et du Dos sont accessibles grâce à des opcodes spécifiques à l'émulateur CpcAlive à travers le microprocesseur Z80 émulé et une correspondance entre les registres Z80 et X86.
Tableau de correspondances:     registres Z80     
registres X86
                                               F                 >   Flags
                                               A                 >   AL
                                               BC               >   CX
                                               DE               >   DX
                                               HL               >   BX
                                               IX                >   SI
                                               IY                >   DI

CpcAlive ajoute un registre au Z80 nommé AH correspondant au registre AH des processeurs X86, et trois nouveaux opcodes.

opcode:             mnémonique:     fonction:
040h,052h        LD AH,A
          charge la valeur du registre A dans le pseudo registre AH
040h,05Bh        LD A,AH          charge la valeur du pseudo registre AH dans le registre A
040h,049h,xx    INT(xx)             appel interruption numéro xx

exemple de macros (ici pour l'assembleur 8 bits tasm)

#define LD_AH_A         .db 040h\ .db 052h
#define LD_A_AH         .db 040h\ .db 05Bh
#define INT(xx)             .db 040h\ .db 049h\ .db xx

exemple:
; ** SORTIE PIXEL A TRAVERS INT 010H **
OutPix:     ld de,12                  ; coordonnée Y
                ld bc,24                  ; coordonnée X
                ld a,0Ch                 ; FONCTION 0CH = ECRIRE UN POINT GRAPHIQUE
                LD_AH_A              ; charge la valeur du registre A dans
                                              ; le pseudo registre AH
                ld a,3                      ; couleur demandée
                INT(010h)              ; APPEL INTERRUPTION BIOS 010H
                ret

La correspondance des registres Z80-X86 est respectée au retour de l'interruption excepté pour les registres IX et IY qui ne sont jamais modifiés.
Si les segments ES et DS sont nécessaires en entrée, ils réfèrent à la ram (ou rom) du cpc. Les rares fonctions Bios ou Dos retournant des valeurs de sortie dans les registres de segment ou dans les registres DI et SI ne sont pas utilisables via le Z80 ainsi que les fonctions de l'interruption Bios 010h qui ne gère que les fonctions suivantes:

Fonction 02h // Positionnement du curseur //
Fonction 03h // Lecture de la position du curseur //
Fonction 09h // Ecriture d'un caractère avec couleur //
Fonction 0Ah // Ecriture d'un caractère avec couleur //
Fonction 0Bh // Sélection de la couleur du cadre et du fond //
Fonction 0Ch // Ecrire un point graphique //
Fonction 0Dh // Lire un point graphique //
Fonction 0Eh // Ecriture d'un caractère //
Fonction 10h - sous fonction 00h // Fixer un registre de palette //
Fonction 10h - sous fonction 02h // Fixer tous les registres de palette //
Fonction 10h - sous fonction 07h // Lire un registre de palette //
Fonction 10h - sous fonction 09h // Lire le contenu de tous les registres de palette et du registre overscan //
Fonction 10h - sous fonction 10h // Charger un registre de couleur DAC //
Fonction 10h - sous fonction 12h // Charger plusieurs registres de couleur DAC //
Fonction 10h - sous fonction 15h // Lire un des registres de couleur DAC //
Fonction 10h - sous fonction 17h // Lire le contenu de plusieurs registres de couleur DAC //
Fonction 10h - sous fonction 1Bh // Convertir le contenu des registres de couleur DAC en nuances de gris //
Fonction 13h // Sortie d'une chaîne de caractères //

note: Les registres de palette correspondent aux 16 pinceaux (PEN) du Cpc et les registres DAC correspondent aux 32 encres (INK) du Cpc. L'émulateur ignore la programmation du registre overscan (BORDER) qui sera  toujours de la même couleur que le fond de l'écran (PEN 0).

Le fichier Z80IOPix.bas situé dans le répertoire "EX" est un exemple de commandes RSX utilisant les appels d'interrution du Bios. Ce fichier est un fichier de commande CpcAlive éditable à l'aide d'un éditeur de texte. Les explications ainsi qu'un listing sont inclus.
appel à partir de la ligne de commande Dos:     !
EX\Z80IOPix.bas
appel à partir de l'interpréteur basic:     |input,"EX\Z80IOPix.bas"

notes:    - le périphérique de sortie standard est toujours l'écran.
            - la ram du cpc se situe dans le segment EMS. Les fonctions EMS  seront donc à utiliser avec précaution.


                                                                                                                                                                                                                      
note: Une documentation sur les interruptions du bios et du dos, ainsi que l'assembleur 8 bits "tasm" est disponible en téléchargement sur le site internet: www.cpcalive.com
                                                                                                                                                                                                                      



VII - ENVIRONNEMENT X86

Il est possible de programmer l'émulateur CpcAlive en assembleur X86.
CpcAlive accepte 256 modules de 64K maximum.
Un module est un programme au format .EXE ou .COM avec une table située à l'adresse 0200h dans le code du programme. Cette table doit être constituée comme ceci:

org 0200h
                db 'X86CPC'                 ; 0200h marque
                dw 0                             ; 0206h version
                dw offset X86Vec          ; 0208h adresse table vecteurs d'entrée
                dw 0                             ; 020Ah réservé système CpcAlive
                dw 0                             ; 020Ch réservé système CpcAlive
                dw 0                             ; 020Eh réservé système CpcAlive
                dw offset MnemoTb      ; 0210h offset mnémoniques
                db -1                             ; 0212h (*) reçoit le numéro de module X86
                db -1                             ; 0213h réservé système CpcAlive
                db -1                             ; 0214h
(*) reçoit le numéro de la rom Z80 associée
                db -1                             ; 0215h réservé système CpcAlive
                dw 0                              ; 0216h
(*) reçoit la première adresse Cpc accessible (0=aucune adresse accessible)
                db 0100h-018h dup (0)   ; 0218h réservé système CpcAlive

;
(*) = valeurs générées par le système.

; table de mnémoniques
MnemoTb db "MNEMO","1" or 080h          ; |MNEMO1
                db "MNEMO","2" or 080h          ; |MNEMO2
                db 0

; table
vecteurs d'entrée
X86Vec    dw offset routine1           ; 00 1ère routine
               
dw offset routine2           ; 01 2ème routine
                ;... 128 vecteurs maximum

; les sous programmes X86 doivent être déclarés en "far"
routine1 proc far    ; ** ROUTINE APPELEE PAR L'INSTRUCTION BASIC |MNEMO1 **
                ;... code X86
                retf
routine1 endp
routine2 proc far    ; ** ROUTINE APPELEE PAR L'INSTRUCTION BASIC |MNEMO2 ** 
                ;... code X86
                retf
routine2 endp


Fonctionnement:
Sur présence du vecteur MnemoTb à l'adresse 0210h, l'émulateur génère une rom Z80 intégrant la table de mnémoniques (MnemoTb) ainsi que ses vecteurs d'appel X86. Le premier vecteur de la table "X86Vec" correspondant à la première mnémonique est le vecteur d'initialisation qui est appelé à chaque initialisation du système Cpc. Chaque mnémonique correspond à un vecteur de cette table (dans l'ordre). La fin de chaque mnémonique est indiquée grâce à la présence du bit 7 sur la dernière lettre de la mnémonique. La table ne doit pas dépasser 128 mnémoniques et doit être terminée par un octet nul.
Note: Il est aussi possible d'appeler les routines X86 depuis la Ram Cpc à travers des opcodes Z80 (voir plus bas). Au cas où l'utilisation de mnémoniques d'appel n'est pas nécessaire, remplacer le vecteur "MnemoTb" par un mot nul (adresse 0210h).

Le fichier X86IOPix.asm situé dans le répertoire "EX" est un exemple complet. C'est ce fichier qui a généré le module X86IOPix.com situé dans le même répertoire mais il peut aussi être compilé au format .EXE
Chargement à partir de la ligne de commande Dos:     ! EX\X86IOPix.com


Charger un module dans l'émulateur: 3 solutions

- Chargement à partir de la ligne de commande Dos:
       ! MODULE.COM
- Chargement à partir d'un fichier de commandes CpcAlive:
      
MODULE.COM
- Chargement à partir de l'interpréteur basic du Cpc:
       |INPUT,"
MODULE.COM":call 0


Appeler une routine X86 via opcodes Z80:

L'appel d'une routine X86 à partir de la ram (ou rom) du Cpc se fait à l'aide de l'opcode 049h suivit du numéro de module, puis du numéro de vecteur. 
Par exemple si l'on veut appeler "routine2" (vecteur numéro 1) dans l'exemple ci-dessus, en considérant que l'émulateur ait chargé le module à l'emplacement 010h, cela donnera l'opcode Z80: 049h,010h,001h

notes:
 - le numéro de module est indiqué à l'adresse 0212h de la table d'environnement X86 (voir plus haut)

          - le numéro de vecteur doit être compris entre 0 et 127. Si le bit 7 est mis, une instruction "RET" sera simulée au retour de la routine X86. Le fonctionnement devient ainsi similaire à une instruction de saut "JP".


Les valeurs des registres du Z80 sont retransmises aux routines X86 de cette manière:
registres Z80      registres X86
  F                 >   Flags
  A                 >   AL
  BC               >   CX
  DE               >   DX
  HL               >   BX
  IX                >   SI
  IY                >   DI

Le pseudo registre Z80 AH décrit au chapitre précédent est aussi transféré
Les registres de segment CS,DS et ES adressent la mémoire du Cpc.
Les registres de segment FS et GS sont indéterminés.
Les valeurs des registres X86 au retour de la routine seront retransmises au Z80 de la même manière.

L'accès à la mémoire du Cpc dépend de la taille du module. En effet, les modules sont chargés et exécutés au même emplacement que la mémoire du Cpc (segment Ems). La première adresse Cpc accessible
est indiquée à l'adresse 0216h de la table d'environnement X86.

notes: - les adresses Cpc inférieures à 04000h ne sont jamais accessibles.
          - l'interruption du Bios INT 10H n'accepte que les fonctions décrites au chapitre précédent.
          - le périphérique de sortie standard est toujours l'écran.
          - étant donné que les modules sont exécutés dans le segment EMS,
les fonctions EMS sont donc à utiliser avec précaution.


VIII - PROGRAMMES UTILITAIRES

- 1 - CreaDisc.bas: Crée une disquette virtuelle vierge au format data.

Commande à partir de la ligne de commande dos:
! CreaDisc.bas>nom_disquette.dsk

- 2 -
AniCrea.exe: Crée un fichier d'animation au format .FLI
Syntaxe sous Dos: AniCrea fichier_d_entrée [fichier_de_sortie]
fichier_d_entrée =générateur Basic (.BAS)
fichier_de_sortie=fichier résultat (.FLI)

Syntaxe Basic:
|ANICREA,OUTPUT_NAME$[,@er%]
- démarre le fichier de sortie
Le paramètre de retour d'erreur @er% est faculatif. S'il est mis, la signification des valeurs récupérées dans la variable er% sont:
0 = ok
1 = erreur
nombre de paramètres
3 = chemin non trouvé
4 = plus de handle disponible
5 = accès refusé
6 = handle non autorisé
(Ne pas oublier d'initialiser er% au départ du programme ou avant la commande)

|ANISPEED,vitesse d'animation comprise entre 0 et 65535

|FRAMEOUT[,@er%]                          - génère une image
Le paramètre de retour d'erreur @er% est faculatif. S'il est mis, la signification des valeurs récupérées dans la variable er% sont:
0 = ok
1 = erreur nombre de paramètres
2 = pas de fichier ouvert
3 = erreur d'écriture dans le fichier de sortie

|ANICLOSE[,@er%]                            - ferme le fichier de sortie
Le paramètre de retour d'erreur @er% est faculatif. S'il est mis, la signification des valeurs récupérées dans la variable er% sont:
0 = ok
1 = erreur
nombre de paramètres
2 = erreur d'accès au fichier

La commande Dos "AniCrea demo.bas" crée le fichier animation DEMO.FLI


- 3 - Fli2Gif.exe: Pour lire un fichier d'animation au format .FLI (entre autre)
Pour plus d'information lire la documentation Fli2Gif.doc


Appel âmes de développeurs
Les personnes qui désirent diffuser leurs programmes pour CpcAlive peuvent me les mettres dans ma bal: cpcalive@aol.com
Les programmes seront diffusés soit dans les prochaines versions CpcAlive, soit sur le site CpcAlive si je les juges intéressants. Les démonstrations si possible spécifiques à l'émulateur CpcAlive seront bienvenues. Les auteurs seront informés des nouvelles versions de CpcAlive. Merci d'avance

CpcAlive est un programme shareware.
Les personnes qui désirent participer peuvent faire un don libre ici:
Office Chrétien des personnes Handicapées
(Association sans lien avec l'auteur du programme)
La version enregistrée supprime le logo sur les sorties écran (BMP & FLI)
Pour la recevoir, il suffit de renvoyer une image scannée du reçu fiscal ici: cpcalive@aol.com
merci



IX - EVOLUTION CPCALIVE

V1.08b             13/04/2006   - importante correction
V1.08               07/04/2006   - intégration totale de l'implémentation des instructions RSX
                                             dans l'environnement X86
                                           - amélioration gestion clavier
                                           - corrections
V1.07MMM     08/12/2005   - plus de fonctions Bios et Dos acceptées.
V1.07MM        19/11/2005   - corrections
V1.07M           16/11/2005   - correction environnement de programmation X86
V1.07L            10/11/2005   - intégration environnement de programmation X86
V1.07k             27/09/2005   - amélioration de l'interpréteur de commandes
V1.07j              28/07/2005   - accès aux interruptions Bios et Dos via instructions Z80
V1.07i              07/2005        -
ajout d'un module de création de fichiers d'animations FLI
V1.07h             05/2005        - palette 262144 couleurs
                                            - ajout commandes
|INK,PEN,R,V,B et |INKRESTORE
V1.07g             04/2005        - ajout des fichiers .PIF d'initialisation du systême Dos pour
                                             Windows 9X.
V1.07               04/2005        - ajout des fichiers .PIF d'initialisation du systême Dos pour
                                              Windows XP.
V1.06               03/2005
       - correction gestion écran.
V1.05               02/2005        - corrections diverses.
V1.04               02/2005        - corrige bug chargement fichiers .dsk (format étendu)
V1.03               01/2005        - corrige bug V1.02 (chargement disquettes virtuelles impossibles
                                              avec les marqueurs :A ou :B)
V1.02               01/2005        - accepte notation avec préfixe "&" pour valeurs hexadécimales .
                                            - accepte notation avec préfixe "&X" pour valeurs binaires .
                                            - corrige quelque bugs:
                                              *valeurs décimales>9999 acceptées.
                                              *la commande "EndCde" rétablit la configuration mémoire
                                                effective au lancement d'un fichier de commande.
V1.01               01/2005         - corrections CpcAlive.doc chapitre 3 et 4.
                                             - corrige quelques bugs.
V1.0                12/2004          - première diffusion

END