diff --git a/applepy.py b/applepy.py index 5052474..e7feeb1 100644 --- a/applepy.py +++ b/applepy.py @@ -5,6 +5,7 @@ import numpy import pygame +import socket import struct import subprocess import sys @@ -357,30 +358,32 @@ class Apple2: self.speaker = speaker self.softswitches = SoftSwitches(display, speaker, cassette) + listener = socket.socket() + listener.bind(("127.0.0.1", 0)) + listener.listen(0) + args = [ sys.executable, "cpu6502.py", + "--ui", str(listener.getsockname()[1]), "--rom", options.rom, ] if options.ram: args.extend([ "--ram", options.ram, ]) - self.core = subprocess.Popen( - args=args, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - ) + self.core = subprocess.Popen(args) + + self.cpu, _ = listener.accept() def run(self): update_cycle = 0 quit = False while not quit: - op = self.core.stdout.read(8) + op = self.cpu.recv(8) cycle, rw, addr, val = struct.unpack(" 0x7F: x = x - 0x100 @@ -86,22 +90,20 @@ class Memory: return 0 op = struct.pack(">sys.stderr print >>sys.stderr, " -R, --rom ROM file to use (default A2ROM.BIN)" print >>sys.stderr, " -r, --ram RAM file to load (default none)" + print >>sys.stderr, " -u, --ui UI socket" sys.exit(1) @@ -983,6 +989,7 @@ def get_options(): def __init__(self): self.rom = "A2ROM.BIN" self.ram = None + self.ui = None options = Options() a = 1 @@ -994,6 +1001,9 @@ def get_options(): elif sys.argv[a] in ("-r", "--ram"): a += 1 options.ram = sys.argv[a] + elif sys.argv[a] in ("-u", "--ui"): + a += 1 + options.ui = int(sys.argv[a]) else: usage() else: @@ -1004,13 +1014,13 @@ def get_options(): if __name__ == "__main__": - if sys.stdout.isatty(): + options = get_options() + if options.ui is None: print "ApplePy cpu core" print "Run applepy.py instead" sys.exit(0) - options = get_options() mem = Memory(options) cpu = CPU(mem) - cpu.run() + cpu.run(options.ui)