見出し画像

Tang Nano 9K で Apple II を再現する(11)キーボード

第七章 On-Board I/O

USB シリアルをパラレル信号に変換する Arduino プログラム A2Keyboard.ino を作成します。
Arduino の D2 - D8 ピンに Apple II Keyboard B1 - B7 を、D9 ピンに STROBE 信号を割り当てました。
リセットキーは、Tang Nano の S2 (Pin 3) を割り当てました。

// Serial to Apple II keyboard

#define b1_pin 2
#define b2_pin 3
#define b3_pin 4
#define b4_pin 5
#define b5_pin 6
#define b6_pin 7
#define b7_pin 8
#define strobe_pin 9
#define strobe_width 1 // ms
#define delay_key 100  // ms

void setup() {
    Serial.begin(9600);
    pinMode(b1_pin, OUTPUT);
    pinMode(b2_pin, OUTPUT);
    pinMode(b3_pin, OUTPUT);
    pinMode(b4_pin, OUTPUT);
    pinMode(b5_pin, OUTPUT);
    pinMode(b6_pin, OUTPUT);
    pinMode(b7_pin, OUTPUT);
    pinMode(strobe_pin, OUTPUT);
    digitalWrite(strobe_pin, LOW);
}

void loop() {
    byte key;
    if(Serial.available() > 0) {
        key = Serial.read();
        digitalWrite(b1_pin, key & 0x01 ? HIGH : LOW);
        digitalWrite(b2_pin, key & 0x02 ? HIGH : LOW);
        digitalWrite(b3_pin, key & 0x04 ? HIGH : LOW);
        digitalWrite(b4_pin, key & 0x08 ? HIGH : LOW);
        digitalWrite(b5_pin, key & 0x10 ? HIGH : LOW);
        digitalWrite(b6_pin, key & 0x20 ? HIGH : LOW);
        digitalWrite(b7_pin, key & 0x40 ? HIGH : LOW);
        digitalWrite(strobe_pin, HIGH);
        Serial.write(key);
        delayMicroseconds(strobe_width);
        digitalWrite(strobe_pin, LOW);
    }
    delay(delay_key);
}

以下の回路図に示すように、Arduino の GPIO 出力 5V を、SN74LVC245AN を介して 3.3V に変換し Tang Nano 9K に接続しました。

On-Board I/O

参考文献


この記事が気に入ったらサポートをしてみませんか?