USB Device Programming class project. This project allows a Python/Tk program running on a PC host to monitor/control a test-CPU programmed into an altera development board.
Dependencies: C12832_lcd USBDevice mbed-rtos mbed mmSPI
Diff: mmPython/mmUI.txt
- Revision:
- 8:db29cce17a33
- Parent:
- 4:92539904a4ad
--- a/mmPython/mmUI.txt Sun Sep 01 03:48:07 2013 +0000 +++ b/mmPython/mmUI.txt Sun Sep 01 03:55:03 2013 +0000 @@ -1,729 +1,729 @@ -#!/usr/bin/python -tt # tt: detect mixed space/tab. +#!/usr/bin/python -tt # tt: detect mixed space/tab. #---copyright-----------------------------------#------------------------------- # licensed for personal and academic use. # commercial use must be approved by the account-holder of # gated.clock@gmail.com #-------imports---------------------------------#------------------------------- -from Tkinter import * # Tk graphics. -import mmUSBserial # USB Serial object. +from Tkinter import * # Tk graphics. +import mmUSBserial # USB Serial object. from mmUSBserial import * -import time # Time object. +import time # Time object. from time import time, sleep -import threading # Threading object. -import tkFileDialog # File-select dialog object.' -import os # import os library. +import threading # Threading object. +import tkFileDialog # File-select dialog object.' +import os # import os library. #=======class===================================#=============================== #-----------------------------------------------#------------------------------- ''' - licensed for personal and accedemic use. - commercial use must be approved by the account-holder of - gated.clock@gmail.com + licensed for personal and accedemic use. + commercial use must be approved by the account-holder of + gated.clock@gmail.com ''' #-----------------------------------------------#------------------------------- ''' - description: + description: - python/Tk code for interfacing with the mbed.org system. - this code provides a UI which is used to communicate over USB - to the mbed.org processor, and in turn the toy CPU programmed - into the altera device. + python/Tk code for interfacing with the mbed.org system. + this code provides a UI which is used to communicate over USB + to the mbed.org processor, and in turn the toy CPU programmed + into the altera device. - this code provides a UI which is used to monitor and write-to the - toy CPU's registers and its main memory. + this code provides a UI which is used to monitor and write-to the + toy CPU's registers and its main memory. - I/O capability: + I/O capability: - * R0 write/read. - * R1 write/read. - * R2 write/read. - * R3 write/read. - * PC write/read. (that's 'Program Counter'.) - * IR write/read. (that's 'Instruction Register'.) - * MM address. (that's 'Main Memory.') - * MM content. + * R0 write/read. + * R1 write/read. + * R2 write/read. + * R3 write/read. + * PC write/read. (that's 'Program Counter'.) + * IR write/read. (that's 'Instruction Register'.) + * MM address. (that's 'Main Memory.') + * MM content. - Button Controls: + Button Controls: - * USB Connect/Disconnect. - * Register Read. - * Register Write. - * Main Memory Read. - * Main Memory Write. - * Main Memory Load-From-File. - * Main Memory Dump-To-File. - * Step CPU. - * Run-Fast, Run-Slow, Stop CPU. - * Run Test. - * Exit. + * USB Connect/Disconnect. + * Register Read. + * Register Write. + * Main Memory Read. + * Main Memory Write. + * Main Memory Load-From-File. + * Main Memory Dump-To-File. + * Step CPU. + * Run-Fast, Run-Slow, Stop CPU. + * Run Test. + * Exit. ''' #-----------------------------------------------#------------------------------- -if (1): # allow further indentation. - class mmUI: # UI class. +if (1): # allow further indentation. + class mmUI: # UI class. #-----------------------------------------------#------------------------------- - def __init__(self,masterWidget): # constructor. + def __init__(self,masterWidget): # constructor. - self.__masterWidget = masterWidget # promote to object scope. + self.__masterWidget = masterWidget # promote to object scope. - # master widget title. - self.__masterWidget.wm_title("CPU Control") + # master widget title. + self.__masterWidget.wm_title("CPU Control") - self.__frame = Frame(masterWidget) # create frame widget. - self.__frame.grid(column=0, row=0) # use grid packer. + self.__frame = Frame(masterWidget) # create frame widget. + self.__frame.grid(column=0, row=0) # use grid packer. - self.__connected = 0 # not yet __connected to USB. - self.__isRunning = 0 # program execution not running. - self.__testRunning = 0 # test mode not runing. - self.__testIter = 0 # test mode iteration count. - self.__sleepVal = 0.04 # serial transceive sleep. + self.__connected = 0 # not yet __connected to USB. + self.__isRunning = 0 # program execution not running. + self.__testRunning = 0 # test mode not runing. + self.__testIter = 0 # test mode iteration count. + self.__sleepVal = 0.04 # serial transceive sleep. - - self.uiR0 (0, 1, 10) # label/entry widgets (x, y, width) - self.uiR1 (0, 2, 10) - self.uiR2 (0, 3, 10) - self.uiR3 (0, 4, 10) - self.uiPC (0, 5, 10) - self.uiIR (0, 6, 10) - self.uimmADR (0, 7, 10) - self.uimmVAL (0, 8, 10) + + self.uiR0 (0, 1, 10) # label/entry widgets (x, y, width) + self.uiR1 (0, 2, 10) + self.uiR2 (0, 3, 10) + self.uiR3 (0, 4, 10) + self.uiPC (0, 5, 10) + self.uiIR (0, 6, 10) + self.uimmADR (0, 7, 10) + self.uimmVAL (0, 8, 10) - self.uiConnect (3, 1, 8) # button widgets (x, y, width) - self.uiRegRead (3, 2, 8) - self.uiRegWrite(3, 3, 8) - self.uimmRead (3, 4, 8) - self.uimmWrite (3, 5, 8) - self.uiProg (3, 6, 8) - self.uimmDump (3, 7, 8) - self.uiStep (3, 8, 8) - self.uiRun (3, 9, 8) - self.uiTest (3, 10, 8) - self.uiExit (3, 11, 8) + self.uiConnect (3, 1, 8) # button widgets (x, y, width) + self.uiRegRead (3, 2, 8) + self.uiRegWrite(3, 3, 8) + self.uimmRead (3, 4, 8) + self.uimmWrite (3, 5, 8) + self.uiProg (3, 6, 8) + self.uimmDump (3, 7, 8) + self.uiStep (3, 8, 8) + self.uiRun (3, 9, 8) + self.uiTest (3, 10, 8) + self.uiExit (3, 11, 8) - self.refreshUI() # initial content display. + self.refreshUI() # initial content display. #-----------------------------------------------#------------------------------- - def __del__(self): # destructor. - print "object destroyed." + def __del__(self): # destructor. + print "object destroyed." #-----------------------------------------------#------------------------------- -# WIDGETS: BEGIN LABEL/ENTRY PAIRS. #=============================== +# WIDGETS: BEGIN LABEL/ENTRY PAIRS. #=============================== #-----------------------------------------------#------------------------------- - def uiR0(self,dColumn,dRow,dWidth): # R0. + def uiR0(self,dColumn,dRow,dWidth): # R0. - dColumnPlusOne = dColumn + 1 + dColumnPlusOne = dColumn + 1 - self.__R0Label = Label(self.__frame, text="R0") - self.__R0Label.grid(column=dColumn, row=dRow, sticky=(E)) + self.__R0Label = Label(self.__frame, text="R0") + self.__R0Label.grid(column=dColumn, row=dRow, sticky=(E)) - self.__R0Entry = Entry(self.__frame, width=dWidth, background="GREEN") - self.__R0Entry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) + self.__R0Entry = Entry(self.__frame, width=dWidth, background="GREEN") + self.__R0Entry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - def uiR1(self,dColumn,dRow,dWidth): # R1. + def uiR1(self,dColumn,dRow,dWidth): # R1. - dColumnPlusOne = dColumn + 1 + dColumnPlusOne = dColumn + 1 - self.__R1Label = Label(self.__frame, text="R1") - self.__R1Label.grid(column=dColumn, row=dRow, sticky=(E)) + self.__R1Label = Label(self.__frame, text="R1") + self.__R1Label.grid(column=dColumn, row=dRow, sticky=(E)) - self.__R1Entry = Entry(self.__frame, width=dWidth, background="GREEN") - self.__R1Entry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) + self.__R1Entry = Entry(self.__frame, width=dWidth, background="GREEN") + self.__R1Entry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - def uiR2(self,dColumn,dRow,dWidth): # R2. + def uiR2(self,dColumn,dRow,dWidth): # R2. - dColumnPlusOne = dColumn + 1 + dColumnPlusOne = dColumn + 1 - self.__R2Label = Label(self.__frame, text="R2") - self.__R2Label.grid(column=dColumn, row=dRow, sticky=(E)) + self.__R2Label = Label(self.__frame, text="R2") + self.__R2Label.grid(column=dColumn, row=dRow, sticky=(E)) - self.__R2Entry = Entry(self.__frame, width=dWidth, background="GREEN") - self.__R2Entry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) + self.__R2Entry = Entry(self.__frame, width=dWidth, background="GREEN") + self.__R2Entry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - def uiR3(self,dColumn,dRow,dWidth): # R3. + def uiR3(self,dColumn,dRow,dWidth): # R3. - dColumnPlusOne = dColumn + 1 + dColumnPlusOne = dColumn + 1 - self.__R3Label = Label(self.__frame, text="R3") - self.__R3Label.grid(column=dColumn, row=dRow, sticky=(E)) + self.__R3Label = Label(self.__frame, text="R3") + self.__R3Label.grid(column=dColumn, row=dRow, sticky=(E)) - self.__R3Entry = Entry(self.__frame, width=dWidth, background="GREEN") - self.__R3Entry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) + self.__R3Entry = Entry(self.__frame, width=dWidth, background="GREEN") + self.__R3Entry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - def uiPC(self,dColumn,dRow,dWidth): # program counter. + def uiPC(self,dColumn,dRow,dWidth): # program counter. - dColumnPlusOne = dColumn + 1 + dColumnPlusOne = dColumn + 1 - self.__PCLabel = Label(self.__frame, text="PC") - self.__PCLabel.grid(column=dColumn, row=dRow, sticky=(E)) + self.__PCLabel = Label(self.__frame, text="PC") + self.__PCLabel.grid(column=dColumn, row=dRow, sticky=(E)) - self.__PCEntry = Entry(self.__frame, width=dWidth, background="ORANGE") - self.__PCEntry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) + self.__PCEntry = Entry(self.__frame, width=dWidth, background="ORANGE") + self.__PCEntry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - def uiIR(self,dColumn,dRow,dWidth): # instruction register. + def uiIR(self,dColumn,dRow,dWidth): # instruction register. - dColumnPlusOne = dColumn + 1 + dColumnPlusOne = dColumn + 1 - self.__IRLabel = Label(self.__frame, text="IR") - self.__IRLabel.grid(column=dColumn, row=dRow, sticky=(E)) + self.__IRLabel = Label(self.__frame, text="IR") + self.__IRLabel.grid(column=dColumn, row=dRow, sticky=(E)) - self.__IREntry = Entry(self.__frame, width=dWidth, background="ORANGE") - self.__IREntry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) + self.__IREntry = Entry(self.__frame, width=dWidth, background="ORANGE") + self.__IREntry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - def uimmADR(self,dColumn,dRow,dWidth):# mmADR. + def uimmADR(self,dColumn,dRow,dWidth):# mmADR. - dColumnPlusOne = dColumn + 1 + dColumnPlusOne = dColumn + 1 - self.__mmADRLabel = Label(self.__frame, text="mmADR") - self.__mmADRLabel.grid(column=dColumn, row=dRow, sticky=(E)) + self.__mmADRLabel = Label(self.__frame, text="mmADR") + self.__mmADRLabel.grid(column=dColumn, row=dRow, sticky=(E)) - self.__mmADREntry = Entry(self.__frame, width=dWidth, + self.__mmADREntry = Entry(self.__frame, width=dWidth, background="MAROON", foreground="WHITE") - self.__mmADREntry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) -#-----------------------------------------------#------------------------------- - def uimmVAL(self,dColumn,dRow,dWidth):# mmVAL. + self.__mmADREntry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) +#-----------------------------------------------#------------------------------- + def uimmVAL(self,dColumn,dRow,dWidth):# mmVAL. - dColumnPlusOne = dColumn + 1 + dColumnPlusOne = dColumn + 1 - self.__mmVALLabel = Label(self.__frame, text="mmVAL") - self.__mmVALLabel.grid(column=dColumn, row=dRow, sticky=(E)) + self.__mmVALLabel = Label(self.__frame, text="mmVAL") + self.__mmVALLabel.grid(column=dColumn, row=dRow, sticky=(E)) - self.__mmVALEntry = Entry(self.__frame, width=dWidth, + self.__mmVALEntry = Entry(self.__frame, width=dWidth, background="MAROON", foreground="WHITE") - self.__mmVALEntry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) + self.__mmVALEntry.grid(column=dColumnPlusOne, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- -# WIDGETS: BEGIN BUTTONS. #=============================== +# WIDGETS: BEGIN BUTTONS. #=============================== #-----------------------------------------------#------------------------------- - # generate the 'connect' button. - def uiConnect(self,dColumn,dRow,dWidth): + # generate the 'connect' button. + def uiConnect(self,dColumn,dRow,dWidth): - self.__connectButton = Button(self.__frame, text="CONNECT", + self.__connectButton = Button(self.__frame, text="CONNECT", command=self.selectConnectButtonPressed, background="RED", width = dWidth) - self.__connectButton.grid(column=dColumn, row=dRow, sticky=(E)) + self.__connectButton.grid(column=dColumn, row=dRow, sticky=(E)) #-----------------------------------------------#------------------------------- - # generate the register-read button. - def uiRegRead(self,dColumn,dRow,dWidth): - self.__RegReadButton = Button(self.__frame, text="REG READ", + # generate the register-read button. + def uiRegRead(self,dColumn,dRow,dWidth): + self.__RegReadButton = Button(self.__frame, text="REG READ", command=self.selectRegReadButtonPressed, width = dWidth) - self.__RegReadButton.grid(column=dColumn, row=dRow, sticky=(W)) + self.__RegReadButton.grid(column=dColumn, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - # generate the 'reg write' button. - def uiRegWrite(self,dColumn,dRow,dWidth): - self.__RegWriteButton = Button(self.__frame, text="REG WRITE", + # generate the 'reg write' button. + def uiRegWrite(self,dColumn,dRow,dWidth): + self.__RegWriteButton = Button(self.__frame, text="REG WRITE", command=self.selectRegWriteButtonPressed, width = dWidth) - self.__RegWriteButton.grid(column=dColumn, row=dRow, sticky=(W)) + self.__RegWriteButton.grid(column=dColumn, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - # generate the mm-read button. - def uimmRead(self,dColumn,dRow,dWidth): - self.__mmReadButton = Button(self.__frame, text="MM READ", + # generate the mm-read button. + def uimmRead(self,dColumn,dRow,dWidth): + self.__mmReadButton = Button(self.__frame, text="MM READ", command=self.selectmmReadButtonPressed, width = dWidth) - self.__mmReadButton.grid(column=dColumn, row=dRow, sticky=(W)) + self.__mmReadButton.grid(column=dColumn, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - # generate the 'mm write' button. - def uimmWrite(self,dColumn,dRow,dWidth): - self.__mmWriteButton = Button(self.__frame, text="MM WRITE", + # generate the 'mm write' button. + def uimmWrite(self,dColumn,dRow,dWidth): + self.__mmWriteButton = Button(self.__frame, text="MM WRITE", command=self.selectmmWriteButtonPressed, width = dWidth) - self.__mmWriteButton.grid(column=dColumn, row=dRow, sticky=(W)) + self.__mmWriteButton.grid(column=dColumn, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - def uiProg(self,dColumn,dRow,dWidth): # generate the 'program' button. - self.__ProgButton = Button(self.__frame, text="PROGRAM", + def uiProg(self,dColumn,dRow,dWidth): # generate the 'program' button. + self.__ProgButton = Button(self.__frame, text="PROGRAM", command=self.selectProgButtonPressed, width = dWidth) - self.__ProgButton.grid(column=dColumn, row=dRow, sticky=(W)) + self.__ProgButton.grid(column=dColumn, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - # generate the 'mm dump' button. - def uimmDump(self,dColumn,dRow,dWidth): - self.__mmWriteButton = Button(self.__frame, text="DUMP", + # generate the 'mm dump' button. + def uimmDump(self,dColumn,dRow,dWidth): + self.__mmWriteButton = Button(self.__frame, text="DUMP", command=self.selectmmDumpButtonPressed, width = dWidth) - self.__mmWriteButton.grid(column=dColumn, row=dRow, sticky=(W)) + self.__mmWriteButton.grid(column=dColumn, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - def uiStep(self,dColumn,dRow,dWidth): # generate the 'step' button. - self.__StepButton = Button(self.__frame, text="STEP", + def uiStep(self,dColumn,dRow,dWidth): # generate the 'step' button. + self.__StepButton = Button(self.__frame, text="STEP", command=self.selectStepButtonPressed, width = dWidth) - self.__StepButton.grid(column=dColumn, row=dRow, sticky=(W)) + self.__StepButton.grid(column=dColumn, row=dRow, sticky=(W)) #-----------------------------------------------#------------------------------- - def uiRun(self,dColumn,dRow,dWidth): # generate the 'run' button. - self.__runButton = Button(self.__frame, text="RUN", + def uiRun(self,dColumn,dRow,dWidth): # generate the 'run' button. + self.__runButton = Button(self.__frame, text="RUN", command=self.selectRunButtonPressed,width = dWidth) - self.__runButton.grid(column=dColumn, row=dRow, sticky=(E)) + self.__runButton.grid(column=dColumn, row=dRow, sticky=(E)) #-----------------------------------------------#------------------------------- - def uiTest(self,dColumn,dRow,dWidth): # generate the 'test' button. - self.__testButton = Button(self.__frame, text="TEST", + def uiTest(self,dColumn,dRow,dWidth): # generate the 'test' button. + self.__testButton = Button(self.__frame, text="TEST", command=self.selectTestButtonPressed,width = dWidth) - self.__testButton.grid(column=dColumn, row=dRow, sticky=(E)) + self.__testButton.grid(column=dColumn, row=dRow, sticky=(E)) #-----------------------------------------------#------------------------------- - def uiExit(self,dColumn,dRow,dWidth): # generate the 'exit' button. + def uiExit(self,dColumn,dRow,dWidth): # generate the 'exit' button. - self.__isRunning = 0 # end the running thread. - sleep(2.0) # give thread time to stop. + self.__isRunning = 0 # end the running thread. + sleep(2.0) # give thread time to stop. - self.__exitButton = Button(self.__frame, text="EXIT", + self.__exitButton = Button(self.__frame, text="EXIT", command=sys.exit,width = dWidth) - self.__exitButton.grid(column=dColumn, row=dRow, sticky=(E)) + self.__exitButton.grid(column=dColumn, row=dRow, sticky=(E)) #-----------------------------------------------#------------------------------- -# BEGIN EXECUTE-WHEN-BUTTON-PRESSED CODE#=============================== +# BEGIN EXECUTE-WHEN-BUTTON-PRESSED CODE#=============================== #-----------------------------------------------#------------------------------- - def selectConnectButtonPressed(self): # execute CONNECT. - if (self.__connected == 0): - self.__iUSB = mmUSBserial(idVendor=0x1234, idProduct=0x0006) - self.__connected = 1 - self.__connectButton["text"] = "DISCONNECT" - self.__connectButton["background"] = self.__frame.cget("background") - else: - del(self.__iUSB) - self.__connected = 0 - self.__connectButton["text"] = "CONNECT" - self.__connectButton["background"] = "RED" + def selectConnectButtonPressed(self): # execute CONNECT. + if (self.__connected == 0): + self.__iUSB = mmUSBserial(idVendor=0x1234, idProduct=0x0006) + self.__connected = 1 + self.__connectButton["text"] = "DISCONNECT" + self.__connectButton["background"] = self.__frame.cget("background") + else: + del(self.__iUSB) + self.__connected = 0 + self.__connectButton["text"] = "CONNECT" + self.__connectButton["background"] = "RED" #-----------------------------------------------#------------------------------- - def selectRegReadButtonPressed(self): # REG READ button has been pressed. - self.refreshUI() # ensure proper text formats. + def selectRegReadButtonPressed(self): # REG READ button has been pressed. + self.refreshUI() # ensure proper text formats. - # read R0. - self.__iUSB.write(self.buildReadRegisterCommand("0")) - fetchTextR0 = self.__iUSB.read() - hexTextR0 = self.formatRegValPayload(fetchTextR0) - self.__R0Entry.delete(0,99) - self.__R0Entry.insert(0,hexTextR0) + # read R0. + self.__iUSB.write(self.buildReadRegisterCommand("0")) + fetchTextR0 = self.__iUSB.read() + hexTextR0 = self.formatRegValPayload(fetchTextR0) + self.__R0Entry.delete(0,99) + self.__R0Entry.insert(0,hexTextR0) - # read R1. - self.__iUSB.write(self.buildReadRegisterCommand("1")) - fetchTextR1 = self.__iUSB.read() - hexTextR1 = self.formatRegValPayload(fetchTextR1) - self.__R1Entry.delete(0,99) - self.__R1Entry.insert(0,hexTextR1) + # read R1. + self.__iUSB.write(self.buildReadRegisterCommand("1")) + fetchTextR1 = self.__iUSB.read() + hexTextR1 = self.formatRegValPayload(fetchTextR1) + self.__R1Entry.delete(0,99) + self.__R1Entry.insert(0,hexTextR1) - # read R2. - self.__iUSB.write(self.buildReadRegisterCommand("2")) - fetchTextR2 = self.__iUSB.read() - hexTextR2 = self.formatRegValPayload(fetchTextR2) - self.__R2Entry.delete(0,99) - self.__R2Entry.insert(0,hexTextR2) + # read R2. + self.__iUSB.write(self.buildReadRegisterCommand("2")) + fetchTextR2 = self.__iUSB.read() + hexTextR2 = self.formatRegValPayload(fetchTextR2) + self.__R2Entry.delete(0,99) + self.__R2Entry.insert(0,hexTextR2) - # read R3. - self.__iUSB.write(self.buildReadRegisterCommand("3")) - fetchTextR3 = self.__iUSB.read() - hexTextR3 = self.formatRegValPayload(fetchTextR3) - self.__R3Entry.delete(0,99) - self.__R3Entry.insert(0,hexTextR3) + # read R3. + self.__iUSB.write(self.buildReadRegisterCommand("3")) + fetchTextR3 = self.__iUSB.read() + hexTextR3 = self.formatRegValPayload(fetchTextR3) + self.__R3Entry.delete(0,99) + self.__R3Entry.insert(0,hexTextR3) - # read Program Counter. - self.__iUSB.write(self.buildReadRegisterCommand("4")) - fetchTextPC = self.__iUSB.read() - hexTextPC = self.formatRegValPayload(fetchTextPC) - self.__PCEntry.delete(0,99) - self.__PCEntry.insert(0,hexTextPC) + # read Program Counter. + self.__iUSB.write(self.buildReadRegisterCommand("4")) + fetchTextPC = self.__iUSB.read() + hexTextPC = self.formatRegValPayload(fetchTextPC) + self.__PCEntry.delete(0,99) + self.__PCEntry.insert(0,hexTextPC) - # read Instruction Register high. - self.__iUSB.write(self.buildReadRegisterCommand("5")) - fetchTextIRH = self.__iUSB.read() - hexTextIRH = self.formatRegValPayload(fetchTextIRH) + # read Instruction Register high. + self.__iUSB.write(self.buildReadRegisterCommand("5")) + fetchTextIRH = self.__iUSB.read() + hexTextIRH = self.formatRegValPayload(fetchTextIRH) - # read Instruction Register low. - self.__iUSB.write(self.buildReadRegisterCommand("6")) - fetchTextIRL = self.__iUSB.read() - hexTextIRL = self.formatRegValPayload(fetchTextIRL) - hexTextIR = hexTextIRH + hexTextIRL[2:] + # read Instruction Register low. + self.__iUSB.write(self.buildReadRegisterCommand("6")) + fetchTextIRL = self.__iUSB.read() + hexTextIRL = self.formatRegValPayload(fetchTextIRL) + hexTextIR = hexTextIRH + hexTextIRL[2:] - self.__IREntry.delete(0,99) # 2-byte IR content to UI. - self.__IREntry.insert(0,hexTextIR) + self.__IREntry.delete(0,99) # 2-byte IR content to UI. + self.__IREntry.insert(0,hexTextIR) #---- - self.refreshUI() # ensure proper text formats + self.refreshUI() # ensure proper text formats #-----------------------------------------------#------------------------------- - def selectmmReadButtonPressed(self): # MM READ button has been pressed. - self.refreshUI() # ensure proper text formats. + def selectmmReadButtonPressed(self): # MM READ button has been pressed. + self.refreshUI() # ensure proper text formats. - transmitmmADRText = self.formatByteStringForTransmit(self.__mmADREntry.get()) - commandText = self.buildReadMMCommand(transmitmmADRText) + transmitmmADRText = self.formatByteStringForTransmit(self.__mmADREntry.get()) + commandText = self.buildReadMMCommand(transmitmmADRText) - self.__iUSB.write(commandText) + self.__iUSB.write(commandText) - fetchTextmmVAL = self.__iUSB.read() + fetchTextmmVAL = self.__iUSB.read() - buildHextmmVALString = fetchTextmmVAL[3:7] + buildHextmmVALString = fetchTextmmVAL[3:7] - self.__mmVALEntry.delete(0,99) - self.__mmVALEntry.insert(0,buildHextmmVALString) + self.__mmVALEntry.delete(0,99) + self.__mmVALEntry.insert(0,buildHextmmVALString) #---- - self.selectRegReadButtonPressed() # because registers are affected. - self.refreshUI() # ensure proper text formats + self.selectRegReadButtonPressed() # because registers are affected. + self.refreshUI() # ensure proper text formats #-----------------------------------------------#------------------------------- -# before writing the register values currently displayed in the UI, -# this method will first run that data through a formatter, so that -# the data is transformed into '0x##' format. this is convenient for -# the user. for example, the user can type '12' in a register entry -# form, press the 'REG WRITE' button, and that data will be reformatted -# to appear as '0x12'. +# before writing the register values currently displayed in the UI, +# this method will first run that data through a formatter, so that +# the data is transformed into '0x##' format. this is convenient for +# the user. for example, the user can type '12' in a register entry +# form, press the 'REG WRITE' button, and that data will be reformatted +# to appear as '0x12'. - def selectRegWriteButtonPressed(self):# REG WRITE button has been pressed. + def selectRegWriteButtonPressed(self):# REG WRITE button has been pressed. - self.refreshUI() # ensure proper text formats. + self.refreshUI() # ensure proper text formats. #---- - # place those values in the - # standard format. - R0Val = self.formatByteStringForTransmit(self.__R0Entry.get()) - R1Val = self.formatByteStringForTransmit(self.__R1Entry.get()) - R2Val = self.formatByteStringForTransmit(self.__R2Entry.get()) - R3Val = self.formatByteStringForTransmit(self.__R3Entry.get()) - PCVal = self.formatByteStringForTransmit(self.__PCEntry.get()) - IRVal = self.formatWordStringForTransmit(self.__IREntry.get()) + # place those values in the + # standard format. + R0Val = self.formatByteStringForTransmit(self.__R0Entry.get()) + R1Val = self.formatByteStringForTransmit(self.__R1Entry.get()) + R2Val = self.formatByteStringForTransmit(self.__R2Entry.get()) + R3Val = self.formatByteStringForTransmit(self.__R3Entry.get()) + PCVal = self.formatByteStringForTransmit(self.__PCEntry.get()) + IRVal = self.formatWordStringForTransmit(self.__IREntry.get()) #---- - # write those values to the CPU. - self.__iUSB.write(self.buildWriteRegisterCommand("0",R0Val)) - self.__iUSB.write(self.buildWriteRegisterCommand("1",R1Val)) - self.__iUSB.write(self.buildWriteRegisterCommand("2",R2Val)) - self.__iUSB.write(self.buildWriteRegisterCommand("3",R3Val)) - self.__iUSB.write(self.buildWriteRegisterCommand("4",PCVal)) - self.__iUSB.write(self.buildWriteIRCommand ( IRVal)) + # write those values to the CPU. + self.__iUSB.write(self.buildWriteRegisterCommand("0",R0Val)) + self.__iUSB.write(self.buildWriteRegisterCommand("1",R1Val)) + self.__iUSB.write(self.buildWriteRegisterCommand("2",R2Val)) + self.__iUSB.write(self.buildWriteRegisterCommand("3",R3Val)) + self.__iUSB.write(self.buildWriteRegisterCommand("4",PCVal)) + self.__iUSB.write(self.buildWriteIRCommand ( IRVal)) #-----------------------------------------------#------------------------------- -# before writing the main-memory values currently displayed in the UI, -# this method will first run that data through a formatter, so that -# the data is transformed into '0x##' or '0x####' format. -# this is convenient for the user. -# for example, the user can type '12' in the mmADR entry -# form, press the 'MM WRITE' button, and that data will be reformatted -# to appear as '0x12'. +# before writing the main-memory values currently displayed in the UI, +# this method will first run that data through a formatter, so that +# the data is transformed into '0x##' or '0x####' format. +# this is convenient for the user. +# for example, the user can type '12' in the mmADR entry +# form, press the 'MM WRITE' button, and that data will be reformatted +# to appear as '0x12'. - def selectmmWriteButtonPressed(self): # mm WRITE button has been pressed. + def selectmmWriteButtonPressed(self): # mm WRITE button has been pressed. - self.refreshUI() # ensure proper text formats. + self.refreshUI() # ensure proper text formats. - # obtain mm values currently - # displayed in the UI. - self.__transmitmmADRText = self.__mmADREntry.get() - self.__transmitmmVALText = self.__mmVALEntry.get() + # obtain mm values currently + # displayed in the UI. + self.__transmitmmADRText = self.__mmADREntry.get() + self.__transmitmmVALText = self.__mmVALEntry.get() - # place those values in the - # standard format. - mmADRVAL = self.formatByteStringForTransmit(self.__mmADREntry.get()) - mmVALVal = self.formatWordStringForTransmit(self.__mmVALEntry.get()) + # place those values in the + # standard format. + mmADRVAL = self.formatByteStringForTransmit(self.__mmADREntry.get()) + mmVALVal = self.formatWordStringForTransmit(self.__mmVALEntry.get()) - # write those values to the CPU. - self.__iUSB.write(self.buildWriteMMCommand(mmADRVAL,mmVALVal)) + # write those values to the CPU. + self.__iUSB.write(self.buildWriteMMCommand(mmADRVAL,mmVALVal)) - self.selectRegReadButtonPressed() # because registers are affected. + self.selectRegReadButtonPressed() # because registers are affected. #-----------------------------------------------#------------------------------- - def selectProgButtonPressed(self): # Program button has been pressed. + def selectProgButtonPressed(self): # Program button has been pressed. - # ask user for program source file - # name using a dialog. - fileName = tkFileDialog.askopenfilename(defaultextension='.txt') + # ask user for program source file + # name using a dialog. + fileName = tkFileDialog.askopenfilename(defaultextension='.txt') - print("memory load started.") # announce to user. - self.progamMainMemory(fileName) # main part of programming. - print("memory load completed.") # announce to user. + print("memory load started.") # announce to user. + self.progamMainMemory(fileName) # main part of programming. + print("memory load completed.") # announce to user. #-----------------------------------------------#------------------------------- - def selectmmDumpButtonPressed(self): # MM dump button has been pressed. + def selectmmDumpButtonPressed(self): # MM dump button has been pressed. - # obtain file-to-write-to name - # from user, using a dialog. - fileName = tkFileDialog.asksaveasfilename(defaultextension='.txt') + # obtain file-to-write-to name + # from user, using a dialog. + fileName = tkFileDialog.asksaveasfilename(defaultextension='.txt') - print("memory dump started.") # announce to user. - self.dumpMainMemory(fileName) # dump main memory to file. - print("memory dump completed.") # announce to user. + print("memory dump started.") # announce to user. + self.dumpMainMemory(fileName) # dump main memory to file. + print("memory dump completed.") # announce to user. #-----------------------------------------------#------------------------------- - def selectStepButtonPressed(self): # STEP button has been pressed. - self.__iUSB.write("50000000") # the command code. - self.selectRegReadButtonPressed() # monitor the result. + def selectStepButtonPressed(self): # STEP button has been pressed. + self.__iUSB.write("50000000") # the command code. + self.selectRegReadButtonPressed() # monitor the result. #-----------------------------------------------#------------------------------- - def selectRunButtonPressed(self): # RUN/STOP button has been pressed. + def selectRunButtonPressed(self): # RUN/STOP button has been pressed. - if (self.__isRunning == 0): # start high speed run. - self.__isRunning = 1 - self.__runButton["text"] = "SLOW" - self.t = threading.Thread(target=self.doRun) - self.t.start() + if (self.__isRunning == 0): # start high speed run. + self.__isRunning = 1 + self.__runButton["text"] = "SLOW" + self.t = threading.Thread(target=self.doRun) + self.t.start() - elif (self.__isRunning == 1): # switch to a slower run. - self.__isRunning = 2 + elif (self.__isRunning == 1): # switch to a slower run. + self.__isRunning = 2 self.__runButton["text"] = "STOP" - else: # stop the CPU. - self.__isRunning = 0 - self.__runButton["text"] = "RUN" + else: # stop the CPU. + self.__isRunning = 0 + self.__runButton["text"] = "RUN" #-----------------------------------------------#------------------------------- - def selectTestButtonPressed(self): # TEST/STOP button has been pressed. + def selectTestButtonPressed(self): # TEST/STOP button has been pressed. - if (self.__testRunning == 0): # start test. - self.__testRunning = 1 - self.__testButton["text"] = "STOP TEST" - self.t = threading.Thread(target=self.doTest) - self.t.start() + if (self.__testRunning == 0): # start test. + self.__testRunning = 1 + self.__testButton["text"] = "STOP TEST" + self.t = threading.Thread(target=self.doTest) + self.t.start() - else: # stop test. - self.__testRunning = 0 - self.__testButton["text"] = "TEST" + else: # stop test. + self.__testRunning = 0 + self.__testButton["text"] = "TEST" #-----------------------------------------------#------------------------------- -# BEGIN UTILITY CODE. #=============================== +# BEGIN UTILITY CODE. #=============================== #-----------------------------------------------#------------------------------- - # guarantee 0x## format. - def formatByteStringForDisplay(self, byteText): - - xIndex = byteText.find("x") # eliminate any 0x, 0X prefix. - XIndex = byteText.find("X") + # guarantee 0x## format. + def formatByteStringForDisplay(self, byteText): + + xIndex = byteText.find("x") # eliminate any 0x, 0X prefix. + XIndex = byteText.find("X") - theXindex = 0 - if (xIndex >= 0): theXindex = xIndex + 1 - if (XIndex >= 0): theXindex = XIndex + 1 + theXindex = 0 + if (xIndex >= 0): theXindex = xIndex + 1 + if (XIndex >= 0): theXindex = XIndex + 1 - buildText = byteText[theXindex:] # any 0x, 0X prefix gone. + buildText = byteText[theXindex:] # any 0x, 0X prefix gone. - # build-out leading 0's. - if (len(buildText) == 0): buildText = "0" + buildText - if (len(buildText) == 1): buildText = "0" + buildText + # build-out leading 0's. + if (len(buildText) == 0): buildText = "0" + buildText + if (len(buildText) == 1): buildText = "0" + buildText - # truncate leading characters. - if (len(buildText) > 2): buildText = buildText[-2:] + # truncate leading characters. + if (len(buildText) > 2): buildText = buildText[-2:] - buildText = "0x" + buildText # add leading 0x. + buildText = "0x" + buildText # add leading 0x. - return(buildText) # 0x## format returned. + return(buildText) # 0x## format returned. #-----------------------------------------------#------------------------------- - # guarantee 0x#### format. - def formatWordStringForDisplay(self, wordText): - - xIndex = wordText.find("x") # eliminate any 0x, 0X prefix. - XIndex = wordText.find("X") + # guarantee 0x#### format. + def formatWordStringForDisplay(self, wordText): + + xIndex = wordText.find("x") # eliminate any 0x, 0X prefix. + XIndex = wordText.find("X") - theXindex = 0 - if (xIndex >= 0): theXindex = xIndex + 1 - if (XIndex >= 0): theXindex = XIndex + 1 + theXindex = 0 + if (xIndex >= 0): theXindex = xIndex + 1 + if (XIndex >= 0): theXindex = XIndex + 1 - buildText = wordText[theXindex:] # any 0x, 0X prefix gone. + buildText = wordText[theXindex:] # any 0x, 0X prefix gone. - # build-out leading 0's. - if (len(buildText) == 0): buildText = "0" + buildText - if (len(buildText) == 1): buildText = "0" + buildText - if (len(buildText) == 2): buildText = "0" + buildText - if (len(buildText) == 3): buildText = "0" + buildText + # build-out leading 0's. + if (len(buildText) == 0): buildText = "0" + buildText + if (len(buildText) == 1): buildText = "0" + buildText + if (len(buildText) == 2): buildText = "0" + buildText + if (len(buildText) == 3): buildText = "0" + buildText - # truncate leading characters. - if (len(buildText) > 4): buildText = buildText[-4:] + # truncate leading characters. + if (len(buildText) > 4): buildText = buildText[-4:] - buildText = "0x" + buildText # add leading 0x. + buildText = "0x" + buildText # add leading 0x. - return(buildText) # 0x## format returned. + return(buildText) # 0x## format returned. #-----------------------------------------------#------------------------------- - # guarantee ## format. - def formatByteStringForTransmit(self, byteText): - buildText = self.formatByteStringForDisplay(byteText) - buildText = buildText[-2:] - return(buildText) + # guarantee ## format. + def formatByteStringForTransmit(self, byteText): + buildText = self.formatByteStringForDisplay(byteText) + buildText = buildText[-2:] + return(buildText) #-----------------------------------------------#------------------------------- - # guarantee #### format. - def formatWordStringForTransmit(self, wordText): - buildText = self.formatWordStringForDisplay(wordText) - buildText = buildText[-4:] - return(buildText) + # guarantee #### format. + def formatWordStringForTransmit(self, wordText): + buildText = self.formatWordStringForDisplay(wordText) + buildText = buildText[-4:] + return(buildText) #-----------------------------------------------#------------------------------- - def refreshUI(self): # reformat UI text. + def refreshUI(self): # reformat UI text. - # copy-in current form contents. - originalR0Entry = self.__R0Entry.get() - originalR1Entry = self.__R1Entry.get() - originalR2Entry = self.__R2Entry.get() - originalR3Entry = self.__R3Entry.get() - originalPCEntry = self.__PCEntry.get() - originalIREntry = self.__IREntry.get() - originalmmADREntry = self.__mmADREntry.get() - originalmmVALEntry = self.__mmVALEntry.get() + # copy-in current form contents. + originalR0Entry = self.__R0Entry.get() + originalR1Entry = self.__R1Entry.get() + originalR2Entry = self.__R2Entry.get() + originalR3Entry = self.__R3Entry.get() + originalPCEntry = self.__PCEntry.get() + originalIREntry = self.__IREntry.get() + originalmmADREntry = self.__mmADREntry.get() + originalmmVALEntry = self.__mmVALEntry.get() - # reformat form contents. - newR0Entry = self.formatByteStringForDisplay(originalR0Entry) - newR1Entry = self.formatByteStringForDisplay(originalR1Entry) - newR2Entry = self.formatByteStringForDisplay(originalR2Entry) - newR3Entry = self.formatByteStringForDisplay(originalR3Entry) - newPCEntry = self.formatByteStringForDisplay(originalPCEntry) - newIREntry = self.formatWordStringForDisplay(originalIREntry) + # reformat form contents. + newR0Entry = self.formatByteStringForDisplay(originalR0Entry) + newR1Entry = self.formatByteStringForDisplay(originalR1Entry) + newR2Entry = self.formatByteStringForDisplay(originalR2Entry) + newR3Entry = self.formatByteStringForDisplay(originalR3Entry) + newPCEntry = self.formatByteStringForDisplay(originalPCEntry) + newIREntry = self.formatWordStringForDisplay(originalIREntry) - newmmADREntry = self.formatByteStringForDisplay(originalmmADREntry) - newmmVALEntry = self.formatWordStringForDisplay(originalmmVALEntry) + newmmADREntry = self.formatByteStringForDisplay(originalmmADREntry) + newmmVALEntry = self.formatWordStringForDisplay(originalmmVALEntry) - - self.__R0Entry. delete(0,99) # clear form contents. - self.__R1Entry. delete(0,99) - self.__R2Entry. delete(0,99) - self.__R3Entry. delete(0,99) - self.__PCEntry. delete(0,99) - self.__IREntry. delete(0,99) - self.__mmADREntry.delete(0,99) - self.__mmVALEntry.delete(0,99) + + self.__R0Entry. delete(0,99) # clear form contents. + self.__R1Entry. delete(0,99) + self.__R2Entry. delete(0,99) + self.__R3Entry. delete(0,99) + self.__PCEntry. delete(0,99) + self.__IREntry. delete(0,99) + self.__mmADREntry.delete(0,99) + self.__mmVALEntry.delete(0,99) - # update form contents. - self.__R0Entry. insert(0,newR0Entry) - self.__R1Entry. insert(0,newR1Entry) - self.__R2Entry. insert(0,newR2Entry) - self.__R3Entry. insert(0,newR3Entry) - self.__PCEntry. insert(0,newPCEntry) - self.__IREntry. insert(0,newIREntry) - self.__mmADREntry.insert(0,newmmADREntry) - self.__mmVALEntry.insert(0,newmmVALEntry) + # update form contents. + self.__R0Entry. insert(0,newR0Entry) + self.__R1Entry. insert(0,newR1Entry) + self.__R2Entry. insert(0,newR2Entry) + self.__R3Entry. insert(0,newR3Entry) + self.__PCEntry. insert(0,newPCEntry) + self.__IREntry. insert(0,newIREntry) + self.__mmADREntry.insert(0,newmmADREntry) + self.__mmVALEntry.insert(0,newmmVALEntry) #-----------------------------------------------#------------------------------- - # build the command string for - # reading a value from a CPU register. - def buildReadRegisterCommand(self,regNum): + # build the command string for + # reading a value from a CPU register. + def buildReadRegisterCommand(self,regNum): - commandText = "" # build command for read register. - commandText = commandText + "2" # command-code. - commandText = commandText + regNum # register number. - commandText = commandText + "0000000000000" - return(commandText) + commandText = "" # build command for read register. + commandText = commandText + "2" # command-code. + commandText = commandText + regNum # register number. + commandText = commandText + "0000000000000" + return(commandText) #-----------------------------------------------#------------------------------- - # build the command-string for - # writing a value to a CPU register. - def buildWriteRegisterCommand(self,regNum,regVal): + # build the command-string for + # writing a value to a CPU register. + def buildWriteRegisterCommand(self,regNum,regVal): - commandText = "" - commandText = commandText + "1" # command-code. - commandText = commandText + regNum # register. - commandText = commandText + regVal # content. - commandText = commandText + "00000000000" - return(commandText) + commandText = "" + commandText = commandText + "1" # command-code. + commandText = commandText + regNum # register. + commandText = commandText + regVal # content. + commandText = commandText + "00000000000" + return(commandText) #-----------------------------------------------#------------------------------- - # build the command-string for - # writing a value to the IR. - def buildWriteIRCommand(self,regVal): + # build the command-string for + # writing a value to the IR. + def buildWriteIRCommand(self,regVal): - commandText = "" - commandText = commandText + "6" # command-code. - commandText = commandText + "5" # actually a placeholder. - commandText = commandText + regVal # content. - commandText = commandText + "000000000" - return(commandText) + commandText = "" + commandText = commandText + "6" # command-code. + commandText = commandText + "5" # actually a placeholder. + commandText = commandText + regVal # content. + commandText = commandText + "000000000" + return(commandText) #-----------------------------------------------#------------------------------- - # build the command-string for - # writing a main-memory value. - def buildWriteMMCommand(self,mmADR,mmVAL): - - commandText = "" - commandText = commandText + "3" # command-code. - commandText = commandText + mmADR # address. - commandText = commandText + mmVAL # value. - commandText = commandText + "00000000" - return(commandText) + # build the command-string for + # writing a main-memory value. + def buildWriteMMCommand(self,mmADR,mmVAL): + + commandText = "" + commandText = commandText + "3" # command-code. + commandText = commandText + mmADR # address. + commandText = commandText + mmVAL # value. + commandText = commandText + "00000000" + return(commandText) #-----------------------------------------------#------------------------------- - def buildReadMMCommand(self,mmADR): # build read-mm command-string. - commandText = "" # build command for read main-memory. - commandText = commandText + "4" # command-code. - commandText = commandText + mmADR - commandText = commandText + "000000000000" - return(commandText) + def buildReadMMCommand(self,mmADR): # build read-mm command-string. + commandText = "" # build command for read main-memory. + commandText = commandText + "4" # command-code. + commandText = commandText + mmADR + commandText = commandText + "000000000000" + return(commandText) #-----------------------------------------------#------------------------------- - # extract reg value payload. - def formatRegValPayload(self,messageVector): - buildHex = "0x" + messageVector[2:4] - return(buildHex) + # extract reg value payload. + def formatRegValPayload(self,messageVector): + buildHex = "0x" + messageVector[2:4] + return(buildHex) #-----------------------------------------------#------------------------------- - def progamMainMemory(self,progFile): # core of loading program to MM. + def progamMainMemory(self,progFile): # core of loading program to MM. - hFile = open(progFile, 'r') - fileLineList = hFile.readlines() # read file into a list. - hFile.close() # close the file. + hFile = open(progFile, 'r') + fileLineList = hFile.readlines() # read file into a list. + hFile.close() # close the file. - # load '0x12 0x3456' memory content - # format, into a list. - for listIndex in range(0, len(fileLineList)): - addressStartIndex = fileLineList[listIndex].find("0x") + 2 - dataStartIndex = fileLineList[listIndex].find("0x", addressStartIndex) + 2 - progAddress = fileLineList[listIndex][addressStartIndex : addressStartIndex + 2] - progAddress = format(listIndex,'02x') - progData = fileLineList[listIndex][dataStartIndex : dataStartIndex + 4] - commandText = self.buildWriteMMCommand(progAddress,progData) + # load '0x12 0x3456' memory content + # format, into a list. + for listIndex in range(0, len(fileLineList)): + addressStartIndex = fileLineList[listIndex].find("0x") + 2 + dataStartIndex = fileLineList[listIndex].find("0x", addressStartIndex) + 2 + progAddress = fileLineList[listIndex][addressStartIndex : addressStartIndex + 2] + progAddress = format(listIndex,'02x') + progData = fileLineList[listIndex][dataStartIndex : dataStartIndex + 4] + commandText = self.buildWriteMMCommand(progAddress,progData) self.__iUSB.write(commandText) - print(fileLineList[listIndex][0:len(fileLineList[listIndex])-1]) - sleep(self.__sleepVal) + print(fileLineList[listIndex][0:len(fileLineList[listIndex])-1]) + sleep(self.__sleepVal) #-----------------------------------------------#------------------------------- - def dumpMainMemory(self,dumpFile): # core of dumping MM to file. + def dumpMainMemory(self,dumpFile): # core of dumping MM to file. - hFile = open(dumpFile, 'w') + hFile = open(dumpFile, 'w') - for loopIndex in range(0, 256): # traverse all of main-memory. - transmitmmADRText = "{}".format(hex(loopIndex)) + for loopIndex in range(0, 256): # traverse all of main-memory. + transmitmmADRText = "{}".format(hex(loopIndex)) transmitmmADRText = transmitmmADRText[2:] if (len(transmitmmADRText) == 1): transmitmmADRText = "0" + transmitmmADRText - commandText = self.buildReadMMCommand(transmitmmADRText) - self.__iUSB.write(commandText) - fetchTextmmVAL = self.__iUSB.read() - buildHextmmVALString = fetchTextmmVAL[3:7] - buildHexIndex = hex(loopIndex) - buildHexIndex = buildHexIndex[2:] - if (len(buildHexIndex) == 1): buildHexIndex = "0" + buildHexIndex - buildHexIndex = "0x" + buildHexIndex - dumpString = " {} 0x{}\n".format(buildHexIndex,buildHextmmVALString) - hFile.write(dumpString) - print(dumpString[0:len(dumpString)-1]) - sleep(self.__sleepVal) + commandText = self.buildReadMMCommand(transmitmmADRText) + self.__iUSB.write(commandText) + fetchTextmmVAL = self.__iUSB.read() + buildHextmmVALString = fetchTextmmVAL[3:7] + buildHexIndex = hex(loopIndex) + buildHexIndex = buildHexIndex[2:] + if (len(buildHexIndex) == 1): buildHexIndex = "0" + buildHexIndex + buildHexIndex = "0x" + buildHexIndex + dumpString = " {} 0x{}\n".format(buildHexIndex,buildHextmmVALString) + hFile.write(dumpString) + print(dumpString[0:len(dumpString)-1]) + sleep(self.__sleepVal) - hFile.close() # close the dump file. + hFile.close() # close the dump file. #-----------------------------------------------#------------------------------- -# BEGIN THREADED CODE. #=============================== +# BEGIN THREADED CODE. #=============================== #-----------------------------------------------#------------------------------- - def doRun(self): # drives the CPU running. - while(self.__isRunning): - self.selectStepButtonPressed() - self.__masterWidget.update_idletasks() + def doRun(self): # drives the CPU running. + while(self.__isRunning): + self.selectStepButtonPressed() + self.__masterWidget.update_idletasks() if (self.__isRunning == 2): sleep(1.0) #-----------------------------------------------#------------------------------- -# the test consists of loading the add-list program into main memory, -# running it, dumping the result to a file, and comparing that file -# to the expected result. +# the test consists of loading the add-list program into main memory, +# running it, dumping the result to a file, and comparing that file +# to the expected result. - def doTest(self): # drives the test. - while(self.__testRunning): - # load program into main memory. - self.progamMainMemory("prog_add_list.txt") + def doTest(self): # drives the test. + while(self.__testRunning): + # load program into main memory. + self.progamMainMemory("prog_add_list.txt") - # clear instruction register. - self.__iUSB.write(self.buildWriteIRCommand("0000")) + # clear instruction register. + self.__iUSB.write(self.buildWriteIRCommand("0000")) - # rewind program counter. - PCVal = self.formatByteStringForTransmit("0") - writePCcommand = self.buildWriteRegisterCommand("4",PCVal) - self.__iUSB.write(writePCcommand) - self.selectRegReadButtonPressed() + # rewind program counter. + PCVal = self.formatByteStringForTransmit("0") + writePCcommand = self.buildWriteRegisterCommand("4",PCVal) + self.__iUSB.write(writePCcommand) + self.selectRegReadButtonPressed() - for stepIndex in range(0, 196): # step through program. - self.selectStepButtonPressed() + for stepIndex in range(0, 196): # step through program. + self.selectStepButtonPressed() - # dump result to file. - self.dumpMainMemory ("dump_test.txt") + # dump result to file. + self.dumpMainMemory ("dump_test.txt") - # build and run test commands. - self.__testIter = self.__testIter + 1 - iterationText = "test iteration {}".format(self.__testIter) - iterationText = "echo '" + iterationText + "' >> testlog.txt" - os.system("echo ============================ >> testlog.txt") - os.system("date >> testlog.txt") - os.system(iterationText) - os.system("echo 'compare dump_test.txt against dump_add_list.txt' >> testlog.txt") - os.system("diff dump_add_list.txt dump_test.txt >> testlog.txt") + # build and run test commands. + self.__testIter = self.__testIter + 1 + iterationText = "test iteration {}".format(self.__testIter) + iterationText = "echo '" + iterationText + "' >> testlog.txt" + os.system("echo ============================ >> testlog.txt") + os.system("date >> testlog.txt") + os.system(iterationText) + os.system("echo 'compare dump_test.txt against dump_add_list.txt' >> testlog.txt") + os.system("diff dump_add_list.txt dump_test.txt >> testlog.txt") - self.__masterWidget.update_idletasks() + self.__masterWidget.update_idletasks() #===============================================#===============================