Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Data General Nova
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
====I/O instructions==== The Novas implemented a channelized model for interfacing to I/O devices. In the model, each I/O device was expected to implement two flags, referred to as "Busy" and "Done", and three data and control registers, referred to as A, B, and C. I/O instructions were available to read and write the registers, and to send one of three signals to the device, referred to as "start", "clear", and "pulse". In general, sending a start signal initiated an I/O operation that had been set up by loading values into the A/B/C registers. The clear signal halted an I/O operation and cleared any resulting interrupt. The pulse signal was used to initiate ancillary operations on complex subsystems, such as seek operations on disk drives. Polled devices usually moved data directly between the device and the A register. DMA devices generally used the A register to specify the memory address, the B register to specify the number of words to be transferred, and the C register for control flags. Channel 63 referred to the CPU itself and was used for various special functions. Each I/O instruction contained a six-bit channel number field, a four-bit to specify which register to read or write, and a two-bit field to specify which signal was to be sent. In assembly language, the signal was specified by adding a letter to the opcode: 'S' for start, 'C' for clear, 'P' for pulse, and nothing for no signal. The opcodes were: * {{code|DIA}} β move the contents of the device's A register to the specified accumulator * {{code|DOA}} β send the contents of the specified accumulator to the A register of the device on the specified channel * {{code|DIB}} β move the contents of the device's B register to the specified accumulator * {{code|DOB}} β send the contents of the specified accumulator to the B register of the device on the specified channel * {{code|DIC}} β move the contents of the device's C register to the specified accumulator * {{code|DOC}} β send the contents of the specified accumulator to the C register of the device on the specified channel * {{code|NIO}} β "no I/O", a misnomer. The instruction was used to send a signal to a device without doing a register transfer. In addition, four instructions were available to test the status of a device: * {{code|SKPBN}} β skip the next instruction if the device's busy flag is set * {{code|SKPBZ}} β skip the next instruction if the device's busy flag is clear * {{code|SKPDN}} β skip the next instruction if the device's done flag is set * {{code|SKPDZ}} β skip the next instruction if the device's done flag is clear Starting a device caused it to set its busy flag. When the requested operation was completed, conventionally the device cleared its busy flag and set its done flag; most devices had their interrupt request mechanism wired to the done flag, so setting the done flag caused an interrupt (if interrupts were enabled and the device wasn't masked).
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)