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…
	
	Add table
		
		Reference in a new issue