diff --git a/app/src/main/kotlin/android/emu6502/Assembler.kt b/app/src/main/kotlin/android/emu6502/Assembler.kt index bf5b741..ab936f3 100644 --- a/app/src/main/kotlin/android/emu6502/Assembler.kt +++ b/app/src/main/kotlin/android/emu6502/Assembler.kt @@ -234,7 +234,7 @@ class Assembler(private var memory: Memory, private val symbols: Symbols) { val finalParam = param.replace(",Y", "", true).replace(",X", "", true) pushByte(opcode) val addr = labels.get(finalParam) - if (addr != null) { + if (addr != -1) { if (addr < 0 || addr > 0xffff) { return false } @@ -259,7 +259,7 @@ class Assembler(private var memory: Memory, private val symbols: Symbols) { if (opcode == 0xff) { return false } - return checkByteOperand(param, opcode, "^\\(([\\w\\$]+)\\),X$") + return checkByteOperand(param, opcode, "^\\(([\\w\\$]+),X\\)$") } private fun checkIndirect(param: String, opcode: Int): Boolean { @@ -320,7 +320,7 @@ class Assembler(private var memory: Memory, private val symbols: Symbols) { var hilo = param.replace("^#([<>]).*$".toRegex(), "$1") pushByte(opcode) val addr = labels.get(label) - if (addr != null) { + if (addr != -1) { when (hilo) { ">" -> { pushByte(addr.shr(8).and(0xFF)) diff --git a/app/src/test/java/android/emu6502/AssemblerTest.java b/app/src/test/java/android/emu6502/AssemblerTest.java index a50266c..0acee5f 100644 --- a/app/src/test/java/android/emu6502/AssemblerTest.java +++ b/app/src/test/java/android/emu6502/AssemblerTest.java @@ -82,7 +82,7 @@ public class AssemblerTest { assertThat(assembler.hexdump(), equalTo("0600: A9 01 85 F0 A9 CC 85 F1 6C F0 00")); } - @Test public void testIndexedIndirect() { + @Test public void testIndirectX() { List lines = ImmutableList.of( "LDX #$01", "LDA #$05", @@ -97,4 +97,34 @@ public class AssemblerTest { assertThat(assembler.hexdump(), equalTo("0600: A2 01 A9 05 85 01 A9 06 85 02 A0 0A 8C 05 06 A1 \n0610: 00")); } + + @Test public void testIndirectY() { + List lines = ImmutableList.of( + "LDY #$01", + "LDA #$03", + "STA $01", + "LDA #$07", + "STA $02", + "LDX #$0a", + "STX $0704", + "LDA ($01),Y"); + + assembler.assembleCode(lines); + assertThat(assembler.hexdump(), + equalTo("0600: A0 01 A9 03 85 01 A9 07 85 02 A2 0A 8E 04 07 B1 \n0610: 01")); + } + + @Test public void testJump() { + List lines = ImmutableList.of( + "LDA #$03", + "JMP there", + "BRK", + "BRK", + "BRK", + "there:", + "STA $0200"); + + assembler.assembleCode(lines); + assertThat(assembler.hexdump(), equalTo("0600: A9 03 4C 08 06 00 00 00 8D 00 02")); + } }