My first post here -- but I have been reading for quite a while, and the project I want to report on owes a lot to you guys.
Over the past three months, I have developed yet another 65C02 replica in an FPGA, but one with a nice twist (or so I think). The actual 65C02 core inside is not my own, but is the 6502 core by Arlet with the 65C02 extension by Ed and David -- a big tip o'the hat to you folks!
I packaged this in a Spartan-6 (with 64 kByte on-chip RAM), on a small PCB which is just the size of a 40-pin DIP package, with pins matching the 65C02 pinout. I added a small state machine inside the FPGA which can access the external 65(C)02 bus with the correct timing, based on whatever Phi0 clock is coming in from the host system. Inside the FPGA, the CPU core runs at 100 MHz. I dubbed this the "65F02", where the "F" might stand for FPGA or for "Fast".
Attachment:
65f02 Rev C - first proto.jpg [ 127.42 KiB | Viewed 10348 times ]
The idea is to use this as a "universal" accelerator for 6502 and 65C02 based host computers -- just plug it into the CPU socket. The only thing the FPGA board needs to know about its host is the memory map: Where does the host have memory-mapped I/O? Up to 16 different memory maps can be stored in the FPGA, and selected via a mini DIP switch. Upon power-on, the 65F02 grabs the complete memory content from the host and copies it into the on-chip RAM, except for the I/O area. Then the CPU gets going, using the internal memory at 100 MHz for all bus accesses except for any I/O addresses -- for these, the internal CPU gets halted, and an external bus cycle is started at whatever the external clock speed is.
Kudos go to Roland Langfeld, who suggested this way of integrating an accelerator into almost any host, and has contributed a lot during the testing and debugging effort. Roland's original interest was in 6502-based chess computers (there were some really nice ones in the 1980s). But we have successfully tested the prototype 65F02s in an Apple II and a Commodore 8032, as well as various chess computers. Here it is at work in a "Mephisto Milano" chess computer:
Attachment:
65F02 im Milano.JPG [ 271.82 KiB | Viewed 10348 times ]
My current PCB includes level converters to provide 5V tolerant inputs with TTL logic thresholds, and full-swing 5V outputs. So it is compatible with TTL as well as CMOS environments. For the bus timing, we seem to have established one "universal" timing (setup and hold times etc.) which works in all host systems mentioned above, which run at 1 MHz to 5 MHz external bus speed.
I am not quite sure where to take this next. Populating and soldering such a board is a bit beyond the typical hobbyist's range -- the FPGA comes in a BGA package, and the level converter packages are also rather finicky. So just open-sourcing it once I have convinced myself that the design is stable wouldn't get us very far. But setting up a cottage industry to make these is not my idea of fun, and selling electronics in Europe is also painfully regulated (EMC testing, anyone)?
Hence this post. Would people even be interested in getting one of these? Any ideas how I could have them produced and, more importantly, distributed?
Of course I'm happy to discuss the technical aspects of this design too! Feel free to ask any questions, shoot holes in it, suggest improvements.
Best regards from Hamburg, Germany --
Juergen
(typos edited later...)