[LMH]%IO instruction and Device Descriptors
Wed Jul 23 05:39:00 2003
On Tue, 22 Jul 2003, Steve Krueger wrote:
> %IO finds the device type by examining the INTERRUPT-TYPE field. The
> values of this field are defined in microcode and I can't find where
> it's values are exported to macrocode. I'll give you the values for
> microcode ~208, they might have changed in Elroy.
Ah. I had begun to suspect such, based on the keyboard initialization code
in window-inits.lisp and the definitions in lroy-qdev.
> ;;; Setup RQB for the NUPI completion event required for the device IO
Okay, this explains the other NuPI event level...
... Is this the same RQB that was passed to %IO, or is it a new one?
> To start NUPI request processing:
> ;;; Set the busy bit in the RQB
> ;;; Get the NUPI control space address from the device descriptor +
> ;;; Start the command by sending the address of the control block to the
> NUPI at the NUPI control space
> ;;; address + %NUPI-COMMAND-REGISTER (as an unmapped write) of the RQB
> command word,
> ;;; converted to a NuBus byte address).
So, the NuPI has a processor on it that reads the RQB directly from NuBus
memory... I'm going to have to cheat like mad here, if only because I
haven't put the VMM system in place to actually -use- NuBus memory (we're
still running directly off the load band file). That, and I don't have a
copy of the ROMs for the processor, and don't feel like adding -another-
CPU to exploiter right now...
> IO proceeds asynchronously and eventually produces an interrupt. The
> interrupt handler again dispatches on the Interrupt Type field of the
> device descriptor found at that interrupt level. NuPI doesn't share an
> interrupt level with any other device.
Okay, I just reread SSDN2 section 3 in light of all you've said and I've
discovered myself over the past couple days. It makes a lot more sense
All programming can be viewed as an exercise.