While the Zorro II bus has always supported shared interrupts, the Zorro III bus supports a mechanism wherein the interrupting PIC can supply its own vector. This has the potential to make such vectored interrupts much faster than conventional Zorro II chained interrupts, arbitrating the interrupting device in hardware instead of software. A PIC supporting quick interrupts has on-board registers to store one or more vector numbers; the numbers are obtained from the OS by the device driver for the PIC, and the PIC/driver combination must be able to handle the situation in which no additional vectors are available. During system operation, this PIC will interrupt the system in the normal manner, by asserting one of the bus interrupt lines. This interrupt will cause an interrupt vector cycle to take place on the bus. This cycle arbitrates in hardware between all PICs asserting that interrupt, and it's a completely different type of Zorro III cycle, as illustrated in Figure K-8. _____ POLL PHASE VECTOR PHASE _____ /FCS \ / \______________________________________________/ _______ _____ _____ /MTCR \ / \ / \_____________/ \______________________/ ____________ _____ _____ /SLAVE \ / \ / \________/ \______________________/ ____________________ AD19..AD16 ____/ \__________________________________ SA3,SA2,/LOCK \____________________/ ______________________ DOE / \ _____________________________/ \_____ _____________________________ _____ /DS0 \ / \______________________/ data from slave _________________|_____ SD7..SD0 _______________________________/ / | \____ \____________\__________/ ____________________________________________ ____ /DTACK \ / \________/ Figure K-8: Interrupt Vector Cycle The bus controller will start an interrupt vector cycle in response to an interrupt asserted by any PIC. This cycle starts with /FCS and /MTCR asserted, a FC code of 7 (CPU space), a CPU space cycle type, given by address lines A16-A19 , of 15, and the interrupt number, which is on A1-A3 (A1 is on the /LOCK line, as in Zorro II cycles). The interrupt numbers 2 and 6 are currently defined, corresponding to /INT2 and /INT6 respectively; all others are reserved for future use. At this point, called the polling phase, any PIC that has asserted an interrupt and wants to supply a vector will decode the FC lines, the cycle type, match its interrupt number against the one on the bus, and assert /SLAVEn if a match occurs. Shortly thereafter, the /MTCR line is negated, and the slaves all negate /SLAVEn . But the cycle doesn't end. The next step is called the vector phase. The bus controller asserts one /SLAVEn back to one of the interrupting PICs, along with /MTCR and /DS0 , but no addresses are supplied. That PIC will then assert its 8 bit vector onto the logical D0-D7 (physically AD15-AD8) of the 32-bit data bus and /DTACK , as quickly as possible, thus terminating the cycle. The speed here is very critical; an automatic autovector timeout will occur very quickly, as any actual waiting that's required for the quick interrupt vector is potentially delaying the autovector response for Zorro II style interrupts. A PIC stops driving its interrupt when it gets the response cycle; it must also be possible for this interrupt to be cleared in software (e.g., the PIC must make choice of vectoring vs. autovectoring a software issue).
[Back to Amiga Developer Docs]