As I mentioned previously, I took some time off from working on the MEM11 for the past several months. I had some time over the past few days, so I spent it working on the simulator.

Right now all of the J1 instructions seem to simulate properly. Everything related to the basic simulator also seems to be functional. I still have work to do to write code for the simulated I/O (it's all stubbed out at the moment). The way that I'm implementing the I/O, is that it's pretty modular. All of the fundamental code structures are there, I just have to write the "handlers" for the particular I/O devices.

I wrote the majority of the J1 simulator to be H/W agnostic (as far as the I/O is concerned), the I/O
at this point will match what I expect to be in the actual MEM11 H/W.

Here's what the simulator currently supports:
- All command functionality is present and functional. These are the way that one interacts with
    the simulator.  The commands include things like:
       - loading files into J1 memory or FRAM
       - dumping memory locations from J1 memory or FRAM
       - modifying memory locations in J1 memory or FRAM
       - setting, listing and clearing breakpoints
       - starting execution
       - single stepping execution
       - dumping the data & return stacks
       - starting and stopping instruction tracing
- All of the J1 instructions now seem to execute correctly (lots of typo's and other subtle bugs) - Exceptions work now. This allows the J1 program to do something "silly" and the simulator won't crash (had enough of that already while I was debugging the simulator!). It'll report what the J1 program did that was "silly" (ie unaligned memory accesses, etc).
   - It also contains a reasonable "help" system.

I've written an instruction test program that tests out all of the J1 instructions and it is "self checking". That is, it will throw an exception (unaligned address) if the result of the instruction test isn't what was expected. To determine what failed, I look at the address where the exception occurred and reference the test program listing to determine which test failed. I verified that it is indeed operating correctly by hand checking via the instruction trace file that it was doing the "right things".

I had originally started debugging by single stepping through the program but after the test program grew to over a few dozen instructions, it became too tedious for me to ensure that I was accurately verifying the instruction execution. This is where the instruction trace file became invaluable.

The next thing to do is to work on the simulated I/O. Once I'm confident that all of that is working then I can go about debugging all of the code I've already written for the MEM11 itself. The simulator should give me a pretty good environment for debugging, especially when compared to the actual HW.

Oh, and of course everything (simulator, MEM11 firmware and tools for the build environment) are all
written in forth.  ;-)

TTFN - Guy

Reply via email to