Another day another stunt! But here were are: The world’s fastest Commodore 64? 🙂
When I locate most of the C64’s memory ranges inside of the micro controller and disable cycle accurate mode (1Mhz native mode) the 6510 is emulated at over 600Mhz on a dual-issue superscalar processor, so it’s no surprise that we can achieve such a speed improvement!
I am basing the speed increase on a small BASIC test which counts the “jiffies” during a loop of code. This is the method used by the YouTube host “8-Bit Show and Tell” during his demonstration of the Super CPU Commodore 64 accelerator board:
In cycle-accurate mode my MCL64 measures the same results as the host, but when comparing the Super CPU accelerated to 20Mhz and the MCL64 in its accelerated mode, the MCL64 is roughly 2X faster than the Super CPU (in raw accelerated mode). The Super CPU has an additional “optimized” BASIC acceleration mode which further speeds up the hardware; however if the MCL64 implemented this optimization it would most likely again be much faster than the Super CPU.
This is the YouTube demonstration of the Super CPU running in its 20Mhz acceleration mode:
This is the MCL64 running in its accelerated mode which is more than 2X faster than the Super CPU:
Here are a few C64 cartridge images which I loaded into the MCL64:
I received my MC64 PCB in the mail today which I plugged it into my Commodore 64 and was happy to get some decent results!
The MCL64 is a port of my MCL65+ project to the MOS 6510 pinout so it can be used as a drop-in replacement for the Commodore 64’s CPU. It uses my 6502 emulator which runs on the Teensy 4.1 which is an Arduino-like board which runs at 600Mhz+ and has 1MB of memory. The 6510 emulation can either be cycle accurate or it can run significantly faster than the original processor!
I am able to boot to BASIC and run a print “Hello World” program, so one of the next steps will be to try running some of the C64 cartridge images directly from the processor’s on-board RAM. I will probably need to add some code to support the C64’s bank switching internally to do this.
I thought an EPROM emulator would be a cool application of a Teensy 4.0 and a small PCB.
The EPROM is emulated using a Teensy 4.0 which has more than enough speed to sample the 16 address lines, retrieve the data from a 64KB array, and then drive the data lines.
It supports EPROMs sizes up to the 64KB 27C512. Uploading a new ROM image takes seconds and is as simple as updating the data array then reprogramming the it using the Arduino’s IDE.
The small PCB contains three SMT buffers to convert voltages since the Teensy is not 5V tolerant. This board plugs into the EPROM socket and the Teensy plugs into this board.
The setup you see below is somewhat tall because, rather than soldering the Teensy directly to the board, I used sockets between the Teensy and the PCBA which added a lot of height. Without these sockets it would be much shorter.
I am working on a 6510 version of the MCL65+ which can be used in a Commodore 64. A few more buffers are needed to support AEC and the Peripheral pins, but it is basically a 6510 layout of the system which works in the Apple II+ and the VIC-20.
Another flashy title, but again probably true! The MCL65+, when running in accelerated mode is, I estimate, more than ten times faster than a stock 1Mhz Apple II+! This was accomplished by emulating all of the computer’s ROM and RAM in the 600Mhz microcontroller’s memory. Just the I/O and video memory ranges were left as regular 6502 bus access to the motherboard which run at 1Mhz.
The MCL65+ is a 6502 accelerator card which uses a 600Mhz Arduino Teensy4.1 microcontroller to emulate a 6502 microprocessor as well as its bus interface signals. It was designed to be a drop-in replacement for the original 6502 processor found in computers like the VIC-20, the early Apple computers, and others.
I took some videos of two BASIC programs I made to measure the system’s performance before and after the acceleration. One is the classic x=x+1, print x, goto 10 program and the other prints an array of characters. Both very simple however the accelerated speed increase is dramatic.. the text just flies by!
I was surprised that the video and keyboard worked so well under acceleration! The next thing I need to try is booting the computer from either the 5.25″ diskette drive, or a compact flash drive emulator…
Here are some videos of it running with acceleration enabled and disabled. Please note that these programs print a lot to the screen which is accessed via the 1Mhz 6502 bus to the video memory and slows the test down. If less is printed to the screen the acceleration is even faster…
I thought I would give this post a catchy title, and I believe it is probably true! The MCL65+ runs an emulated 6502 on a 600Mhz microcontroller, so when it is not running cycle-accurate it is quite a bit faster than the original 1Mhz 6502 in a VIC-20.
Here are some of the details:
The MCL65+ can emulate the complete 64KB of the 6502’s address range at 600Mhz, so I was able to add certain components to see what worked and what didn’t. It turns out that the VIC-20 BASIC was not tolerant of much acceleration… When I ran an accelerated ZeroPage and Stack range the performance boost was only about 15%. This is because when I tried to accelerate the BIOS and video regions, the VIC-20 video would no longer work. I guess there are timing dependancies with the BIOS that must not be exceeded.
I had better luck with some of the cartridge games. Some of them actually ran better when they were accelerated because, at the normal clock speed, they were slow and less responsive! When accelerating the game and VIC-20 memory ranges they ran much faster which was more enjoyable. Donkey Kong, Pac-Man, and Jungle Hunt all ran well at the accelerated speed. Defender was a little too fast to control!
I will post some videos of the accelerated games so you can behold the World’s Fastest VIC-20! 🙂
I was able to “max out” my VIC-20’s memory by using the Teensy’s internal array memory to supplement the 5K on the motherboard. I believe 28159 is the maximum amount of RAM the VIC-20’s BASIC will recognize.
I was also able to load a number of cartridge games into the emulated memory. They range from 4K to 16K games which span two address ranges 0x6000 and 0xA000.
I am trying to run a number of applications to see if the MCL65+’s 6502 emulated core is functioning correctly. The core implements all of the legal opcodes as well as most of the undocumented ones which some applications depend on.