2021/05
OSD: Added files selection for A: B: TAPE: SNA: and CART: !
FDC: Corrected the sector order when formating track 
ALL: Code refactoring and correcting some little bugs
RAW: Better correcting of bad sectors
IPF: Major refactoring/rewrite of the decode Engine and now it is bit aligned (was byte aligned before (8 bits))  
SDL2: Updated to the last version 2.0.14 

2021/04
CDT: Correct a bug in ID 15 - now currentPulse is always keep. Code refactoring.

2021/03
WAV: 16 bits or 24 bits values was not correctly compared to middle sample value to determinate 0 or 1 signal ! 

2021/02
SNA/DRIVE: Fixed a rare bug where track is fixed to a value superior of the max tracks available of the inserted disk
SNA: Fixed z80 registers and GA colors index save thanks to Roudoudou !
ARGS: Corrected a bug which disable the loading of a LROM binary file passed with parameters.
Z80: Thanks to MadRam experimentations -> Corrected the Flags of F for ini/d(r) and outi/d(r) instructions ! cf https://64nops.wordpress.com/2021/01/13/perfectly-accurate-z80-flags-and-cpc-timing/
Z80tests program with ORGAMS last distribution is now 100% accurate !   

2021/01
ARGS: Added the possibility of changing the audio frequency (48000, 96000 or 192000) - 44100Hz is the default value

2020/12
ARGS: Force CRTC to ASIC - type 3 when CPC Type is 464+, 6128+ or GX4000 even if there is another CRTC requested in CPCEPower.ini or requested with the starting arguments ! 
FULLSCREEN: Now you can change the window to another screen and the window is centered before maximized to ensure that's the right screen is used (SDL2)

2020/11
PPI: for ASIC, the port A is always readable and writable even if the bit in the Control Register is activated or not. Thanks to AsT and Offset to have pointed it out !
CDT: Corrected a potential bug on ARM using a char instead of an unsigned char for pushBit
FULLSCREEN: now the emulation is paused when fullscreen lost focus with ALT+TAB because the rendering with SDL2/DirectDraw isn't possible in this case !
SAVE SCREEN: reworked all the code to work with all video driver and based now to the cpc screen pixel and not the screen visual or dimension

2020/10
WINDOW: Mouse grabbing on main window is disabled by default
ARGS: Added the possibility of enabling mouse grabbing on main window 
SCREEN: the heigth of the full screen is now proportional of width factor 

2020/09
XPR: Added the Extended Memory Cartridge format with help of Roudoudou ;-)!
MEM: Added the Extended Memory Cartridge format with help of Roudoudou ;-)!
Optimized the memory access using logical bank access switch like GA and ASIC do in real hardware                                                                 
ARGS: Added the possibility of disabling mouse grabbing on main window

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 zro (version) or to invalid command number !
FlipSide: Fixed 2 bugs (Thanks to Loc)
 
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-> streo/nostreo.
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 dtection de fin de K7
IPF: corrig une regression sur le dbut de la piste depuis le passage en bits MFM non aligns (201805) 
FD: corrig un bug sur l'criture sur disquette depuis le passage en bits MFM non aligns (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 paramtres de l'mulateur dans le fichier CPCEPower.ini pour conserver ces paramtres.
@TODO: voir pour ajouter la possibilit de les sauvegarder dans le fichier s'ils sont changs directement dans l'emulateur.
ARGS : ajout d'un argument pour rgler le volume global du son
INI : ajout de l'option 'volsound' pour rgler le volume global du son

2018/05
CT-RAW: Corrig l'algorithme de corrections des secteurs endommags. 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 donnes 

2017/12
AFF: Ajout de la gestion du multi-crans
JOY: Inversion des boutons du joystick, rajout du troisime bouton fire, rajout de la gestion d'un deuxime joystick.

2017/11
LANG: Ajouter la possibilit de changer de language de rom (UK, FR, SP ou DA)
IPF; Amlioration du code
WAV: Prise en compte de tous les formats et amlioration du code.
DSK: Amliorer le cas d'un secteur incomplet (taille relle <  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 stro / sortie casque pour tre identique au hardware du 464.
IPF: ajout d'une pause qui indique l'erreur quand un ipf non officiel plutt qu'un plantage ;-)!
CRTC0:correction du test de fin de ligne pour le bon fonctionnement de la demo Coop (UK) (2013). pas de regression constate sur les autres demos...

2017/08
CDT: Fix une rgression qui faisait que les datas lus de la K7 n'taient plus gales  zro ou un !!! 
RAW: Nettoyage du code ! 

2017/07
FDD: correction du dmarrage du moteur et la gnration du signal READY pour qu'il soit plus proche de la ralit. Le signal ready est gnr, si le moteur a dmarr  50%, si un disque est inser et si deux index ont t trouvs sur la disquette ce qui correspond  deux rotations effectues. 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 lies au signal READY et aux commandes SEEK/Recalibrate. Tous les tests de non rgression sont ok.
FDC: correction de la gestion du STEP pour les commands scan grce au copieur/vrificateur 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 redmmarer  la fin de la lecture d'une K7 et si on inserait une autre K7 pour lire la deuxime face par exemple. 
PSG: refactoring du code + correction de la gnration du noise level quand le compteur son du canal tait  zro (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 dsactiver le son qui a t mis par dfaut 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 initialises au reset ce qui provoquait quelquefois un affichage bizarre au dmarrage de l'mulateur !
SNA: Correction du calcul de la taille du fichier qui tait ronn.
F10: Excution au maximum on/off. J'ai rajout un frameskip dans l'affichage pour viter une surconsomation CPU inutile ;-) ! Le son est coup pendant l'acclration 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 dclenchement de la VSYNC. 
WINDOW: La fentre de l'mulateur rcupre maintenant systmatique le focus au dmarrage et  chaque drag'n'drop
FDC:Il y a une diffrence entre le UM8272a et le UPD765a sur la slection du lecteur de disquette.
Cela pourrait expliquer certaines incompatibilits de slection de lecteur.
 vrifier 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 rpondent aux commandes envoys au lecteur 2 et 3 respectivement.
correction du signal READY qui n'tait pas bon quand le moteur tait arrt

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 supplmentaire ajouter quand le snapshot est  plus de 640ko de mmoire 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 -> forage du type de CPC  2=CPC6128
FDC: Correction pour que le flag ST0_EC ne soit mis que quand la command Recalibrate echoue aprs 77 Step Pulses. Avant il tait mis aussi pour la commande SEEK ce qui gnrait un problme pour les diquettes de 80 pistes et plus (PARADOS)
Correction de l'initialisation de la commande SEEK qui ne fonctionnait pas aprs 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 grer 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 alatoire 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 : amlioration et optimisation du code, fix de la gestion des multiples rvolutions lors de l'criture
FDC : fix des commandes format et write 
IPF : fix d'un bug de dsallocation de la mmoire quand side1 tait vide
 
2017/01
FDC : amrlioration 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 dfinitivement 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 : rcriture d'une partie de l'interpretation des donnes eDSK vers MFM
RAW : ajout de la lecture des CT RAW (dernire version du format) - correction uniquement des bad secteurs si un est bon dans les 5 rvolutions - si problme flux MFM, pas de correction
IPF : ajout de la lecture des IPFs (dernire 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 intgr l'inertie du moteur de K7 comme expliqu par Grald


2016/01
CRTC1 : j'ai fix tous les points connus.
DSK : optimisation mineure
Rajout la possibilit de lire et dcompress des fichiers zipps 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 prsents  l'intrieur 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 mmoire, 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 corrige

2015/11/28
Son : j'ai essay de retravaill la sortie son, mais les rsultats sont mitigs
- diffrence entre Firefox et Chrome ! Se dernier ne joue pas exactement dans le mme 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'amliorer 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'intrieur du chipset : http://privatfrickler.de/blick-auf-den-chip-soundchip-general-instruments-ay-3-8910/
--> les compteurs sont en fait en incrment jusqu' tre suprieurs ou gaux  la valeur renseign dans les registres !!!
--> Le son est lgrement diffrent dans certaines musiques cpc !!!

2015/11/21
Implmenter la commande "format a track" dans l'mulation FDC (une copie intgrale 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 ncessiteraient un redump (ex : info GAP avec des infos du secteurs suivant (dbut du sector id par exemple))

2015/10/27
Enfin trouver le temps de chercher comment detecter la touche "enter" du pad numrique dans un navigateur ! plus besoin d'appuyer sur la touche "+" !!!
Quand on rduit la fentre ou que la fentre 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 dj existantes sur cpc-power).
- Rajouter un test sur le chargement des fichiers pour viter les problmes  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 numros des pistes/secteurs sont affichs 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 stro marche maintenant sans baisse de performance significative !
- le son s'arrte maintenant quand on le stoppe dans l'mulation

@EMULATION:
CRTC0: Grce  l'aide d'Offset, j'ai enfin pu faire fonctionner la dmo "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 dbut de ligne que si R0>1

2015/10/10

Sauvegarde fichier
sna: par dfaut, si il y a eu un dsk de slectionn, le nom du sna est "nom du dsk.sna"
wav: par dfaut, si il y a eu un cdt/wav de slectionn, 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 donnes sont stockes par l'mulation pour tre ensuite jou  44100Hz -> je trouve le son encore mieux comme cela personnellement ;-) !
Le problme principal reste la performance de javascript qui n'est pas continu comme sur code prcompil classique. Les fps ne sont pas stables donc le son peut tre un peu "hach" quelques fois !

Limitation par dfaut des extensions des fichiers proposs :

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) rajoute par Csar fonctionne lui.

@TODO:
CTM: La hsync et la vsync sont partiellement muls. pas de gestion du retour  ligne automatique quand pas de HSYNC gnr (lorsque R2>R0 par exemple) (ex : Chany Dream 5 ou 6 (F) (128K) (19xx) [DEMO]) !!!
CTM: La hsync et la vsync sont partiellement muls. 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 dbut 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 crs 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 fentre interne pour le paramtrage 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 gre cela ?!
RAM/ROM: j'ai prparer le code pour accueillir des extensions de RAM et ROM (256)...
CRTC1: reste que la dernire ligne de la Mad Rast (UK) (19xx) [DEMO] n'est pas affiche !?
CRTC: j'ai prparer 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 modles 464 et 6128 + visualisation des touches appuyes.
DSK: rajouter une option de sauvegarde du DSK quand modification/write de donnes.
DEMO: Equalizor (bug sur le dclenchement des interruptions qui intervient un microsecond trop tard!)
