package Ġven us . simulator . impl s Ċ Ċ import Ġven us . ris cv . Instruction Ċ import Ġven us . simulator . Simulator Ċ import Ġven us . simulator . Instruction Implementation Ċ import Ġven us . glue . Renderer Ċ Ċ object ĠE CAL LI mpl Ġ: ĠInstruction Implementation Ġ{ ĊĠĠĠ Ġoverride Ġoperator Ġfun Ġinvoke ( inst : ĠInstruction , Ġsim : ĠSimulator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwhich Ġ= Ġsim . get Reg ( 1 0 ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( which ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ Ġ// Ġprint Ġinteger ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Ġ= Ġsim . get Reg ( 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRenderer . print Console ( arg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġ{ Ġ// Ġprint Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġarg Ġ= Ġsim . get Reg ( 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc Ġ= Ġsim . load Byte ( arg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( c Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRenderer . print Console ( c . to Char ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġsim . load Byte ( arg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 9 Ġ-> Ġ{ Ġ// Ġmalloc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbytes Ġ= Ġsim . get Reg ( 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ< Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsim . set Reg ( 1 0 , Ġsim . get Heap End ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsim . add Heap Space ( bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 Ġ-> Ġ{ Ġ// Ġexit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsim . set PC ( Int . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 1 Ġ-> Ġ{ Ġ// Ġprint Ġchar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Ġ= Ġsim . get Reg ( 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRenderer . print Console ( arg . to Char ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 7 Ġ-> Ġ{ Ġ// Ġterminate Ġwith Ġerror Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsim . set PC ( Int . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠretVal Ġ= Ġsim . get Reg ( 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRenderer . print Console (" Exit ed Ġwith Ġerror Ġcode Ġ$ ret Val \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRenderer . print Console (" Invalid Ġe call Ġ$ which \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsim . increment PC ( inst . length ) ĊĠĠĠ Ġ} Ċ } Ċ