package Ġorg . j gl rx av pok . k ame boy . processing Ċ Ċ import Ġorg . j gl rx av pok . k ame boy . Game boy Ċ import Ġorg . j gl rx av pok . k ame boy . help ful . as Address Ċ import Ġorg . j gl rx av pok . k ame boy . help ful . as Signed 8 Ċ import Ġorg . j gl rx av pok . k ame boy . help ful . as Unsigned 1 6 Ċ import Ġorg . j gl rx av pok . k ame boy . help ful . as Unsigned 8 Ċ import Ġorg . j gl rx av pok . k ame boy . memory .* Ċ import Ġorg . j gl rx av pok . k ame boy . memory . special Regs . F Register Ċ import Ġorg . j gl rx av pok . k ame boy . time . Save State Element Ċ Ċ class ĠCPU ( val Ġgame boy : ĠGame boy ) Ġ{ ĊĊĠĠĠ Ġval Ġmemory : ĠMemory Mapper Ġ= Ġgame boy . mapper ĊĠĠĠ Ġval Ġinterrupt Manager : ĠInterrupt Manager Ġ= Ġgame boy . interrupt Manager ĊĠĠĠ Ġval Ġcar tr idge : ĠCar tr idge Ġ= Ġgame boy . car tr idge ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġvar Ġhal ted Ġ= Ġfalse ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġvar Ġstopped Ġ= Ġfalse ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġinternal Ġvar Ġstop PC Ġ= Ġfalse Ġ// Ġused Ġby ĠHAL T Ġinstruction ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġinternal Ġvar Ġrequested Interrupt Change Ġ= Ġfalse ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġinternal Ġvar Ġdesired Interrupt State Ġ= Ġfalse ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġvar Ġstack Pointer Ġ= ĠRegister (" Stack ĠPointer ", Ġ 0 , Ġsize In Bits Ġ= Ġ 1 6 ) ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġvar Ġprogram Counter Ġ= ĠRegister (" Program ĠCounter ", Ġ 0 , Ġsize In Bits Ġ= Ġ 1 6 ) ĊĠĠĠ Ġvar ĠA Ġ= ĠRegister (" A ", Ġ 0 , Ġsize In Bits Ġ= Ġ 8 ) ĊĠĠĠ Ġvar ĠB Ġ= ĠRegister (" B ", Ġ 0 , Ġsize In Bits Ġ= Ġ 8 ) ĊĠĠĠ Ġvar ĠC Ġ= ĠRegister (" C ", Ġ 0 , Ġsize In Bits Ġ= Ġ 8 ) ĊĠĠĠ Ġvar ĠD Ġ= ĠRegister (" D ", Ġ 0 , Ġsize In Bits Ġ= Ġ 8 ) ĊĠĠĠ Ġvar ĠE Ġ= ĠRegister (" E ", Ġ 0 , Ġsize In Bits Ġ= Ġ 8 ) ĊĠĠĠ Ġvar ĠF Ġ= ĠF Register () ĊĠĠĠ Ġvar ĠH Ġ= ĠRegister (" H ", Ġ 0 , Ġsize In Bits Ġ= Ġ 8 ) ĊĠĠĠ Ġvar ĠL Ġ= ĠRegister (" L ", Ġ 0 , Ġsize In Bits Ġ= Ġ 8 ) ĊĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġvar ĠAF Ġ= ĠPa ired Registers ( A , ĠF ) ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġvar ĠBC Ġ= ĠPa ired Registers ( B , ĠC ) ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġvar ĠDE Ġ= ĠPa ired Registers ( D , ĠE ) ĊĠĠĠ Ġ@ Save State Element ĊĠĠĠ Ġvar ĠHL Ġ= ĠPa ired Registers ( H , ĠL ) ĊĠĠĠ Ġvar Ġat HL Ġ= Ġobject : ĠMemory Register ("( HL )", Ġmemory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġaddress Ġget () = ĠHL . getValue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġflag Z Ġby ĠF . bit Var ( 7 ) ĊĠĠĠ Ġvar Ġflag N Ġby ĠF . bit Var ( 6 ) ĊĠĠĠ Ġvar Ġflag H Ġby ĠF . bit Var ( 5 ) ĊĠĠĠ Ġvar Ġflag C Ġby ĠF . bit Var ( 4 ) ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( car tr idge . is For Color GB ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA . setValue ( 0 x 1 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA . setValue ( 0 x 0 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠF . setValue ( 0 xB 0 ) ĊĠĠĠĠĠĠĠ ĠB . setValue ( 0 x 0 0 ) ĊĠĠĠĠĠĠĠ ĠC . setValue ( 0 x 1 3 ) ĊĠĠĠĠĠĠĠ ĠDE . setValue ( 0 x 0 0 D 8 ) ĊĠĠĠĠĠĠĠ ĠHL . setValue ( 0 x 0 1 4 D ) ĊĊĠĠĠĠĠĠĠ Ġstack Pointer . setValue ( 0 xFF FE ) ĊĠĠĠĠĠĠĠ Ġprogram Counter . setValue ( 0 x 0 1 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 0 5 , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠTI MA ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 0 6 , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠT MA ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 0 7 , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠT AC ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 0 , Ġ 0 x 8 0 ) ĠĠ Ġ// ĠNR 1 0 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 1 , Ġ 0 xB F ) ĠĠ Ġ// ĠNR 1 1 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 2 , Ġ 0 xF 3 ) ĠĠ Ġ// ĠNR 1 2 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 4 , Ġ 0 xB F ) ĠĠ Ġ// ĠNR 1 4 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 6 , Ġ 0 x 3 F ) ĠĠ Ġ// ĠNR 2 1 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 7 , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠNR 2 2 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 9 , Ġ 0 xB F ) ĠĠ Ġ// ĠNR 2 4 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 A , Ġ 0 x 7 F ) ĠĠ Ġ// ĠNR 3 0 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 B , Ġ 0 xFF ) ĠĠ Ġ// ĠNR 3 1 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 C , Ġ 0 x 9 F ) ĠĠ Ġ// ĠNR 3 2 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 1 E , Ġ 0 xB F ) ĠĠ Ġ// ĠNR 3 3 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 2 0 , Ġ 0 xFF ) ĠĠ Ġ// ĠNR 4 1 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 2 1 , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠNR 4 2 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 2 2 , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠNR 4 3 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 2 3 , Ġ 0 xB F ) ĠĠ Ġ// ĠNR 3 0 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 2 4 , Ġ 0 x 7 7 ) ĠĠ Ġ// ĠNR 5 0 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 2 5 , Ġ 0 xF 3 ) ĠĠ Ġ// ĠNR 5 1 ĊĠĠĠĠĠĠĠ Ġif ( car tr idge . uses S GB Functions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 2 6 , Ġ 0 xF 0 ) ĠĠ Ġ// ĠNR 5 2 Ġ( S GB Ġonly ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 2 6 , Ġ 0 xF 1 ) ĠĠ Ġ// ĠNR 5 2 Ġ( GB Ġonly ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 0 , Ġ 0 x 9 1 ) ĠĠ Ġ// ĠLC DC ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 1 , Ġ 0 x 8 5 ) ĠĠ Ġ// ĠSTAT ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 2 , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠSC Y ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 3 , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠSC X ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 5 , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠL Y C ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 7 , Ġ 0 xFC ) ĠĠ Ġ// ĠBGP ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 8 , Ġ 0 xFF ) ĠĠ Ġ// ĠO BP 0 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 9 , Ġ 0 xFF ) ĠĠ Ġ// ĠO BP 1 ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 A , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠW Y ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFF 4 B , Ġ 0 x 0 0 ) ĠĠ Ġ// ĠW X ĊĠĠĠĠĠĠĠ Ġ// memory . write ( 0 xFFFF , Ġ 0 x 0 1 ) Ġ// ĠIE ĊĠĠĠĠĠĠĠ Ġmemory . write ( 0 xFFFF , Ġ 0 x 0 0 ) Ġ// ĠIE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġclock Ġcycles Ġconsumed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstep (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshould Change Interrupt State Ġ= Ġrequested Interrupt Change ĊĠĠĠĠĠĠĠ Ġcheck Interrupt s () ĊĠĠĠĠĠĠĠ Ġif ( hal ted Ġ|| Ġstopped ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 4 ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġprogram Counter . getValue () ĊĠĠĠĠĠĠĠ Ġval Ġopcode Ġ= Ġnext Byte () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclock Cycles Ġ= Ġexecute ( opcode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( should Change Interrupt State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Interrupt Change Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterrupt Manager . interrupt s Enabled Ġ= Ġdesired Interrupt State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclock Cycles ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Found Ġerror Ġin Ġopcode Ġ${ Integer . to HexString ( opcode )} Ġat ĠPC Ġ${ Integer . to HexString ( position )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġtail rec Ġfun Ġcheck Interrupt s () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterrupt Flag Ġ= Ġmemory . read ( 0 xFF 0 F ) ĊĠĠĠĠĠĠĠ Ġval Ġinterrupt Enable Ġ= Ġmemory . read ( 0 xFFFF ) ĊĠĠĠĠĠĠĠ Ġif ( interrupt Flag Ġand Ġinterrupt Enable Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhal ted Ġ= Ġfalse Ġ// Ġalways Ġwake ĠCPU Ġup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhttps :// kot cr ab . com / blog / 2 0 1 6 / 0 4 / 2 2 / what - i - learn ed - from - game - boy - emulator - development / ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( interrupt Manager . interrupt s Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interrupt Flag Ġand Ġinterrupt Enable Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! stopped Ġ&& Ġinterrupt Manager . has V Blank () Ġ-> Ġinterrupt ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! stopped Ġ&& Ġinterrupt Manager . has L cd Stat () Ġ-> Ġinterrupt ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! stopped Ġ&& Ġinterrupt Manager . has Timer Overflow () Ġ-> Ġinterrupt ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! stopped Ġ&& Ġinterrupt Manager . has Serial () Ġ-> Ġinterrupt ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterrupt Manager . has Pin Released () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstopped Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterrupt ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Interrupt s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinterrupt ( interrupt Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstop PC Ġ= Ġfalse Ġ// ĠTODO : Ġfor Ġtesting ĊĊĠĠĠĠĠĠĠ Ġinterrupt Manager . interrupt s Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġinterrupt Manager . reset ( interrupt Index ) ĊĠĠĠĠĠĠĠ Ġcall ( 0 x 4 0 Ġ+ Ġinterrupt Index Ġ* Ġ 8 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute ( opcode : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( opcode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 6 Ġ-> Ġ{ Ġld ( B , Ġnext Byte ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 E Ġ-> Ġ{ Ġld ( C , Ġnext Byte ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 6 Ġ-> Ġ{ Ġld ( D , Ġnext Byte ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 E Ġ-> Ġ{ Ġld ( E , Ġnext Byte ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 6 Ġ-> Ġ{ Ġld ( H , Ġnext Byte ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 E Ġ-> Ġ{ Ġld ( L , Ġnext Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 F Ġ-> Ġ{ Ġld ( A , ĠA . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 8 Ġ-> Ġ{ Ġld ( A , ĠB . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 9 Ġ-> Ġ{ Ġld ( A , ĠC . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 A Ġ-> Ġ{ Ġld ( A , ĠD . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 B Ġ-> Ġ{ Ġld ( A , ĠE . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 C Ġ-> Ġ{ Ġld ( A , ĠH . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 D Ġ-> Ġ{ Ġld ( A , ĠL . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 E Ġ-> Ġ{ Ġld ( A , ĠHL . at Point ed ( memory )); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 A Ġ-> Ġ{ Ġld ( A , ĠBC . at Point ed ( memory )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 A Ġ-> Ġ{ Ġld ( A , ĠDE . at Point ed ( memory )); Ġ 8 } ĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 0 Ġ-> Ġ{ Ġld ( B , ĠB . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 1 Ġ-> Ġ{ Ġld ( B , ĠC . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 2 Ġ-> Ġ{ Ġld ( B , ĠD . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 3 Ġ-> Ġ{ Ġld ( B , ĠE . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 4 Ġ-> Ġ{ Ġld ( B , ĠH . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 5 Ġ-> Ġ{ Ġld ( B , ĠL . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 6 Ġ-> Ġ{ Ġld ( B , ĠHL . at Point ed ( memory )); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 8 Ġ-> Ġ{ Ġld ( C , ĠB . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 9 Ġ-> Ġ{ Ġld ( C , ĠC . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 A Ġ-> Ġ{ Ġld ( C , ĠD . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 B Ġ-> Ġ{ Ġld ( C , ĠE . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 C Ġ-> Ġ{ Ġld ( C , ĠH . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 D Ġ-> Ġ{ Ġld ( C , ĠL . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 E Ġ-> Ġ{ Ġld ( C , ĠHL . at Point ed ( memory )); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 0 Ġ-> Ġ{ Ġld ( D , ĠB . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 1 Ġ-> Ġ{ Ġld ( D , ĠC . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 2 Ġ-> Ġ{ Ġld ( D , ĠD . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 3 Ġ-> Ġ{ Ġld ( D , ĠE . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 4 Ġ-> Ġ{ Ġld ( D , ĠH . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 5 Ġ-> Ġ{ Ġld ( D , ĠL . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 6 Ġ-> Ġ{ Ġld ( D , ĠHL . at Point ed ( memory )); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 8 Ġ-> Ġ{ Ġld ( E , ĠB . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 9 Ġ-> Ġ{ Ġld ( E , ĠC . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 A Ġ-> Ġ{ Ġld ( E , ĠD . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 B Ġ-> Ġ{ Ġld ( E , ĠE . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 C Ġ-> Ġ{ Ġld ( E , ĠH . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 D Ġ-> Ġ{ Ġld ( E , ĠL . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 E Ġ-> Ġ{ Ġld ( E , ĠHL . at Point ed ( memory )); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 0 Ġ-> Ġ{ Ġld ( H , ĠB . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 1 Ġ-> Ġ{ Ġld ( H , ĠC . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 2 Ġ-> Ġ{ Ġld ( H , ĠD . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 3 Ġ-> Ġ{ Ġld ( H , ĠE . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 4 Ġ-> Ġ{ Ġld ( H , ĠH . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 5 Ġ-> Ġ{ Ġld ( H , ĠL . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 6 Ġ-> Ġ{ Ġld ( H , ĠHL . at Point ed ( memory )); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 8 Ġ-> Ġ{ Ġld ( L , ĠB . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 9 Ġ-> Ġ{ Ġld ( L , ĠC . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 A Ġ-> Ġ{ Ġld ( L , ĠD . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 B Ġ-> Ġ{ Ġld ( L , ĠE . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 C Ġ-> Ġ{ Ġld ( L , ĠH . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 D Ġ-> Ġ{ Ġld ( L , ĠL . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 E Ġ-> Ġ{ Ġld ( L , ĠHL . at Point ed ( memory )); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 0 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), ĠB . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 1 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), ĠC . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 2 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), ĠD . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 3 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), ĠE . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 4 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), ĠH . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 5 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), ĠL . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 6 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), Ġnext Byte ()); Ġ 1 2 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xFA Ġ-> Ġ{ Ġld ( A , Ġmemory . read ( next Address ())); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 E Ġ-> Ġ{ Ġld ( A , Ġnext Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 7 Ġ-> Ġ{ Ġld ( B , ĠA . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 F Ġ-> Ġ{ Ġld ( C , ĠA . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 7 Ġ-> Ġ{ Ġld ( D , ĠA . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 F Ġ-> Ġ{ Ġld ( E , ĠA . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 7 Ġ-> Ġ{ Ġld ( H , ĠA . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 F Ġ-> Ġ{ Ġld ( L , ĠA . getValue ()); Ġ 4 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 2 Ġ-> Ġ{ Ġld _ address ( BC . getValue (), ĠA . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 2 Ġ-> Ġ{ Ġld _ address ( DE . getValue (), ĠA . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 7 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), ĠA . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xE A Ġ-> Ġ{ Ġld _ address ( next Address (), ĠA . getValue ()); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 2 Ġ-> Ġ{ Ġld ( A , Ġmemory . read ( C . getValue (). as Unsigned 8 () Ġ+ 0 xFF 0 0 )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xE 2 Ġ-> Ġ{ Ġld _ address ( C . getValue (). as Unsigned 8 () Ġ+ Ġ 0 xFF 0 0 , ĠA . getValue ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 A Ġ-> Ġ{ Ġld ( A , ĠHL . at Point ed ( memory )); ĠHL --; Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 2 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), ĠA . getValue ()); ĠHL --; Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 A Ġ-> Ġ{ Ġld ( A , Ġat HL . getValue ()); ĠHL ++; Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 2 Ġ-> Ġ{ Ġld _ address ( HL . getValue (), ĠA . getValue ()); ĠHL ++; Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 0 Ġ-> Ġ{ Ġld ( A , Ġmemory . read ( 0 xFF 0 0 Ġ+ Ġnext Byte ())); Ġ 1 2 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xE 0 Ġ-> Ġ{ Ġld _ address ( 0 xFF 0 0 Ġ+ Ġnext Byte (), ĠA . getValue ()); Ġ 1 2 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 1 Ġ-> Ġ{ Ġld ( BC , Ġnext Address ()); Ġ 1 2 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 1 Ġ-> Ġ{ Ġld ( DE , Ġnext Address ()); Ġ 1 2 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 1 Ġ-> Ġ{ Ġld ( HL , Ġnext Address ()); Ġ 1 2 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 1 Ġ-> Ġ{ Ġld ( stack Pointer , Ġnext Address ()); Ġ 1 2 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 9 Ġ-> Ġ{ Ġld ( stack Pointer , ĠHL . getValue ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 8 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġld ( HL , Ġadd sp ( next Byte ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 8 Ġ-> Ġ{ Ġwrite 1 6 ( next Address (), Ġstack Pointer . getValue ()); Ġ 2 0 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 5 Ġ-> Ġ{ Ġpush ( AF ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 5 Ġ-> Ġ{ Ġpush ( BC ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xD 5 Ġ-> Ġ{ Ġpush ( DE ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xE 5 Ġ-> Ġ{ Ġpush ( HL ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 1 Ġ-> Ġ{ ĠAF . setValue ( pop ()); Ġ 1 2 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 1 Ġ-> Ġ{ ĠBC . setValue ( pop ()); Ġ 1 2 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xD 1 Ġ-> Ġ{ ĠDE . setValue ( pop ()); Ġ 1 2 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xE 1 Ġ-> Ġ{ ĠHL . setValue ( pop ()); Ġ 1 2 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 7 Ġ-> Ġ{ Ġadd ( A . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 0 Ġ-> Ġ{ Ġadd ( B . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 1 Ġ-> Ġ{ Ġadd ( C . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 2 Ġ-> Ġ{ Ġadd ( D . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 3 Ġ-> Ġ{ Ġadd ( E . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 4 Ġ-> Ġ{ Ġadd ( H . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 5 Ġ-> Ġ{ Ġadd ( L . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 6 Ġ-> Ġ{ Ġadd ( HL . at Point ed ( memory )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 6 Ġ-> Ġ{ Ġadd ( next Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 F Ġ-> Ġ{ Ġadc ( A . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 8 Ġ-> Ġ{ Ġadc ( B . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 9 Ġ-> Ġ{ Ġadc ( C . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 A Ġ-> Ġ{ Ġadc ( D . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 C Ġ-> Ġ{ Ġadc ( H . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 B Ġ-> Ġ{ Ġadc ( E . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 D Ġ-> Ġ{ Ġadc ( L . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 E Ġ-> Ġ{ Ġadc ( HL . at Point ed ( memory )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x CE Ġ-> Ġ{ Ġadc ( next Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 7 Ġ-> Ġ{ Ġsub ( A . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 0 Ġ-> Ġ{ Ġsub ( B . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 1 Ġ-> Ġ{ Ġsub ( C . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 2 Ġ-> Ġ{ Ġsub ( D . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 3 Ġ-> Ġ{ Ġsub ( E . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 4 Ġ-> Ġ{ Ġsub ( H . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 5 Ġ-> Ġ{ Ġsub ( L . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 6 Ġ-> Ġ{ Ġsub ( HL . at Point ed ( memory )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xD 6 Ġ-> Ġ{ Ġsub ( next Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 F Ġ-> Ġ{ Ġs bc ( A . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 8 Ġ-> Ġ{ Ġs bc ( B . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 9 Ġ-> Ġ{ Ġs bc ( C . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 A Ġ-> Ġ{ Ġs bc ( D . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 B Ġ-> Ġ{ Ġs bc ( E . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 C Ġ-> Ġ{ Ġs bc ( H . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 D Ġ-> Ġ{ Ġs bc ( L . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 E Ġ-> Ġ{ Ġs bc ( HL . at Point ed ( memory )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x DE Ġ-> Ġ{ Ġs bc ( next Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 7 Ġ-> Ġ{ Ġand ( A . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 0 Ġ-> Ġ{ Ġand ( B . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 1 Ġ-> Ġ{ Ġand ( C . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 2 Ġ-> Ġ{ Ġand ( D . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 3 Ġ-> Ġ{ Ġand ( E . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 4 Ġ-> Ġ{ Ġand ( H . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 5 Ġ-> Ġ{ Ġand ( L . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 6 Ġ-> Ġ{ Ġand ( HL . at Point ed ( memory )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xE 6 Ġ-> Ġ{ Ġand ( next Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 7 Ġ-> Ġ{ Ġor ( A . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 0 Ġ-> Ġ{ Ġor ( B . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 1 Ġ-> Ġ{ Ġor ( C . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 2 Ġ-> Ġ{ Ġor ( D . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 3 Ġ-> Ġ{ Ġor ( E . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 4 Ġ-> Ġ{ Ġor ( H . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 5 Ġ-> Ġ{ Ġor ( L . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 6 Ġ-> Ġ{ Ġor ( HL . at Point ed ( memory )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 6 Ġ-> Ġ{ Ġor ( next Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x AF Ġ-> Ġ{ Ġxor ( A . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 8 Ġ-> Ġ{ Ġxor ( B . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 9 Ġ-> Ġ{ Ġxor ( C . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xAA Ġ-> Ġ{ Ġxor ( D . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x AB Ġ-> Ġ{ Ġxor ( E . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x AC Ġ-> Ġ{ Ġxor ( H . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x AD Ġ-> Ġ{ Ġxor ( L . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x AE Ġ-> Ġ{ Ġxor ( HL . at Point ed ( memory )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xEE Ġ-> Ġ{ Ġxor ( next Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB F Ġ-> Ġ{ Ġcp ( A . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 8 Ġ-> Ġ{ Ġcp ( B . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xB 9 Ġ-> Ġ{ Ġcp ( C . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xBA Ġ-> Ġ{ Ġcp ( D . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xBB Ġ-> Ġ{ Ġcp ( E . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xBC Ġ-> Ġ{ Ġcp ( H . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x BD Ġ-> Ġ{ Ġcp ( L . getValue ()); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x BE Ġ-> Ġ{ Ġcp ( HL . at Point ed ( memory )); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xFE Ġ-> Ġ{ Ġcp ( next Byte ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 C Ġ-> Ġ{ Ġinc ( A ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 4 Ġ-> Ġ{ Ġinc ( B ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 C Ġ-> Ġ{ Ġinc ( C ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 4 Ġ-> Ġ{ Ġinc ( D ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 C Ġ-> Ġ{ Ġinc ( E ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 4 Ġ-> Ġ{ Ġinc ( H ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 C Ġ-> Ġ{ Ġinc ( L ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 4 Ġ-> Ġ{ Ġinc ( at HL ); Ġ 1 2 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 D Ġ-> Ġ{ Ġdec ( A ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 5 Ġ-> Ġ{ Ġdec ( B ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 D Ġ-> Ġ{ Ġdec ( C ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 5 Ġ-> Ġ{ Ġdec ( D ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 D Ġ-> Ġ{ Ġdec ( E ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 5 Ġ-> Ġ{ Ġdec ( H ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 D Ġ-> Ġ{ Ġdec ( L ); Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 5 Ġ-> Ġ{ Ġdec ( at HL ); Ġ 1 2 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 9 Ġ-> Ġ{ ĠaddTo Register ( HL , ĠBC . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 9 Ġ-> Ġ{ ĠaddTo Register ( HL , ĠDE . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 9 Ġ-> Ġ{ ĠaddTo Register ( HL , ĠHL . getValue ()); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 9 Ġ-> Ġ{ ĠaddTo Register ( HL , Ġstack Pointer . getValue ()); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xE 8 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Pointer . setValue ( add sp ( next Byte ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 3 Ġ-> Ġ{ Ġinc 1 6 ( BC ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 3 Ġ-> Ġ{ Ġinc 1 6 ( DE ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 3 Ġ-> Ġ{ Ġinc 1 6 ( HL ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 3 Ġ-> Ġ{ Ġinc 1 6 ( stack Pointer ); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 B Ġ-> Ġ{ Ġdec 1 6 ( BC ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 B Ġ-> Ġ{ Ġdec 1 6 ( DE ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 B Ġ-> Ġ{ Ġdec 1 6 ( HL ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 B Ġ-> Ġ{ Ġdec 1 6 ( stack Pointer ); Ġ 8 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x CB Ġ-> Ġexecute C BO p code ( next Byte ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 7 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠD AA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadapted Ġfrom Ġhttps :// github . com / kot cr ab / xg bc / blob / 2 5 d 2 6 2 3 acf 0 f 1 e 8 7 cb 7 a 2 db 6 1 c 2 6 af 4 d 2 d 7 4 f 7 3 5 / src / main / kotlin / com / kot cr ab / xg bc / cpu / OpCodes Processor . kt # L 3 1 8 - L 3 4 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreg A Ġ= ĠA . getValue () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! flag N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flag H Ġ|| Ġ( reg A Ġand Ġ 0 xF ) Ġ> Ġ 9 ) Ġreg A Ġ+= Ġ 0 x 0 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flag C Ġ|| Ġreg A Ġ> Ġ 0 x 9 F ) Ġreg A Ġ+= Ġ 0 x 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flag H ) Ġreg A Ġ= Ġ( reg A Ġ- Ġ 6 ) Ġand Ġ 0 xFF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flag C ) Ġreg A Ġ-= Ġ 0 x 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( reg A Ġand Ġ 0 x 1 0 0 ) Ġ== Ġ 0 x 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag C Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreg A Ġ= Ġreg A Ġand Ġ 0 xFF ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reg A Ġ== Ġ 0 ) Ġflag Z Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA . setValue ( reg A ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 F Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag H Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag N Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA . setValue ( A . getValue (). inv () Ġand Ġ 0 xFF ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 F Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag C Ġ= Ġ! flag C ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 7 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag C Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 Ġ-> Ġ 4 Ġ// ĠN OP ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 6 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhal ted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! interrupt Manager . interrupt s Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! car tr idge . is For Color GB ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop PC Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Part Ġ= Ġnext Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( next Part ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( car tr idge . is For Color GB Ġ&& Ġmemory . speed Register . should Prepare Switch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemory . speed Register . setValue ( 0 x 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemory . current Speed Factor Ġ= Ġ- memory . current Speed Factor + 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstopped Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Invalid Ġopcode Ġ 0 x 1 0 Ġ${ Integer . to HexString ( next Part )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Interrupt Change Ġ= Ġtrue Ġ// Ġneed Ġto Ġwait Ġfor Ġnext Ġinstruction Ġto Ġbe Ġexecuted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Interrupt State Ġ= Ġfalse Ġ// Ġno Ġlonger Ġaccept ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF B Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Interrupt Change Ġ= Ġtrue Ġ// Ġneed Ġto Ġwait Ġfor Ġnext Ġinstruction Ġto Ġbe Ġexecuted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Interrupt State Ġ= Ġtrue Ġ// Ġaccept ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 7 Ġ-> Ġ{ Ġr lc ( A ); Ġflag Z Ġ= Ġfalse ; Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 7 Ġ-> Ġ{ Ġrl ( A ); Ġflag Z Ġ= Ġfalse ; Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 F Ġ-> Ġ{ Ġr rc ( A ); Ġflag Z Ġ= Ġfalse ; Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 F Ġ-> Ġ{ Ġrr ( A ); Ġflag Z Ġ= Ġfalse ; Ġ 4 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 3 Ġ-> Ġ{ Ġjp ( next Address ()); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Address () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! flag Z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjp ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x CA Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Address () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag Z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjp ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xD 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Address () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! flag C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjp ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x DA Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Address () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjp ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xE 9 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjp ( HL . getValue ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 8 Ġ-> Ġ{ Ġjp Relative ( next Byte ()); Ġ 1 2 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! flag Z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjp Relative ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 8 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag Z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjp Relative ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! flag C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjp Relative ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 8 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjp Relative ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x CD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall ( next Address ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Address () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! flag Z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xCC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Address () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag Z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xD 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Address () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! flag C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xDC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġnext Address () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 7 Ġ-> Ġ{ Ġrst ( 0 x 0 0 ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x CF Ġ-> Ġ{ Ġrst ( 0 x 0 8 ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xD 7 Ġ-> Ġ{ Ġrst ( 0 x 1 0 ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x DF Ġ-> Ġ{ Ġrst ( 0 x 1 8 ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xE 7 Ġ-> Ġ{ Ġrst ( 0 x 2 0 ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xEF Ġ-> Ġ{ Ġrst ( 0 x 2 8 ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 7 Ġ-> Ġ{ Ġrst ( 0 x 3 0 ); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xFF Ġ-> Ġ{ Ġrst ( 0 x 3 8 ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 9 Ġ-> Ġ{ Ġret (); Ġ 1 6 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! flag Z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xC 8 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag Z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xD 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! flag C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xD 8 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xD 9 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Interrupt Change Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Interrupt State Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Invalid Ġopcode Ġ${ Integer . to HexString ( opcode )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite 1 6 ( address : ĠInt , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmemory . write ( address , Ġvalue . as Unsigned 8 ()) ĊĠĠĠĠĠĠĠ Ġmemory . write ( address + 1 , Ġ( value Ġshr Ġ 8 ). as Unsigned 8 ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd sp ( value : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= Ġstack Pointer . getValue () ĊĠĠĠĠĠĠĠ Ġval Ġarg Ġ= Ġvalue . as Signed 8 () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsp Ġ+ Ġarg ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġ(( sp Ġand Ġ 0 xFF ) Ġ+ Ġ( arg Ġand Ġ 0 xFF )) Ġand Ġ 0 x 1 0 0 Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġ(( sp Ġand Ġ 0 x 0 F ) Ġ+ Ġ( arg Ġand Ġ 0 x 0 F )) Ġand Ġ 0 x 1 0 Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . as Address () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġs bc ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcarry Ġ= Ġif ( flag C ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠA . getValue () Ġ- Ġvalue Ġ- Ġcarry ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġres . as Unsigned 8 () Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġres Ġ< Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġ( A . getValue () Ġxor Ġvalue Ġxor Ġres ) Ġand Ġ( 1 Ġshl Ġ 4 ) Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ ĠA . setValue ( res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadc ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcarry Ġ= Ġif ( flag C ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġ( value Ġ+ ĠA . getValue () Ġ+ Ġcarry ). as Unsigned 8 () Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġ( A . getValue () Ġand Ġ 0 x 0 F ) Ġ+ Ġ( value Ġand Ġ 0 x 0 F ) Ġ+ Ġcarry Ġ> Ġ 0 x 0 F ĊĠĠĠĠĠĠĠ Ġflag C Ġ= ĠA . getValue () Ġ+ Ġvalue Ġ+ Ġcarry Ġ> Ġ 0 xFF ĊĠĠĠĠĠĠĠ ĠA . setValue ( A . getValue () Ġ+ Ġvalue Ġ+ Ġcarry ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġret () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogram Counter . setValue ( pop ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrst ( address : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcall ( address ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcall ( address : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpush ( program Counter ) ĊĊĠĠĠĠĠĠĠ Ġjp ( address ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġjp Relative ( unsigned Offset : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġunsigned Offset . as Signed 8 () ĊĠĠĠĠĠĠĠ Ġjp ( program Counter . getValue () Ġ+ Ġoffset ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġjp ( address : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprogram Counter . setValue ( address ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrr ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġval Ġnew C Ġ= Ġvalue Ġand Ġ 0 x 1 Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ(( value Ġshr Ġ 1 ) Ġand Ġ 0 xFF ) Ġor Ġ( if ( flag C ) Ġ( 1 Ġshl Ġ 7 ) Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġnew C ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġr rc ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġval Ġnew C Ġ= Ġvalue Ġand Ġ 0 x 1 Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ(( value Ġshr Ġ 1 ) Ġand Ġ 0 xFF ) Ġor Ġ( if ( new C ) Ġ( 1 Ġshl Ġ 7 ) Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġnew C ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrl ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġval Ġnew C Ġ= Ġvalue Ġand Ġ( 1 Ġshl Ġ 7 ) Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ(( value Ġshl Ġ 1 ) Ġand Ġ 0 xFF ) Ġor Ġ( if ( flag C ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġnew C ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġr lc ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġval Ġnew C Ġ= Ġvalue Ġand Ġ( 1 Ġshl Ġ 7 ) Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ(( value Ġshl Ġ 1 ) Ġand Ġ 0 xFF ) Ġor Ġ( if ( new C ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġnew C ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute C BO p code ( opcode : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( opcode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 7 Ġ-> Ġ{ Ġswap ( A ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 0 Ġ-> Ġ{ Ġswap ( B ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 1 Ġ-> Ġ{ Ġswap ( C ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 2 Ġ-> Ġ{ Ġswap ( D ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 3 Ġ-> Ġ{ Ġswap ( E ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 4 Ġ-> Ġ{ Ġswap ( H ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 5 Ġ-> Ġ{ Ġswap ( L ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 6 Ġ-> Ġ{ Ġswap ( at HL ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 7 Ġ-> Ġ{ Ġr lc ( A ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 Ġ-> Ġ{ Ġr lc ( B ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 1 Ġ-> Ġ{ Ġr lc ( C ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 2 Ġ-> Ġ{ Ġr lc ( D ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 3 Ġ-> Ġ{ Ġr lc ( E ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 4 Ġ-> Ġ{ Ġr lc ( H ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 5 Ġ-> Ġ{ Ġr lc ( L ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 6 Ġ-> Ġ{ Ġr lc ( at HL ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 7 Ġ-> Ġ{ Ġrl ( A ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 0 Ġ-> Ġ{ Ġrl ( B ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 1 Ġ-> Ġ{ Ġrl ( C ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 2 Ġ-> Ġ{ Ġrl ( D ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 3 Ġ-> Ġ{ Ġrl ( E ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 4 Ġ-> Ġ{ Ġrl ( H ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 5 Ġ-> Ġ{ Ġrl ( L ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 6 Ġ-> Ġ{ Ġrl ( at HL ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 F Ġ-> Ġ{ Ġr rc ( A ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 8 Ġ-> Ġ{ Ġr rc ( B ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 9 Ġ-> Ġ{ Ġr rc ( C ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 A Ġ-> Ġ{ Ġr rc ( D ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 B Ġ-> Ġ{ Ġr rc ( E ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 C Ġ-> Ġ{ Ġr rc ( H ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 D Ġ-> Ġ{ Ġr rc ( L ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 E Ġ-> Ġ{ Ġr rc ( at HL ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 F Ġ-> Ġ{ Ġrr ( A ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 8 Ġ-> Ġ{ Ġrr ( B ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 9 Ġ-> Ġ{ Ġrr ( C ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 A Ġ-> Ġ{ Ġrr ( D ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 B Ġ-> Ġ{ Ġrr ( E ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 C Ġ-> Ġ{ Ġrr ( H ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 D Ġ-> Ġ{ Ġrr ( L ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 E Ġ-> Ġ{ Ġrr ( at HL ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 7 Ġ-> Ġ{ Ġs la ( A ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 0 Ġ-> Ġ{ Ġs la ( B ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 1 Ġ-> Ġ{ Ġs la ( C ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 2 Ġ-> Ġ{ Ġs la ( D ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 3 Ġ-> Ġ{ Ġs la ( E ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 4 Ġ-> Ġ{ Ġs la ( H ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 5 Ġ-> Ġ{ Ġs la ( L ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 6 Ġ-> Ġ{ Ġs la ( at HL ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 F Ġ-> Ġ{ Ġs ra ( A ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 8 Ġ-> Ġ{ Ġs ra ( B ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 9 Ġ-> Ġ{ Ġs ra ( C ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 A Ġ-> Ġ{ Ġs ra ( D ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 B Ġ-> Ġ{ Ġs ra ( E ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 C Ġ-> Ġ{ Ġs ra ( H ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 D Ġ-> Ġ{ Ġs ra ( L ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 E Ġ-> Ġ{ Ġs ra ( at HL ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 F Ġ-> Ġ{ Ġs rl ( A ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 8 Ġ-> Ġ{ Ġs rl ( B ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 9 Ġ-> Ġ{ Ġs rl ( C ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 A Ġ-> Ġ{ Ġs rl ( D ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 B Ġ-> Ġ{ Ġs rl ( E ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 C Ġ-> Ġ{ Ġs rl ( H ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 D Ġ-> Ġ{ Ġs rl ( L ); Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 E Ġ-> Ġ{ Ġs rl ( at HL ); Ġ 1 6 } ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 x 4 0 .. 0 x 7 F Ġ-> Ġbit ( opcode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 xC 0 .. 0 xFF Ġ-> Ġset ( opcode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 x 8 0 .. 0 xB F Ġ-> Ġres ( opcode ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Invalid ĠCB Ġopcode Ġ${ Integer . to HexString ( opcode )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġregister List Ġ= ĠlistOf ( B , ĠC , ĠD , ĠE , ĠH , ĠL , Ġat HL , ĠA ) ĊĊĠĠĠ Ġprivate Ġfun Ġres ( opcode : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregister Ġ= Ġregister List [( opcode - 0 x 8 0 ) Ġ% Ġregister List . size ] ĊĠĠĠĠĠĠĠ Ġval Ġbit Ġ= Ġ( opcode - 0 x 8 0 ) Ġ/ Ġregister List . size ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġvalue Ġand Ġ( 1 Ġshl Ġbit ). inv () ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( register Ġ== Ġat HL ) Ġ 1 6 Ġelse Ġ 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset ( opcode : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregister Ġ= Ġregister List [( opcode - 0 xC 0 ) Ġ% Ġregister List . size ] ĊĠĠĠĠĠĠĠ Ġval Ġbit Ġ= Ġ( opcode - 0 xC 0 ) Ġ/ Ġregister List . size ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġvalue Ġor Ġ( 1 Ġshl Ġbit ) ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( register Ġ== Ġat HL ) Ġ 1 6 Ġelse Ġ 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbit ( opcode : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregister Ġ= Ġregister List [( opcode - 0 x 4 0 ) Ġ% Ġregister List . size ] ĊĠĠĠĠĠĠĠ Ġval Ġbit Ġ= Ġ( opcode - 0 x 4 0 ) Ġ/ Ġregister List . size ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġvalue Ġand Ġ( 1 Ġshl Ġbit ) Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( register Ġ== Ġat HL ) Ġ 1 2 Ġelse Ġ 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġs rl ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġvalue Ġand Ġ 0 x 1 Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ(( value Ġshr Ġ 1 ) Ġand Ġ 0 xFF ) ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġs ra ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġval Ġm sb Ġ= Ġvalue Ġand Ġ 0 b 1 0 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġvalue Ġand Ġ 0 x 1 Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ(( value Ġshr Ġ 1 ) Ġand Ġ 0 xFF ) Ġor Ġm sb ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġs la ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġvalue Ġand Ġ 0 b 1 0 0 0 0 0 0 0 Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ( value Ġshl Ġ 1 ) Ġand Ġ 0 xFF ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswap ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġvalue Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġlower Ġ= Ġvalue Ġand Ġ 0 xF ĊĠĠĠĠĠĠĠ Ġval Ġupper Ġ= Ġ( value Ġshr Ġ 4 ) Ġand Ġ 0 xF ĊĠĠĠĠĠĠĠ Ġval ĠnewValue Ġ= Ġupper Ġor Ġ( lower Ġshl Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġregister . setValue ( newValue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdec 1 6 ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġregister . getValue ()- 1 ĊĠĠĠĠĠĠĠ Ġregister . setValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinc 1 6 ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ( register . getValue (). as Unsigned 1 6 ()+ 1 ). as Unsigned 1 6 () ĊĠĠĠĠĠĠĠ Ġregister . setValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠaddTo Register ( register : ĠSingle Value Memory Component , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġregister . getValue () Ġ+ Ġvalue ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġresult Ġ> Ġ 0 xFFFF ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġ(( register . getValue () Ġand Ġ 0 x 0 FFF ) Ġ+ Ġ( value Ġand Ġ 0 x 0 FFF )) Ġ> Ġ 0 x 0 FFF ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result Ġand Ġ 0 xFFFF ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdec ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠoldValue Ġ= Ġregister . getValue () ĊĠĠĠĠĠĠĠ Ġregister . setValue ( register . getValue ()- 1 ) ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġregister . getValue () Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag H Ġ= ĠoldValue Ġand Ġ 0 x 0 F Ġ== Ġ 0 x 0 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinc ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ( register . getValue () Ġ+ Ġ 1 ). as Unsigned 8 () ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġregister . getValue () Ġand Ġ 0 xF Ġ== Ġ 0 x 0 F ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġ( result Ġand Ġ 0 xFF ) Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġregister . setValue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġxor ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ(( A . getValue (). as Unsigned 8 ()) Ġxor Ġvalue . as Unsigned 8 ()). as Unsigned 8 () ĊĠĠĠĠĠĠĠ ĠA . setValue ( result ) ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġor ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ(( A . getValue (). as Unsigned 8 ()) Ġor Ġvalue . as Unsigned 8 ()). as Unsigned 8 () ĊĠĠĠĠĠĠĠ ĠA . setValue ( result ) ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= ĠA . getValue () Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġand ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠA . getValue (). as Unsigned 8 () Ġand Ġvalue . as Unsigned 8 () ĊĠĠĠĠĠĠĠ ĠA . setValue ( result ) ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsub ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠA . getValue () Ġ- Ġvalue ĊĠĠĠĠĠĠĠ Ġcp ( value ) ĊĠĠĠĠĠĠĠ ĠA . setValue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcp ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= ĠA . getValue () Ġ== Ġvalue ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġ( A . getValue () Ġand Ġ 0 x 0 F ) Ġ< Ġ( value Ġand Ġ 0 x 0 F ) ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġ( A . getValue () Ġand Ġ 0 xFF ) Ġ< Ġ( value Ġand Ġ 0 xFF ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠA . getValue () Ġ+ Ġvalue ĊĠĠĠĠĠĠĠ Ġflag Z Ġ= Ġ( result Ġand Ġ 0 xFF ) Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġflag H Ġ= Ġ(( A . getValue () Ġand Ġ 0 x 0 F )+( value Ġand Ġ 0 x 0 F )) Ġand Ġ 0 x 1 0 Ġ== Ġ 0 x 1 0 ĊĠĠĠĠĠĠĠ Ġflag C Ġ= Ġresult Ġ> Ġ 0 xFF ĊĠĠĠĠĠĠĠ Ġflag N Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠA . setValue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpop (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhigh Ġ= Ġmemory . read ( stack Pointer . getValue ()+ 1 ). as Unsigned 8 () ĊĠĠĠĠĠĠĠ Ġval Ġlow Ġ= Ġmemory . read ( stack Pointer . getValue ()). as Unsigned 8 () ĊĠĠĠĠĠĠĠ Ġstack Pointer ++ ĊĠĠĠĠĠĠĠ Ġstack Pointer ++ ĊĠĠĠĠĠĠĠ Ġreturn Ġ(( high Ġshl Ġ 8 ) Ġor Ġlow ). as Unsigned 1 6 () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpush ( register : ĠSingle Value Memory Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstack Pointer -- ĊĠĠĠĠĠĠĠ Ġstack Pointer -- ĊĠĠĠĠĠĠ Ġ/* Ġmemory . write ( stack Pointer . getValue (), Ġregister . getValue (). as Unsigned 8 ()) ĊĠĠĠĠĠĠĠ Ġmemory . write ( stack Pointer . getValue ()+ 1 , Ġ( register . getValue () Ġshr Ġ 8 ). as Unsigned 8 ()) */ ĊĠĠĠĠĠĠĠ Ġwrite 1 6 ( stack Pointer . getValue (), Ġregister . getValue ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġld _ address ( address : ĠInt , Ġvalue : ĠInt ) Ġ= Ġmemory . write ( address , Ġvalue ) ĊĊĠĠĠ Ġprivate Ġfun Ġld ( register : ĠSingle Value Memory Component , Ġvalue : ĠInt ) Ġ= Ġregister . setValue ( value ) ĊĊĠĠĠ Ġfun Ġnext Address (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlow Ġ= Ġnext Byte (). as Unsigned 8 () ĊĠĠĠĠĠĠĠ Ġval Ġhigh Ġ= Ġnext Byte (). as Unsigned 8 () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ(( high Ġshl Ġ 8 ) Ġor Ġlow ). as Address () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnext Byte (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpc Ġ= Ġprogram Counter . getValue () ĊĠĠĠĠĠĠĠ Ġif ( stop PC ) Ġ{ Ġ// ĠHAL T Ġcauses Ġthe Ġnext Ġinstruction Ġto Ġbe Ġrepeated Ġon ĠD MG / S GB ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop PC Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Counter ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmemory . read ( pc ). as Unsigned 8 () ĊĠĠĠ Ġ} Ċ }