I've had a quick go at this, and it's looking promising.
Here's a snapshot of the current code:
https://github.com/hoglet67/libsigrokde ... /tables.py
It's currently outputting all state at the end of each instruction.
Here's an example:
Code: Select all
????: xxx A=?? X=?? Y=?? SP=?? N=? V=? D=? I=? Z=? C=?
????: BBR7 7F,pc-1 A=?? X=?? Y=?? SP=?? N=? V=? D=? I=? Z=? C=?
????: BRK #00 A=?? X=?? Y=?? SP=?? N=? V=? D=0 I=1 Z=? C=?
D9CD: LDA #40 A=40 X=?? Y=?? SP=?? N=0 V=? D=0 I=1 Z=0 C=?
D9CF: STA 0D00 A=40 X=?? Y=?? SP=?? N=0 V=? D=0 I=1 Z=0 C=?
D9D2: SEI A=40 X=?? Y=?? SP=?? N=0 V=? D=0 I=1 Z=0 C=?
D9D3: CLD A=40 X=?? Y=?? SP=?? N=0 V=? D=0 I=1 Z=0 C=?
D9D4: LDX #FF A=40 X=FF Y=?? SP=?? N=1 V=? D=0 I=1 Z=0 C=?
D9D6: TXS A=40 X=FF Y=?? SP=FF N=1 V=? D=0 I=1 Z=0 C=?
D9D7: LDA FE4E A=80 X=FF Y=?? SP=FF N=1 V=? D=0 I=1 Z=0 C=?
D9DA: ASL A A=00 X=FF Y=?? SP=FF N=0 V=? D=0 I=1 Z=1 C=1
D9DB: PHA A=00 X=FF Y=?? SP=FE N=0 V=? D=0 I=1 Z=1 C=1
D9DC: BEQ D9E7 A=00 X=FF Y=?? SP=FE N=0 V=? D=0 I=1 Z=1 C=1
D9E7: LDX #04 A=00 X=04 Y=?? SP=FE N=0 V=? D=0 I=1 Z=0 C=1
D9E9: STX 01 A=00 X=04 Y=?? SP=FE N=0 V=? D=0 I=1 Z=0 C=1
D9EB: STA 00 A=00 X=04 Y=?? SP=FE N=0 V=? D=0 I=1 Z=0 C=1
D9ED: TAY A=00 X=04 Y=00 SP=FE N=0 V=? D=0 I=1 Z=1 C=1
D9EE: STA (00),Y A=00 X=04 Y=00 SP=FE N=0 V=? D=0 I=1 Z=1 C=1
D9F0: CMP 01 A=00 X=04 Y=00 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F2: BEQ D9FD A=00 X=04 Y=00 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F4: INY A=00 X=04 Y=01 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F5: BNE D9EE A=00 X=04 Y=01 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9EE: STA (00),Y A=00 X=04 Y=01 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F0: CMP 01 A=00 X=04 Y=01 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F2: BEQ D9FD A=00 X=04 Y=01 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F4: INY A=00 X=04 Y=02 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F5: BNE D9EE A=00 X=04 Y=02 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9EE: STA (00),Y A=00 X=04 Y=02 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F0: CMP 01 A=00 X=04 Y=02 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F2: BEQ D9FD A=00 X=04 Y=02 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F4: INY A=00 X=04 Y=03 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F5: BNE D9EE A=00 X=04 Y=03 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9EE: STA (00),Y A=00 X=04 Y=03 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F0: CMP 01 A=00 X=04 Y=03 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F2: BEQ D9FD A=00 X=04 Y=03 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F4: INY A=00 X=04 Y=04 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F5: BNE D9EE A=00 X=04 Y=04 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9EE: STA (00),Y A=00 X=04 Y=04 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F0: CMP 01 A=00 X=04 Y=04 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F2: BEQ D9FD A=00 X=04 Y=04 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F4: INY A=00 X=04 Y=05 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F5: BNE D9EE A=00 X=04 Y=05 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9EE: STA (00),Y A=00 X=04 Y=05 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F0: CMP 01 A=00 X=04 Y=05 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F2: BEQ D9FD A=00 X=04 Y=05 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F4: INY A=00 X=04 Y=06 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F5: BNE D9EE A=00 X=04 Y=06 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9EE: STA (00),Y A=00 X=04 Y=06 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
D9F0: CMP 01 A=00 X=04 Y=06 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F2: BEQ D9FD A=00 X=04 Y=06 SP=FE N=1 V=? D=0 I=1 Z=0 C=0
D9F4: INY A=00 X=04 Y=07 SP=FE N=0 V=? D=0 I=1 Z=0 C=0
I think it would be possible to add sanity checking like we did with the PC. For example, on STA the current value of A is visible on the bus, and can be checked against the predicted value.
Here's the current TODO list:
Code: Select all
# Emulation TODO list
# - Seperate 6502/65C02 modes
# - Decimal mode
# - Overflow flag in ADC/SBC
# - Reduce uncertainty where possible (e.g. where just one of A and C is undefined)
# - implement RTI
# - check push/pull behaviour
# - sanity checking (e.g. on STA, STX, STY, PHA, PHX, PHY, PHP, etc)