1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
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( )
{
}
|