I've continued to work on the TMD-2 user interface while getting the finite state machine running. When I was implementing the state machine, I found myself wanting to enter values into the state transition table to test various features, so I created the ability to add symbols by clicking on the table cells. Each click advances to the next valid symbol for that cell in a circular fashion. Clicking on the top part of the cell will switch to the previous symbol, while a click on the lower part will go to the next symbol. Note that I had already implemented a similar scheme for the tape cells.
As testing continued I got tired of entering the same "programs" over and over so I added the ability to Load and Save "workspaces". A workspace contains a snapshot of the tape and state transition table values at the point that Save is invoked. Save will also produce a dump of the same information plus counts of how many of each symbol were found on the tape. Load of course changes the current console values of the tape and state transition table to those in the saved file.
Here is a quick demo of TMD-2 loading and running a 3-state / 2-symbol busy beaver. The console is running in Demo mode where steps are executed every 300 ms or so:
After the busy beaver program was finished running I saved the workspace to a different file and produced the following summary:
Showing tape from cell -2 to cell 3. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | 1 | 1 | 1 | 1 | 1 | Counts ~~~~~~ 0: 0 1: 6 2: 0 3: 0 4: 0 5: 0 b: 0 State Transition Table ~~~~~~~~~~~~~~~~~~~~~~ A | 0 | 1 | 2 | 3 | 4 | 5 | | 1 | 1 | - | - | - | - | | R | L | - | - | - | - | | B | C | - | - | - | - | B | 0 | 1 | 2 | 3 | 4 | 5 | | 1 | 1 | - | - | - | - | | L | R | - | - | - | - | | A | B | - | - | - | - | C | 0 | 1 | 2 | 3 | 4 | 5 | | 1 | 1 | - | - | - | - | | L | L | - | - | - | - | | B | H | - | - | - | - | D | 0 | 1 | 2 | 3 | 4 | 5 | | - | - | - | - | - | - | | - | - | - | - | - | - | | - | - | - | - | - | - | E | 0 | 1 | 2 | 3 | 4 | 5 | | - | - | - | - | - | - | | - | - | - | - | - | - | | - | - | - | - | - | - | F | 0 | 1 | 2 | 3 | 4 | 5 | | - | - | - | - | - | - | | - | - | - | - | - | - | | - | - | - | - | - | - |
I was able to reproduce most of the runtime features from TMD-1, like highlighting each step within the state transition table while executing the program in Demo and Step modes. I feel that TMD-2 thus maintains the "simple to program and easy to understand' characteristics of it's predecessor.
At some point after adding load and save workspaces, plus the ability to input values directly into the state transition table cells through the console, I realized that I had a pretty good stand alone Turing machine application here. While I personally enjoy the tactile nature of placing physical tiles onto the TMD-1 and 2 transition table panels, clicking on the screen's virtual cells, while not as satisfying, works pretty well. This also makes my "simple to program easy to understand" Turing machine concept available to a much wider audience.
So I'm going to take a few days to do some more testing and to figure out how best to package up "TMD-2 The Program", then I will post a link in this blog with the result. Once that's done I'll move on to the final task of integrating the OCR input unit because I really do like working with the tiles.