start goto res //inizializzo OPC che costituisce la linea di grant main H=OPC Z=H AND PC;if(Z) goto sh;else goto main //controllo se il master ha bisogno di grant oppure ha lasciato il bus sh OPC=OPC>>1;if(Z) goto res;else goto null //shifto a destra l'unico bit di grant che gira in TOS res OPC=H=1 //prepara la linea di grant oppure permette al bit shiftato OPC=H=OPC+H //precedentemente di poter ritornare al punto di partenza OPC=H=OPC+H OPC=OPC+H; null goto main Il codice pero' ha un problema. Problema: possibile concessione del bus impropria Durante il ripristino della condizione iniziale Schiftando OPC init TOS=H=1 TOS=H=TOS+H TOS=H=TOS+H TOS=TOS+H; start OPC=TOS main H=OPC Z=H AND PC;if(Z) goto sh; else goto main sh OPC=OPC>>1;if(Z) goto start ;else goto main Anche questa soluzione ha un problemino Problema Codice non chiaro e poco verificabile init TOS=H=1 TOS=H=TOS+H TOS=H=TOS+H TOS=TOS+H; start OPC=TOS main H=OPC Z=H AND PC;if(Z) goto sh; else goto main sh OPC=OPC>>1 Z=OPC; if(Z) goto start ;else goto main Un ultimo problema: etichette rami else identiche e esecuzione non necessaria di istruzione nel ciclo di attesa init TOS=H=1 TOS=H=TOS+H TOS=H=TOS+H TOS=TOS+H; start OPC=TOS main1 H=OPC main2 Z=H AND PC;if(Z) goto sh; else goto main2 sh OPC=OPC>>1 Z=OPC; if(Z) goto start ;else goto main1