diff --git a/compiler/src/prog8/stackvm/StackVm.kt b/compiler/src/prog8/stackvm/StackVm.kt index bca05b122..d5006b41e 100644 --- a/compiler/src/prog8/stackvm/StackVm.kt +++ b/compiler/src/prog8/stackvm/StackVm.kt @@ -1097,8 +1097,11 @@ class StackVm(private var traceOutputFile: String?) { checkDt(value, DataType.UBYTE, DataType.BYTE) val variable = getVar(ins.callLabel!!) checkDt(variable, DataType.UBYTE, DataType.BYTE) - if(value.type!=variable.type) - throw VmExecutionException("datatype mismatch") + if(value.type!=variable.type) { + if(ins.callLabel !in Register.values().map { it.name }) { + throw VmExecutionException("datatype mismatch") + } + } variables[ins.callLabel] = value setFlags(value) } @@ -2250,6 +2253,13 @@ class StackVm(private var traceOutputFile: String?) { val num = variables.getValue("A").integerValue() canvas?.printText(num.toString(), 1, true) } + Syscall.SYSASM_c64scr_print_b -> { + val num = variables.getValue("A").integerValue() + if(num<=127) + canvas?.printText(num.toString(), 1, true) + else + canvas?.printText("-${256-num}", 1, true) + } Syscall.SYSASM_c64scr_print_uw -> { val lo = variables.getValue("A").integerValue() val hi = variables.getValue("Y").integerValue()