loader working!
This commit is contained in:
commit
32c9aa9158
1 changed files with 96 additions and 0 deletions
96
6502-loader.py
Executable file
96
6502-loader.py
Executable file
|
@ -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()
|
Loading…
Reference in a new issue