Where are the particular strength of this emulator?
According to its author, It is made in C instead of assembler, it is much more correct internally than the previous CPCE, everything is done by keyboard, there are no menus
According to its author, It is made in C instead of assembler, it is much more correct internally than the previous CPCE, everything is done by keyboard, there are no menus
Where are the particular strength of this emulator?
Nice! :)
Hello,any solution for Autotype like JavaCPC? :)
i have just discovered this new emulator (release 14/03/2019), maybe the substitute of CPCE95 i still use.
Congratz to CNCSoft :)
http://cngsoft.no-ip.org/cpcec.htm (http://cngsoft.no-ip.org/cpcec.htm)
Anyone's got a direct link? Company firewall is blocking dynamic dns servers...http://cngsoft.no-ip.org/cpcec-20190526.zip
Hello,
i just tried your latest version, but i haven't found how disable the console window.
Is a way to hide the console or you still need it for debugging ?
Small update:Can it use ParaDOS v1.2? / Remap keyboard?
20190809 -- minor patch restoring the "silent" discarding (i.e. without error codes) of write operations in read-only discs and allowing the automatic booting of IBM-formatted discs.
While it isn't a very faithful approach to the disc write protection, this should let several copy-protected games run straight from ZIP archives instead of complaining that the disc is read-only. Besides, AFAIK the opposite case never happens: no protection fails when the disc is NOT write-protected.
(http://cngsoft.no-ip.org/image_2019-08-10_12-40-44.png)
Ideally, this screen won't happen from now on.
Can it use ParaDOS v1.2? / Remap keyboard?Yes, all you have to do is to swap the default ROM files (AMSDOS and the original English-keyboard firmware) with your own ones. CPCEC will accept them as long as they're compatible, i.e. firmware is a 32k file where the first 16k is the BIOS and the last 16k is the BASIC, and the DOS ROM is 16k and includes a valid high ROM ID.
(http://cngsoft.no-ip.org/IMAGE_2019-08-12_19-58-14.png)
Hi César,
To complete your crtc 1 emulation, try to make runable Scroll Factory (http://www.pouet.net/prod.php?which=76731).
It would be a good challenge for you and a good way to make your cpcec better.
Have a good fun.
Hi @cngsoft (http://www.cpcwiki.eu/forum/index.php?action=profile;u=191)Scroll Factory is indeed still incomplete, as I showed in the past screenshots. Either the mode change happens too late or the video rendering happens too soon. I know that there's a delay between what the Z80 does and what the screen shows, but I don't know its nature and its length, or whether it's just one delay or several types of it.
I've just tested CPCEC right now. There's still some work to do on Scroll Factory's intro.
Your emulator begins better and better each day. Do you plan adding Amstrad Plus emulation ?
Hoffe KourçeYes of course :-) Alright then, CPCEC-20191227 is available from my website as usual.
I would assume that any project made as part of the university course could be property of the university, or shared, or something like that.
Same as when you work on something paid by your employer; you don't own it (unless your contract says do).
The less I say about demos the better, too...Hi CNG, it looks (obviously) like a timing issue on SPLT register and SSRon a Plus, the soft scroll register had almost immediate effect (on the next screen "word")the split register adress is loaded in the Asic-CRTC at the end of the displayed screenfor the "face+vector balls" part, the CRTC is set to 256 bytes long so i guess your emulation do not reset to next adress until it's fully displayed (but this cannot be displayed)i guess that because the rubber bar use almost the same split routine -> with different CRTC settings but the split is triggered the same way, very conventionnal for a Plus++
did you try my ACID test split cartridge in the ACID topic ?Your statement about the "immediate effect" is leading me somewhere:
all CRTC3 is doing the same split technic, very + compliant (i'm not mixing CRTC split + SSR register)
so the basics are:
set SPLIT LINE + SPLITADR before the end of the displayed line THEN... ...out of the visible screen, modifying the SSR (or SSCR) because it has immediate effect
the SSR allow to "choose the block" then you have to substract the block value from the current block value to get the block you want because the BLOCK value is in fact a block shifting :)
Cool how quick this one does evolve! :) :) :)
Are you going to support more hardware expansions? Well, I mean the easy stuff. :)
I'm afraid I already struggle too much with the base hardware; expansions will have to wait until CPCEC is more solid. That being said, it already emulates up to 576k RAM (X-MEM, demo "Postscriptum") and 512k ROM (PLUS cartridges, either real or custom-made by gluing multiple 16k ROM files together)As the CPC can manage 256 Roms, please allow a super extension with 256 ROM and not a tiny amount of 16 or 32 like most of emulators ;)
As the CPC can manage 256 Roms, please allow a super extension with 256 ROM and not a tiny amount of 16 or 32 like most of emulators ;)Actually 64 would be enough (IMHO), that's a X-MEM + Y-MEM. Only one of my CPCs has an (internal) 2,5 MB of ROM - which I still not use completely. :)
Super minor update restoring the missing top left sprites of "Synergy 4" after I realised that a temporary buffer (in this case the sprite coordinates) enables monitoring softwares racing the beam to achieve this kind of visual effect.
(http://cngsoft.no-ip.org/IMAGE_2020-04-06_09-34-16.PNG)
Actually 64 would be enough (IMHO), that's a X-MEM + Y-MEM. Only one of my CPCs has an (internal) 2,5 MB of ROM - which I still not use completely. :)Please, we must avoid the race to the bottom... The CPC can manage 256 ROM, let the emulator manage 256 ROM...
Please, we must avoid the race to the bottom... The CPC can manage 256 ROM, let the emulator manage 256 ROM...Oh, I'm totally at your side. ;D
lowest=fw315en.rom
high02=sym-roma.rom
high03=sym-romb.rom
high04=sym-romc.rom
high05=sym-romd.rom
Hello, do you think it will be possible to use the sdl menu with a joypad ?You're as bound to use the keyboard sooner or later as with a real CPC, but alright, I'll consider your suggestion for future releases.
It will be easier to use it from a couch without using the keyboard.
Here are some tests you can do to see if the emulation is accurate:FutureOS succeeded at making a copy of the ZEXALL disc from drive A: to drive B: as seen in the screenshots:
- Install XDDOS 2.10 ROM and see if the system starts u
- Install FutureOS and copy from disc to disc (disc or file, check both)
- "" Use OS-Infos Tool to see if the expansion RAM can be detected
CPCEC requires a Microsoft Windows 2000 operating system or later.
CPCEC can run on Windows and SDL2-supported platforms including Linux desktop.
The Windows variant of CPCEC requires a Microsoft Windows 2000 operating system or later.
#define AUDIO_CHANNELS 2
20200603 -- seventeenth public release. Added stereo sound. Fixed a bug in the CPC PIO (the read-only mode of port A allowed writing), another bug in the tape analysis (CPCEC: the algorithm for TITUS caused trouble in "The Blues Brothers"; ZXSEC: Speedlock5 didn't recognize the heading noise; both systems add patches to shorten the initial delays), another one in the loading of CPC snapshots (a snapshot saved on PLUS hardware without the "CPC+" block showed a completely black palette), another one in the Z80 debugger (the command 'P0 could generate an infinite disassembly), another one on tape handling (reading a WAV file must use >128 as reference instead of >=128) and some problems in Win32 (the screen stopped updating after pausing, switching windows in and out) and SDL2 (boot message errors weren't shown; the filename sorting algorithm was slow).
I need a rest, but I still want to make a game for the CPC Retrodev 2020 compoGreat, but think about your health (mental and physical) first. Take care :).
I never trust a zip file, I invariably go into a new dir before unpacking them. And there's an option to unzip to lowercase the filenames.
@cpcitor (https://www.cpcwiki.eu/forum/index.php?action=profile;u=531) has been maintaining a git repo at https://github.com/cpcitor/cpcec as well, which has the benefit of the full history of the zipped releases. Although it's not quite been updated with the newest release yet.
I never trust a zip file, I invariably go into a new dir before unpacking them. And there's an option to unzip to lowercase the filenames.
@cpcitor (https://www.cpcwiki.eu/forum/index.php?action=profile;u=531) has been maintaining a git repo at https://github.com/cpcitor/cpcec as well, which has the benefit of the full history of the zipped releases. Although it's not quite been updated with the newest release yet.
@cpcitor (https://www.cpcwiki.eu/forum/index.php?action=profile;u=531) has been maintaining a git repo at https://github.com/cpcitor/cpcec as well, which has the benefit of the full history of the zipped releases. Although it's not quite been updated with the newest release yet.
new debugging functions (looking at graphics, following a timer, skipping scanlines and frames, etc), improvements in the user interface...
ld iy, rombank
defb #fd, #fd
ld (iy+0), b
defb #fd, #fd
ld (iy+1), c
And it was not working properlyAfter a few debug sessions I was able to found that the emulator only manage (iy+0) as tigger and not (iy+1) ld iy, rombank
defb #fd, #fd
ld (iy+0), b
inc iy
defb #fd, #fd
ld (iy+0), c
and now my new game (WIP port to CPC not announced yet) is working as supposed on CPCEC too 8) Hello.I just create an account to say thanks to cngsoft for the dandanator support on CPCEC :oExcellent bug report, thank you very much! Together with several few changes from the past days, it deserves a new release!
thanks a lot for make Sword of Ianna playable on another emulator.
I will follow it on futures releases as I am developing a new cardbridge game....For the moment I can only say it works fine after I modify my own code to make it compatible with the emulator :P As per the dandanator specs, we can use FD+FD + ld (IY+x) , abc ,
A for the config,
B for 1st slot zone
and C for 2nd slot zone
On my code for the new game I map both slots at same time using this codeCode: [Select]ld iy, rombank
And it was not working properlyAfter a few debug sessions I was able to found that the emulator only manage (iy+0) as tigger and not (iy+1)
defb #fd, #fd
ld (iy+0), b
defb #fd, #fd
ld (iy+1), c
so I modify my code to:Code: [Select]ld iy, rombank
and now my new game (WIP port to CPC not announced yet) is working as supposed on CPCEC too 8)
defb #fd, #fd
ld (iy+0), b
inc iy
defb #fd, #fd
ld (iy+0), c
but I would like to report it as may be good for a future release for a better dandanator emulation fidelity if you can check to use only 4 bytes as tigger for FDFDFD70 ,FDFDFD71, FDFDFD77 instead of the actual 5 bytes as FDFDFD7000 ,FDFDFD7100, FDFDFD7700
thanks a lot fo all your work
Excellent bug report, thank you very much! Together with several few changes from the past days, it deserves a new release!
20201020 -- minor patch fixing a bug in the Dandanator support (the "LD (IY+n),A/B/C" operations must work with any "n" value, instead of just 0: thanks to Spirax for the report) and another one in the CRTC (counter HCC is 8 bits long: "Camembert Meeting 4 Demo" stops showing a line of garbage between the top and the middle panels), adding SDL2_DOUBLE_QUEUE as an optional SDL2 compilation flag (some systems need an audio buffer longer than the default 8 frames) and using a different pixel pattern when both X-Masking and Y-Masking are enabled.
git clone https://github.com/cpcitor/cpcec
git fetch ; git rebase
Hello.What you say touches two topics. On one hand, CPCEC does use a small custom block for Dandanator status at the end of each snapshot, a small 16-byte chunk labelled "DNTR" that includes the last four bytes sent to the configuration ports, plus the last four bytes that are currently in use: the "RET mode" delays the activation of the new configuration bytes, so we need to keep the old ones somewhere. However, as you say, the user still needs to insert the appropriate Dandanator cartridge before loading the snapshot. If no cartridge is present, CPCEC automatically inserts the last known Dandanator cartridge; it isn't a great guess, but it let me play "Sword of Ianna" during several days on two machines (a desktop and a laptop) until I completed it. I'm wary of including paths and filenames within this custom block because nothing keeps the user from moving or renaming cartridges and snapshots, and thus making the included paths and filenames useless.
Thanks for the new vesrion, I have reverted my code to use ld (iy+1) as I save 4 bytes and some cicles on the routine. I have tested the new version and now is working properly with ld (iy+1), thanks
if I can sugest something for the TODO list.....
whe we released Sword Of Ianna a lot of user requested the posiblity to use snapshots for cardbridges as no any emulator support it.
I have done some test and appear as I can save a snap when I am running a dandanator cardbridge.
BUT in order to load it, you need to follow some procedure....
start the emulator
load the same dandanator cardbridge and start it
then load the snap.sna and on 95% of the cases you recover the game : ;)
there is any posibility to link the snapshot saved to the cardbridge that was loaded when the snapshot was created?
please add this to a future future TODO list, I think someone will need to create a standard snapshot file for cardbridges or a new version of sna with cardbirdge options :)
on Ianna we only save on the Dandanator cardbridge the preferences, as user can redefine keys and the language selected, so on original CPC we can recover user preferences from dandanator.
on the new game I am looking to implement a quick status save, that will alow the user to save like a check point on the cardbridge on any moment on the game.
it will have passwords to access the different levels, but user can on any moment save the state or reload the previous saved status :)
After check the code with CPCEC I have added some protections to the routine to check if it was saved to the cardhbridge properly.
so if on real CPC it will report savestatus "Ok", and under emulators than don't support save (yet) it will report savestatus "Fail"
8)
so thanks again for the emulator than allow us to test our code better ;)
Saludos
Spirax
10 PRINT"Hello world"
SAVE"hello"
CAT
Is it just me, or has anyone else found a major problem with CPCEC, in that it doesn't save files to disc images?
On the other hand, the Dandanator being able to save data on its own cartridges (Flash EEPROM, isn't it?) is a topic that the official documentation explains poorly and that, for fear of destroying data, I didn't implement; I'll wait for more explicit docs on the matter. The even poorer documentation on Spectrum (right now, all I know is that the ZX Dandanator monitors writes to the lowest 16k page; I have no idea on what those writes mean and do) is the reason why ZXSEC lacks Dandanator support, too.
; ----------------------------------------------------------------------------------------
; CPC Dandanator! Mini HW v1.2/1.3 - Eeprom Write SST39SF040
;
; Typical Usage -> LD A, SectN ; Loop 128 sectors
; CALL SSTSECTERASE ; |
; LD A, SectN ; |
; LD HL, RAMSOURCE4KBLOCK ; |
; CALL SSTSECTPROG ; |
; JP DDNTRRESET
;
; Dandare - May 2018
; ----------------------------------------------------------------------------------------
; ----------------------------------------------------------------------------------------
; ERASE SECTOR
; A = Sector number (39SF040 has 128 4k sectors)
;
; **** MUST BE RUN FROM RAM, DI, AND WITH EXTERNAL EEPROM (ZONE0) PAGED IN in 0x0000
; **** NO OTHER ZONE PAGED IN, Commands Enabled
; **** Also Write Operations must be enabled and serial operations disabled
;
; ----------------------------------------------------------------------------------------
SSTSECERASE:PUSH AF ; Save Sector Number
AND 3 ; Get Sector within Page
SLA A ; Move to A13,A12 in DE
.....
El ZX Dandanator! Mini recibe comandos de control a través de escrituras en el espacio ROM (0x0000-0x3FFF).
Sin embargo, por compatibilidad futura y soporte de ZesarUX, se le asignan las direcciones comprendidas entre 0x0000 y 0x0003.
Estos comandos, que pueden ser simples o múltiples/especiales (más detalle sobre esto luego)
están compuestos una serie de pulsos consecutivos generados por esas escrituras (ld (0x0001),a - por ejemplo.
El valor de A es ignorado aunque se usa en el emulador ZesarUX).
El HW del Dandanator espera recibir pulsos separados por, al menos 7us y nunca más de 32us,
aunque se recomienda una separación nominal de entre 10 y 15us.
Para determinar el valor del comando enviado, el microcontrolador arranca un timer de 32us en el momento
de recibir cada pulso y, si recibe otro pulso antes de que el timer se complete, va sumando ese pulso a un contador.
Cuando se produce un “timeout”, es decir, cuando pasan 32us sin recibir otro pulso, se consideran los pulsos
contados como el comando recibido. En la imagen siguiente, el comando es “20”. (captura de analizador lógico)
...
Los comandos especiales están conformados por 3 comandos simples consecutivos más un pulso de confirmación.
Deben atender a unos criterios de temporización y direccionamiento estrictos de la siguiente manera:
· Cada comando recibido está sujeto a las mismas normas explicadas con anterioridad sobre la distancia entre pulsos y el timeout.
· De manera adicional, desde el momento de detección de cada comando (tras su timeout) se dispone de un máximo de 512us
para enviar el siguiente dato del comando especial. Si no se hace, se ignora el comando recibido.
· Por compatibilidad con ZesarUX, el primer byte del comando debe enviarse a la dirección 0x0001,
el segundo a la dirección 0x0002, el tercero a la dirección 0x0003 y el pulso de confirmación,
con cualquier valor en el dato, a la dirección 0x0000.
....
// Special Command code to execute (all special commands are 4-steps: Command Code, Command Data 1, Command Data 2, Fast Execute)
// Command Code, Data 1 and Data 2
// Data1, Data2 and Fast Execute MUST be on next consecutive 512us windows to Command (4 windows total). Otherwise Special Command will be ignored
// All data must arrive in pulses separated by at least 8us and no more than 30us.
// Detecting a command is done by timing out the pulses. After 32us without a pulse, the command, consisting in the number of received pulses, is processed.
// COMMANDS :
//---------------------------------------------------------------------------------------
// Command 0 : Not implemented (can't be)
// Command 1-32 : Bank Switch to 0-31 (1-32 pulses)
// Command 33 : Bank Switch to Internal ROM (Internal is recognized as Bank 33)
#define CMD_INTERNALROM_DISABLECMD 34
// Command 34 : Bank Switch to Internal ROM & Disable further Commands
// Command 35 : Reserved
#define CMD_RESET 36
// Command 36 : Generate a Reset
#define CMD_NMI 37
// Command 37 : Generate a NMI
// Command 38 : Reserved
#define CMD_SET_RESETSLOT 39
// Command 39 : Set Reset Slot. Current Slot is selected in case of an Spectrum-Triggered Reset. Cleared on ANY reset (even PIC-Triggered resets).
//--------------------------------------------------------------
#define CMD_SP_FASTCHANGE 40
// Special Command 40 : Fast Change & Action
// : Data 1 : Bank Number (1-33,35) - 35 means previous bank
// : Data 2 : Action to perform
// : bit 3 - Disable Commands
// : bit 2 - Lock Commands
// : bit 1 - NMI
// : bit 0 - Reset
// : bits 4-7 - Reserved MUST be 0
//--------------------------------------------------------------
Is it just me, or has anyone else found a major problem with CPCEC, in that it doesn't save files to disc images?I believed I had already answered this question to you in a past email, but I see that I never did. Ah well: CPCEC discards writes by default unless you ask CPCEC to create a disc from the menu, or you insert the disc with F7 (drive A) or Shift-F7 (drive B) and -depending on the Windows version- you disable the "read only" checkbox or you choose "open for writing" on the Open button submenu. Microsoft hid the file dialog options inside the "Open" button after Windows XP, but Wine's implementation keeps the options visible:
To test this, reset the CPC, insert a DSK file into drive A, and type in a line in BASIC such as:Code: [Select]10 PRINT"Hello world"
Then save it to disc:Code: [Select]SAVE"hello"
No error messages like "disc is write protected" appear, and the status display at the bottom left of the screen flashes to indicate that there is disc drive activity.
Now try cataloguing the disc:Code: [Select]CAT
In my case, even though there were no error messages, the file has not been saved to the disc image!
I've tested it in both Windows and Linux (under Wine) and this bug occurs in the latest version (20201012) and several previous releases.
Following the previous talk about disc write protections, and after noticing that the recently added mouse support for SDL2 lacked wheel scrolling, I made a new minor release:
20201022 -- minor patch adding mouse wheel support to the SDL2 user interface and an option to set whether disc write conflicts in CPCEC and ZXSEC are strict (they raise errors) or relaxed (they do nothing).
(...)
EDIT: extremely small update 20201024 -- minor patch solving a problem in the SDL_WINDOWEVENT_EXPOSED event, inverting the black/white bits in ZXSEC's graphics viewer and pointing CPCEC's viewer at RAM rather than ROM.
git clone https://github.com/cpcitor/cpcec
git fetch ; git rebase
@tjohnson (https://www.cpcwiki.eu/forum/index.php?action=profile;u=2129) : the joystick configuration is up to the operating system, I merely ask either the Windows API or the SDL2 library to tell me which joysticks are available and I choose the first one that is active.Not sure what happened 1st time but my gamepad works fine now, it's just like playing on a GX4000
You would probably need to provide much more details, like operating system version, exact cpcec version you used, how you got it, etc.
Damn. I can't really play games well on this then as it forces me to use analog stick. There's no way to force movement to the d-pad in Windows. Other emulators and programs tend to have even a basic config menu to sort that stuff out. This is a really great emulator but not one I can use as my main for now. Never mind. Happy new year. :)
Carnivius, CPCEC and ZXSEC do nothing special with the joystick, they simply request the first available joystick to Win32 or SDL2 (depending on the compiled version); the joystick configuration is up to the operating system.
tjohnson, I don't know, I'd have to know more about your system. Did CPCEC run faster in past versions? Is the "Video: software render" option on or off? Did you try different scanline and interlace modes? (some consume less CPU and video power than others)
So I couldn't sleep until I fixed the dpad issue, patch is attached. This is working under linux with my controller. I've not tested the equivalent changes I made on the win32 side but they *might* work...that's cool. how do i apply that?
Looks like SDL has a mechanism for loading a standard mapping file in for game controllers; adding the call to do this I leave as an exercise to the reader. :laugh:
A new release of CPCEC is in development: writeable Dandanator cartridges will be its main novelty1st Happy new year to all :)
that's cool. how do i apply that?Under unix it's usually as simple as "patch < file.patch", as long as the files have the same line-ending type. And then compile.
Under unix it's usually as simple as "patch < file.patch", as long as the files have the same line-ending type. And then compile.
I made a provisional version based on the code supplied by Pelrun: http://cngsoft.no-ip.org/cpcec-20210103-2555.zip (http://cngsoft.no-ip.org/cpcec-20210103-2555.zip)heya, i tested it and it's not detecting any input from my controller. I checked again on the previous version to make sure that one still does and yeah the previous one still detects buttons and has the movement attached to analog but this new one I'm getting nothing from. Sorry. :/
I don't have any joysticks at home and right now I must head out, so please test it and tell me whether the new joystick code behaves as intended.
If everything goes well, I'll properly update the docs and make this version fully public. If not, I'll continue editing the code until both angular and axial joysticks work.
heya, i tested it and it's not detecting any input from my controller. I checked again on the previous version to make sure that one still does and yeah the previous one still detects buttons and has the movement attached to analog but this new one I'm getting nothing from. Sorry. :/Second try: http://cngsoft.no-ip.org/CPCEC-20210104-2335.ZIP (http://cngsoft.no-ip.org/CPCEC-20210104-2335.ZIP)
Second try: http://cngsoft.no-ip.org/CPCEC-20210104-2335.ZIP (http://cngsoft.no-ip.org/CPCEC-20210104-2335.ZIP)D-pad working fine now. Thanks! :)
Made after noticing three points: 1.- Win32 joyGetPosEx requires the dwSize and dwFlags fields of JOYINFOEX to be properly filled in advance, 2.- Win32 JOYINFOEX.dwPOV field is not -1 when the controller is a joystick, but 65535; 3.- the SDL2 SDL_GameController operation set must coexist with the SDL_Joystick set; the former does NOT include the later, the function SDL_IsGameController tells which operation set must be used.
D-pad working fine now. Thanks! :)Excellent, it works at last! I just made a couple more edits (accepting more joystick buttons as virtual mirrors) and published the resulting package:
My only other request would be to choose which buttons on the controller is Fire 1 and Fire 2 (and allow for some keys to be mapped to controller for games that require it like those that use Space or Return for smart bombs or menus or P/H keys for pausing) but don't worry about that. Just having the more precise control of controlling CPC games correctly with the d-pad instead of the analog stick is a huge improvement and I can properly play games on it. :)
This latest version has broken my gamepad, now seems to be show up arrow constantly pressed on the pad. Checked with previous version and that works fine.After buying a game controller for 10 EUR I edited the code until it behaved as intended. Interestingly, the order of buttons in SDL2 is different from Win32, despite the controller being the same. Arthur also spotted a couple of things that needed fixing and helped me get them right.
New update, made possible by a bug report from Xenomorph, and featuring several tweaks:
- 20210114 -- minor patch improving Playcity stereo autodetection ("Alcon 2020" uses the left chip only), adding ROM simulation to Dandanator cartridges ("CPC Soccer") and fixing a bug in Z80 instruction CPI introduced in version 20210105 (RAXOFT tests) and another one in the CRTC1 VSYNC length ("Pheelone").