Embedded RTOS 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-2 watchdog
Fork of USB_device_project by
Revision 8:db29cce17a33, committed 2013-09-01
- Comitter:
- gatedClock
- Date:
- Sun Sep 01 03:55:03 2013 +0000
- Parent:
- 7:d1aca9ccbab8
- Child:
- 9:81726c95be74
- Commit message:
- improve tab formatting of code under mmPython.
Changed in this revision
--- a/mmPython/mmProject.txt Sun Sep 01 03:48:07 2013 +0000 +++ b/mmPython/mmProject.txt Sun Sep 01 03:55:03 2013 +0000 @@ -1,18 +1,18 @@ -#!/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=================================#=============================== -import os # import os library. -import sys # import sys library. -import usb.core # import PyUSB library. -from Tkinter import * # Tk library. -import ttk # from Tk library. -import tkFileDialog # from Tk library. -import pexpect # not needed here. -import mmUI # specify file. -from mmUI import * # specify module. +import os # import os library. +import sys # import sys library. +import usb.core # import PyUSB library. +from Tkinter import * # Tk library. +import ttk # from Tk library. +import tkFileDialog # from Tk library. +import pexpect # not needed here. +import mmUI # specify file. +from mmUI import * # specify module. #=======function================================#=============================== #=======main====================================#=============================== #-------parameters------------------------------#------------------------------- @@ -20,9 +20,11 @@ #-------execution-------------------------------#------------------------------- if (1): - root = Tk() - app = mmUI(root) - root.mainloop() - sys.exit(0) + root = Tk() + app = mmUI(root) + root.mainloop() + sys.exit(0) #-----------------------------------------------#------------------------------- + +
--- 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()
#===============================================#===============================
--- a/mmPython/mmUSBserial.txt Sun Sep 01 03:48:07 2013 +0000
+++ b/mmPython/mmUSBserial.txt Sun Sep 01 03:55:03 2013 +0000
@@ -1,52 +1,52 @@
-#!/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---------------------------------#-------------------------------
-import serial # serial over USB.
+import serial # serial over USB.
#=======class===================================#===============================
if (1):
- class mmUSBserial(): # USB class.
+ class mmUSBserial(): # USB class.
#-----------------------------------------------#-------------------------------
- # constructor.
- def __init__(self, idVendor, idProduct):
+ # constructor.
+ def __init__(self, idVendor, idProduct):
- self.__idVendor = idVendor # promote to object scope.
- self.__idProduct = idProduct # promote to object scope.
+ self.__idVendor = idVendor # promote to object scope.
+ self.__idProduct = idProduct # promote to object scope.
- openSuccess = 1
- self.__serialPort = serial.Serial()
- self.__serialPort.baudrate = 9600
+ openSuccess = 1
+ self.__serialPort = serial.Serial()
+ self.__serialPort.baudrate = 9600
- for portIndex in range(7, -1, -1):
- portString = "/dev/ttyACM" + "{}".format(portIndex)
- self.__serialPort.port = portString
- try:
- self.__serialPort.open()
- except:
- print("failed to open port {}.").format(portString)
- openSuccess = 0
+ for portIndex in range(7, -1, -1):
+ portString = "/dev/ttyACM" + "{}".format(portIndex)
+ self.__serialPort.port = portString
+ try:
+ self.__serialPort.open()
+ except:
+ print("failed to open port {}.").format(portString)
+ openSuccess = 0
- if (openSuccess): break
- openSuccess = 1
+ if (openSuccess): break
+ openSuccess = 1
- if (openSuccess): print("successfully opened port {}.").format(portString)
- else: print("could not open any port.")
+ if (openSuccess): print("successfully opened port {}.").format(portString)
+ else: print("could not open any port.")
#-----------------------------------------------#-------------------------------
- def __del__(self): # destructor.
- self.__serialPort.close()
- print "object destroyed."
+ def __del__(self): # destructor.
+ self.__serialPort.close()
+ print "object destroyed."
#-----------------------------------------------#-------------------------------
- def write(self,toWrite): # write a string.
+ def write(self,toWrite): # write a string.
nowWrite = toWrite[:7]
- nowWrite = nowWrite + "$"
- self.__serialPort.write(nowWrite)
- return(nowWrite)
+ nowWrite = nowWrite + "$"
+ self.__serialPort.write(nowWrite)
+ return(nowWrite)
#-----------------------------------------------#-------------------------------
- def read(self): # read a string.
- gotRead = self.__serialPort.read(8)
- return(gotRead)
+ def read(self): # read a string.
+ gotRead = self.__serialPort.read(8)
+ return(gotRead)
#-----------------------------------------------#-------------------------------
#===============================================#===============================
@@ -59,3 +59,14 @@
+
+
+
+
+
+
+
+
+
+
+
