summaryrefslogtreecommitdiff
path: root/sketches/6502_addr_read.ino
blob: 445c5a5f0a0fa9d0cba016a5c9932a6838b6825d (plain)
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( )
{
}