From d1a29709f2ea3a99d6d11221f0f57593d958f161 Mon Sep 17 00:00:00 2001 From: Chris Pressey Date: Wed, 12 Dec 2018 09:09:45 +0000 Subject: [PATCH] Add example test program for cmp-against-literal-word. Fix it. --- eg/rudiments/cmp-litword.60p | 64 +++++++++++++++++++++++++++++++++ src/sixtypical/compiler.py | 4 +-- tests/SixtyPical Compilation.md | 4 +-- 3 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 eg/rudiments/cmp-litword.60p diff --git a/eg/rudiments/cmp-litword.60p b/eg/rudiments/cmp-litword.60p new file mode 100644 index 0000000..5cf9793 --- /dev/null +++ b/eg/rudiments/cmp-litword.60p @@ -0,0 +1,64 @@ +// Include `support/${PLATFORM}.60p` before this source +// Should print ENGGL + +word w1 + +define main routine + outputs w1 + trashes a, x, y, z, n, c, v +{ + copy 4000, w1 + + cmp w1, 4000 + if z { + ld a, 69 // E + call chrout + } else { + ld a, 78 // N + call chrout + } + + copy 4000, w1 + + cmp w1, 4001 + if z { + ld a, 69 // E + call chrout + } else { + ld a, 78 // N + call chrout + } + + copy 20002, w1 + + cmp w1, 20001 // 20002 >= 20001 + if c { + ld a, 71 // G + call chrout + } else { + ld a, 76 // L + call chrout + } + + copy 20001, w1 + + cmp w1, 20001 // 20001 >= 20001 + if c { + ld a, 71 // G + call chrout + } else { + ld a, 76 // L + call chrout + } + + copy 20000, w1 + + cmp w1, 20001 // 20000 < 20001 + if c { + ld a, 71 // G + call chrout + } else { + ld a, 76 // L + call chrout + } +} diff --git a/src/sixtypical/compiler.py b/src/sixtypical/compiler.py index 2675b54..3659014 100644 --- a/src/sixtypical/compiler.py +++ b/src/sixtypical/compiler.py @@ -405,11 +405,11 @@ class Compiler(object): if isinstance(src, ConstantRef) and src.type == TYPE_WORD: dest_label = self.get_label(dest.name) self.emitter.emit(LDA(Absolute(dest_label))) - self.emitter.emit(CMP(Immediate(Byte(src.high_byte())))) + self.emitter.emit(CMP(Immediate(Byte(src.low_byte())))) end_label = Label('end_label') self.emitter.emit(BNE(Relative(end_label))) self.emitter.emit(LDA(Absolute(Offset(dest_label, 1)))) - self.emitter.emit(CMP(Immediate(Byte(src.low_byte())))) + self.emitter.emit(CMP(Immediate(Byte(src.high_byte())))) self.emitter.resolve_label(end_label) return cls = { diff --git a/tests/SixtyPical Compilation.md b/tests/SixtyPical Compilation.md index 87e427a..e00f954 100644 --- a/tests/SixtyPical Compilation.md +++ b/tests/SixtyPical Compilation.md @@ -403,10 +403,10 @@ Compiling 16-bit `cmp`. = $0815 LDA $EA62 = $0818 CMP $0829 = $081B LDA $EA61 - = $081E CMP #$0F + = $081E CMP #$A0 = $0820 BNE $0827 = $0822 LDA $EA62 - = $0825 CMP #$A0 + = $0825 CMP #$0F = $0827 RTS = $0828 .byte $BB = $0829 .byte $0B