Simple emulator for an 8 bit CPU. There a single RAM chip where the program gets loaded into. This allows for self-modifying scripts, which can be used for moving data between registers or adding two registers together (see example below). There are 8 GPR's, which are 0 indexed. ISA: MOV rN, imm8 ADD rN, imm8 ST rN, addr8 L rN, addr8 STR rN, offset8 LR rN, offset8 J addr8 JR offset8 HLT STR is Store Relative and LR is Load Relative. These are the exact same as ST and L but they are relative to the current PC. Same goes for JR. Sample program to add the values 3 and 7 together and store the result in r0 MOV r0, 3; ADD r0, 7; HLT Sample program to add the registers r0 and r1: MOV r0, 39; MOV r1, 6; STR r1, 2; ADD r0, 0; HLT Wipe the rest of RAM: MOV r0, 15; STR r0, 2; ST r1, 0; ADD r0, 1; J 3 It is possible to do conditional branches with something like this: STR r0, 2; ADD r0, 0; STR r0, 1; JR 0; J _funcB; J _funcA where r0 contains either "1" or "0" (true/false) and _funcA and _funcB are just two predefined addresses that you have chosen. This would translate roughly to: if (r0 == 0) goto _funcB; else goto _funcA; The ability to branch makes this CPU ALMOST Turing complete, although it isn't because it doesn't have infinite memory, but if you care about that, all computers aren't Turing complete because they don't have infinite memory either.