Communication Between 8086 and 8087
Communication Between 8086 and 8087
8282:
If ALE = 1 , multiplexed pins act as address lines, which means the address is
coming through those 20 lines ( ALE signal is also fed to 8282 IC ). If ALE = 1,
then 8282 IC allows the value through multiplexed lines and then stores the value
in it ( 8282 is a latch, it can capture the value ) Similarly BHE bar pin is also
accessed in the same way. Few pins in 8282
STB : This stands for stobe and this pin is equivalent to ALE, whenever STB = 1,
then only address is allowed inside the 8282 from 8086 or else it blocks the line.
OE bar : This is active low signal and stands for output enable.
Whenever ALE = 1, those lines carry address, which is carried to both the ICs
8282 as well as 8286. But 8286 is purely designed to accept data only.
8286:
8286 is a 8 bit data transceiver , as seen in the previous paragraph, whenever ALE
= 1, address is also entering the 8286 , to solve this issue, 8286 should be logically
disconnected when buses are carrying address to it( however physical
disconnection is not possible ) . This is done by an OE bar signal. This OE bar pin
of 8286 is connected to the DEN bar ( data enable which is an active low signal ).
DEN low signal decides whether signal from multiplexed bus should enter the
8286 transceiver or not. Once ALE = 0 , DEN bar = 0 , OE bar = 0, which means
8286 will allow the data from multiplexed bus. As 8286 is a bidirectional device ,
it should be specified whether data is Transmitted or received, which is done by T
pin of 8286.
0 0 0 INTA
0 0 1 IO Read
0 1 1 Halt ( no signal )
1 0 0 Instruction fetch
1 0 1 Mem Read
1 1 1 Idle
DEN = 1 ( bus EN’ = 0 ( 8259 is sending vector 8286 will not allow
carries address ) number ) anything in it from buses
If DEN = 1 and EN’ = 1 , then only 8286 is going to accept the value from the bus
which tends to be data instead of address.
RQ’/GT0’ :
Here RQ’ refers to the RQ bar ( active low signal ). As known that in maximum
mode, there are multiple processors who work together. In this case all the
processors cannot be BUS MASTERs , By default 8086 is the bus master. If 8087
wants to become bus master then it sends a request( RQ’ ), then 8086 grants( GT’ )
the request. Once the 8087 is done with the job of bus master it sends
to release signal , by which 8086 becomes bus master again.
TEST’ :
This pin of 8086 is connected with the BUSY pin of 8087. Whenever 8087 is
executing an instruction it makes BUSY = 1, so that while execution in 8087, 8086
can check 8087 before giving it another instruction.
But 8086 does not always check for TEST’ . It only checks when user required.
Instructions for 8086 and 8087 are written in a single program. Such a program (
code ) is known as homogeneous code.
Complete Procedure:
1. 8087 cannot fetch an instruction.
2. All the instructions are fetched by 8086 and whatever is fetched by
8086 is also received by 8087. It means all instructions entered in
8086 and 8087.
3. Once instruction is entered in the BIU ( refer architecture of 8086 ) of
both the processors, both the processors decode them.
4. Consider the above diagram.
First instruction is for 8086. Both of them fetch the opcode and
operand of the instruction. 8087 discards the instruction as the
instruction is not for it.
How does the instruction is decided whether it is for 8086 or 8087:
Every instruction for 8087 has a code in it 11011
It’s syntax is : ESC INSTRUCTION:
5. All the red lines in the figure show that they should be executed by
8087.
6. So before every instruction of 8087, a command should be written
WAIT;
ESC INSTRUCTION;
7. Whenever the WAIT command comes, 8086 will check the TEST’
and if 8087 is free then only the next instruction will be executed by
8087.
These all instructions are fetched by 8086 and received by 8087 also, so there
should be some way so that 8087 can know that whatever is coming in it are
instructions.
8087 interfacing with 8086
Thus the S2’ , S1’, S0’ generated by 8086 are also given to 8087.
QS1, QS0:
These pins are known as Q synchronizing or Q status. These two pins synchronize
the activities of both the processors.
0 0 NOP
0 1 Remove opcode
1 0 Clear queue
1 1 Remove operand
In the above situation, when 8086 discarded the 8087 instruction, then the QS1 and
QS0 ( 01 ) is sent to 8087, then 8087 will take that instruction and move it into it’s
EU.
Clear queue is the instruction when 8086 clears its queue and ask 8087 to clear its
queue too, this happens while branching.
NOP is the instruction when 8086 freezes the queue of 8087, at this moment 8087
cannot execute or decode further.
By seeing all these points it can be said that 8086 has control over 8087. Thus 8086
is master and 8087 is the slave.