From 002caab79120ee69ec6fd28b8a2b416496d7d252 Mon Sep 17 00:00:00 2001 From: "Morgan 'ARR\\!' Allen" Date: Sat, 18 Jan 2020 11:46:33 -0800 Subject: [PATCH] but will anyone.... --- README.md | 5 ++ arduino-bin-loader/arduino-bin-loader.ino | 64 +++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 README.md create mode 100644 arduino-bin-loader/arduino-bin-loader.ino diff --git a/README.md b/README.md new file mode 100644 index 0000000..d1e85d7 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# 6502-hacking + +> HACKING < + + diff --git a/arduino-bin-loader/arduino-bin-loader.ino b/arduino-bin-loader/arduino-bin-loader.ino new file mode 100644 index 0000000..69cf5ba --- /dev/null +++ b/arduino-bin-loader/arduino-bin-loader.ino @@ -0,0 +1,64 @@ +#define ROM_SIZE (0xffff) +#define SER_BUF (1024) + +#define SIG_RESET ('r') +#define SIG_WRITE ('w') + +enum states { + IDLE, + WRITE // write rom to memory +}; + +void do_reset() { + SCB->AIRCR = 0x05fa0004; +} + +enum states state = IDLE; +volatile static uint8_t rom[ROM_SIZE]; +uint8_t buf[SER_BUF]; +uint16_t rom_idx = 0; +uint32_t start = 0; + +void setup() { + bzero(&buf, SER_BUF); + bzero((void*)&rom, ROM_SIZE); + + Serial.begin(115200); + + start = millis(); + state = IDLE; + + Serial.println("READY"); +} + +void flush_serial() { + while(Serial.available() > 0) Serial.read(); +} + +void loop() { + if(state == IDLE) { + char c = Serial.read(); + + if(c == SIG_RESET) { + Serial.println("resetting"); + delay(1000); + do_reset(); + } else if(c == SIG_WRITE) { + state = WRITE; + rom_idx = 0; + + bzero((void*)&rom, ROM_SIZE); + + start = millis(); + + Serial.println("Ready for ROM"); + } + } else if(state == WRITE) { + while(true && rom_idx < 0x7ffe && millis() - start < 3000) { + while(Serial.available()) rom[rom_idx++] = Serial.read(); + } + + state = IDLE; + Serial.printf("Read 0x%04X bytes into memory\r\n", rom_idx); + } +}