extends ColorRect var memory = [] var registers = [] var opcode = 0 var index = 0 var pc = 0 var gfx = [] var delay = 0 var soundTimer = 0 var stack = [] var sp = 0 var keys = [] var isRedraw = true var canRun = false var fontSet = [ 0xF0, 0x90, 0x90, 0x90, 0xF0, # 0 0x20, 0x60, 0x20, 0x20, 0x70, # 1 0xF0, 0x10, 0xF0, 0x80, 0xF0, # 2 0xF0, 0x10, 0xF0, 0x10, 0xF0, # 3 0x90, 0x90, 0xF0, 0x10, 0x10, # 4 0xF0, 0x80, 0xF0, 0x10, 0xF0, # 5 0xF0, 0x80, 0xF0, 0x90, 0xF0, # 6 0xF0, 0x10, 0x20, 0x40, 0x40, # 7 0xF0, 0x90, 0xF0, 0x90, 0xF0, # 8 0xF0, 0x90, 0xF0, 0x10, 0xF0, # 9 0xF0, 0x90, 0xF0, 0x90, 0x90, # A 0xE0, 0x90, 0xE0, 0x90, 0xE0, # B 0xF0, 0x80, 0x80, 0x80, 0xF0, # C 0xE0, 0x90, 0x90, 0x90, 0xE0, # D 0xF0, 0x80, 0xF0, 0x80, 0xF0, # E 0xF0, 0x80, 0xF0, 0x80, 0x80 # F ] export var displayWidth = 64 export var displayHeight = 32 export var memSize = 4096 export var numRegisters = 16 var displaySize = (displayWidth * displayHeight) export var stackLevels = 16 export var keyboardBtns = 16 func initSystem(): memory = [] for i in range(memSize): memory.append(0) registers = [] for i in range(numRegisters): registers.append(0) gfx = [] for i in range(displaySize): gfx.append(0) stack = [] for i in range(stackLevels): stack.append(0) keys = [] for i in range(keyboardBtns): keys.append(0) opcode = 0 pc = 0x200 index = 0 sp = 0 isRedraw = true for i in range(fontSet.size()): memory[0x50 + i] = fontSet[i] & 0xFF func runSystem(): var jump = false opcode = (memory[pc] << 8) | memory[pc + 1] # Instructions match (opcode & 0xF000): 0x0000: match (opcode & 0x0FFF): 0x00E0: # CLS for i in range(gfx.size()): gfx[i] = 0 isRedraw = true 0x00EE: # RET sp -= 1 pc = stack[sp] + 2 jump = true _: var addr = opcode & 0x0FFF pc = addr jump = true if (jump == false): pc += 2 if (delay > 0): delay -= 1 if (soundTimer > 0): if (soundTimer == 1): $AudioStreamPlayer.play() soundTimer -= 1 # Called when the node enters the scene tree for the first time. func _ready(): pass # Replace with function body. # Called every frame. 'delta' is the elapsed time since the previous frame. #func _process(delta): # pass