diff --git a/src/cpu.mpy b/src/cpu.mpy index 85d8cf4..c8dc73d 100644 --- a/src/cpu.mpy +++ b/src/cpu.mpy @@ -1,3 +1,5 @@ +import sys + class CPU: def __init__(self): self.running = False @@ -9,41 +11,82 @@ class CPU: def load_memory(self, bytes): self.memory = bytes + bytearray(256 - len(bytes)) - print(self.memory) + print('mem 254', self.memory[254]) + # print(self.memory) + + def start(self): + self.running = True def step(self): if self.IP >= 256: self.IP = 0 - print(self.IP) + print("IP:", self.IP) self.instruction['opcode'] = self.memory[self.IP] self.IP = self.IP+1 self.instruction['operand'] = self.memory[self.IP] self.IP = self.IP+1 - print(self.instruction) - - nums2mnems = { - 'hlt': '00', - 'nop': '01', - 'add_lit': '04' - } - - def hlt(self): - self.running = false + print("instr:", self.instruction['opcode'], self.instruction['operand']) + print("mnem:", self.nums2mnems[self.instruction['opcode']]) + self.nums2mnems[self.instruction['opcode']](self, self.instruction['operand']) + print("acc:", self.acc) + print("running:", self.running) + print() + if not self.running: + sys.exit() - def nop(self): + def hlt(self, operand): + self.running = False + + def nop(self, operand): pass - def add_lit(num): - self.acc = self.acc + num + def add_lit(self, operand): + self.acc = self.acc + operand + + def add_mem(self, operand): + self.acc = self.acc + self.memory[operand] + + def jmp_lit(self, operand): + self.IP = operand + + nums2mnems = { + 0: hlt, + 1: nop, + 2: 'lda_lit', + 3: 'sta_lit', + 4: add_lit, + 5: 'sub_lit', + 6: jmp_lit, + 7: 'ske', + 8: 'skz', + 9: 'skn', + 10: 'skc', + 11: 'cst', + 12: 'ccl', + 16: 'hlt', + 17: 'nop', + 18: 'lda_mem', + 19: 'sta_mem', + 20: add_mem, + 21: 'sub_mem', + 22: 'jmp_mem', + 23: 'ske', + 24: 'skz', + 25: 'skn', + 26: 'skc', + 27: 'cst', + 28: 'ccl', + } cpu = CPU() -print(cpu) -print(cpu.running) prog = '04 01 14 01 00 00' -b = bytes.fromhex(prog) -cpu.load_memory(b) +program_bytes = bytes.fromhex(prog) +# Add jmp at addr 254: +program_with_jump = program_bytes + bytearray(254 - len(program_bytes)) + bytes.fromhex('06 00') +cpu.load_memory(program_with_jump) +cpu.start() cpu.step() cpu.step() cpu.step()