Si suppone che quando il microprogramma seguente (che e' un ciclo infinito) inizia, i registri Mic-1 siano tutti a zero. a0 Z=TOS; if (Z) goto a10; else goto a1 // se TOS[0]=1 il dispositivo fa richiesta del bus a1 Z=OPC; if (Z) goto a3; else goto a2 // se OPC[0]=1 il segnale di grantIN e' settato a2 Z=SP ; if (Z) goto a4; else goto a1 // se SP[0]=1 qualcun altro stava gia' usando // il bus, poiche' il segnale grantIN e' attualmente // propagato su grantOUT, nel qual caso attendo che // il grantIN diventi 0. a3 SP=OPC // grantIN e' 0, lo propago nel caso grantOUT fosse 1 a4 PC=1 // setto il segnale Bus-request a5 Z=OPC; if (Z) goto a5; else goto a6 // controllo se mi e' arrivata la concessione del // bus su grantIN a6 LV=1 // comunico al dispositivo che puo' usare il bus a7 Z=TOS; if (Z) goto a8; else goto a7 // attendo che il dispositivo rilasci il bus (cosa // che segnalera' mettendo a zero reqM a8 LV=0 // metto a zero il segnale grantM a9 PC=0; goto a0 // metto a zero il segnale di Bus-request a10 SP=OPC; goto a0 // faccio propagare il segnale da grantIN a grantOUT // (quando il dispositivo non richiede il bus) E' chiaro che ci sono sequenze di eventi temporali di cui il nostro microproggramma non riesce a tenere conto. Ma sono diffici da gestire con le nostre conoscenze del sistema. Infatti in a9 il grantIN e' ancora settato ad 1. Verra' settato a 0 quando l'arbitro si accorgera' che il bus e' stato rilasciato. Se pero' questo non avviene in un tempo abbastanza breve, il microprogramma potrebbe passare ad a0 e poi ad a10, facendo cosi' propagare l'1 del grantIN su grantOUT concedendo cosi' erroneamente il bus al prossimo dispositivo senza il "permesso" dell'arbitro.