On Monday, November 21, 2016 at 11:21:19 AM UTC-7, Obsolescence wrote:
#1 is to replace the front panel logic with the simH front panel API.
Not, "replace," port. That is, take the upstream SimH code version contemporaneous with the prior development effort (i.e. circa December 2015), do a diff, then move those diffs into the front panel API framework, changing as little code as possible.
Do you happen to know the approximate date of the SimH code Mike Barnes made his changes against? That will help in extracting the diffs from the base SimH code.
I would not do that - it adds a lot of layers of indirection, whilst at the moment the front panels is handled within the CPU logic at the lowest level. It's probably much faster and more direct this way.
Undoubtedly the current method is faster. The question is, how fast does the PiDP-8/I simulator need to be in order to meet its performance goals?
An RPi 3 is about 5,000 times faster than a real PDP-8/I on a pure MIPS basis. Currently, the budget for updating the UI comes out of that budget, meaning that the modified SimH binary can do 5,000 times more work than a real PDP and still meet its performance goals.
Under the front panel API scheme, much of that budget gets shuffled out of the simulator into async I/O. That is, while the front panel app is sitting there doing sleeps and other essentially unproductive stuff, the unmodified simh will be running in the background asynchronously, servicing the CPU and internal I/O (disks, terminals, etc.) update loops.
Not that this is an important concern, since the simulator is already fast enough. The point is that IPC latency will be swamped by incandescent lamp simulation latencies and such. As long as the front panel simulator app completes each iteration within the human PoV limit (~100 Hz) it's fast enough.
The benefit we get for this is that we can upgrade to the latest SimH code at any time, without disturbing the PiDP/8 panel interfacing code.
Stuff that I would love to add is external peripherals ($2 Arduinos with whatever sensors you'd think of) that are programmed with instructions compatible with the LAB-8 and other original peripherals.
Isn't a LAB-8 a PDP-8/e with A/D and such hardwired into the backplane? How would an external Arduino simulate that?
The PiDP-8/i has run the Pi out of GPIO by this point, so do you plug the Arduino into the Pi via USB, so that the Arduino appears to be another terminal to SimH? That's do-able: a stream of 10-bit samples encoded in a fairly sloppy hex ASCII encoding at 60 Hz is still only 4,800 bps. A tight binary encoding could get it down to about half that, if needed. The question, though, is how realistic would that be, with respect to a LAB-8?
Or are you suggesting more mods to SimH to make it simulate this hard-wired peripheral by talking to an Arduino over serial? If so, any future changes of this sort should be confined to external modules, so that the only mods to the core of SimH are function calls into those modules. The patch relative to the stock version of SimH should be made as small as possible.
You could use that to hook up an oscilloscope as graphics screen
Reworking the current VC8-E support to directly drive an X-Y oscilloscope would be neat. I have a suitable Tektronix scope here.