PC-CPC
-------
Emulateur Amstrad CPC 6128, crit 100% en C par Ludovic DEPLANQUE (Demoniak)
Toutes suggestions, remarques, conseils sont les bienvenus.
Pour me contacter :
ldeplanque(at)nordnet(point)fr
Sources disponnibles sur simple demande.

Utilisation :
-------------
Lancer l'mulateur (Z80.EXE)
Pour pouvoir fonctionner, il a besoin de :
- le fichier config.cpc
- les roms d'un cpc (dans le rpertoire dfinit par le fichier config.cpc)
- ventuellement, un ou plusieurs fichiers images disquette (au format .DSK)

Touches de fonctions :
----------------------
F1 -> Mode turbo 'ON' : Ne synchronise plus l'affichage  50Hz. Cette
    option peut tre utile avec un PC assez lent.

F2 -> Mode turbo 'OFF' : Synchronise l'affichage  50Hz, comme sur un vrai CPC.

F3 -> Bouton 'STOP' de la multiface II (attention, cette option n'est pas
    encore totalement fonctionnelle). 

F4 -> Lecture d'un snapshot. Un snapshot est un fichier contenant l'tat
    de chaque composant du cpc ainsi qu'une copie de la mmoire  un instant
    dtermin, pour permettre par exemple une sauvegarde d'un jeu  un endroit
    prcis.
    

F5 -> Sauvegarde d'un snapshot

F6 -> Appel du dbuggeur Z80 intgr (en option...) Touches : Espace = pas  pas
      F6 : sortie du dbuggeur

F7 -> Changement de disquette. Une disquette est mule par un fichier image
    (fichier avec l'extension .DSK). Ce mode dsactive le mode de lecture depuis
    le disque dur du PC.

F8 -> Reset du CPC. Similaire  un switch du bouton ON/OFF

F9 -> Lecture d'un fichier cassette. Permet d'indiquer un nom de fichier au
    travers duquel l'mulation de la lecture cassette sera ralis. Le fichier
    doit tre un fichier au format .WAV, digitalis sur 8 bits en mono, avec
    une frquence de 11, 22 ou 44 Khz.

F11 -> Ecriture d'un fichier cassette. Permet de crer un fichier dans lequel
    sera restranscrit toute criture sur cassette. Le fichier cr est un
    fichier .WAV digitalis sur 8 bits en mono  la frquence de 11 Khz.

F12 -> Changement du mode d'mulation disquette. Par dfaut, les disquettes
     sont mules par un fichier .DSK. Un nouveau mode permet d'muler
     directement les fichiers depuis une partition ou un lecteur de disque
     du PC. Ce mode dsactive la lecture/criture par fichiers .DSK

HOME -> Permet, lorsqu'un fichier cassette est ouvert en lecture (par F9), de
    choisir la position dans le fichier via un "compteur de secondes". Une
    fentre popup s'ouvre alors, indiquand la position actuelle du fichier.
    Il sufit d'diter cette valeur puis d'appuyer sur le bouton "OK" pour la
    modifier. La fermeture de la fentre par la petite croix en haut  droite
    ne fait aucune modification sur la position du compteur.

Arguments ligne de commande :
-----------------------------
-disk nom_fichier_avec_chemin_complet.dsk : permer de charger un fichier .dsk
    au dmarrage
-snapshot nom_fichier_avec_chemin_complet.sna : permet de charger un snapshot
    au dmarrage pour lancement automatique

-run fichier : permet de dmarrer automatiquement le fichier dont le nom est
    "fichier".

Nouvelles commandes RSX disponnibles
------------------------------------
PC-CPC contient une nouvelle rom dvelope spcialement qui contient 7
nouvelles commandes RSX ajoutes au BASIC Amstrad :

|PACKSCR,adr_buffer,adr_longueur
Permet de compacter l'cran affich sur le cpc (adresse #C000->#FFCF).
adr_buffer reprsente l'adresse o sera stocke l'image compacte,
adr_longueur reprsente l'adresse o sera stocke sur 16 bits
la longueur de l'image compacte. adr_longueur peut tre l'adresse
d'une variable basic entire (ex : @longueur%)

|DEPKSCR,adr_buffer
Permet de dcompacter l'cran stock  l'adresse adr_buffer.

|PACKWIN,xd,yd,xa,ya,adr_buffer,adr_longueur
Permet de compacter la fentre affiche sur le cpc en choisissant
les coordonnes (xd,yd) comme point de dpart et (xa,ya) comme
point d'arrive de la fentre. xd varie de 0  79 quel que soit
le mode cran (xd reprsente la colonne de dpart en octets),
xa varie de 0  79 et doit tre suprieur ou gal  xd.
yd varie de 0  199 quel que soit le mode cran (yd reprsente
la ligne de dpart en octets), ya varie de 0  199 et doit tre
suprieur ou gal  yd.
adr_buffer reprsente l'adresse o sera stocke la fentre compacte,
adr_longueur reprsente l'adresse o sera stocke sur 16 bits
la longueur de l'image compacte. adr_longueur peut tre l'adresse
d'une variable basic entire (ex : @longueur%)

|DEPKWIN,adr_buffer
Permet de dcompacter la fentre stock  l'adresse adr_buffer.

|PACKWINDC,adr_buffer,adr_longueur
Permet de compacter la fentre affiche sur le cpc en calculant
automatiquement les coordonnes de celle-ci en fonction des points
prsents sur l'cran. Pour rsumer, il suffit d'afficher la fentre
que l'on veut compacter sur un cran vierge, et ce RSX calculera
automatiquement les coordonnes. Le format de la fentre compacte
est le mme qu'avec l'instruction |PACKWIN.
adr_buffer reprsente l'adresse o sera stocke l'image compacte,
adr_longueur reprsente l'adresse o sera stocke sur 16 bits
la longueur de l'image compacte. adr_longueur peut tre l'adresse
d'une variable basic entire (ex : @longueur%)

|PACKBUFF,adr_source,longueur,adr_dest,adr_longueur
Permet de compacter une zone mmoire d'adresse et de longueur
dtermine vers une zone de destination.
adr_source reprsente l'adresse de la zone mmoire  compacter,
longueur reprsente la longueur de la zone mmoire  compacter,
adr_dest reprsente l'adresse de la zone de destination (qui
contiendra les donnes compactes)
adr_longueur reprsente l'adresse o sera stocke sur 16 bits
la longueur de l'image compacte. adr_longueur peut tre l'adresse
d'une variable basic entire (ex : @longueur%)
Ces nouveaux RSX font appel  une fonction de compactage LZW, code
en C, et donc performante et rapide. Il est galement possible d'appeler
les fonctions de compactage-dcompactage en assembleur via les
op-codes suivants :

|DEPKBUFF,adr_source,adr_dest,adr_longueur
Permet de dcompacter la zone mmoire stock  l'adresse adr_source vers
adr_dest.
adr_longueur reprsente l'adresse o sera stocke sur 16 bits
la longueur de la zone dcompacte. adr_longueur peut tre l'adresse
d'une variable basic entire (ex : @longueur%)

ED 01 : quivalent de |PACKSCR, avec en entre :
HL = adresse du buffer de compactage
IX = adresse contenant la longueur compacte
aucun registre n'est modifi.

ED 02 : quivalent de |PACKWIN, avec en entre :
E  = xd
D  = yd
C  = xa
B  = ya
HL = adresse du buffer de compactage
IX = adresse contenant la longueur compacte
aucun registre n'est modifi.

ED 03 : quivalent de |DEPKSCR, avec en entre:
HL = adresse du buffer des donnes compactes
aucun registre n'est modifi.

ED 04 : quivalent de |DEPKWIN, avec en entre:
HL = adresse du buffer des donnes compactes
aucun registre n'est modifi.

ED 05 : quivalent de |PACKWINDC
HL = adresse du buffer de compactage
IX = adresse contenant la longueur compacte

ED 06 : quivalent de |PACKBUFF
HL = adresse de la zone  compacter (source)
DE = adresse de la zone destination
BC = longueur de la zone  compacter.
IX = adresse contenant la longueur compacte

ED 07 : quivalent de |DEPKBUFF
HL = adresse de la zone source (zone compacte)
DE = adresse de la zone destination
IX = adresse contenant la longueur dcompacte

* Exemple : Compactage d'un cran :

BUFFER  EQU     #4000
        LD      HL,BUFFER
        LD      IX,TAILLE
        DB      #ED,#01
        RET
TAILLE  DW      0

* Exemple : Dcompactage d'un cran

BUFFER  EQU     #4000
        LD      HL,BUFFER
        DB      #ED,#02
        RET


Il existe galement un source assembleur Z80 des routines de dcompactage,
donc utilisable sur un vrai CPC. (Me contacter pour l'obtenir)


Lancement d'un jeu sur un CPC
-----------------------------
Pour obtenir le "catalogue" d'une disquette, taper
[CAT], suivi de [enter]
La liste des fichers prsents sur la disquette s'affiche
alors. Pour excuter le programme dsir, il sufit de
taper : 
[RUN "nomdufichier"] [enter]
Les fichier excutables sont en gnral :
- des programmes crit en basic, avec une extension .BAS
- des programmes crit en assembleur, avec une extension .BIN

Infos techniques
-----------------
- L'mulateur utilise un fichier de configuration nom "Config.cpc",
qui doit se trouver dans le mme rpertoire que l'excutable.
Le dtail du paramtrage se trouve crit dans le fichier en lui-mme.
- L'mulateur cre un fichier Z80.LOG, o est trac les problmes ventuels
rencontrs, ainsi que quelques informations (changement de disquette...)
- L'mulateur est crit 100% en C, sous environement Windows 32 bits,
et de manire  tre port facilement sur d'autres plateformes (ex: Amiga).
Les fonctions muls sont les suivantes :
- Processeur Z80 : 99% des instructions,
- AY3-8912 (processeur sonore) : 3 voies + bruits blancs + enveloppes,
- CRTC 6845 (controlleur cran ) : Les registres fondamentaux  50% 
    (1, 2, 6, 7, 9, 12, 13),
- PPI 8255 (interface parallle ): 90% (Seul le mode 0 du 8255 est mul,
    car c'est le seul utilisable dans un CPC),
- UPD 765 (controlleur disque ) : 70% (Permet la lecture des fichiers
    images standard),
- VGA (Video gate array) : 90 % (Slection encres, Mode cran, Roms)
- Timings Hsync et Vsync (synchro horizontale et verticale),
- Gestion disquettes par fichier image standard (.DSK)
- Gestion sauvegarde tat en cours par fichier snapshot standard (.SNA)
- Gestion cassettes par fichier image propritaire (.TAP)
- Utilisation du disque de la machine hote pour lecture/criture de fichiers