The 6502ctl project is an Arduino controller for the 6502 CPU. The controller controls all 6502 pins, including the clock signal and interrupts, and simulates an address and data bus with attached memory and an output peripheral. The controller includes a clock-cycle debugger with disassembler. An assembler is also included with the project.
Using half of zero-page for IO (and then dedicating 1/4 of that to a string printing interface) is a somewhat odd design choice. Most nontrivial 6502 software leans heavily on zero page (since there are very few registers and shorter/faster instructions for zero-page memory access).
Simulating something that looks like a serial port (transmit/receive/status registers) would seem more natural, peripheral-wise.
NOTE: Most modern debuggers show the next statement/instruction that is going to be executed. The 6502ctl debugger always shows the last operation (not instruction) that was executed.
That "note" should be more of a "warning". I can't think of any debugger, "modern" or otherwise, that doesn't show the next instruction to be executed. Expect this to cause a lot of confusion.
Back in the day you couldn’t even single step a 6502. IIRC the apple 1 manual had a super smart Woz way to nop the 6502 in between steps to keep it alive.
That being said I love the 6502 and have a few laying around and will play with this on Monday.
I worked on some 6502 based stuff in the early 80s, thanks to a college internship. As I learned from my mentor, the original 6502 was NMOS and had some dynamic registers, i.e., their contents needed to be refreshed, thus limiting how slow the machine could run. But the 65C02 was CMOS with all static registers and could be slowed down to zero through appropriate control of the clock.
The thing we were building for my internship used a very low clock speed to conserve battery power, since CMOS draws current only during transitions.