From: Nick Downing Date: Wed, 10 Jan 2024 09:14:42 +0000 (+1100) Subject: Change comparison operators to produce -1 as truth value instead of 1 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=8745925f54cbd1170c8a7ce13edc9717e3e62ab1;p=BCPLCTSS.git Change comparison operators to produce -1 as truth value instead of 1 --- diff --git a/o.sh b/o.sh index 32177f2..20dda3c 100755 --- a/o.sh +++ b/o.sh @@ -1,5 +1,7 @@ #!/bin/sh +. ./env.sh + cintsys64 -c c bctss cae0 mv OCODE cae0.ocode diff --git a/ocode_vm.py b/ocode_vm.py index 72f6f1f..fe859b0 100755 --- a/ocode_vm.py +++ b/ocode_vm.py @@ -1186,9 +1186,9 @@ def op_end(): def op_eq(): global sp sp = (sp - 2) & WORD_MASK - mem[sp & MEM_MASK] = int( + mem[sp & MEM_MASK] = -int( mem[sp & MEM_MASK] == mem[(sp + 1) & MEM_MASK] - ) + ) & WORD_MASK sp = (sp + 1) & WORD_MASK def op_eqv(): # xnor @@ -1227,10 +1227,10 @@ def op_fnrn(): def op_ge(): global sp sp = (sp - 2) & WORD_MASK - mem[sp & MEM_MASK] = int( + mem[sp & MEM_MASK] = -int( (mem[sp & MEM_MASK] ^ 0x400000000000) >= (mem[(sp + 1) & MEM_MASK] ^ 0x400000000000) - ) + ) & WORD_MASK sp = (sp + 1) & WORD_MASK def op_global(): global pc @@ -1248,10 +1248,10 @@ def op_goto(): def op_gr(): global sp sp = (sp - 2) & WORD_MASK - mem[sp & MEM_MASK] = int( + mem[sp & MEM_MASK] = -int( (mem[sp & MEM_MASK] ^ 0x400000000000) > (mem[(sp + 1) & MEM_MASK] ^ 0x400000000000) - ) + ) & WORD_MASK sp = (sp + 1) & WORD_MASK def op_iteml(): assert False @@ -1280,10 +1280,10 @@ def op_lab(): def op_le(): global sp sp = (sp - 2) & WORD_MASK - mem[sp & MEM_MASK] = int( + mem[sp & MEM_MASK] = -int( (mem[sp & MEM_MASK] ^ 0x400000000000) <= (mem[(sp + 1) & MEM_MASK] ^ 0x400000000000) - ) + ) & WORD_MASK sp = (sp + 1) & WORD_MASK def op_lg(): global pc, sp @@ -1343,10 +1343,10 @@ def op_lp(): def op_ls(): global sp sp = (sp - 2) & WORD_MASK - mem[sp & MEM_MASK] = int( + mem[sp & MEM_MASK] = -int( (mem[sp & MEM_MASK] ^ 0x400000000000) < (mem[(sp + 1) & MEM_MASK] ^ 0x400000000000) - ) + ) & WORD_MASK sp = (sp + 1) & WORD_MASK def op_lshift(): # unsigned shift by positive or negative count (too large => return 0) @@ -1386,9 +1386,9 @@ def op_mult(): def op_ne(): global sp sp = (sp - 2) & WORD_MASK - mem[sp & MEM_MASK] = int( + mem[sp & MEM_MASK] = -int( mem[sp & MEM_MASK] != mem[(sp + 1) & MEM_MASK] - ) + ) & WORD_MASK sp = (sp + 1) & WORD_MASK def op_neg(): global sp