From 40f77afd67a1b030bf130df21e938386350f2571 Mon Sep 17 00:00:00 2001 From: BigEd Date: Sun, 21 Aug 2011 21:33:37 +0100 Subject: [PATCH] monitor: add command line interface to pre-select the MPU --- src/py65/monitor.py | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/py65/monitor.py b/src/py65/monitor.py index 9526dae..fab99e7 100644 --- a/src/py65/monitor.py +++ b/src/py65/monitor.py @@ -17,14 +17,31 @@ from py65.utils.conversions import itoa from py65.memory import ObservableMemory class Monitor(cmd.Cmd): - - def __init__(self, mpu_type=NMOS6502, completekey='tab', stdin=None, stdout=None): - self._reset(mpu_type) + mpulist = {'6502': NMOS6502, '65C02': CMOS65C02, '65Org16': V65Org16} + + def __init__(self, mpu_type=NMOS6502, completekey='tab', stdin=None, stdout=None, argv=None): + self.mpu_type=mpu_type + if argv is None: + argv = sys.argv + self.parseArgs(argv) + self._reset(self.mpu_type) self._width = 78 self._update_prompt() self._add_shortcuts() cmd.Cmd.__init__(self, completekey, stdin, stdout) + def parseArgs(self, argv): + import getopt + options, args = getopt.getopt(argv[1:], 'm:', + ['mpu=']) + for opt, value in options: + if opt in ('-m','--mpu'): + try: + self.mpu_type=self.mpulist[value] + except: + print "Fatal: no such mpu. Available MPUs:", ', '.join(self.mpulist.keys()) + exit(1) + def onecmd(self, line): line = self._preprocess_line(line) @@ -154,10 +171,8 @@ class Monitor(cmd.Cmd): self._reset(mpu_type=klass) def do_mpu(self, args): - mpus = {'6502': NMOS6502, '65C02': CMOS65C02, '65Org16': V65Org16} - def available_mpus(): - mpu_list = ', '.join(mpus.keys()) + mpu_list = ', '.join(self.mpulist.keys()) self._output("Available MPUs: %s" % mpu_list) if args == '': @@ -165,7 +180,7 @@ class Monitor(cmd.Cmd): available_mpus() else: requested = args - new_mpu = mpus.get(requested, None) + new_mpu = self.mpulist.get(requested, None) if new_mpu is None: self._output("Unknown MPU: %s" % args) available_mpus()