A relatively bug-free and simple 6502 emulator. It is capable of running ehBasic.
Many 6502 emulators make extensive use of macros, which I personally think makes code harder to understand. At the other extreme, some emulators implement each addressing mode of each instruction separately, which is a big waste of time and makes the code harder to maintain.
I chose a middle-ground, and used lookup tables for instruction decoding and address decoding. This also gets rid of the common "giant opcode switch statement" (which can be seen in my CHIP8 emulator project).
[david@D-ARCH 6502-emu]$ ./6502-emu examples/ehbasic.rom
Enhanced 6502 BASIC 2.22 (c) Lee Davison
[C]old/[W]arm ?
Memory size ?
40191 Bytes free
Enhanced BASIC 2.22
Ready
10 X1=59
15 Y1=21
20 I1=-1.0
23 I2=1.0
26 R1=-2.0
28 R2=1.0
30 S1=(R2-R1)/X1
35 S2=(I2-I1)/Y1
40 FOR Y=0 TO Y1
50 I3=I1+S2*Y
60 FOR X=0 TO X1
70 R3=R1+S1*X
73 Z1=R3
76 Z2=I3
80 FOR N=0 TO 30
90 A=Z1*Z1
95 B=Z2*Z2
100 IF A+B>4.0 GOTO 130
110 Z2=2*Z1*Z2+I3
115 Z1=A-B+R3
120 NEXT N
130 PRINT CHR$(63-N);
140 NEXT X
150 PRINT
160 NEXT Y
170 END
RUN
??????>>>>>===============<<<<<<;;;:7143;<<<<====>>>>>>>>>>>
?????>>>================<<<<<<<;;;984+18:;;<<<<=====>>>>>>>>
????>>>===============<<<<<<<;;::85 )/:;;;;<<=====>>>>>>>
???>>===============<<<<<<;:9999875 689::::;<<=====>>>>>
??>>=============<<<<;;;;::7/ '3 56446;<======>>>>
??>===========<<<;;;;;;:::863 +8:;<======>>>
?>========<<<;6::::::::997! &89;<<======>>
?====<<<<<;;;:83567.678874 ,:<<=======>
?=<<<<<<;;;;:986' /4 +:<<<======>
?<<<<<<;;::8675( ( 9;<<<======>
?;;:999:88460 '9:;<<<======>
?;;:999:88460 '9:;<<<======>
?<<<<<<;;::8675( ( 9;<<<======>
?=<<<<<<;;;;:986' /4 +:<<<======>
?====<<<<<;;;:83567.678874 ,:<<=======>
?>========<<<;6::::::::997! &89;<<======>>
??>===========<<<;;;;;;:::863 +8:;<======>>>
??>>=============<<<<;;;;::7/ '3 56446;<======>>>>
???>>===============<<<<<<;:9999875 689::::;<<=====>>>>>
????>>>===============<<<<<<<;;::85 )/:;;;;<<=====>>>>>>>
?????>>>================<<<<<<<;;;984+18:;;<<<<=====>>>>>>>>
??????>>>>>===============<<<<<<;;;:7143;<<<<====>>>>>>>>>>>
Ready
- Decimal mode.
- Cycle-accurate timing.
- GDB interface for easy debugging of 6502 programs (and the emulator itself).
- Implement more hardware devices (mainly a 6522, also some character/graphics LCDs).
- Turn it into a NES emulator.