; ; gr-v10-2010_01.x68 ; ; primjeri nekih iznimki ; ; ORG $6000 RESTR: DC.B 'Resetirali smo komp! Bravo mi!',0 BESTR: DC.B 'Bus error!',0 AESTR: DC.B 'Address error!',0 ILSTR: DC.B 'Illegal operation!',0 PRSTR: DC.B 'Privilege violation!',0 DZSTR: DC.B 'Divide by zero!',0 FIN: DC.B 'Previse pogresaka! Sto imate na to reci?',0 POR: DS.L 10 ORG $6100 START: ; podesi funkcije za baratanje iznimkama MOVE.L #$00010000, $00 ; reset SSP MOVE.L #RESET, $04 ; reset PC MOVE.L #BUS, $08 ; bus error MOVE.L #ADDERR, $0C ; address error MOVE.L #ILLEGAL, $010 ; illegal error MOVE.L #DZERO, $014 ; divide by zero MOVE.L #PRIVILEGE, $020 ; privilege violation ; postavi se u korisniki rad MOVE #0, SR ; generiraj nekoliko iznimki ILLL: MOVE.W #$EFFF, ILLL ; stvori illegal opcode JMP ILLL ADDD: MOVE.W #123, $6001 ; stvori address error DZZZ: DIVS #0, D4 ; stvori instruction trap PRRR: MOVE #0, SR ; stvori privilege violation ; pokusat cemo pisati na memoriju koja je read only ; treba postaviti u "Hardware" prozoru "Invalid" na 009000-009010 BUSS: MOVE.W #$EFFF, $9000 ; stvori bus error KRAJ: MOVEA.L #FIN, A1 MOVE #13, D0 TRAP #15 MOVEA.L #POR, A1 MOVE #2, D0 TRAP #15 MOVE.B #9, D0 TRAP #15 ; ; funkcije za obradu iznimki ; ILLEGAL: MOVEA.L #ILSTR, A1 MOVE.B #13, D0 TRAP #15 MOVE.L #ADDD, 2(A7) ; SR + PC RTE ADDERR: MOVEA.L #AESTR, A1 MOVE.B #13, D0 TRAP #15 MOVE.L #DZZZ, 10(A7) ; 7 word segment na stogu ADDQ #8, A7 RTE DZERO: MOVEA.L #DZSTR, A1 MOVE.B #13, D0 TRAP #15 RTE PRIVILEGE: MOVEA.L #PRSTR, A1 MOVE.B #13, D0 TRAP #15 MOVE.L #BUSS, 2(A7) ; SR + PC RTE RESET: ; ovdje se u stavranosti dogadja svakakav mumbo jumbo :D MOVEA.L #RESTR, A1 MOVE.B #13, D0 TRAP #15 JMP START BUS: ; ovdje cemo zapeti pa je potrebno napraviti RESET ; i maknuti kvacicu MOVEA.L #BESTR, A1 MOVE.B #13, D0 TRAP #15 RTE END START