From fd19298a05a37fb7b59821ead211610742bd9e74 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Mon, 8 Apr 2019 00:08:23 +0200 Subject: [PATCH] fixed stackvm pop signed byte into register --- compiler/src/prog8/stackvm/StackVm.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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()