Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- •void interrupt ( int i, int CR1 ) { //ohjelman keskeytys
- mem [CURRENT..CURRENT+6] = //Tallentaa nykyhetken
- (PC, RO, R1, TIMER, BASE, LlMIT, PSW);
- PSW.MASK = true; PSW.USER-MODE = false;
- R1 = CR1 ; PC = i; BASE = 0; LlMIT = 9999999; //aloituspiste 0, pituus 9999999;
- }
- while ( true ) {
- if ( "ulkoinen keskeytys tulossa" && !PSW.MASK )
- interrupt ( 0, "laitenumero"); //Keskeytyksen keskeytys laitteelle
- TIMER = TIMER-1 ;
- if ( PC > LlMIT ) interrupt (1, invalid-address ); //jos muistin pituus pienempi, keskeytetään
- INSTR = mem[BASE+PC]; //muistin aloituspiste + PC pituus
- PC = PC+1;
- switch ( INSTR.OPCODE ) {
- • caseST1:
- if ( INSTR.ADDR > LlMIT ) //jos käskyn osoite lyhyempi, keskeytetään
- interrupt (1, invalid-address);
- else //Muulloin
- mem[base+INSTR.ADDR] = R1 ;
- break;
- case SVC: interrupt (2, INSTR.ADDR);
- break;
- case RETI:
- (PC, RO, R1. TIMER, BASE. LlMIT, PSW) =
- mem [CURRENT..CURRENT+6];
- break;
- case SET -CURRENT: //asetetaan nykyinen pino-osoitin
- if ( PSW.USER-MODE ) //jos tilasanarekisteri käyttäjämoodissa, keskeytetään
- interrupt (1, privileged-instruction);
- else //Muulloin
- CURRENT = mem[INSTR.ADDR]; //ympäristön nykyhetki on muistista käskyn osoite
- break; }}
Add Comment
Please, Sign In to add comment