あーさん日記

https://akkera102.sakura.ne.jp/gbadev/ の中の人

TD4 製作 その2

f:id:akkera102:20170219203342p:plain
大したことしていないのにケーブルが多いとやった感がでますね。(^^;
ROM部分は大雑把に実験完了。次々~。


追記:このソースは暫定版です。

/*
IDE 物理ピン 名称
2    4       Intr

3    5       D0
4    6       D1
5   11       D2
6   12       D3
7   13       D4
8   14       D5
9   15       D6
10  16       D7

16  25       A0
17  26       A1
18  27       A2
19  28       A3

※スケッチ書き込み用
-   1        RESET
11  17       MOSI
12  18       MISO
13  19       SCK
*/

const int _A0 = 16;
const int _D0 = 3;

void setup()
{
  for(int i=0; i<4; i++)
  {
    pinMode(_A0+i, INPUT);
  }

  for(int i=0; i<8; i++)
  {
      pinMode(_D0+i, OUTPUT);
      digitalWrite(_D0+i, LOW);
  }

  attachInterrupt(0, intr, RISING);
}

void loop()
{
  // EMPTY
}

void intr()
{
  byte t = 0;
  byte d = 0;

  for(int i=0; i<4; i++)
  {
    if(digitalRead(_A0+i) == HIGH)
    {
      t |= (1 << i);
    }
  }

  // ラーメンタイマー
  switch(t)
  {
  case 0x00: d = B10110111; break;
  case 0x01: d = B00000001; break;
  case 0x02: d = B11100001; break;
  case 0x03: d = B00000001; break;
  case 0x04: d = B11100011; break;
  case 0x05: d = B10110110; break;
  case 0x06: d = B00000001; break;
  case 0x07: d = B11100110; break;
  case 0x08: d = B00000001; break;
  case 0x09: d = B11101000; break;
  case 0x0a: d = B10110000; break;
  case 0x0b: d = B10110100; break;
  case 0x0c: d = B00000001; break;
  case 0x0d: d = B11101010; break;
  case 0x0e: d = B10111000; break;
  case 0x0f: d = B11111111; break;
  }

  for(int i=0; i<8; i++)
  {
    digitalWrite(_D0+i, (d & (1 << i)) ? HIGH : LOW);
  }
}