Frustrated with the finickiness of the spaghetti prototype, I spent some time last evening buzzing out and resoldering wires on the prototype board. I found a few questionable places that could have been contributing to the problem and tightened up connections.
Another cause of the possible flakiness: the 68B09E that I'm using in the machine socket was desoldered from a CoCo 3 years ago. The pins are noticeably shorter and the contacts they make into the machine socket holes in some places are questionable. I flared out the pins slightly so that they would make a better contact in the holes and seated the microprocessor more firmly.
After that, I placed the prototype back in the 6502C socket on the Atari XEGS and things seemed more stable. I loaded a bootfile into ROM, booted NitrOS-9 and left the debug command running all night long.
This morning I arrived in the office to find that the prompt was still showing, the video was still sane, and the XEGS was still up and running. So it appears that the rework I did on the prototype cleared up those issues.
Another accomplishment was to finally sort out the clock problems that I was having with NMI. It turns out that it was a simple coding error, and I fixed it right up. Now, clock module is called during the kernel's initialization. The clock sets up a vector, then tells the ANTIC to fire off an NMI every vertical blanking interval (1/60 of a second). The vector routes the NMI to a short handler which then redirects it to the vector that was populated by the clock module. This vector handles the software clock (increments seconds, then minutes, then days, and so on), and also polls the virtual interrupt table, a feature that NitrOS-9 has for devices to use the clock interrupt as a pseudo-interrupt source. So now NMIs are firing 60 times a second and keyboard interrupts are working along with that.
With all of that activity going on and the computer staying up strong for 12 hours running, I would say that things are looking quite well.