This shows you the differences between two versions of the page.

Link to this comparison view

instructions:piq [2009/05/11 05:13] (current)
scott created
Line 1: Line 1:
 +====== Pop I/O Queue (PIQ)/OP=91 ======
 +==== Format ====
 +^  OP  ^  AF  ^  BF  ^  A Syllable  ^
 +''OP = 91''
 +**AF** is unused and reserved.  May be specified as an indirect field
 +length.   A literal flag will cause an //Invalid Instruction (**IEX = 21**)//
 +**BF** is the variant and may be specified as an indirect field length. The
 +following variants may be specified:
 +^  BF  ^  Description  ^
 +|  00  | Pop Real Time I/O Complete Queue |
 +|  01  | Pop Normal I/O Complete Queue |
 +|  02  | Pop any Queue, priority is Real Time first, then Normal |
 +**A** is the address of an six digit result field.  The address may be
 +indexed, indirect or
 +extended.  The final address controller must be equal to **UN** or an
 +//Invalid Instruction (**IEX = 03**)// fault will occur.  
 +==== Function ====
 +The Pop I/O Queue instruction is used to pop an entry from a specified
 +I/O Complete Queue (**BF** = __00-01__) or to pop an entry from either of
 +the two queues (**BF** = __02__).  When a specific I/O complete queue is
 +accessed, I/O's are popped in the order received.  If any I/O complete
 +queue is specified (**BF** = __02__), I/O's will be popped by priority
 +(Real Time first, Normal second); within one of these priorities the I/O's
 +will be popped in the order received.
 +When this instruction completes, the six digit result field pointed to
 +by the **A** address will be an ofset into the system IOCB Memory Area
 +that points to the [[processor_state:iocb|IOCB]] of an I/O that has
 +This instruction may only be executed with Privileged Enable set or an
 +//Invalid Instruction (**IEX = 02**)// fault is reported.
 +=== Detailed Description ===
 +Examine the Queue specified by **BF**.
 +Qhen a Queue entry is popped, the six digit offset into the System IOCB
 +Memory Area, that points to the descriptor of the completed I/O, is
 +stored as the result (**A**).  If there are no entries in the specified
 +Queue, no result will be stored.  If there is more than one entry in the
 +queue, only the top entry will be popped.
 +If there are no entries remaining in the queue being popped or this is
 +the last entry of the queue, then the corresponding interrupt bit is
 +reset (I/O Real Time Complete, I/O Normal Complete).
 +==== Comparison and Overflow Flags ====
 +Set the [[processor_state:comparison_flags|Comparison Flags]] to **HIGH** if
 +there is more than one entry in the Queue.  Se the
 +[[processor_state:comparison_flags|Comparison Flags]] to **EQUAL** if the
 +entry popped is the last one in the Queue.  Set the
 +[[processor_state:comparison_flags|Comparison Flags]] to **LOW** if there is
 +no entry in the queue.
 +Set the [[processor_state:overflow_flag|Overflow Flag]] only if **BF**=__02__
 +and an entry has been popped from the Real Time I/O Queue, otherwise it is
 +==== Overlap ====
 +Field overlap is not applicable to this instruction.
 +==== Examples ====
instructions/piq.txt ยท Last modified: 2009/05/11 05:13 by scott
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki