C#でCPUエミュレーターを作成しようとしています。マシンのオブジェクトは次のようになります。
class Machine
{
short a,b,c,d; //these are registers.
short[] ram=new short[0x10000]; //RAM organised as 65536 16-bit words
public void tick() { ... } //one instruction is processed
}
命令を実行すると、命令の結果が何に格納されるかを決定するswitchステートメントがあります(レジスタまたはRAMのワードのいずれか)。
私はこれができるようになりたいです:
short* resultContainer;
if (destination == register)
{
switch (resultSymbol) //this is really an opcode, made a char for clarity
{
case 'a': resultContainer=&a;
case 'b': resultContainer=&b;
//etc
}
}
else
{
//must be a place in RAM
resultContainer = &RAM[location];
}
次に、命令を実行すると、次のように結果を保存できます。
*resultContainer = result;
私はC#を混乱させることなくこれを行う方法を理解しようとしてきました。
どうすればこれを使用してunsafe{}
、fixed(){ }
そしておそらく私が気付いていない他のことを達成できますか?