What is YACE64?
YACE64 is yet another Commodore 64 emulator.
Why another Emulator?
Just for fun!
It will not try to compete to others like VICE, CCS64 and so on, it'll have its own priorities, like creating your own "C64 cloud" with the YACE64 server and the maybe first iPhone and iPad App, that allows you to access your C64 server without limitations and playing C64 multiplayer games with your friends all over the world!
If you want to know more, read the history below.
Is it perfect ?
No - not every program is running. I can not tell you how many and which programs are running or not.
Applications and Games like GEOS, Fort Apocalypse, Summer Games, Maniac Mansion and so on are working fine.
Feel free to tell me what doesn't work.
Starting with the goal to improve my java experience, I decided to write an emulation for the 6502 processor. The first implementation was done quickly and wanted to test it with the C64 ROM. A quick fake implementation of the VIC text-mode provided a little visual feedback At this time I recognized how slow the java vm is and then translated all to C++. This was a real performance explosion!
Ok, now the CPU worked, the C64 started up with a blinking cursor... wouldn't it be nice to have a keyboard input now...? Done.
Hmmm... trying some .prg files (just injected them into the RAM) showed that a graphics mode would be nice too - "this can not be so complicated" - I thought. It wasn't and all the other modes were quick easy to implement, but at this point is was disappointing to load any game - nothing was running. I didn't really looked at the timings. Now the challenge had begone... Reading nearly all available documentations, changing the complete VIC implementation, finally I got the reward - the first game (pit-stop II) was running!
The assortment of prg files is small, so I needed a simple disk drive emulation for d64 files. Starting with a simulator for a 1541 command server I had many problems with the IEC port and the simulation of the ATN, Clock and Data pins. Finally the serial port worked, but recognized that the command interpreter is getting complicated. So I switched again fundamentally and decided to implement the drive with my already working 6502 CPU emulation a little RAM and the nearly CIA equal VIA chip... Upps! I was so wrong - they are so different - this took then most of the time. Finally I could read and write d64 files with the emulated drive... but whats this - some programs didn't load! WTF is wrong? Internet says - there's something called V-MAX - why is this a problem? I thought I've done everything correct - timings and so on! No I was so wrong - nothing was correct! The IEC port timing was wrong, the 6502 timing was wrong, the read/write head timing was wrong... give up now?
No! I started to rework everything - changing the 6502 emulation to micro command emulation and changing the drive mechanics emulation to physical impulses took the breakthrough - now many things worked suddenly and only minor problems were left.
Now the emulator was working, but whats next...? Maybe it would be nice to share this - and here we are.
I didn't reached my goal to improve my java experience - but learned so much more - from writing cross-plattform C++ 11 code, improved Objective-C, iOS and Android (started on Android with java) experience to TCP communication, OpenGL and OpenAL rendering, using Direct Input and Direct Sound - learned how realtime sound synthesis works, a computer works down to the electrical signals and finally how to setup a domain. Never thought that you can learn so many modern technology with emulating a 30 years old computer...