diff --git a/code/AVR/SerialTest/SerialTest.ino b/code/AVR/SerialTest/SerialTest.ino index 65e14b5..16ecfdb 100644 --- a/code/AVR/SerialTest/SerialTest.ino +++ b/code/AVR/SerialTest/SerialTest.ino @@ -7,6 +7,14 @@ #define PB4 A4 #define PB5 A3 #define PB6 A2 +#define PA0 5 +#define PA1 6 +#define PA2 7 +#define PA3 8 +#define PA4 9 +#define PA5 10 +#define PA6 11 +#define STROBE 12 uint8_t video_data = 0; uint8_t video_data_pins[] = { PB0, PB1, PB2, PB3, PB4, PB5, PB6 }; @@ -14,8 +22,9 @@ uint8_t serial_data; void setup() { - pinMode(DA, INPUT); + // Video data pins pinMode(RDA, OUTPUT); + pinMode(DA, INPUT); pinMode(PB0, INPUT); pinMode(PB1, INPUT); pinMode(PB2, INPUT); @@ -24,6 +33,16 @@ void setup() pinMode(PB5, INPUT); pinMode(PB6, INPUT); + // ASCII data pins + pinMode(STROBE, OUTPUT); + pinMode(PA0, OUTPUT); + pinMode(PA1, OUTPUT); + pinMode(PA2, OUTPUT); + pinMode(PA3, OUTPUT); + pinMode(PA4, OUTPUT); + pinMode(PA5, OUTPUT); + pinMode(PA6, OUTPUT); + Serial.begin(9600); Serial.println("Arduino ready..."); } @@ -36,14 +55,14 @@ void loop() void process_video_data() { - digitalWrite(RDA, HIGH); // Tell PIA we are ready to receive data + digitalWrite(RDA, HIGH); delayMicroseconds(20); - if (digitalRead(DA)) // Is there any data? + if (digitalRead(DA)) { video_data = 0; - for (int i = 0; i < 7; i++) // Yes, get byte data + for (int i = 0; i < 7; i++) { if (digitalRead(video_data_pins[i])) { @@ -71,6 +90,32 @@ void process_serial_data() { serial_data = Serial.read(); + if (serial_data == 203) // Uppercase ESC + { + serial_data = 27; + } + + if (serial_data >= 97 && serial_data <= 122) // lower case a-z + { + serial_data -= 32; + } + + if (serial_data < 96) // Is the character Apple 1 compatible? + { + digitalWrite(PA6, bitRead(serial_data, 6)); + digitalWrite(PA5, bitRead(serial_data, 5)); + digitalWrite(PA4, bitRead(serial_data, 4)); + digitalWrite(PA3, bitRead(serial_data, 3)); + digitalWrite(PA2, bitRead(serial_data, 2)); + digitalWrite(PA1, bitRead(serial_data, 1)); + digitalWrite(PA0, bitRead(serial_data, 0)); + + digitalWrite(STROBE, HIGH); + delayMicroseconds(20); + digitalWrite(STROBE, LOW); + } + + /* if (serial_data == 13) { Serial.println(); @@ -79,5 +124,6 @@ void process_serial_data() { Serial.print((char)serial_data); } + */ } } \ No newline at end of file