From 32c9aa9158ebd1a95b0221b9c8b2f8be132f4ed2 Mon Sep 17 00:00:00 2001 From: "Morgan 'ARR\\!' Allen" Date: Mon, 13 Jan 2020 19:50:11 -0800 Subject: [PATCH] loader working! --- 6502-loader.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 6502-loader.py diff --git a/6502-loader.py b/6502-loader.py new file mode 100755 index 0000000..d34ca7b --- /dev/null +++ b/6502-loader.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 + +import argparse +import asyncio +import serial_asyncio +import sys +import time +import threading + +parser = argparse.ArgumentParser() +parser.add_argument("input", help="input filename") +parser.add_argument("--port", help="serial port to interface with") +parser.add_argument("--start", + help="auto start the clock", + const=True, + type=bool, nargs='?', default=False + ) + +args = parser.parse_args() + +try: + in_file = open(args.input, "rb") + +except IOError: + print("Could not open file") + in_file.close() + sys.exit(2) + +class SerialHandler(asyncio.Protocol): + def connection_made(self, transport): + print('connection made') + self.transport = transport + self.buf = bytes() + self.init_done = False + + # clear any incoming data + transport.serial.flushInput() + + #transport.serial.write(b'1') + #time.sleep(.1) + #transport.serial.write(b'5') + #time.sleep(.1) + #transport.serial.write(b'6') + #time.sleep(.1) + + if args.start: + transport.serial.write(b'04') + + content = in_file.read() + length = len(content) + written = 0 + + print("file size " + str(length)) + + transport.serial.write(b'l') + + while (length - written > 0): + written += transport.serial.write(content[length - (length - written):]) + + print("wrote {} bytes of rom".format(written)) + #transport.serial.write(b'4') + + def connection_lost(self, exc): + pass + + def data_received(self, data): + self.buf += data + + if b'\r\n' in self.buf: + lines = self.buf.split(b'\r\n') + + self.buf = lines[-1] + + for line in lines[:-1]: + s = line.decode('utf-8') + + print(s) + +loop = asyncio.get_event_loop() + +try: + handler = SerialHandler + coro = serial_asyncio.create_serial_connection(loop, handler, args.port, baudrate=115200) + loop.run_until_complete(coro) +except Exception as E: + print(E) + print('failed to open serial port') + +except Exception as E: + print(E) + print('failed to open port') + port.close() + + sys.exit(1) + +loop.run_forever()