diff --git a/HelloWorld.bin b/HelloWorld.bin new file mode 100644 index 0000000..e14a5b3 Binary files /dev/null and b/HelloWorld.bin differ diff --git a/src/computer.ts b/src/computer.ts index 2778620..bedea5d 100644 --- a/src/computer.ts +++ b/src/computer.ts @@ -85,7 +85,7 @@ export class Computer { if (this.current_instr === null) { const parsed_instruction = Computer.parse_instruction(current_byte); if (parsed_instruction === null) { - console.log("invalid instruction"); + // console.log("invalid instruction"); this.step_forward(); return; } @@ -104,7 +104,6 @@ export class Computer { } if (this.current_instr.params.length !== this.current_instr.params_found) { - // console.log(`Parameter count not fulfilled. Found new parameter ${current_byte}`); this.current_instr.params[this.current_instr.params_found] = current_byte; this.current_instr.params_found += 1; } @@ -137,12 +136,12 @@ export class Computer { case Instr.Print: { const [register_no] = inst.params; const value = this.registers[register_no]; - console.log(value); + // console.log(value); break; } case Instr.Goto: { const [parameter] = inst.params; - console.log(`Goto ${parameter}`); + // console.log(`Goto ${parameter}`); this.program_counter = parameter; return false; } @@ -159,7 +158,7 @@ export class Computer { if (register_no >= this.registers.length) { throw new Error(`Got register number ${register_no} in assign register`); } - console.log(`Set register ${register_no} to ${new_value}`); + // console.log(`Set register ${register_no} to ${new_value}`); this.registers[register_no] = new_value; break; } @@ -232,10 +231,18 @@ export class Computer { const char = String.fromCharCode(ASCIIbyte); - console.log(char); + // console.log(char); $("printout").textContent += char; break; } + case Instr.HaltCatchFire: { + throw new Error("FIRE FIRE FIRE FIRE"); + } + case Instr.CopyRegReg: { + const [register_no_to, register_no_from] = inst.params; + this.registers[register_no_to] = this.registers[register_no_from]; + break; + } default: break; } diff --git a/src/index.ts b/src/index.ts index e641507..e176d35 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,7 +13,7 @@ function main(): void { const ui = new UI(container); - const computer = new Computer(ui.stateUpdateEvent.bind(ui)); + const computer = new Computer(ui.state_update_event.bind(ui)); computer.load_program(program); ui.set_step_func(computer.cycle.bind(computer)); diff --git a/src/ui.ts b/src/ui.ts index 62534a9..410e930 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -28,43 +28,39 @@ export class UI { for (let i = 0; i < 8; i++) { const reg_cell = el("div", `R_${i}`); reg_cell.textContent = "00"; - reg_cell.setAttribute("contenteditable", "true"); - reg_cell.setAttribute("spellcheck", "false"); + // reg_cell.setAttribute("contenteditable", "true"); + // reg_cell.setAttribute("spellcheck", "false"); registers.appendChild(reg_cell); this.register_cells.push(reg_cell); } - // eslint-disable-next-line prefer-arrow-callback - registers.addEventListener("input", function (e) { - const allowed_chars = "0123456789ABCDEFG"; - const r = e.target as HTMLElement; - let data = (r.textContent as string).toUpperCase(); + // // eslint-disable-next-line prefer-arrow-callback + // registers.addEventListener("input", function (e) { + // const allowed_chars = "0123456789ABCDEFG"; + // const r = e.target as HTMLElement; + // let data = (r.textContent as string).toUpperCase(); - for (let i = 0; i < data.length; i++) { - if (!allowed_chars.includes(data[i])) { - data = "00"; - break; - } - } + // for (let i = 0; i < data.length; i++) { + // if (!allowed_chars.includes(data[i])) { + // data = "00"; + // break; + // } + // } - if (data.length > 2) { - // data = r.textContent?.substring(0, 2) ?? "00"; - } - e.preventDefault(); - return false; - // r.textContent = ; - }); + // e.preventDefault(); + // return false; + // }); - registers.addEventListener("keydown", (e) => { - if (e.key === "Enter") { - e.preventDefault(); - (e.target as HTMLElement).blur(); - } - }); - registers.addEventListener("blur", (e) => { - const allowed_chars = "0123456789ABCDEFG"; - const r = e.target as HTMLElement; - const data = (r.textContent as string).toUpperCase(); - }); + // registers.addEventListener("keydown", (e) => { + // if (e.key === "Enter") { + // e.preventDefault(); + // (e.target as HTMLElement).blur(); + // } + // }); + // registers.addEventListener("blur", (e) => { + // const allowed_chars = "0123456789ABCDEFG"; + // const r = e.target as HTMLElement; + // const data = (r.textContent as string).toUpperCase(); + // }); this.registers = registers; @@ -95,7 +91,7 @@ export class UI { }); } - start_auto(speed: number = 0): void { + start_auto(speed: number = 200): void { if (this.step_func === null) { return; } @@ -125,7 +121,7 @@ export class UI { this.step_func = f; } - stateUpdateEvent(state: ComputerState): void { + state_update_event(state: ComputerState): void { for (let i = 0; i < 256; i++) { const current = this.program_memory_cells[i]; current.className = "";