MOS 6502 Simulator -
MOS 6502 Simulator is sort of an emulator for a 6502 chip.
Whilst (apart from those two things) it successfully simulates the CPU there were a few design flaws, which led me not to continue with it:
- I wrote it in C++.
As the 6502 had no dedicated IO bus, everything was done via memory. I had the idea of having a pure virtual class which provided a generic interface, then as I wrote devices to sit in the memory space, they could just override portions of it, or trap on writes or something.
Whilst writing this, I kept getting the feeling I should have written it in asm instead Especially for manipulating flags and rotates and stuff. (as I could have just rotated AL, for example, rather than the mess I have in the C++ code.
- Sloppy instruction decoding.
I originally set out to decode the instructions properly, but there were lots of exceptions to the system used (esp. if I intended to support the 65C02 for example). This decended into a massive switch statement. I almost considered splitting it up to smaller files, and just #include them in the middle, just to make it more managable.
Also, as they are not in numerical order (grouped according to type, or addressing mode, can't remember atm) it wouldn't compile to a jump table. Does with optimisation on though.
The main thing that prompted me to write this was I found my BBC-B in the loft, and felt a pang of nostalgia for the hours wasted hunched over it in the lowest resolution text mode (IIRC mode 7 to save ram). I had the idea of writing a NES or BBC emulator, however it didn't get that far.
It has a pretty simple image format. The file must be >= 65536 bytes (64k) and that is simply the memory image for the system (16-bit address bus). There is a strange sort of ASCII text display at 0x200, which is ok enough for spewing a string to. As it was just thrown together in the space of 6 hours or so (took a long time to do the switch statement) it's not very thouroughly documented, but hey.