disc
disc
disable channel
Code: 22 FF
Description: Disable a channel guard in an alternative sequence. Areg is the offset
from the byte following the altend to the start of the guarded process, Breg is the
boolean guard and Creg is a pointer to the channel. If this is the first ready guard then
the value in Areg is stored in workspace and Areg is set to true, otherwise Areg is set
to false. Note that this instruction should be used as part of an alternative sequence
following an altwt or taltwt instruction.
Definition:
if (Breg = false)
– boolean guard is false
Areg′ ← false
else if (Creg is internal channel)
{
if (word[Creg] = NotProcess.p)
– guard already disabled
Areg′ ← false
else if (word[Creg] = Wdesc)
– this guard is not ready
{
word′[Creg] ← NotProcess.p
Areg′
← false
}
else if (word[Wptr @ pw.Temp] = NoneSelected.o)
{
– this is the first ready guard
word′[Wptr @ pw.Temp] ← Areg
Areg′
← true
}
else
– a previous guard selected
Areg′ ← false
}
else if (Creg is external channel)
{
Disable comms subsystem and receive status
if (channel not ready)
– channel not waiting
Areg′ ← false
else if (word[Wptr @ pw.Temp] = NoneSelected.o)
{
– this is the first ready guard
word′[Wptr @ pw.Temp] ← Areg
Areg′
← true
}
else
- a previous guard selected
Areg′ ← false
}
Breg′ ← undefined
Creg′ ← undefined
71/212
®