diff --git a/src/vm/instruction.rs b/src/vm/instruction.rs index 2221aaa..4e7fed0 100644 --- a/src/vm/instruction.rs +++ b/src/vm/instruction.rs @@ -289,7 +289,7 @@ fn op_trap(vm: &mut VM, instr: u16) { let trap_vector = instr & 0xff; match trap_vector { 0x20 => trap_getc(vm), - 0x21 => todo!("OUT"), + 0x21 => trap_out(vm), 0x22 => trap_puts(vm), 0x23 => todo!("IN"), 0x24 => todo!("PUTSP"), @@ -315,3 +315,11 @@ fn trap_getc(vm: &mut VM) { while vm.mem.get_mem(0xFE00) & (1 << 15) == 0 {} vm.registers.r0 = vm.mem.get_mem(0xFE02) & 0xFF; } + +fn trap_out(vm: &mut VM) { + let val = char::from_u32((vm.registers.r0 & 0xFF).into()); + match val { + Some(c) => print!("{}", c), + None => {} + } +}