package Ġdev . the code war ri or . kotlin cpu . computer . cpu Ċ Ċ import Ġdev . the code war ri or . kotlin cpu . common . DataSize Ċ import Ġdev . the code war ri or . kotlin cpu . common . util . get U Byte Ċ import Ġdev . the code war ri or . kotlin cpu . common . util . get UInt Ċ import Ġdev . the code war ri or . kotlin cpu . common . util . get U Short Ċ import Ġdev . the code war ri or . kotlin cpu . common . util . put U Byte Ċ import Ġdev . the code war ri or . kotlin cpu . common . util . put UInt Ċ import Ġdev . the code war ri or . kotlin cpu . common . util . put U Short Ċ import Ġjava . nio . ByteBuffer Ċ Ċ class ĠRAM ( val Ġcomputer : ĠComputer , Ġval Ġsize : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġbuffer : ĠByteBuffer Ġ= ĠByteBuffer . allocate ( size ) ĊĊĠĠĠ Ġoperator Ġfun Ġget ( address : ĠUInt ): ĠUInt Ġ= Ġthis [ address , ĠData Size . WORD ] ĊĠĠĠ Ġoperator Ġfun Ġset ( address : ĠUInt , Ġvalue : ĠUInt ) Ġ{ Ġthis [ address , ĠData Size . WORD ] Ġ= Ġvalue Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( address : ĠUInt , Ġdata Size : ĠData Size ): ĠUInt Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Address ( address , Ġdata Size ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( data Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Size . BYTE Ġ-> Ġbuffer . get U Byte ( address . toInt ()). to UInt () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Size . HALF Ġ-> Ġbuffer . get U Short ( address . toInt ()). to UInt () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Size . WORD Ġ-> Ġbuffer . get UInt ( address . toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( address : ĠUInt , Ġdata Size : ĠData Size , Ġvalue : ĠUInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Address ( address , Ġdata Size ) ĊĊĠĠĠĠĠĠĠ Ġwhen ( data Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Size . BYTE Ġ-> Ġbuffer . put U Byte ( address . toInt (), Ġvalue . to U Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Size . HALF Ġ-> Ġbuffer . put U Short ( address . toInt (), Ġvalue . to U Short ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Size . WORD Ġ-> Ġbuffer . put UInt ( address . toInt (), Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Address ( address : ĠUInt , Ġdata Size : ĠData Size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( data Size . bytes Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( address Ġ>= Ġsize . to UInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" 0 x ${ address . toString ( 1 6 )} ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġaddress Ġuntil Ġ( address Ġ+ Ġdata Size . bytes . to UInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( range . last Ġ>= Ġsize . to UInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" 0 x ${ range . first . toString ( 1 6 )} Ġ- Ġ 0 x ${ range . last . toString ( 1 6 )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }