2020/05
MEM: Fixed a memory bank request bug introduced with last update for 4Mb support (affect Dynasty Wars loader which is requesting extra memory bank number 10 instead of 6 on 128kb memory CPC)
TAPE: Reduced the motor on/off timing delay
K7: Added CSW format
CMD: Added some check and display when file or argument is missing with some options.

2020/04
CMD: Corrected a bug when passed a wrong argument and the missing argument --cpr !
LINUX: Make the first working build on Linux 64bits with Code::Blocks 20.03 and gcc9
Need zlib-1.2.11, libpng-1.6.37 et SDL2-2.0.12 or SDL2-2.0.8 installed !
MEM: Corrected a little bug when deallocating LROM DATA at CPR loading.
FDC: Corrected a regression bug when command was équal to zéro (version) or to invalid command number !
FlipSide: Fixed 2 bugs (Thanks to Loïc)
 
2020/03
ASIC: Added the sprites to the engine, performance is low but all demo are working good !
DSK: >hen changing CPC type, disk aren't ejected. So when you are on 664, 6128 or 6128+, you keep it and can read it after changing the CPC model !
CPR: By default, loading a CPR when CPC type is old (464,664 or 6128) automatically change configuration to a plus CPC model.
SNA/SNR: Intergrated CPC Plus compatibility. But SAVE SNA of Plus feature not implemented yet !
INI: Added default filepath for SCR/SNA savefile are used if defined in the .ini file.
Upgraded SDL2 to 2.0.12 (last version available)

2020/02
ASIC: Improve of some cpc plus features.
JOY: If you have an analogic axis on your joystick : send digitals and analogics joystick values (tested with Tennis Cup 2 only)

2020/01
CPR: Added support for cartridge format
ASIC: Added ASIC, PPI & CRTC 3 emulation


2019/11
SNR: Added the playBack, but seems WINAPE specific keyframe adjusting missing, so some SNR don't work after a while... DSCA and DSCB disk files are automaticaly loaded, but need to be at the same file path as the SNR file !
BUGFIX: When a CDT was playing and tape motor on, there was a crash if you're loading a SNA or SNR !
ARGS: Add the possibility of disabling CTM monitor scanlines in .ini or commands line
OSD: Show side after track when disk is double side.
CTM: Added key SHIFT+F3 to change monitor scanlines and optimized the activate of the scanlines
DSK: Use SHIFT+F1 or SHIFT+F2 to try autochange and load other side of the disk already inserted. Name must contains "Face x" or "Side x" or "Disk x" and the rules to change 'x' after are A<->B or xA<->xB or 1<->2
Also CTRL+F1 or CTRL+F2 show the actual file in floppy disk A or B
CDT: Use SHIFT+F3 to try autochange and load other side of the tape/k7 already inserted. Name must contains "Face x" or "Side x" and the rules to change 'x' after are A<->B or xA<->xB or 1<->2
Also CTRL+F3 show the actual file in cassette desk 
Warning, for doing that, I shifted the Function Key, now F4->change crtc type, SHIFT+F4-> scanlines or noscanlines, F5-> sound/nosound, SHIFT+F5-> stéreo/nostéreo.
ARGS: Add the possibility to autload tape with -e or --autotape command
INI: Add the choice of the language=uk or fr or es or dk to choose default language of Amstrad roms and keyboard. 
Upgraded SDL2 to 2.0.10 (last version available)
JOY: Added the new events of SDL 2.0.10 to detect plug/unplug of the joystick
WIN: Added the possibility to set the x,y horizontal, vertical position of the main window in commande line or .ini file.
MEM: Added the extension of memory > 512kb -> 1024kb/1Mb, 2048kb/2Mb and 4096kb/4Mb are allowed ! FutureOs and others demos using this memory extension works now.
SNA: added management of extra memory chunk MX09->40. Also SNA file save of memory > 128kb through 4Mb is now available but without extra CHUNK MEM0->9 and MXxx because RLE compression not implemented yet !
MEM: added all connexions of extended banks memory, now SymbOs works (576kb or 1M version)
EXT: added digiblaster 8bit emulation on printer port. command line -d or digiblaster=yes in the .ini (with default=no before ;-)). Added a kind of " high pass filter" when the printer data is 255 x the same, it stop sound digiblaster output (mix with channel B).

2019/10
SNA: Add memory compression detection, but memory still 128+640kb, no support more memory expansion for now !

2019/09
CDT&TAPE: Minor technical change for more accuracy on motor / play command !
FULLSCREEN: Keep and restore window position when set/reset fullscreen and only if display of the window isn't full in desktop area, reset it to center of the desktop.
JOYSTICK: Add axis and improve hat joystick move detection - more reliable
OSD: Added name of the file which is dropped and warning on screen display !
OSD: Added name of the write file (snapshot ou screenshot)on screen display !

2019/07
FDC : Corrected end of format command when FDC detect index hole for the second time - It appends when you try to format a track with track size superior of real track size. N=6 (8192 bytes) for example.
SAVE SCREEN : Implemented PNG format instead of BMP format to save screenshot
MOUSE : Hide mouse pointer when you left click inside the window display, press middle button or F8 (pause/unpause) to show mouse pointer again !
  
2018/10
Upgraded Mingw32 - G++ to 6.3.0-1 (last version available)
Upgraded SDL2 to 2.0.8            (last version available)  but retrograded to SDL2 2.0.5 because mono sound is jerky !
CDT: corrigé un bug sur la détection de fin de K7
IPF: corrigé une regression sur le début de la piste depuis le passage en bits MFM non alignés (201805) 
FD: corrigé un bug sur l'écriture sur disquette depuis le passage en bits MFM non alignés (201805) 
ARGS: rajout de la possibilité de placer un fichier cdt ou wave dans le lecteur de cassette
INI: ajouté la possibilité de mettre des paramètres de l'émulateur dans le fichier CPCEPower.ini pour conserver ces paramètres.
@TODO: voir pour ajouter la possibilité de les sauvegarder dans le fichier s'ils sont changés directement dans l'emulateur.
ARGS : ajout d'un argument pour régler le volume global du son
INI : ajout de l'option 'volsound' pour régler le volume global du son

2018/05
CT-RAW: Corrigé l'algorithme de corrections des secteurs endommagés. Reste à voir comment corrigé quand il n'y a qu'un seul secteur incomplet uniquement par piste !
FDC: Correctif de la commande Read Id qui pouvait se bloquer au moment de la lecture de l'IDR secteur.

2018/04
CDT: Corrigé un mauvais calcul sur l'allocation des données 

2017/12
AFF: Ajout de la gestion du multi-écrans
JOY: Inversion des boutons du joystick, rajout du troisième bouton fire, rajout de la gestion d'un deuxième joystick.

2017/11
LANG: Ajouter la possibilité de changer de language de rom (UK, FR, SP ou DA)
IPF; Amélioration du code
WAV: Prise en compte de tous les formats et amélioration du code.
DSK: Améliorer le cas d'un secteur incomplet (taille réelle < à la taille du N<<128) si non multiple de 128 bytes pas d'ajout du CRC et du GAP3

2017/10
TAPE SOUND: enlever le son de la k7 quand on mets le son en stéréo / sortie casque pour être identique au hardware du 464.
IPF: ajout d'une pause qui indique l'erreur quand un ipf non officiel plutôt qu'un plantage ;-)!
CRTC0:correction du test de fin de ligne pour le bon fonctionnement de la demo Coop (UK) (2013). pas de regression constatée sur les autres demos...

2017/08
CDT: Fixé une régression qui faisait que les datas lus de la K7 n'étaient plus égales à zéro ou un !!! 
RAW: Nettoyage du code ! 

2017/07
FDD: correction du démarrage du moteur et la génération du signal READY pour qu'il soit plus proche de la réalité. Le signal ready est généré, si le moteur a démarré à 50%, si un disque est inseré et si deux index ont été trouvés sur la disquette ce qui correspond à deux rotations effectuées. Le jeu Sphaira fonctionne maintenant !
FreeRun/frameskip: Optimisation pour éviter une surconsomation CPU/GPU inutile, l'affichage n'est fait que tous les 5 frames CPC.
FDC: diverses petites corrections liées au signal READY et aux commandes SEEK/Recalibrate. Tous les tests de non régression sont ok.
FDC: correction de la gestion du STEP pour les commands scan grâce au copieur/vérificateur du jeu "Fres Fighter II Turbo" qui utilise la fonction scan du FDC -> 1er programme que je trouve sur CPC qui s'en sert !
TAPE: correction d'un bug qui empechait le moteur du lecteur de K7 de redémmarer à la fin de la lecture d'une K7 et si on inserait une autre K7 pour lire la deuxième face par exemple. 
PSG: refactoring du code + correction de la génération du noise level quand le compteur son du canal était à zéro (ex: musique Moktar ou Deflektor ou effets sonores Puffys Saga ou Enduro Racer).
ARGS: rajout de la possibilité de choisir le type de crtc avec '-t, --crtc=0,1 or 2'; possibilité de désactiver le son qui a été mis par défaut au lancement avec '-n, --nosound - disable sound'
ARGS: rajout de la possibilité d'activer le joystick
RAW: rajout de la gestion des doubles faces

2017/06
CRTC: Corrigé le fait que certaines variables n'étaient pas correctement initialisées au reset ce qui provoquait quelquefois un affichage bizarre au démarrage de l'émulateur !
SNA: Correction du calcul de la taille du fichier qui était éronné.
F10: Exécution au maximum on/off. J'ai rajouté un frameskip dans l'affichage pour éviter une surconsomation CPU inutile ;-) ! Le son est coupé pendant l'accélération mais il est restauré maintenant à la reprise de la vitesse normale.
GUNSTICK: essai d'émulation du gunstick juste en timer externe au moteur d'émulation. A activer en ligne de commande par -g
VSYNC: corrigé la valeur max de déclenchement de la VSYNC. 
WINDOW: La fenêtre de l'émulateur récupère maintenant systématique le focus au démarrage et à chaque drag'n'drop
FDC:Il y a une différence entre le UM8272a et le UPD765a sur la sélection du lecteur de disquette.
Cela pourrait expliquer certaines incompatibilités de sélection de lecteur.
à vérifier sur le 'vrai' hardware !
pour l'instant, j'ai fait en sorte que si le lecteur 2 et 3 n'existent pas, les lecteurs 0 et 1 répondent aux commandes envoyés au lecteur 2 et 3 respectivement.
correction du signal READY qui n'était pas bon quand le moteur était arrêté

2017/05
Ajouté le son pour le lecteur de disquette, changement de piste et insert/eject mais des sons wave de meilleurs qualité seraient mieux !
pour l'instant le son du lecteur de disquette n'est pas mixé avec celui de l'AY mais remplace celui-ci !
RAM-GATEARRAY: ajout de la possibilité d'allouer plus de 128ko -> 640ko de memory en ligne de commande (-m640 ou --mem=640 par exemple)
SNA:test supplémentaire ajouter quand le snapshot est à plus de 640ko de mémoire pour éviter un plantage!
SNA:rajout d'un test quand le type de CPC est >2 3=unknown, 4=6128 Plus, 5=464 Plus, 6=GX4000 -> forçage du type de CPC à 2=CPC6128
FDC: Correction pour que le flag ST0_EC ne soit mis que quand la command Recalibrate echoue après 77 Step Pulses. Avant il était mis aussi pour la commande SEEK ce qui générait un problème pour les diquettes de 80 pistes et plus (PARADOS)
Correction de l'initialisation de la commande SEEK qui ne fonctionnait pas après certaines autres commandes FDC
Ajout des commandes scans (merci aux tests d'Arnold qui m'ont permis de les tester, avant je n'avais pas trouver de tests existants)
autotype:rallentissement de la cadence de simulation d'appuie des touches pour gérer correctement les mot à taper avec deux lettres identiques  
example:
CPCEPower_SDL.exe -c128 -0 ".DSK\Harricana - Raid International Motoneige (F) (1990) [Original] (GAPS).dsk" -a "RUN\"HARRI"
example: attention, les guillements ne sont pas toujours utiles en ligne de commande
CPCEPower_SDL.exe -c128 -0 ".\DSK\Fer & Flamme (F) (Face 1) (1986) [Original] (Weak Sectors).dsk" -a RUN\"F&F

2017/04
fullscreen : ajout d'un icone et de la gestion du fullscreen (F11 garde les proportions et SHIFT+F11 maximise l'affichage) (reste à voir pour lancer la lecture des k7, associer une touche ?)
son : ajout touche F4 (on/off) et F5 (stereo/mono)
SAVE : correctif d'un bug dans certains cas si plusieurs save de sna, dsk ou scr concurrents!
SNA : correctif de la sauvegarde qui ne marchait plus
ajout de passage d'argument en ligne pour choisir le type de cpc, les roms hautes, les dsks, sna, etc.

2017/03
correction d'un bug aléatoire du à la mauvaise initialisation d'une variable !
464 : correction d'un bug du fait qu'il n'y a pas de fdc ! 

2017/03
drive : amélioration et optimisation du code, fix de la gestion des multiples révolutions lors de l'écriture
FDC : fix des commandes format et write 
IPF : fix d'un bug de désallocation de la mémoire quand side1 était vide
 
2017/01
FDC : amérlioration du code
SDL : passage à la version 2.0.5

2016/10-11
CRTC0 : fix sur quelques demos (ex : Cuddly - BudBrain (UK) (128K) (1993) [DEMO])
CRTC1 : fix sur quelques demos (ex : Mad Rast (UK) (19xx) [DEMO])
FDC : fix mineurs quand un secteur est à cheval sur l'INDEX (certains fichiers IPF).
AY/PPI : changement sur les appels et les fonctions read/write (corrige définitivement un bug sur la music de Trantor The Last Stormtrooper, le menu de l'intro de Turrican II et un autre sur le menu de Match Day II)
DSK : réécriture d'une partie de l'interpretation des données eDSK vers MFM
RAW : ajout de la lecture des CT RAW (dernière version du format) - correction uniquement des bad secteurs si un est bon dans les 5 révolutions - si problème flux MFM, pas de correction
IPF : ajout de la lecture des IPFs (dernière version du format) - tous les IPFs 'officiels' fonctionnent ;-) sauf After Burner.ipf, Bad Dudes Vs Dragon Ninja.ipf, Eliminator.ipf (idem .raw), Revolution.ipf (CAPS encoder), test.ipf
JOYSTICK : ajout de la prise en compte des joysticks USB (si pas de joystick mapping des touches cursors + control + shift)

2016/02
Optimisation mineures
FDC : fix mineurs.
CDT : Pour l'instant, je n'ai pas intégré l'inertie du moteur de K7 comme expliqué par Gérald


2016/01
CRTC1 : j'ai fixé tous les points connus.
DSK : optimisation mineure
Rajouté la possibilité de lire et décompressé des fichiers zippés avec l'ajout de la zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License
Affichage des .diz and .txt qui sont présents à l'intérieur du zip mais pas de possbilité de choisir le fichier si multiple fichiers, c'est le premier dsk ou cdt qui est prit.
Ca consomme un peu plus de mémoire, mais pas trop !

2015/12/25
- CRTC0: émulation de l'interlace sync mode (register R8 - b0 à 1) & interlace sync & video mode (register R8 - b1 et b0 à 1) ;-) test avec les dsks de SyX et BSC 7 - Interlace (UK) (19xx) [DEMO].sna ok !

2015/12/23
- CRTC0: la partie 4 de Amazing Demo de Longshot corrigée

2015/11/28
Son : j'ai essayé de retravaillé la sortie son, mais les résultats sont mitigés
- différence entre Firefox et Chrome ! Se dernier ne joue pas exactement dans le même timming...malgré le code en javascript identique
- si l'émulation ne tourne pas exactement à 50 fps, le son n'est pas tout à fait synchro !

Emulation : j'ai tenté d'améliorer la fluidité de l'affichage et des fps. Le rendu semble meilleur sur Chrome que sur Firefox car sur ce premier les fps sont plus constantes...

2015/11/25
AY8910 : enorme avancé sur l'émulation... Contrairement à ce que dit le datasheet, et en étudiant l'intérieur du chipset : http://privatfrickler.de/blick-auf-den-chip-soundchip-general-instruments-ay-3-8910/
--> les compteurs sont en fait en incrément jusqu'à être supérieurs ou égaux à la valeur renseigné dans les registres !!!
--> Le son est légérement différent dans certaines musiques cpc !!!

2015/11/21
Implémenter la commande "format a track" dans l'émulation FDC (une copie intégrale avec disco fonctionne maintenant ;-) !)

2015/11/21
L'émulation FDC est plus proche d'un vrai FDC et donc des DSKs ne passent pas car j'essaye de ne pas trop bidouiller pour reconstruire un disk MFM correct !
Les quelques dsks qui ne passent pas nécessiteraient un redump (ex : info GAP avec des infos du secteurs suivant (début du sector id par exemple))

2015/10/27
Enfin trouver le temps de chercher comment detecter la touche "enter" du pad numérique dans un navigateur ! plus besoin d'appuyer sur la touche "+" !!!
Quand on réduit la fenêtre ou que la fenêtre du navigateur perd le focus et que le son est activé -> le son est suspendu.

2015/10/25

@EMULATION:
FDC : Optimisation du code read/write
+ Ajout du support des dsks << version double size>> !

2015/10/21
AY-8912 : - Optimisation importante du code de l'AY-8910

2015/10/14
- Revue en profondeur de l'interface + ajout d'images (au maximum utilisation de celles déjà existantes sur cpc-power).
- Rajouter un test sur le chargement des fichiers pour éviter les problèmes à ce niveau
- Changer le chargement par drag&drop des fichiers sna et dsk.
- Mis une securité pour le loading des fichiers sna/dsk/cdt/wav pour s'assurer qu'ils sont bien ok lors du chargement.
- Les numéros des pistes/secteurs sont affichés pour les 2 lecteurs de disquettes.
- Affichage des LEDs rouge lors de l'activité de lecture des lecteurs de disquettes et de K7.

Chrome :
- le son stéréo marche maintenant sans baisse de performance significative !
- le son s'arrête maintenant quand on le stoppe dans l'émulation

@EMULATION:
CRTC0: Grâce à l'aide d'Offset, j'ai enfin pu faire fonctionner la démo "Overflow Preview 2" avec le sinus scroll sur crtc 0 !
- pour cela rajout d'un test lorsqu'on incremente le compteur de raster et test C9==R9 en début de ligne que si R0>1

2015/10/10

Sauvegarde fichier
sna: par défaut, si il y a eu un dsk de sélectionné, le nom du sna est "nom du dsk.sna"
wav: par défaut, si il y a eu un cdt/wav de sélectionné, le nom du wav est "nom du cdt/wav.wav"

2015/10/04

Scanline : j'ai revue l'algo pour qu'il n'y ait plus du tout de baisse de performance significative quand activé !

Son : j'ai revu comment les données sont stockées par l'émulation pour être ensuite joué à 44100Hz -> je trouve le son encore mieux comme cela personnellement ;-) !
Le problème principal reste la performance de javascript qui n'est pas continu comme sur code précompilé classique. Les fps ne sont pas stables donc le son peut être un peu "haché" quelques fois !

Limitation par défaut des extensions des fichiers proposés :

rom : *.rom et *.bin
snapshot : *.sna
disquette : *.dsk, *.raw, *.ipf
k7 :  *.cdt et *.wav

pour le player de ym local : *.ym*

@EMULATION:
- le cdt "Rat Connection" ne fonctionne pas, et c'est le seul cdt à ce jour à ne pas fonctionner. Le wave issu du CDT avec la clé (bytelogger) rajoutée par César fonctionne lui.

@TODO:
CTM: La hsync et la vsync sont partiellement émulés. pas de gestion du retour à ligne automatique quand pas de HSYNC généré (lorsque R2>R0 par exemple) (ex : Chany Dream 5 ou 6 (F) (128K) (19xx) [DEMO]) !!!
CTM: La hsync et la vsync sont partiellement émulés. Il manque la distorsion de l'image pour le hsync (composant LA7800 de SANYO).
SNA: faire en sorte que la sauvegarde du sna est lieu au moment du début de la VBL ?   
CRTC2, CRTC3 et ASIC (CRTC4) - faire l'émulation des CPC+ -> pour cela je dois avoir ces Amstrad, tous les dons sont les bienvenus.
PPI: coder l'émulation des autres modes que le 1, mais aucun programme CPC, hormis ceux créés par Arnold les utilsent...
Autres composants hardwares additionnels (Multiface 2, Magnum Phaser, X-MEM, etc.) : toute aide technique sur les documentations 'hardware' et des dons sont les bienvenus.
Menu: faire des menus dans la fenêtre interne pour le paramétrage interactif et les chargements des fichiers disquettes, k7, etc.
GATEARRAY: à confirmer que le DISPEN est la combinaison du signal CRTC DisplayEnable et de la dectection de l'inverse de HSYNC interne (ex : Ze Meeting 97 (F) (128K) (1997) [DEMO]).
si CRTC->DE=true et HSYNC=true, pas de Display Enable envoyé au monitor ou est-ce le monitor qui gére cela ?!
RAM/ROM: j'ai préparer le code pour accueillir des extensions de RAM et ROM (256)...
CRTC1: reste que la dernière ligne de la Mad Rast (UK) (19xx) [DEMO] n'est pas affichée !?
CRTC: j'ai préparer l'émulation pour le lightpen et le phaser mais j'aurai besoin d'un peu d'aide pour comprendre le hardware ;-)
CLAVIER VIRTUEL: à finaliser pour les autres modèles 464 et 6128 + visualisation des touches appuyées.
DSK: rajouter une option de sauvegarde du DSK quand modification/write de données.
DEMO: Equalizor (bug sur le déclenchement des interruptions qui intervient un microsecond trop tard!)
