I thought I would finish up this project with a few pictures of some games using the MCL65+ in cycle-accurate mode as a drop-in replacement for the Apple II+’s 6502.
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…
Cycle accurate mode: https://www.youtube.com/watch?v=UuSb7mrw3xg&feature=youtu.be
Accelerated mode: https://www.youtube.com/watch?v=rvJsCMR0qbo&feature=youtu.be
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.
Here are a few of the games I tried.
The MCL65+ boards came in last week and the parts just arrived today, so I soldered one of them together and swapped it for the 6502 in my VIC-20… I had some luck as you can see below! 🙂
The next step will be to use some of the Teensy’s RAM to expand the VIC-20’s memory, then try loading one of the VIC-20’s cartridges on-chip as well. I actually don’t have any VIC-20 cartridges, tapes, or disks, so once I can load ROMs into memory it will be fun to be able to run any of them!
The emulated 6502 has the memory interface abstracted from the CPU, so in theory I can accelerate the core by accessing some memory ranges using internal memory rather than going out to the 1Mhz bus interface. In this accelerated mode the 6502 would run at 600Mhz! 🙂