char addr_pin[16]; char data_pin[8]; const int clock_pin = 2; const int rw_pin = 3; const int sync_pin = 4; const char opcode[256][5] = {\ "BRK", "ORA", "" , "", "TSB", "ORA", "ASL", "RMB0", "PHP", "ORA", "ASL", "" , "TSB", "ORA", "ASL", "BBR0",\ "BPL", "ORA", "ORA", "", "TRB", "ORA", "ASL", "RMB1", "CLC", "ORA", "INC", "" , "TRB", "ORA", "ASL", "BBR1",\ "JSR", "AND", "" , "", "BIT", "AND", "ROL", "RMB2", "PLP", "AND", "ROL", "" , "BIT", "AND", "ROL", "BBR2",\ "BMI", "AND", "AND", "", "BIT", "AND", "ROL", "RMB3", "SEC", "AND", "DEC", "" , "BIT", "AND", "ROL", "BBR3",\ "RTI", "EOR", "" , "", "" , "EOR", "LSR", "RMB4", "PHA", "EOR", "LSR", "" , "JMP", "EOR", "LSR", "BBR4",\ "BVC", "EOR", "EOR", "", "" , "EOR", "LSR", "RMB5", "CLI", "EOR", "PHY", "" , "" , "EOR", "LSR", "BBR5",\ "RTS", "ADC", "" , "", "STZ", "ADC", "ROR", "RMB6", "PLA", "ADC", "ROR", "" , "JMP", "ADC", "ROR", "BBR6",\ "BVS", "ADC", "ADC", "", "STZ", "ADC", "ROR", "RMB7", "SEI", "ADC", "PLY", "" , "JMP", "ADC", "ROR", "BBR7",\ "BRA", "STA", "" , "", "STY", "STA", "STX", "SMB0", "DEY", "BIT", "TXA", "" , "STY", "STA", "STX", "BBS0",\ "BCC", "STA", "STA", "", "STY", "STA", "STX", "SMB1", "TYA", "STA", "TXS", "" , "STZ", "STA", "STZ", "BBS1",\ "LDY", "LDA", "LDX", "", "LDY", "LDA", "LDX", "SMB2", "TAY", "LDA", "TAX", "" , "LDY", "LDA", "LDX", "BBS2",\ "BCS", "LDA", "LDA", "", "LDY", "LDA", "LDX", "SMB3", "CLV", "LDA", "TSX", "" , "LDY", "LDA", "LDX", "BBS3",\ "CPY", "CMP", "" , "", "CPY", "CMP", "DEC", "SMB4", "INY", "CMP", "DEX", "WAI", "CPY", "CMP", "DEC", "BBS4",\ "BNE", "CMP", "CMP", "", "" , "CMP", "DEC", "SMB5", "CLD", "CMP", "PHX", "STP", "" , "CMP", "DEC", "BBS5",\ "CPX", "SBC", "" , "", "CPX", "SBC", "INC", "SMB6", "INX", "SBC", "NOP", "" , "CPX", "SBC", "INC", "BBS6",\ "BEQ", "SBC", "SBC", "", "" , "SBC", "INC", "SMB7", "SED", "SBC", "PLX", "" , "" , "SBC", "INC", "BBS7"}; void setup( ) { for( int i = 0; i < 16; i++ ) { addr_pin[i] = 52 - i*2; pinMode( addr_pin[i], INPUT ); } for( int i = 0; i < 8; i++ ) { data_pin[i] = 53 - i*2; pinMode( data_pin[i], INPUT ); } pinMode( clock_pin, INPUT ); pinMode( rw_pin, INPUT ); pinMode( sync_pin, INPUT ); attachInterrupt( digitalPinToInterrupt( clock_pin ), onClk, RISING ); Serial.begin( 115200 ); } void onClk( ) { unsigned int addr = 0; for( int i = 0; i < 16; i++ ) { int b = ( digitalRead( addr_pin[i] ) == HIGH ) ? 1 : 0; Serial.print( b ); addr = ( addr << 1 ) + b; } Serial.print( " " ); unsigned int data = 0; for( int i = 0; i < 8; i++ ) { int b = ( digitalRead( data_pin[i] ) == HIGH ) ? 1 : 0; Serial.print( b ); data = ( data << 1 ) + b; } Serial.print( " " ); char rw = ( digitalRead( rw_pin ) == HIGH ) ? 'r' : 'w'; const char *op = ( digitalRead( sync_pin ) == HIGH ) ? opcode[data] : ""; char output[32]; sprintf( output, "%04x %c %02x : %4s", addr, rw, data, op ); Serial.println( output ); } void loop( ) { }