// Educational Virtual Machine // by ethical.blue Magazine internal class Program { static void Main(string[] args) { List program = []; program.Add((byte)Opcode.mov); program.Add((byte)Register.r1); program.AddRange(BitConverter.GetBytes(0xFF0000FF)); program.Add((byte)Opcode.mov); program.Add((byte)Register.r2); program.AddRange(BitConverter.GetBytes(0xFF00FF00)); program.Add((byte)Opcode.xor); program.Add((byte)Register.r1); program.Add((byte)Register.r2); program.Add((byte)Opcode.halt); VM vm = new(); vm.Run([.. program]); } enum Opcode : byte { mov = 0x01, xor = 0x02, halt = 0xFF } enum Register : byte { r1 = 0x00, r2 = 0x01 } internal class VM { int[] Registers = [0, 0]; int IP = 0; public void Run(byte[] bytecode) { IP = 0; bool running = true; while(IP < bytecode.Length & running) { var opcode = (Opcode)bytecode[IP++]; switch(opcode) { case Opcode.mov: Mov(bytecode); break; case Opcode.xor: Xor(bytecode); break; case Opcode.halt: running = false; break; } } } void Mov(byte[] bytecode) { byte i = bytecode[IP++]; Registers[i] = BitConverter.ToInt32(bytecode, IP); IP += sizeof(int); } void Xor(byte[] bytecode) { Registers[bytecode[IP++]] ^= Registers[bytecode[IP++]]; } } }