Sent from my iPhone
> On Feb 20, 2016, at 11:00 AM, Paul Koning <paulkon...@comcast.net> wrote: > > >> On Feb 19, 2016, at 4:58 PM, Will Senn <will.s...@gmail.com> wrote: >> >> Given the following test program that I wrote (GETC.MAC): >> >> .title getc >> >> .mcall .exit >> >> TKS = 177560 >> TKB = 177562 >> ;TPS = 177564 >> ;TPB = 177566 >> >> begin: >> inc TKS ;set the ASR read enable bit >> getc: >> tstb TKS ;is a character available? >> bpl getc ;loop until there is >> >> movb TKB,R0 ;put the character into register 0 >> >> .exit >> >> .end begin >> >> I would expect the console to wait until I typed a single character and then >> for the program to exit. What is happening is that the program appears to >> accept any number of characters and only ends when I type CTRL-C twice. >> >> Here are some questions that arise: >> >> 1. Is it reasonable to expect to be able to read directly from the ASR >> Keyboard buffer while running RT-11 in SimH or does this somehow compete >> with the running OS? (I can print characters using the ASR Punch Buffer just >> fine) > > No, that is not reasonable. Not without extra work. You're messing with a > device that has already been set up by the terminal driver. > > When running in kernel mode, as you are in RT11, you can definitely get > around this, but it requires more work. Specifically, you'd have to disable > terminal interrupts so the appearance of a character doesn't wake up the > driver. For best results, you would also have to restore the terminal CSRs > on exit so the terminal driver is given control again. > > Alternatively, you could block out interrupts by raising the processor > priority, then lowering it back to 0 before exit. That works because > interrupts are level sensitive in PDP11s (as they are in all sane interrupt > architectures), so the fetching of the received character will cancel the > interrupt request, which means that lowering the priority just before the > .exit will have the right result (no interrup to confuse the driver). > > paul > Great answer and helpful. I'll give both approaches a shot. If I understand my environment correctly, RT-11 is single user, single job (well, most of the time anyway). So, it oughta be safe enough to try this without messing things up beyond needing to restart if I have logic errors? That is, the file system isn't involved or caching or anything that would cause inconsistency as a result of an infinite loop or crash? Not that I would ever code such things :)! Thanks, Will _______________________________________________ Simh mailing list Simh@trailing-edge.com http://mailman.trailing-edge.com/mailman/listinfo/simh