CpcAlive est un environnement
de programmation compatible
Amstrad CPC pour création
d'animations graphiques.



 

 

English                                Español


«Je vous invite à vous ouvrir à moi et à devenir instruments...

... entre mes mains pour le salut du monde »

Cpc en ligne

Les mots clés du basic Cpc

Les messages d'erreur
du basic Cpc

La mémoire

La gestion des disquettes


Z80: opcodes et programmation

Installateur CpcAlive pour
Windows & DosBox




















* CpcAlive V1.16 *  DOCUMENTATION (V0.1)
Dernières revues:
V1.16 - 16/12/2014 - correction assembleur Z80
                             - ajoute "." devant directives 
LISTHEX,NOLIST,DEBUG,DUMP,TAB
V1.15 - 30/11/2014 - corrections
V1.14 - 20/11/2014 - affiche les fichiers sources dans le déboggeur Z80
                             - ajoute les directives IF, IFDEF, IFNDEF à l'assembleur Z80
                             - corrections
V1.13 - 20/9/2014 - amélioration de la commande basic TRON (débogueur BASIC) + corrections
V1.12 - 02/3/2014 - gestion de sources Basic avec étiquettes + corrections





.
Note: Cette documentation utilise deux types de notation des valeurs hexadécimales. La première notation est celle utilisée par le Cpc qui ajoute le signe "&" devant la valeur, ex:&3F. La deuxième notation ajoute la lettre "h" derrière la valeur, ex:3Fh.

SOMMAIRE (cliquez dans la marge de gauche pour revenir ici)

I - Présentation de l'émulateur CpcAlive

II - Types de fichiers reconnus par l'émulateur
        II - 1 - Sources basic avec étiquettes
        II - 2 - Sources assembleur Z80
        II - 3 - Fichiers au format intel hex 
        II - 4 - Fichiers de commandes CpcAlive
        II - 5 - Fichiers au format texte
        II - 6 - Fichiers binaires
         
II - 7 - Disquettes virtuelles au format .DSK
         II - 8 - ROMs CPC
        II - 9 - Fichiers au format AMSDOS
III - Commandes CpcAlive à partir de l'interpréteur basic du CPC
IV - Commander l'émulateur à partir de la ligne de commande Dos
        CpcAlive [fichiers_d_entrée[:X]] [commandes CpcAlive] [commandes Cpc] [>fichier_de_sortie]
V - Caractères accentués
VI - Accès aux interruptions du Bios et du Dos via le Z80
VII - Environnement X86
VIII - Programmes utilitaires
    - 1 - CreaDisc: Crée une disquette virtuelle vierge au format data.
   
- 2 - Extract: Pour extraire les fichiers d'une disquette virtuelle.
    - 3 - AniCrea: Crée des animations graphiques en enregistrant les images de l'écran.
    - 4 - Fli2Gif: Pour visionner une animation graphique créée avec AniCrea.
    - 5 - Convertions format FLI
    - 6 - Clavier complet pour utilisation sous Androïd
    - 7 - Dza: Désassembleur z80 Dos/Win32





I - Présentation de l'émulateur CpcAlive

CpcAlive est un environnement de programmation compatible Amstrad CPC
pour création d'animations graphiques.
L'originalité de l'émulateur est qu'il peut fonctionner sur tout les supports acceptants l'émulateur Dos "Dosbox".

Spécificités de l'émulateur CpcAlive:
* gestion sources basic avec étiquettes
* modes d'écran 160*200*16, 320*200*256 et 640*200*16
* environnement de programmation X86 (16Mo)
* accès aux interruptions du Bios et du Dos via instructions ajoutées au Z80
* sorties écran au format BMP
et animations FLI
* BASIC programmable
* possibilité de traiter à partir de l'interpréteur basic du Cpc, tout fichier présent sur le disque dur ou autre support.
* création d'images
 d'environnement autoexécutables.
* intègre un assembleur/débogueur Z80 ainsi qu'un débogueur BASIC
* gestion des fichiers créés par le compilateur C PhrozenC

Réglages pour DosBox dans le fichier INI\DOSBOX\DOSBOX.CONF
Si le mode "Plein écran" est non fonctionnel ou trop lent, modifier la commande fulldouble=false/true
Si le temp de lancement de l'émulateur est excessif ou si le lancement est impossible (fond bleu),
modifier la commande cpuspeed=max en remplaçant "max" par une valeur (ex:cpuspeed=16000)
Installation sous android et linux


 II - Types de fichiers reconnus par l'émulateur

Chargement à partir de la ligne de commande du Dos:
CpcAlive NomDeFichier[:X]
Il est aussi possible d'utiliser la syntaxe:
! NomDeFichier[:X]

La lettre représentée par le caractère X est facultative, elle dépend du type de fichier à charger. Elle sera appelée "marqueur". (
Ne pas mettre d'espace entre le nom de fichier et le marqueur.)

Chargement à partir d'un fichier de commande CpcAlive:
NomDeFichier[:X]

Chargement à partir de l'interpéteur basic du Cpc:
|INPUT,"NomDeFichier[: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 = fichier non trouvé
        3 = fichier ou 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. La barre verticale présente devant la commande INPUT est obtenue en actionnant en même temps la touche [AltGr] et la touche [6] située en haut du clavier.

ex:    10 er%=0
        20 |INPUT,"Disque.dsk:A",@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é. Il est aussi possible d'obtenir des informations sur le dernier fichier chargé à l'aide de la commande suivante:

info$=string$(12,"X"):|INFO,@info$:PRINT info$


II - 1 - Chargement de fichiers sources Basic avec étiquettes

Ces fichiers doivent commencer par la séquence "BAS:" sans les guillemets (entête) et la première ligne est réservée.

Chargement à partir de la ligne de commande du Dos:
! SOURCE.BAS
Chargement à partir d'un fichier de commande CpcAlive:
SOURCE.BAS
Chargement à partir de l'interpéteur basic du Cpc:
|INPUT,"SOURCE.BAS" ou
|RUN,"SOURCE.BAS"

La commande |RUN lance automatiquement le programme.

notes:
- en cas de chargement avant l'initialisation du Cpc (
chargement à partir de la ligne de commande du Dos par exemple), l'émulateur chargera le fichier en fin de boot et le lancera automatiquement.
- l'entête BAS:REMOFF évite le chargement des REMs en mémoire
- les sources avec numéros de lignes sont aussi acceptés.
- la commande basic TRON lance un déboggeur. Retour normal à l'aide de la touche [F12] ou si le programme rencontre une instruction TROFF.
- il est possible de décomposer les programmes en intégrant les différentes parties dans un fichier de commandes en suivant le modèle suivant:
 (appel a partir de la ligne de commande Dos: ! demo)
CMD:WAITSYS (** CpcAlive command file - WAITSYS=wait end of cpc boot **)

INC\MAINJUMP.BAS    ; never remove this line. This file contain just a jump to the first line of the last
file loaded. The "goto" line address will be defined by the loader.


;(do not load commands files between basic files)

INC\IBMP.BAS    ;** DISPLAY BMP IMAGES 16/256 COLORS NOT COMPRESSED **
;labels call in this file are only possible in files loaded before
;Basic lignes will be numbered greater than 1000 in cpc if no files loaded before is larger than 1000 lines

EX\STAR.BAS    ;** STAR LOADER **
;labels call in this file are only possible in files loaded before
;Basic lignes will be numbered greater than 2000 in cpc if no files loaded before is larger than 1000 lines

EX\ANI.BAS    ;** DEMO ANIMATION (MAIN) **
; !! THE MAIN FILE MUST BE PLACED IN LAST PLACE !!
;Basic lignes will be numbered greater than 3000 in cpc if no files loaded before is larger than 1000 lines

TEXT    ;Text mode. After this command, this file will be interpreted trough the cpc keyboard

RUN

- voir la partie "Chargement de fichiers de commandes CpcAlive" pour plus de précision sur les fichiers de commandes.
- autres exemples de sources basic : Display images .BMP, Intel hex to binary conversion



II - 2 - Chargement de fichiers sources assembleur Z80

L'émulateur utilise la séquence "org &" en lettres minuscules sur la première ligne du fichier pour déterminer qu'il s'agit d'un source assembleur créé avec le compilateur C PhrozenC. Pour les autres sources, l'émulateur recherchera la séquence ".org" ou "org " en lettres minuscules ou majuscules sur les quatres premières lettres du fichier.

Le compilateur interne utilise les directives assembleur standard:
DB,DEFB,DW,DEFW,DS,DEFS,END, EQU, ORG, IF, IFDEF, IFNDEF, ELSE, ENDIF
ainsi que les directives suivantes:
.LISTHEX : liste le programme au format Intel Hex dans le fichier de sortie.
.NOLIST : stoppe le listage.
.DEBUG : enclenche le débogueur. (Point d'arrêt)
.DUMP adresse
: initialise l'adresse de départ du dump mémoire du débogueur
.TAB valeur : attribue la valeur des tabulations pour l'affichage des fichiers sources dans le déboggeur.
                    (8 par défaut)

Il est possible de définir des macros-instructions sous cette forme:
Ex:
MACRO ADD(X,Y)
LD HL,X
LD DE,Y
ADD HL,DE
ENDM

Le compilateur interne reconnaît les directives Tasm(8bits) suivantes:
.BYTE, .DB, .DW, .DS, .END, .EQU, .FILL,.ORG, .WORD
, #IF, #IFDEF, #IFNDEF, #ELSE, #ENDIF, #INCLUDE, #DEFINE & #DEFCONT
ainsi que les opérateurs suivants: =, +, -, *, /, |, &


Le compilateur interne gère les opérations de façon très simplifiée et ne supporte ni les parenthèses, ni ne gère les priorités mathématiques.

Pour compiler un source Z80 en ram, faire suivre le nom de fichier du marqueur :X où X représente le type de configuration de la ram destinataire suivi de l'adresse de chargement désirée. Par défaut, le chargement se fait en ram avec la configuration 0C0h à l'adresse indiquée par la directive ORG. (voir Chargement en ram pour les différents types de configuration ram)

Pour charger en ram standard.:
Chargement à partir de la ligne de commande du Dos:
! SOURCE.ASM
Chargement à partir d'un fichier de commande CpcAlive:
SOURCE.ASM
Chargement à partir de l'interpéteur basic du Cpc:
|INPUT,"SOURCE.ASM" ou
|RUN,"SOURCE.ASM"

La commande
|RUN lance automatiquement le programme et n'est effective seulement en cas de chargement en ram standard.
La commande |RUN,"SOURCE.ASM:0C0h,02000h" remplace l'adresse indiquée par la directive ORG par 02000h et lance le programme.
Il est possible d'obtenir l'adresse mémoire suivant le bloc chargé de la manière suivante:
info$=string$(20,"X"):|INFO,@info$:EndBloc=val("&"+mid$(info$,17,4)):?hex$(EndBloc)

note: En cas de chargement en ram dans les blocs 0,1,2 ou 3 avant l'initialisation du Cpc (à partir de la ligne de commande du Dos par exemple), l'émulateur chargera le fichier en fin de boot et le lancera automatiquement. Il n'est pas possible de charger plusieurs fichiers de ce type en ram dans les blocs 0,1,2 ou 3 avant l'initialisation du Cpc en même temps.


Pour compiler un source Z80 en rom supérieure, faire suivre le nom de fichier du marqueur :R . L'émulateur recherchera le premier emplacement disponible.

Chargement à partir de la ligne de commande du Dos:
! ROM.ASM:R
Chargement à partir d'un fichier de commande CpcAlive:
ROM.ASM:R
Chargement à partir de l'interpéteur basic du Cpc:
|INPUT,"ROM.ASM:R"

Le numéro d'emplacement de la rom chargée peut être obtenu de la manière suivante:
info$=string$(16,"X"):|INFO,@info$:RomPlace=val("&"+mid$(info$,15,2)):PRINT RomPlace
L'adresse mémoire suivant le bloc chargé peut être obtenu de la même façon que pour le chargement en Ram.
Il est aussi possible de redéfinir l'adresse de chargement (ORG) en indiquant celle-ci en deuxième paramètre.

Au cas il est nécessaire d'avoir un numéro d'emplacement fixe, ou pour charger dans une rom déja existante, remplacer la lettre "R" par le numéro d'emplacement désiré. (Valeurs admises de 0 à 191)  Exemple: |INPUT,"ROM.ASM:10"


Exemple de ROM contenant des instructions BASIC programmables (Resident System eXtension)



II - 3 - Chargement de fichiers au format intel hex

Un fichier au format intel hex est un document texte composé de lignes au format intel hex.

Représentation d'une ligne au format intel hex:
:LLAAAA00DDDD...CC     ; ' : ' = caractère de départ
                                          ; LL = taille bloc (2 digits hexa)
                                          ; AAAA = adresse de départ
(4 digits hexa)
                                          ; 00 = type d'enregistrement (00)
                                          ; DDDD = données
(2 digits hexa pour chaque octet de données)
                                          ; CC = crc ligne (2 digits hexa)
                                          ;       = -(somme de tous les octets de la ligne) and 0ffh
exemple:
:18A600000109A62111A6C3D1BC15A6C31EA6C335A6000000004F5049A2
:18A61800D8495049D800DD5603DD5E02DD4605DD4E043E0C4052DD7E97
:18A6300000404810C9D5DD5603DD5E02DD4605DD4E043E0D40524048AD
:07A6480010D11213AF12C97B
:00000001FF

Dans cet exemple, la première ligne contient 018h octets de données (01h,09h,0A6h...049h) qui seront chargées à partir de l'adresse 0A600h. Le crc de la ligne est égal à 0A2h.
L'émulateur ignore le crc (Checksum) normalement présent à chaque fin de ligne dans le standard Intel Hex. Noter le type d'enregistrement égal à 1 indiquant la dernière ligne du fichier. Cette ligne n'est pas nécessaire dans les fichiers chargés par l'émulateur.


Chargement en rom:

Pour charger un fichier au format intel hex en rom, faire suivre le nom de fichier du marqueur :X où X représente le numéro de rom destinataire. Par exemple pour charger dans la rom numéro 10:
Chargement à partir de la ligne de commande du Dos:
! FICHIER.HEX:10
Chargement à partir d'un fichier de commande CpcAlive:
FICHIER.HEX:10
Chargement à partir de l'interpéteur basic du Cpc:
|INPUT,"FICHIER.HEX:10"

Si la rom destinataire n'existe pas, CpcAlive la crée. Il est aussi possible d'utiliser le marqueur :R ,
l'émulateur recherchera le premier emplacement disponible. (voir chapitre "Chargement roms Cpc")
            

Chargement en ram:

Le Cpc 6128 possède une mémoire RAM de 128Ko divisés en huit blocs de 16 Ko chacun, numérotés de 0 à 7. Seul quatre blocs peuvent êtres connectés simultanément.

valeur port &7F      position blocs
                &C0          0,1,2,3           
<= configuration standard
                &C1          0,1,2,7
                &C2          4,5,6,7
                &C3          0,3,2,7
                &C4          0,4,2,3
                &C5          0,5,2,3
                &C6          0,6,2,3
                &C7          0,7,2,3
valeurs via port &7F ajoutées à l'émulateur:
                &C8          0,8,2,3
                &C9          0,9,2,3
                ...
                &FF          0,&3F,2,3

Le système du Cpc n'exploite que le premier type de configuration. Dans cette configuration le bloc 0 occupe l'espace 0 à 03FFFh de la mémoire, le bloc 1 l'espace 04000h à 07FFFh, le bloc 2 l'espace 08000h à 0BFFFh, le bloc 3 l'espace 0C000h à 0FFFFh. L'écran exploite le bloc 3. La partie supérieure du bloc 2 contient les variables système. La partie inférieure du bloc 0 est utilisée par le système. Les programmes Basic sont chargés par le système à partir de l'adresse 0170h. Les données binaires peuvent êtres chargées à partir de l'adresse définie à l'aide de la commande Basic "MEMORY". S'il s'agit de programmes exécutables, ils pourront être appelés grâce à l'instruction "CALL".

Pour charger un fichier au format intel hex 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 vont de 0C0h à 0FFh. Par défaut, le chargement se fait en ram avec la configuration 0C0h.

exemple à partir de l'interpréteur basic du Cpc:
|input,"fichier.hex"
Dans ce cas, le fichier "fichier.hex" est chargé en mémoire avec la configuration standard.

notes:
- Il est possible de visualiser la mémoire du Cpc avec l'émulateur CpcAlive en utilisant la commande |DEBUG,&f à partir de l'interpréteur basic.
- En cas de chargement en ram dans les blocs 0,1,2 ou 3 avant l'initialisation du Cpc (à partir de la ligne de commande du Dos par exemple), l'émulateur chargera le fichier en fin de boot. Il n'est pas possible de charger plusieurs fichiers de ce type en ram dans les blocs 0,1,2 ou 3 avant l'initialisation du Cpc en même temps.
- L'assembleur 8 bits "tasm" génère des fichiers au format Intel Hex.



II - 4 - 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 instaure la vitesse maximum (par défaut) - [F12]
CpuSlow instaure la vitesse de l'ordinateur Cpc      - [F11]
(le "tempo" sonore est préservé)
Sleep pour mettre en veille l'émulateur              - [AltGr][S]
Exit pour quitter l'émulateur                          - [Ctrl][Alt][Fin]
Menu pour utilisation sur tablette graphique avec clavier virtuel
ROM=X pour sélectionner une rom supérieure (X=0à255)
(X=256 pour sélectionner la rom Bios du Cpc)
RAM=X pour sélectionner un type de RAM
voir chapitre "Chargement en ram"
pour les valeurs de configuration disponibles.
:LLAAAA00DDDD... chargement données (ligne au format intel hex)
MakeCont continue un fichier créé avec la commande |MAKE
Debug:adresse lance le débogueur lorsque le processeur Z80 rencontre l'adresse spécifiée (mémoire ram)
Debug:rom,adresse lance le débogueur lorsque le processeur Z80 rencontre l'adresse spécifiée dans la rom spécifiée (roms supérieures)
Z80 passe du mode "Commandes" au mode "Compilateur Z80". L'interprétation du fichier sera rétablie en mode "Commandes" par l'instruction End ou .End
PhrozencOrg=ADR ADR=adresse de chargement par défaut des fichiers assembleurs générés par le compilateur C PhrozenC.
End indique la fin d'un fichier de commande.
Text passe du mode "Commandes" au mode "Texte". Le fichier ne sera plus interprété comme un fichier de commandes, mais comme un fichier Texte. Il sera possible de rétablir l'interprétation du fichier en mode "commandes" grâce à l'instruction |COMMAND ou |CMD. Les commandes End et Text rétablissent la configuration mémoire du Cpc effective au lancement du fichier de commandes ou de la séquence de commandes.

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"

note: charger des données 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. Pour charger des données 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 CpcAlive

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 "CMD:" sans les guillemets (entête) et la première ligne est réservée.

Chargement d'un fichier de commandes à partir de la ligne de commande du Dos:
! FICHIER.CMD
Chargement d'un fichier de commandes à partir d'un autre fichier de commandes CpcAlive:
FICHIER.CMD
Chargement d'un fichier de commandes à partir de l'interpéteur basic du Cpc:
|INPUT,"FICHIER.CMD"

exemple 1:

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

exemple 2:

CMD:               ; entête fichier de commandes CpcAlive
ROM=256        ; sélection rom bios
:010B130002    ; poker la valeur 2 en 0B13h (mode écran de démarrage)
Text                 ; passe du mode "Commandes" au mode "Texte"
PRINT"OK"

exemple 3:

PRINT"OK1"
|CMD
               ; à 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)
Text                 ; passe du mode "Commandes" au mode "Texte"
PRINT"OK2"


notes:
- Il est aussi possible de charger à partir d'un fichier de commandes CpcAlive les types de fichiers suivants: Sources Basic, Sources assembleur Z80Fichiers au format intel hex, Fichiers de commandes CpcaliveDocuments textes et Fichiers binairesDisquettes virtuelles au format .DSK et Fichiers Roms Cpc . L'imbrication des fichiers de commandes est autorisée dans la limites de 15 fichiers maximum (fichiers de textes compris). 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. Noter la présence du séparateur ';' pour les commentaires. (Ne pas utiliser la commande "Text" 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.
- L'entête "CMD:WAITSYS" attend la fin du boot Cpc pour charger le fichier. (Un seul fichier à la fois possible)


II - 5 - 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 la maniére suivante: chaque caractère du document
est lu, puis envoyé au gestionnaire clavier du système Cpc. Il est ainsi possible, par exemple, de transmettre par cette fonction un fichier basic au format texte (sans entête "BAS:") ou commander un programme tournant dans l'émulateur.

Chargement à partir de la ligne de commande du Dos:
! EXEMPLE.BAS
Chargement à partir d'un fichier de commande CpcAlive:
EXEMPLE.BAS
Chargement à partir de l'interpéteur basic du Cpc:
|INPUT,"EXEMPLE.BAS"

Ces commandes chargent 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, "SETASM.BAT"
20 LINE INPUT a$:IF INSTR(a$,"hardware")<>0 THEN |INPUT,":CLOSE":END ELSE GOTO 20
run

Cet exemple affiche le document "
SETASM.BAT" jusqu'à ce qu'il rencontre une ligne contenant le mot "hardware". La commande |INPUT,":CLOSE" stoppe le chargement du fichier à travers le clavier.

L'imbrication des fichiers de textes est autorisée dans la limites de 15 fichiers maximum (fichiers de commandes compris).
Il est aussi possible de charger des textes dans l'émulateur CpcAlive à partir de la fonction copier/coller de Windows XP. Voir mode d'emploi.



II - 6 - Chargement de fichiers binaires

Il est possible de charger des données dans la mémoire du Cpc en utilisant le marqueur ":D" (comme 'D'atas) en utilisant la syntaxe suivante:

Depuis l'interpréteur Basic du Cpc:
|INPUT,"Nom_de_fichier:D,longueur_bloc,adr_bloc_source_dans_fichier,adr_de_chargement_dans_mémoire_cpc"

Depuis un fichier de commandes CpcAlive:
Nom_de_fichier:D,longueur_bloc,adr_bloc_source_dans_fichier,adr_de_chargement_dans_mémoire_cpc

Penser à protéger le bloc chargé avec la commande: MEMORY adresse_de_chargement - 1. La taille réelle du bloc chargé peut être obtenu de la manière suivante:
info$=string$(16,"X"):|INFO,@info$:LongBloc=val("&"+mid$(info$,13,4))

Il est ainsi possible de traiter tout type de fichier. L'exemple ici charge une image BMP et l'affiche sur l'écran Cpc.

L'utilisation du marqueur :D seul à 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 a é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 qui extrait des informations d'un fichier bitmap (.BMP):

BAS:
10 '** INFO BMP IMAGE **
20 mode 2:|Input,"IMAGE.BMP:D"
30 |GO,"&12":'pointe adresse &12 dans fichier = largeur/hauteur image
40 input a:input b:largeur=a+256*b
50 input a:input b:hauteur=a+256*b
60 print"largeur image=";largeur
70 print"hauteur image=";hauteur

La  commande |GO,"chaine numérique"[,@er%] déplace le pointeur de fichier. Dans ce cas, "chaine numérique" 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. Le pointeur de fichier peut-être aussi écrit en décimal.


II - 7 - Chargement des 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)

Exemples:

Pour charger une disquette virtuelle dans le lecteur A de l'émulateur:

Chargement à partir de la ligne de commande du Dos:

! NomDeDisquette:A
Chargement à partir d'un fichier de commande CpcAlive:
NomDeDisquette:A
Chargement à partir de l'interpéteur basic du Cpc:
|INPUT,"NomDeDisquette:A"


note:
-
Le chargement d'une disquette virtuelle règle automatiquement l'émulateur en vitesse lente (CpuSlow) si aucune instruction CpuFast n'a été rencontrée.


II - 8 - Chargement des ROMs CPC -

Le Cpc 6128 est pourvu en standard de 48Ko (3 blocs de 16Ko chacun) de mémoires ROM.
Un de ces blocs contient le système d'exploitation (bios) qui se connecte dans la zone 0 à 03FFFh (rom inférieure). Les deux autres blocs (BASIC et système disque) se connectent dans la zone 0C000h à 0FFFFh (roms supérieures). Le système peut exploiter dans cette dernière zone 252 blocs de 16Ko chacun. Une particularité intéressante de ces roms est qu'elles peuvent recevoir des instructions BASIC programmables (Resident System eXtension).

Pour charger une rom supérieure dans l'émulateur, faire suivre le nom de fichier du marqueur :R . L'émulateur recherchera le premier emplacement disponible. Le fichier peut être au format binaire ou au format intel hex.

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

Le numéro d'emplacement de la rom chargée peut être obtenu de la manière suivante:
info$=string$(16,"X"):|INFO,@info$:RomPlace=val("&"+mid$(info$,15,2)):PRINT RomPlace

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é. (Valeurs admises de 0 à 191)
Exemple à partir de la ligne de commande du dos:
Z80ROM.ROM:10

Les roms ne seront reconnues 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]. L'émulateur accepte des instructions RSX dans la totalité des roms supérieures. Les numéros de roms supérieures 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égrants 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.

Dans l'interprétation d'un programme en rom, CpcAlive redirige par défaut les accès en écriture du microprocesseur Z80 vers la ram. La commande |UNLOCK,-numéro d'emplacement de rom- autorise les accès en écriture du microprocesseur Z80 dans la rom spécifiée. Le fonctionnnement de la rom devient alors similaire à celui d'une ram.

Exemple de création d'une ROM contenant des instructions BASIC programmables (Resident System eXtension)



II - 9 - Chargement de fichiers au format AMSDOS

Il s'agit des fichiers .BIN ou .BAS que l'on peut extraire d'une disquette virtuelle .DSK à l'aide par exemple du programme "Extract".

Chargement à partir de la ligne de commande du Dos:
! PROGRAMME.BAS ou .BIN
Chargement à partir d'un fichier de commande CpcAlive:
PROGRAMME.BAS ou .BIN
Chargement à partir de l'interpéteur basic du Cpc:
|INPUT,"PROGRAMME.BAS ou .BIN" ou
|RUN,"PROGRAMME.BAS ou .BIN"

La commande |RUN lance automatiquement le programme si celui-ci est exécutable.

notes:
- en cas de chargement avant l'initialisation du Cpc (
chargement à partir de la ligne de commande du Dos par exemple), l'émulateur chargera le fichier en fin de boot et le lancera automatiquement si celui-ci est exécutable.




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

Les commandes CpcAlive appelables à partir de l'interpréteur basic doivent être précédées de la barre
verticale " | ".


|CpuFast instaure la vitesse maximum - [F12]
|CpuSlow instaure la vitesse de l'ordinateur Cpc - [F11]
(le "tempo" sonore est préservé)
|CpuSlow,vitesse change vitesse |CpuSlow (0<vitesse<&FFFF)
|Sleep pour mettre en veille l'émulateur - [AltGr][S]
|Sleep,"message" mise en veille avec message
|Sleep,ERRORLEVEL mise en veille avec code de sortie pour fichiers batch
|Exit pour quitter l'émulateur - [Ctrl][Alt][Fin]
|Exit,"message" quitter l'émulateur avec message
|Exit,ERRORLEVEL quitter l'émulateur avec code de sortie  pour fichiers batch
|Menu pour utilisation sur tablette graphique avec clavier virtuel
|MenuOff menu off
|Command ou |CMD passe du mode "texte" au mode "commande CpcAlive"
voir chapitre II - 4 - Chargement de fichiers de commandes CpcAlive
|INPUT,
"nom_fichier[:X]"[,@er%]
charge un fichier
(voir chapitre II - Types de fichiers reconnus par l'émulateur
|RUN,
"nom_fichier[:X][,ADR]"[,@er%]
charge et lance un fichier si celui-ci est exécutable

|INFO,@info$ charge le bloc d'information du dernier fichier entré à l'aide de la fonction |INPUT ou via un fichier de commandes CpcAlive.
ex: |INPUT,"Disque.dsk":
info$=string$(12,"X"):|INFO,@info$:PRINT info$
|CLOCK,@clock$ clock$="HH:MM:SS":|CLOCK,@clock$ charge l'heure courante dans la chaîne clock$
|UNLOCK,-numéro d'emplacement
de rom-
autorise les accès en écriture du microprocesseur Z80 dans la rom spécifiée.
voir chapitre II - 8 - Chargement des Roms Cpc
|EJECT,"A" éjecte la disquette virtuelle présente dans le lecteur A
|EJECT,"B" éjecte la disquette virtuelle présente dans le lecteur B
|GO,
"chaine numérique"[,@er%]
déplace le pointeur de fichier binaire
voir chapitre II - 6 - Chargement de fichiers binaires
|OUTPUT,
"fichier_de_sortie"[,@er%]
démarre un nouveau fichier_de_sortie (voir chapitre IV)
|OUTASCDOS voir chapitre V - Caractères accentués
|OUTASCWIN voir chapitre V - Caractères accentués
|OUTASCOFF voir chapitre V - Caractères accentués
|PRINT,"chaine" sort une chaine de caractères vers le fichier_de_sortie.
Commande équivalente à la commande PRINT#8,"chaine";
|LPRINT,"chaine" sort une chaine de caractères vers le fichier_de_sortie suivi d'un retour à la ligne.
Commande équivalente à la commande PRINT#8,"chaine"
|INK,PEN,R,V,B change la couleur d'un 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 restaure les encres originales (standards ou CpcAlive)
|INKCPC instaure les encres standard du Cpc
|INKSOFT instaure les 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_fich.BMP"[,@er%]
fabrique un fichier image de l'écran Cpc au format BMP
- voir commande |OUTPUT pour la signification des codes d'erreurs.
|COPY,SpriteNumber
|COPY,"SpriteName"
enregistre les pixels sortis sur l'écran à l'aide des fonctions basic PLOT/DRAW (ou via Bios X86) dans un tampon ou fichier. Une commande |PASTE ou |FRAMEOUT termine la séquence d'enregistrement.
- SpriteName=8 caractères maxi sans extension
- SpriteNumber compris entre 0 et 255
- taille maxi par sprite= 100000 pixels
|PASTE,depX,depY,SpriteNumber
|PASTE,depX,depY,"SpriteName"
affiche la séquence enregistrée à l'aide de |COPY avec déplacement. depX & depY sont relatifs aux coordonnées d'enregistrement.
|DEBUG,adresse lance le débogueur lorsque le processeur Z80 rencontre l'adresse spécifiée (mémoire ram)
|DEBUG,rom,adresse lance le débogueur lorsque le processeur Z80 rencontre l'adresse spécifiée dans la rom spécifiée (roms supérieures)
|DEBUGSYS,adresse lance le débogueur lorsque le processeur Z80 rencontre l'adresse spécifiée (rom inférieure)
|DEBUGOFF met fin au mode débogueur
|DUMP,adresse initialise l'adresse de départ du dump mémoire du débogueur
|NODEBUG interdit le débogueur
|NOSLEEP interdit le mode "veille"
|MAKE,
"nom_fichier.EXE"[,@er%]
fabrique un fichier de sauvegarde autoexécutable d'environnement (sauvegarde l'environnement en quittant l'émulateur)
- voir commande |OUTPUT pour la signification des codes d'erreurs.
|MAKEMOVIE,
"nom_fichier.EXE"[,@er%]
pour céer des animations graphiques au format .EXE (sauvegarde l'environnement en quittant l'émulateur)
- tout mouvement clavier met fin à l'exécution du fichier produit.

- voir commande |OUTPUT pour la signification des codes d'erreurs.


notes:
- les fichiers créés a l'aide des commandes |MAKE ou |MAKEMOVIE ne peuvent pas être renommés à l'aide de la fonction "rename" du système Dos. Pour renommer ces fichiers, utiliser leur fonction interne
à partir de la ligne de commande du Dos: nom_de_fichier.EXE rename:nouveau_nom ou nom_de_fichier.EXE ren:nouveau_nom
- pour lancer un fichier .EXE créé avec les commandes |MAKE ou |MAKEMOVIE depuis Windows XP, cliquer sur le nom du programme avec le bouton droit de la souris puis choisir <Propriétés><Mémoire><EMS automatique>
- la commande basic CALL 0
réinitialise le système Cpc - [CTRL][ALT][Home]


Commandes Basic ajoutées par le module AniCrea:

AniCrea est un programme qui ajoute des commandes d'enregistrement de l'écran de l'émulateur afin de créer des vidéos au format FLI.

|ANICREA,"nom_vidéo"[,@er%]           - initialise la vidéo à générer
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 = accès refusé
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)
Le nom de la vidéo à créer peut aussi
être définie à partir de la ligne de commande du Dos en deuxième paramètre.

|ANISPEED,vitesse                              - vitesse de la vidéo comprise entre 0 et 65535 (valeurs courantes entre 0 et 50)

|FRAMEOUT[,@er%]                          - génère une image vidéo
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
10 = mode d'écran non compatible (seuls les modes 0 et 1 sont compatibles)

|ANICLOSE[,@er%]                            - termine la vidéo
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


notes:
- La commande "! DEMO" depuis la ligne de commande Dos crée la vidéo DEMO.FLI
- La commande |ANICREA verrouille le mode "veille" de l'émulateur qui sera déverrouillé par la commande |ANICLOSE
- Voir |COPY et |PASTE pour la gestion de sprites.
Lien pour convertions format FLI



IV - Commander l'émulateur à partir de la ligne de commande Dos

CpcAlive [fichiers_d_entrée[:X]] [commandes CpcAlive] [commandes Cpc] [>fichier_de_sortie]
ou
! [fichiers_d_entrée[:X]] [commandes
CpcAlive] [commandesCpc] [>fichier_de_sortie]


Les commandes Cpc doivent toujours être placées en dernier dans la ligne de commande. (avant ">fichier_de_sortie" si présent)

ex: ! PRINT"OK"
Lance l'émulateur et passe la commande PRINT"OK" au Cpc

Cas particulier:
Le caractère | (obtenu en actionnant en même temp la touche [ALT GR] 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. 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.
Le caractère & est aussi utilisé par Dos de manière spéciale, ce caractère peut donc aussi être remplacé par le caractère ² (touche à gauche du &).
ex: ! POKE ²C000,²FF lance l'émulateur avec la commande POKE &C000,&FF
Il existe d'autres caractères réservés par Dos comme < ou > qui ne pourront pas êtres utilisés dans des commandes Cpc à partir de la ligne de commande Dos.


Par défaut la sortie imprimante du Cpc se fait dans le fichier CPC.PRN situé dans le répertoire principal CpcAlive. Il est possible de changer le nom du fichier de sortie à partir de la ligne de commande Dos en ajoutant le caractère '>' à la fin de la ligne de lancement suivi du nom de fichier désiré.

exemple:
! 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

Un seul caractère '>' avant le nom du fichier de sortie indique au Dos qu'au cas ou le nom du fichier de sortie existe déjà, ce fichier sera recréé 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 le fichier de sortie indique au Dos qu'il doit conserver le fichier et mettre les nouvelles données à suivre.

exemple:

! 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

Il est possible de changer de nom de fichier de sortie à partir de l'interpréteur Basic du Cpc en tapant la commande suivante:  |OUTPUT,"NomDeFichier"[,@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 = accès refusé
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)

|OUTPUT,":GO,&100"[,@er%] déplace le pointeur du fichier de sortie en &100
|OUTPUT,":CLOSE" ferme le fichier (CPC.PRN redevient le fichier de sortie par défaut)

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

note: le fichier CPC.PRN est vidé à chaque lancement de l'émulateur en cas de réutilisation de la sortie imprimante dans ce fichier.



V - CARACTèRES ACCENTUéS

La commande
! Accent.ini à partir de la ligne de commande Dos initialise le Cpc afin d'obtenir un clavier accentué.

|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, utiliser la commande |OutAscDos. Pour opérer une conversion texte au format Windows vers le fichier de sortie utiliser la commande |OutAscWin. Pour annuler cette conversion utiliser la commande |OutAscOff. Cette commande est utile si l'on utilise le fichier de sortie pour autre chose que du texte.
(Commande par défaut)

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 un document texte au format ascii Dos vers le format ascii windows, entrer la séquence qui suit à partir du Basic:

|input,"Accent.ini"
10 |OutAscWin:|input,"nom_de_fichier_a_convertir"

20 line input a$
30 print#8,a$:if a$<>"" then 20
run

Le résultat se trouve dans le fichier CPC.PRN après exécution.

note
:
- Seul les caractères redéfinis plus haut sont reconvertis.
-
Pour convertir un document texte au format ascii windows vers le format ascii Dos, il faudra charger le fichier source en mémoire à l'aide de la procédure Chargement de fichiers binaires , puis récupérer les caractères à l'aide de la fonction Basic PEEK par exemple à cause de la gestion clavier de l'émulateur qui ne prend pas en charge les caractères ascii supérieurs à 156.




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. Le tableau ci-dessous indique la correspondance des registres établie entre les deux processeurs:
registres Z80     
registres X86
F                 >   Flags
A                 >   AL
BC               >   CX
DE               >   DX
HL               >   BX
IX                >   SI
IY                >   DI

CpcAlive ajoute des registres au Z80 nommés AH, BP, DS et ES correspondants au registres des processeurs X86, et des nouveaux opcodes Z80.

exemple:
opcode:             mnémonique:     fonction:

040h,052h        LD AH,A
          charge la valeur du registre A dans le registre X86 AH
040h,05Bh        LD A,AH          charge la valeur du registre X86 AH dans le registre A
040h,048h,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 048h\ .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 registre X86 AH
                ld a,3                      ; couleur demandée
                INT(010h)              ; APPEL INTERRUPTION BIOS 010H
                ret

notes:
- La correspondance des registres Z80-X86 est respectée au retour de l'interruption.
- 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. (Au cas où quelques équilibristes s'aventureraient à toucher ces fonctions.)
- L'interruption Bios 010h 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 //

Les registres de palette correspondent aux 16 pinceaux (PEN) 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'interrutions 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"
Ces commandes génèrent les fonctions |OPIX,X,Y,pen et |IPIX,X,Y,@pen qui respectivement écrit et lit un point graphique sur l'écran au coordonnées X et Y.

Ci-dessous la liste des instructions ajoutées au Z80 disponibles:

#define LD_HL_CPCSEG .db 040h\ .db 047h              ; RETURN SEGMENT ADRESS OF CPC MEMORY
#define INT(xx)                    .db 040h\ .db 048h\ .db xx  ; CALL BIOS/DOS INTERRUPTION XX
#define IN_A_DE                .db 040h\ .db 04Ah              ; IN A,(DE)  (DE refer to I/O PC system)
#define OUT_DE_A           .db 040h\ .db 04Bh              ; OUT (DE),A (DE refer to I/O PC system)
#define LD_AH_A             .db 040h\ .db 052h               ; LD AH,A
#define LD_A_AH              .db 040h\ .db 05Bh              ; LD A,AH
#define LD_BP_HL            .db 040h\ .db 05Ch              ; LD BP,HL
#define LD_HL_BP            .db 040h\ .db 05Dh              ; LD HL,BP
#define LD_DS_HL            .db 040h\ .db 05Eh              ; LD DS,HL
#define LD_HL_DS            .db 040h\ .db 05Fh              ; LD HL,DS
#define LD_ES_HL             .db 040h\ .db 060h              ; LD ES,HL
#define LD_HL_ES             .db 040h\ .db 061h              ; LD HL,ES
#define PUSHA                    .db 040h\ .db 071h              ; PUSH A,AH,BC,DE,HL,BP,IX,IY
#define POPA                       .db 040h\ .db 072h              ; POP IY,IX,BP,HL,DE,BC,AH,A

- BP,DS,ES et AH correspondent aux registres
du processeur X86. Par défaut les registres DS et ES adressent la mémoire du Cpc (segment Ems).



VII - ENVIRONNEMENT X86

Il est possible de programmer l'émulateur CpcAlive en assembleur X86. CpcAlive accepte 256 modules X86. Un module X86 est un programme au format .EXE contenant une table d'installation située à l'adresse 0200h dans le code du programme, ainsi qu'une table pouvant contenir 128 vecteurs d'appel X86. Les vecteurs d'appel X86 peuvent être appelés avec des commandes basic ou des opcodes Z80. La taille maximale d'un module X86 est de 64K.

La table d'installation d'un module doit être constituée comme ceci:

org 0200h
                db 'X86CPC'                 ; 0200h marque
                dw 1                             ; 0206h version
                dw offset X86Vec          ; 0208h adresse table vecteurs d'entrée
                dw 0                             ; 020Ah réservé
                dw 0                             ; 020Ch réservé
                dw 0                             ; 020Eh réservé
                dw offset MnemoTb      ; 0210h offset de la table des noms pour appels Basic
                db -1                             ; 0212h (*) reçoit le numéro d'emplacement du module X86
                db -1                             ; 0213h numéro de module complément ou numéro bloc banque Cpc

                db -1                             ; 0214h (*) reçoit le numéro de la rom Z80 associée
                db -1                             ; 0215h indicateur pour connection banques Cpc ou modules compléments
                dw -1                             ; 0216h
(*) reçoit la première adresse Cpc ou module complément accessible
                db 0                               ; 0218h réservé
                dw 0                              ; 0219h (*) handle ems associé au module
                dw 0                              ; 021Bh
(*) numéro logique de la première page de 16K du module
                db 0                               ; 021Dh
(*) nombre de pages de 16K allouées au module
                dw 0                              ; 021Eh adresse appelée à l'arrêt de l'émulateur (0=pas d'appel)
                dw 0                              ; 0220h adresse appelée à la mise en veille de l'émulateur (0=pas d'appel)
                dw 0                              ; 0222h adresse appelée au retour de veille de l'émulateur (0=pas d'appel)
                dw 0                              ; 0224h adresse appelée au chargement du module (0=pas d'appel)
                dw 0                              ; 0226h réservé
                db 0                               ; 0228h 
nombre de pages de 16K allouées au module (*)
                                                     ;           ou nombre de pages à allouer (si <> 0 au chargement du module)
                                                     ;           ou nombre de pages connectées (*)
                                                     ;           ou nombre de pages à connecter
                db 0100h-029h dup (0)   ; 0229h réservé

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

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

; table des noms (mnémoniques)
MnemoTb db "PROGRAMME","1" or 080h          ; |
PROGRAMME1
                db "
PROGRAMME","2" or 080h          ; |PROGRAMME2
                db 0

; ** ROUTINE APPELEE PAR L'INSTRUCTION BASIC |PROGRAMME1 **
programme1:
                ;... code X86
                RETF    ; RETOUR VECTEUR (FAR)

; ** ROUTINE APPELEE PAR L'INSTRUCTION BASIC |PROGRAMME2 **

programme2:
                ;... code X86
                RETF    
; RETOUR VECTEUR (FAR)


Fonctionnement:
Sur présence du vecteur MnemoTb à l'adresse 0210h, l'émulateur génère une rom Z80 interprétable par le système Cpc intégrant la table des noms (MnemoTb) ainsi que ses vecteurs d'appel X86. Le premier vecteur de la table "X86Vec" correspondant au premier nom est le vecteur d'initialisation qui est appelé à chaque initialisation du système Cpc. Chaque nom correspond à un vecteur de cette table (dans l'ordre). La fin de chaque nom est indiquée grâce à la présence du bit 7 sur la dernière lettre du nom. La table ne doit pas dépasser 128 noms et doit être terminée par un octet nul. Pour utiliser une commande, il suffira de taper le nom de la commande précédé du signe "barre verticale | " à partir de l'interpréteur Basic du Cpc.

Au cas où l'utilisation des noms d'appel n'est pas nécessaire, remplacer le vecteur "MnemoTb" par un mot nul (adresse 0210h). La rom Z80 intégrant les noms ne sera alors pas générée mais les vecteurs X86 seront appelables depuis la mémoire du Cpc à travers des opcodes Z80 (voir plus bas)


Appeler une routine X86 via opcodes Z80:

L'appel d'une routine X86 à partir de la mémoire du Cpc se fait à l'aide de l'opcode 049h suivit du numéro d'emplacement du module, puis du numéro de vecteur. 
Par exemple si l'on veut appeler "programme2" (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

Le numéro d'emplacement du module
peut être obtenu comme pour le chargement des Roms Z80:
info$=string$(16,"X"):|INFO,@info$:RomPlace=val("&"+mid$(info$,15,2)):PRINT RomPlace


Ce numéro est aussi indiqué dans l'octet d'adresse 0212h de la table d'installation du module. 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 à celui d'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

Les registres X86 décris au chapitre précédent sont aussi transférés.
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.


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

Accès à la mémoire du Cpc depuis l'environnement X86

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.exe situé dans le même répertoire.
Chargement à partir de la ligne de commande Dos:     ! EX\X86IOPix.exe
Cette commande génère à titre d'exemples les fonctions |OPIX,X,Y,pen et |IPIX,X,Y,@pen qui respectivement écrit et lit un point graphique sur l'écran au coordonnées X et Y. Le fichier X86IOPix.bas situé dans le même répertoire est un exemple d'utilisation des fonctions de ce module.


notes: - 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.
         - au cas où il n'est pas nécessaire que le module soit initialisé par son premier vecteur au démarrage du systeme Cpc, il est possible d'utiliser le marqueur ":W" (Wagon) à la suite du nom du module. L'émulateur chargera alors les vecteurs ainsi que les mnémoniques du module dans la rom Z80 générée par le chargement du module précédent. On économisera ainsi des emplacements de roms Z80. (
Au cas où il n'y aurait pas eu encore de module chargés précédemment, l'émulateur crée un premier vecteur "sans effet" dans la rom Z80 associée au module).
          - é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: Crée une disquette virtuelle vierge au format data.

Commande à partir de la ligne de commande du Dos:
! CreaDisc

- 2 - Extract: Pour extraire les fichiers d'une disquette virtuelle.

Commande à partir de la ligne de commande du Dos:
Extract [nom_disquette] [nom_fichier]

- 3 - AniCrea est un programme qui ajoute des commandes d'enregistrement de l'écran de l'émulateur afin de créer des vidéos au format FLI.

- 4 - Fli2Gif: Pour visionner une vidéo au format FLI

Commande à partir de la ligne de commande du Dos:
Fli2Gif [nom_video]
Pour plus d'information lire la documentation Fli2Gif.doc

- 5 - Convertions format FLI

- 6 - Clavier complet pour utilisation sous Androïd

- 7 - Dza: Désassembleur z80 Dos/Win32




Les personnes qui désirent participer peuvent poster leur travail ici:  ou faire un don ici: Office Chrétien des personnes Handicapées . Merci.
Qu'est ce que l'OCH ?
En 1962, à Liège, des parents sont acquittés après avoir donné la mort à leur petite fille née dysmélique. Cette annonce est accueillie par d’immenses manifestations enthousiastes, ce qui provoque une grande émotion chez les familles des personnes handicapées qui se mobilisent contre la légitimation d’une forme d’euthanasie. En octobre 1963, l’OCH voit le jour.