diff --git a/app/src/main/kotlin/android/emu6502/CPU.kt b/app/src/main/kotlin/android/emu6502/CPU.kt index a5d657a..e46103e 100644 --- a/app/src/main/kotlin/android/emu6502/CPU.kt +++ b/app/src/main/kotlin/android/emu6502/CPU.kt @@ -14,7 +14,7 @@ import java.util.concurrent.CountDownLatch class CPU(val memory: Memory) : Display.Callbacks { private val bgHandlerThread = HandlerThread("Screencast Thread") private val bgHandler: Handler - private var lock: CountDownLatch? = null + private var executionLock: CountDownLatch? = null init { bgHandlerThread.start() @@ -36,7 +36,7 @@ class CPU(val memory: Memory) : Display.Callbacks { private var debug = false private var monitoring = false private var TAG = "CPU" - val instructionList: HashMap = HashMap() + private val instructionList: HashMap = HashMap() private val operationList: HashMap = hashMapOf( Pair(Instruction.ADC, ADC(this)), Pair(Instruction.AND, AND(this)), @@ -72,30 +72,44 @@ class CPU(val memory: Memory) : Display.Callbacks { Pair(Instruction.SBC, SBC(this)), Pair(Instruction.BCC, BCC(this)), Pair(Instruction.DEC, DEC(this)) -// Pair(Instruction.BMI, BMI(this)), -// Pair(Instruction.BVC, BVC(this)), -// Pair(Instruction.BVS, BVS(this)), -// Pair(Instruction.CPY, CPY(this)), -// Pair(Instruction.EOR, EOR(this)), -// Pair(Instruction.CLI, CLI(this)), -// Pair(Instruction.CLV, CLV(this)), -// Pair(Instruction.CLD, CLD(this)), -// Pair(Instruction.SED, SED(this)), -// Pair(Instruction.TAY, TAY(this)), -// Pair(Instruction.TYA, TYA(this)), -// Pair(Instruction.INY, INY(this)), -// Pair(Instruction.ROR, ROR(this)), -// Pair(Instruction.ROL, ROL(this)), -// Pair(Instruction.RTI, RTI(this)), -// Pair(Instruction.TXS, TXS(this)), -// Pair(Instruction.TSX, TSX(this)), -// Pair(Instruction.PHA, PHA(this)), -// Pair(Instruction.PLA, PLA(this)), -// Pair(Instruction.PHP, PHP(this)), -// Pair(Instruction.PLP, PLP(this)), -// Pair(Instruction.STY, STY(this)) + //Pair(Instruction.BMI, BMI(this)), + //Pair(Instruction.BVC, BVC(this)), + //Pair(Instruction.BVS, BVS(this)), + //Pair(Instruction.CPY, CPY(this)), + //Pair(Instruction.EOR, EOR(this)), + //Pair(Instruction.CLI, CLI(this)), + //Pair(Instruction.CLV, CLV(this)), + //Pair(Instruction.CLD, CLD(this)), + //Pair(Instruction.SED, SED(this)), + //Pair(Instruction.TAY, TAY(this)), + //Pair(Instruction.TYA, TYA(this)), + //Pair(Instruction.INY, INY(this)), + //Pair(Instruction.ROR, ROR(this)), + //Pair(Instruction.ROL, ROL(this)), + //Pair(Instruction.RTI, RTI(this)), + //Pair(Instruction.TXS, TXS(this)), + //Pair(Instruction.TSX, TSX(this)), + //Pair(Instruction.PHA, PHA(this)), + //Pair(Instruction.PLA, PLA(this)), + //Pair(Instruction.PHP, PHP(this)), + //Pair(Instruction.PLP, PLP(this)), + //Pair(Instruction.STY, STY(this)) ) + // for testing only + fun testRun() { + isRunning = true + while (true) { + setRandomByte() + executeNextInstruction() + + if (PC == 0 || !isRunning) { + break + } + } + stop() + } + fun run() { isRunning = true bgHandler.post { innerRun() } @@ -155,7 +169,11 @@ class CPU(val memory: Memory) : Display.Callbacks { P = 0x30 } - fun popByte(): Int { + fun addInstruction(opcode: Int, target: InstructionTarget) { + instructionList.put(opcode, target) + } + + fun popByte(): Int { return memory.get(PC++).and(0xff) } @@ -297,11 +315,11 @@ class CPU(val memory: Memory) : Display.Callbacks { } override fun onUpdate() { - lock = CountDownLatch(1) - lock?.await() + executionLock = CountDownLatch(1) + executionLock?.await() } override fun onDraw() { - lock?.countDown() + executionLock?.countDown() } } \ No newline at end of file diff --git a/app/src/main/kotlin/android/emu6502/instructions/BaseInstruction.kt b/app/src/main/kotlin/android/emu6502/instructions/BaseInstruction.kt index 6e43e38..59779b8 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/BaseInstruction.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/BaseInstruction.kt @@ -1,9 +1,8 @@ package android.emu6502.instructions -import java.util.HashMap +import android.emu6502.CPU -open class BaseInstruction(val instruction: Instruction, - private val instructionList: HashMap) { +open class BaseInstruction(val instruction: Instruction, private val cpu: CPU) { init { val opcodes: IntArray = Opcodes.MAP[instruction] as IntArray @@ -12,7 +11,7 @@ open class BaseInstruction(val instruction: Instruction, opcodes.forEachIndexed { i, opcode -> if (opcode != 0xff) { - instructionList.put(opcodes[i], InstructionTarget(this, methods[i])) + cpu.addInstruction(opcodes[i], InstructionTarget(this, methods[i])) } } } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/ADC.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/ADC.kt index d48934a..0cd972b 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/ADC.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/ADC.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** ADd with Carry */ -class ADC(private val cpu: CPU) : BaseInstruction(Instruction.ADC, cpu.instructionList) { +class ADC(private val cpu: CPU) : BaseInstruction(Instruction.ADC, cpu) { override fun immediate() { testADC(cpu.popByte()) } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/AND.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/AND.kt index a6fc33f..83adca3 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/AND.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/AND.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** bitwise AND with accumulator */ -class AND(private val cpu: CPU) : BaseInstruction(Instruction.AND, cpu.instructionList) { +class AND(private val cpu: CPU) : BaseInstruction(Instruction.AND, cpu) { override fun immediate() { cpu.A = cpu.A.and(cpu.popByte()) cpu.setSZFlagsForRegA() diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/ASL.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/ASL.kt index bc93889..d37ea0b 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/ASL.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/ASL.kt @@ -5,5 +5,5 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Arithmetic Shift Left */ -class ASL(private val cpu: CPU) : BaseInstruction(Instruction.ASL, cpu.instructionList) { +class ASL(private val cpu: CPU) : BaseInstruction(Instruction.ASL, cpu) { } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/BCC.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/BCC.kt index 737a274..5b79cdb 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/BCC.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/BCC.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Branch on Carry Clear */ -final class BCC(private val cpu: CPU) : BaseInstruction(Instruction.BCC, cpu.instructionList) { +final class BCC(private val cpu: CPU) : BaseInstruction(Instruction.BCC, cpu) { override fun branch() { val offset = cpu.popByte() if (!cpu.carry()) { diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/BCS.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/BCS.kt index b2d385f..70f66e0 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/BCS.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/BCS.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Branch on Carry Set */ -final class BCS(private val cpu: CPU) : BaseInstruction(Instruction.BCS, cpu.instructionList) { +final class BCS(private val cpu: CPU) : BaseInstruction(Instruction.BCS, cpu) { override fun branch() { val offset = cpu.popByte() if (cpu.carry()) { diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/BEQ.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/BEQ.kt index f730173..4048574 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/BEQ.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/BEQ.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Branch on EQual */ -class BEQ(private val cpu: CPU) : BaseInstruction(Instruction.BEQ, cpu.instructionList) { +class BEQ(private val cpu: CPU) : BaseInstruction(Instruction.BEQ, cpu) { override fun branch() { val offset = cpu.popByte() if (cpu.zero()) { diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/BIT.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/BIT.kt index 4a412cc..b93c845 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/BIT.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/BIT.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** test BITs */ -class BIT(private val cpu: CPU) : BaseInstruction(Instruction.BIT, cpu.instructionList) { +class BIT(private val cpu: CPU) : BaseInstruction(Instruction.BIT, cpu) { override fun zeroPage() { val value = cpu.memory.get(cpu.popByte()) BIT(value) diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/BNE.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/BNE.kt index fe30e84..593a023 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/BNE.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/BNE.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Branch on Not Equal */ -final class BNE(private val cpu: CPU) : BaseInstruction(Instruction.BNE, cpu.instructionList) { +final class BNE(private val cpu: CPU) : BaseInstruction(Instruction.BNE, cpu) { override fun branch() { val offset = cpu.popByte() if (!cpu.zero()) { diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/BPL.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/BPL.kt index e24341d..3caa910 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/BPL.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/BPL.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Branch on PLus */ -final class BPL(private val cpu: CPU) : BaseInstruction(Instruction.BPL, cpu.instructionList) { +final class BPL(private val cpu: CPU) : BaseInstruction(Instruction.BPL, cpu) { override fun branch() { val offset = cpu.popByte() if (!cpu.negative()) { diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/BRK.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/BRK.kt index 8241556..c35b8d5 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/BRK.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/BRK.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** BRreaK */ -final class BRK(private val cpu: CPU) : BaseInstruction(Instruction.BRK, cpu.instructionList) { +final class BRK(private val cpu: CPU) : BaseInstruction(Instruction.BRK, cpu) { override fun single() { cpu.stop() } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/CLC.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/CLC.kt index 8075a34..7eef840 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/CLC.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/CLC.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** CLear Carry */ -final class CLC(private val cpu: CPU) : BaseInstruction(Instruction.CLC, cpu.instructionList) { +final class CLC(private val cpu: CPU) : BaseInstruction(Instruction.CLC, cpu) { override fun single() { cpu.CLC() } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/CMP.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/CMP.kt index f864405..778211e 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/CMP.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/CMP.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** CoMPare accumulator */ -final class CMP(private val cpu: CPU) : BaseInstruction(Instruction.CMP, cpu.instructionList) { +final class CMP(private val cpu: CPU) : BaseInstruction(Instruction.CMP, cpu) { override fun immediate() { cpu.doCompare(cpu.A, cpu.popByte()) } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/CPX.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/CPX.kt index b080287..10343b4 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/CPX.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/CPX.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** ComPare X register */ -class CPX(private val cpu: CPU) : BaseInstruction(Instruction.CPX, cpu.instructionList) { +class CPX(private val cpu: CPU) : BaseInstruction(Instruction.CPX, cpu) { override fun immediate() { val value = cpu.popByte() cpu.doCompare(cpu.X, value) diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/DEC.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/DEC.kt index 00fa011..d294cd9 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/DEC.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/DEC.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** DECrement memory */ -class DEC(private val cpu: CPU) : BaseInstruction(Instruction.DEC, cpu.instructionList) { +class DEC(private val cpu: CPU) : BaseInstruction(Instruction.DEC, cpu) { override fun zeroPage() { DEC(cpu.popByte()) } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/DEX.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/DEX.kt index c5dd738..4601107 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/DEX.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/DEX.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** DEcrement X */ -class DEX(private val cpu: CPU) : BaseInstruction(Instruction.DEX, cpu.instructionList) { +class DEX(private val cpu: CPU) : BaseInstruction(Instruction.DEX, cpu) { override fun single() { cpu.X = (cpu.X - 1).and(0xff) cpu.setSZflagsForRegX() diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/DEY.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/DEY.kt index f75dd78..70260e3 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/DEY.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/DEY.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** DEcrement Y */ -class DEY(private val cpu: CPU) : BaseInstruction(Instruction.DEY, cpu.instructionList) { +class DEY(private val cpu: CPU) : BaseInstruction(Instruction.DEY, cpu) { override fun single() { cpu.Y = (cpu.Y - 1).and(0xff) cpu.setSZflagsForRegY() diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/INC.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/INC.kt index c1a9b0a..8bf7695 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/INC.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/INC.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** INCrement memory */ -final class INC(private val cpu: CPU) : BaseInstruction(Instruction.INC, cpu.instructionList) { +final class INC(private val cpu: CPU) : BaseInstruction(Instruction.INC, cpu) { override fun zeroPage() { inc(cpu.popByte()) } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/INX.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/INX.kt index abd1487..bc904ed 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/INX.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/INX.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** INcrement X */ -class INX(private val cpu: CPU) : BaseInstruction(Instruction.INX, cpu.instructionList) { +class INX(private val cpu: CPU) : BaseInstruction(Instruction.INX, cpu) { override fun single() { cpu.X = (cpu.X + 1).and(0xff) cpu.setSZflagsForRegX() diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/JMP.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/JMP.kt index 558ccf2..a0d846a 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/JMP.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/JMP.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** JuMP */ -class JMP(private val cpu: CPU) : BaseInstruction(Instruction.JMP, cpu.instructionList) { +class JMP(private val cpu: CPU) : BaseInstruction(Instruction.JMP, cpu) { override fun absolute() { cpu.PC = cpu.popWord() } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/JSR.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/JSR.kt index 7dc7f03..1d102b9 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/JSR.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/JSR.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Jump to SubRoutine */ -class JSR(private val cpu: CPU) : BaseInstruction(Instruction.JSR, cpu.instructionList) { +class JSR(private val cpu: CPU) : BaseInstruction(Instruction.JSR, cpu) { override fun absolute() { val addr = cpu.popWord() val currAddr = cpu.PC - 1 diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/LDA.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/LDA.kt index a2575ad..0a9d1c7 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/LDA.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/LDA.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** LoaD Accumulator */ -class LDA(private val cpu: CPU) : BaseInstruction(Instruction.LDA, cpu.instructionList) { +class LDA(private val cpu: CPU) : BaseInstruction(Instruction.LDA, cpu) { override fun immediate() { cpu.A = cpu.popByte() cpu.setSZFlagsForRegA() diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/LDX.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/LDX.kt index 3bf8fcb..34ebd22 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/LDX.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/LDX.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** LoaD X register */ -class LDX(private val cpu: CPU) : BaseInstruction(Instruction.LDX, cpu.instructionList) { +class LDX(private val cpu: CPU) : BaseInstruction(Instruction.LDX, cpu) { override fun immediate() { cpu.X = cpu.popByte() cpu.setSZflagsForRegX() diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/LDY.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/LDY.kt index 0b73bb9..cea2a33 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/LDY.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/LDY.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** LoaD Y register */ -class LDY(private val cpu: CPU) : BaseInstruction(Instruction.LDY, cpu.instructionList) { +class LDY(private val cpu: CPU) : BaseInstruction(Instruction.LDY, cpu) { override fun immediate() { cpu.Y = cpu.popByte() cpu.setSZflagsForRegY() diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/LSR.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/LSR.kt index 7bbf9a6..d815bdb 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/LSR.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/LSR.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Logical Shift Right */ -final class LSR(private val cpu: CPU) : BaseInstruction(Instruction.LSR, cpu.instructionList) { +final class LSR(private val cpu: CPU) : BaseInstruction(Instruction.LSR, cpu) { override fun single() { cpu.setCarryFlagFromBit0(cpu.A) cpu.A = cpu.A.shr(1) diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/NOP.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/NOP.kt index 49e017a..684af71 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/NOP.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/NOP.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** No OPeration */ -class NOP(private val cpu: CPU) : BaseInstruction(Instruction.NOP, cpu.instructionList) { +class NOP(private val cpu: CPU) : BaseInstruction(Instruction.NOP, cpu) { override fun single() { } } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/ORA.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/ORA.kt index d2a954b..ac83959 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/ORA.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/ORA.kt @@ -5,5 +5,5 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** bitwise OR with Accumulator */ -class ORA(cpu: CPU) : BaseInstruction(Instruction.ORA, cpu.instructionList) { +class ORA(cpu: CPU) : BaseInstruction(Instruction.ORA, cpu) { } \ No newline at end of file diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/RTS.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/RTS.kt index 3bfe56b..e5fe969 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/RTS.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/RTS.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** ReTurn from Subroutine */ -class RTS(private val cpu: CPU) : BaseInstruction(Instruction.RTS, cpu.instructionList) { +class RTS(private val cpu: CPU) : BaseInstruction(Instruction.RTS, cpu) { override fun single() { cpu.PC = cpu.stackPop().or(cpu.stackPop().shl(8)) + 1 } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/SBC.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/SBC.kt index f130c39..b2109dd 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/SBC.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/SBC.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** SuBtract with Carry */ -class SBC(private val cpu: CPU) : BaseInstruction(Instruction.SBC, cpu.instructionList) { +class SBC(private val cpu: CPU) : BaseInstruction(Instruction.SBC, cpu) { override fun immediate() { testSBC(cpu.popByte()) } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/SEC.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/SEC.kt index adddf14..71fc3a1 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/SEC.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/SEC.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** SEt Carry */ -class SEC(private val cpu: CPU) : BaseInstruction(Instruction.SEC, cpu.instructionList) { +class SEC(private val cpu: CPU) : BaseInstruction(Instruction.SEC, cpu) { override fun single() { cpu.carry() } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/SEI.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/SEI.kt index f3b6b1d..0f17d10 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/SEI.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/SEI.kt @@ -5,6 +5,6 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** SEt Interrupt */ -class SEI(private val cpu: CPU) : BaseInstruction(Instruction.SEI, cpu.instructionList) { +class SEI(private val cpu: CPU) : BaseInstruction(Instruction.SEI, cpu) { } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/STA.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/STA.kt index 4b609b4..a2cda78 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/STA.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/STA.kt @@ -7,7 +7,7 @@ import android.emu6502.instructions.Instruction /** STore Accumulator */ class STA(private val memory: Memory, private val cpu: CPU) - : BaseInstruction(Instruction.STA, cpu.instructionList) { + : BaseInstruction(Instruction.STA, cpu) { override fun absolute() { memory.storeByte(cpu.popWord(), cpu.A) diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/STX.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/STX.kt index bd06cfc..a20e565 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/STX.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/STX.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** STore X register */ -class STX(private val cpu: CPU) : BaseInstruction(Instruction.STX, cpu.instructionList) { +class STX(private val cpu: CPU) : BaseInstruction(Instruction.STX, cpu) { override fun zeroPage() { cpu.memory.storeByte(cpu.popByte(), cpu.X) } diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/TAX.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/TAX.kt index bf51181..ff838e3 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/TAX.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/TAX.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Transfer A to X */ -class TAX(private val cpu: CPU) : BaseInstruction(Instruction.TAX, cpu.instructionList) { +class TAX(private val cpu: CPU) : BaseInstruction(Instruction.TAX, cpu) { override fun single() { cpu.X = cpu.A.and(0xFF) cpu.setSZflagsForRegX() diff --git a/app/src/main/kotlin/android/emu6502/instructions/impl/TXA.kt b/app/src/main/kotlin/android/emu6502/instructions/impl/TXA.kt index b2be3e7..ee49471 100644 --- a/app/src/main/kotlin/android/emu6502/instructions/impl/TXA.kt +++ b/app/src/main/kotlin/android/emu6502/instructions/impl/TXA.kt @@ -5,7 +5,7 @@ import android.emu6502.instructions.BaseInstruction import android.emu6502.instructions.Instruction /** Transfer X to A */ -class TXA(private val cpu: CPU) : BaseInstruction(Instruction.TXA, cpu.instructionList) { +class TXA(private val cpu: CPU) : BaseInstruction(Instruction.TXA, cpu) { override fun single() { cpu.A = cpu.X.and(0xff) cpu.setSZFlagsForRegA() diff --git a/app/src/test/java/android/emu6502/CPUTest.java b/app/src/test/java/android/emu6502/CPUTest.java index fcc5be0..4926fd8 100644 --- a/app/src/test/java/android/emu6502/CPUTest.java +++ b/app/src/test/java/android/emu6502/CPUTest.java @@ -34,7 +34,7 @@ public class CPUTest { "LDA #$08", "STA $0202"); assembler.assembleCode(lines); - cpu.run(); + cpu.testRun(); assertThat(cpu.getA(), equalTo(0x08)); assertThat(cpu.getX(), equalTo(0x00)); assertThat(cpu.getY(), equalTo(0x00)); @@ -51,7 +51,7 @@ public class CPUTest { "ADC #$c4 ;Add the hex value $c4 to the A register", "BRK ;Break - we're done"); assembler.assembleCode(lines); - cpu.run(); + cpu.testRun(); assertThat(cpu.getA(), equalTo(0x84)); assertThat(cpu.getX(), equalTo(0xC1)); assertThat(cpu.getY(), equalTo(0x00)); @@ -72,7 +72,7 @@ public class CPUTest { "STX $0201", "BRK"); assembler.assembleCode(lines); - cpu.run(); + cpu.testRun(); assertThat(cpu.getA(), equalTo(0x00)); assertThat(cpu.getX(), equalTo(0x03)); assertThat(cpu.getY(), equalTo(0x00)); @@ -92,7 +92,7 @@ public class CPUTest { "there:", "STA $0200"); assembler.assembleCode(lines); - cpu.run(); + cpu.testRun(); assertThat(cpu.getA(), equalTo(0x03)); assertThat(cpu.getX(), equalTo(0x00)); assertThat(cpu.getY(), equalTo(0x00)); @@ -120,7 +120,7 @@ public class CPUTest { "end:", "BRK"); assembler.assembleCode(lines); - cpu.run(); + cpu.testRun(); assertThat(cpu.getA(), equalTo(0x00)); assertThat(cpu.getX(), equalTo(0x05)); assertThat(cpu.getY(), equalTo(0x00)); @@ -134,7 +134,7 @@ public class CPUTest { "define a_dozen $0c ; a constant", "LDX #a_dozen ; equivalent to \"LDX #$0c\""); assembler.assembleCode(lines); - cpu.run(); + cpu.testRun(); assertThat(cpu.getA(), equalTo(0x00)); assertThat(cpu.getX(), equalTo(0x0C)); assertThat(cpu.getY(), equalTo(0x00)); @@ -372,7 +372,7 @@ public class CPUTest { " rts", "gameOver:", "\n"); assembler.assembleCode(lines); - cpu.run(); + cpu.testRun(); assertThat(cpu.getA(), equalTo(0x1f)); assertThat(cpu.getX(), equalTo(0xff)); assertThat(cpu.getY(), equalTo(0x00));