LordXido commited on
Commit
77051f2
·
verified ·
1 Parent(s): 9eaaa89

Create codexbyte_vm.py

Browse files
Files changed (1) hide show
  1. codexbyte_vm.py +74 -0
codexbyte_vm.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib
2
+ import time
3
+
4
+ class CodexByteVM:
5
+ def __init__(self):
6
+ self.reg = [0] * 8
7
+ self.mem = {}
8
+ self.pc = 0
9
+ self.flags = {"Z": False}
10
+ self.ledger = []
11
+
12
+ def _hash(self, v):
13
+ return hashlib.sha256(str(v).encode()).hexdigest()
14
+
15
+ def step(self, prog):
16
+ op = prog[self.pc]
17
+ self.pc += 1
18
+
19
+ if op == 0x00: # HALT
20
+ return False
21
+
22
+ elif op == 0x01: # LOAD_IMM r v
23
+ r, v = prog[self.pc], prog[self.pc + 1]
24
+ self.pc += 2
25
+ self.reg[r] = v
26
+
27
+ elif op == 0x02: # LOAD_MEM r a
28
+ r, a = prog[self.pc], prog[self.pc + 1]
29
+ self.pc += 2
30
+ self.reg[r] = self.mem.get(a, 0)
31
+
32
+ elif op == 0x03: # STORE r a
33
+ r, a = prog[self.pc], prog[self.pc + 1]
34
+ self.pc += 2
35
+ self.mem[a] = self.reg[r]
36
+
37
+ elif op == 0x04: # ADD r1 r2
38
+ r1, r2 = prog[self.pc], prog[self.pc + 1]
39
+ self.pc += 2
40
+ self.reg[r1] += self.reg[r2]
41
+
42
+ elif op == 0x08: # CMP r1 r2
43
+ r1, r2 = prog[self.pc], prog[self.pc + 1]
44
+ self.pc += 2
45
+ self.flags["Z"] = (self.reg[r1] == self.reg[r2])
46
+
47
+ elif op == 0x0A: # JZ addr
48
+ addr = prog[self.pc]
49
+ self.pc += 1
50
+ if self.flags["Z"]:
51
+ self.pc = addr
52
+
53
+ elif op == 0x0C: # HASH r
54
+ r = prog[self.pc]
55
+ self.pc += 1
56
+ self.reg[r] = self._hash(self.reg[r])
57
+
58
+ elif op == 0x0F: # COMMIT
59
+ state = (tuple(self.reg), dict(self.mem))
60
+ self.ledger.append(self._hash(state))
61
+
62
+ elif op == 0x11: # EMIT r
63
+ r = prog[self.pc]
64
+ self.pc += 1
65
+ self.mem["LAST_PROOF"] = self.reg[r]
66
+
67
+ return True
68
+
69
+ def run(self, prog):
70
+ self.pc = 0
71
+ self.ledger.clear()
72
+ while self.step(prog):
73
+ pass
74
+ return self.ledger