#include #include "Apple2Idiot.h" byte data_pins[] = {D7R, D6R, D5R, D4R, D3R, D2R, D1R, D0R}; byte address_pins[] = {A0R, A1R, A2R, A3R, A4R, A5R, A6R, A7R}; volatile byte ram_busy=0; byte ram[256]; Apple2Idiot::Apple2Idiot() { } void Apple2Idiot::init() { pinMode(A0R, OUTPUT); digitalWrite(A0R, LOW); pinMode(A1R, OUTPUT); digitalWrite(A1R, LOW); pinMode(A2R, OUTPUT); digitalWrite(A2R, LOW); pinMode(A3R, OUTPUT); digitalWrite(A3R, LOW); pinMode(A4R, OUTPUT); digitalWrite(A4R, LOW); pinMode(A5R, OUTPUT); digitalWrite(A5R, LOW); pinMode(A6R, OUTPUT); digitalWrite(A6R, LOW); pinMode(A7R, OUTPUT); digitalWrite(A7R, LOW); pinMode(D0R, INPUT); pinMode(D1R, INPUT); pinMode(D2R, INPUT); pinMode(D3R, INPUT); pinMode(D4R, INPUT); pinMode(D5R, INPUT); pinMode(D6R, INPUT); pinMode(D7R, INPUT); pinMode(RW_PIN, OUTPUT); digitalWrite(RW_PIN, RW_READ); pinMode(INPUT_34, INPUT); pinMode(INPUT_35, INPUT); write_string_to_shared_ram("Starting Up!", SHARED_RAM_START_ADDRESS); write_data(ESP_COMMAND_ADDRESS, ACK); write_data(APPLE_COMMAND_ADDRESS, ACK); } void Apple2Idiot::unbusy_ram() { set_address(ESP_COMMAND_ADDRESS); ram_busy = false; } boolean Apple2Idiot::set_address(int address) { if (ram_busy) { //Serial.println("BUSY"); return false; } ram_busy = true; for (byte i=0; i "); Serial.println(address); } if (set_address(address)) { for (byte i=0; i> i) & 0b00000001; pinMode(data_pins[i], OUTPUT); digitalWrite(data_pins[i], bit_to_write); } digitalWrite(RW_PIN, RW_WRITE); delay(1); digitalWrite(RW_PIN, RW_READ); for (byte i=0; i 15 - 1) { // - 1 because of null character at end of string. //write_data(ESP_COMMAND_ADDRESS, 12); unsigned int c = 2; for (c=0; c < string_to_send.length(); c++) { write_data(address+c, string_to_send[c]); } write_data(address+c, EOS); //write_data(15, COMMAND_FROM_ESP + command_message + COMMAND_NO_DATA_WAITING); //write_data(ESP_COMMAND_ADDRESS, 27); return address+c; } String Apple2Idiot::read_string_from_ram(int address) { byte c = 2; int i = 0; String read_string = ""; while ( (i