mirror of
https://github.com/felipecsl/6502Android.git
synced 2024-09-28 08:54:56 +00:00
Add size and cycles to instructions
This commit is contained in:
parent
3950fea47c
commit
c03b318c47
@ -99,43 +99,43 @@ class Assembler(private var memory: Memory, private val symbols: Symbols) {
|
|||||||
return DCB(param)
|
return DCB(param)
|
||||||
}
|
}
|
||||||
|
|
||||||
val opcode = Opcodes.MAP.get(Instruction.valueOf(command))
|
val opcode = Opcodes.MAP[Instruction.valueOf(command)]
|
||||||
|
|
||||||
if (opcode != null) {
|
if (opcode != null) {
|
||||||
if (checkImmediate(param, opcode[0])) {
|
if (checkImmediate(param, opcode[0].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkZeroPage(param, opcode[1])) {
|
if (checkZeroPage(param, opcode[1].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkZeroPageX(param, opcode[2])) {
|
if (checkZeroPageX(param, opcode[2].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkZeroPageY(param, opcode[3])) {
|
if (checkZeroPageY(param, opcode[3].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkAbsolute(param, opcode[4])) {
|
if (checkAbsolute(param, opcode[4].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkAbsoluteX(param, opcode[5])) {
|
if (checkAbsoluteX(param, opcode[5].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkAbsoluteY(param, opcode[6])) {
|
if (checkAbsoluteY(param, opcode[6].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkIndirect(param, opcode[7])) {
|
if (checkIndirect(param, opcode[7].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkIndirectX(param, opcode[8])) {
|
if (checkIndirectX(param, opcode[8].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkIndirectY(param, opcode[9])) {
|
if (checkIndirectY(param, opcode[9].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkSingle(param, opcode[10])) {
|
if (checkSingle(param, opcode[10].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (checkBranch(param, opcode[11])) {
|
if (checkBranch(param, opcode[11].opcode)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ class CPU(val memory: Memory) : Display.Callbacks {
|
|||||||
target.method.invoke()
|
target.method.invoke()
|
||||||
} else {
|
} else {
|
||||||
val candidate = Opcodes.MAP.entries
|
val candidate = Opcodes.MAP.entries
|
||||||
.first { it.value.any { opcode -> opcode == instruction } }
|
.first { it.value.any { it.opcode == instruction } }
|
||||||
throw Exception(
|
throw Exception(
|
||||||
"Address $${PC.toHexString()} - unknown opcode 0x${instruction.toHexString()} " +
|
"Address $${PC.toHexString()} - unknown opcode 0x${instruction.toHexString()} " +
|
||||||
"(instruction ${candidate.key.name})")
|
"(instruction ${candidate.key.name})")
|
||||||
|
@ -10,7 +10,7 @@ import android.view.View
|
|||||||
open class Display(context: Context, attrs: AttributeSet) : View(context, attrs) {
|
open class Display(context: Context, attrs: AttributeSet) : View(context, attrs) {
|
||||||
private val numX = 32
|
private val numX = 32
|
||||||
private val numY = 32
|
private val numY = 32
|
||||||
private val matrix = Array(32, { IntArray(32) })
|
private val matrix = Array(numX, { IntArray(numY) })
|
||||||
|
|
||||||
private val palette = arrayOf(
|
private val palette = arrayOf(
|
||||||
"#000000", "#ffffff", "#880000", "#aaffee",
|
"#000000", "#ffffff", "#880000", "#aaffee",
|
||||||
@ -22,14 +22,18 @@ open class Display(context: Context, attrs: AttributeSet) : View(context, attrs)
|
|||||||
private val bgPaint: Paint = Paint()
|
private val bgPaint: Paint = Paint()
|
||||||
private var listener: Callbacks? = null
|
private var listener: Callbacks? = null
|
||||||
|
|
||||||
|
init {
|
||||||
|
bgPaint.color = Color.BLACK
|
||||||
|
}
|
||||||
|
|
||||||
fun setOnDisplayCallback(callback: Callbacks) {
|
fun setOnDisplayCallback(callback: Callbacks) {
|
||||||
listener = callback
|
listener = callback
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun updatePixel(addr: Int, value: Int) {
|
open fun updatePixel(addr: Int, value: Int) {
|
||||||
val offsetAddr = addr - 0x200
|
val offsetAddr = addr - 0x200
|
||||||
val x = offsetAddr % 32
|
val x = offsetAddr % numX
|
||||||
val y = Math.floor((offsetAddr / 32).toDouble()).toInt()
|
val y = Math.floor((offsetAddr / numY).toDouble()).toInt()
|
||||||
val color = palette[value]
|
val color = palette[value]
|
||||||
matrix[x][y] = Color.parseColor(color)
|
matrix[x][y] = Color.parseColor(color)
|
||||||
postInvalidate()
|
postInvalidate()
|
||||||
@ -69,8 +73,4 @@ open class Display(context: Context, attrs: AttributeSet) : View(context, attrs)
|
|||||||
}
|
}
|
||||||
postInvalidate()
|
postInvalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
|
||||||
bgPaint.color = Color.BLACK
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import android.emu6502.CPU
|
|||||||
|
|
||||||
open class BaseInstruction(val instruction: Instruction, private val cpu: CPU) {
|
open class BaseInstruction(val instruction: Instruction, private val cpu: CPU) {
|
||||||
init {
|
init {
|
||||||
val opcodes: IntArray = Opcodes.MAP[instruction] as IntArray
|
val opcodes = Opcodes.MAP[instruction]
|
||||||
val methods = arrayOf(
|
val methods = arrayOf(
|
||||||
this::immediate,
|
this::immediate,
|
||||||
this::zeroPage,
|
this::zeroPage,
|
||||||
@ -19,9 +19,9 @@ open class BaseInstruction(val instruction: Instruction, private val cpu: CPU) {
|
|||||||
this::single,
|
this::single,
|
||||||
this::branch)
|
this::branch)
|
||||||
|
|
||||||
opcodes.forEachIndexed { i, opcode ->
|
opcodes!!.forEachIndexed { i, opcode ->
|
||||||
if (opcode != 0xff) {
|
if (opcode.opcode != 0xff) {
|
||||||
cpu.addInstruction(opcodes[i], InstructionTarget(this, methods[i]))
|
cpu.addInstruction(opcodes[i].opcode, InstructionTarget(this, methods[i]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
package android.emu6502.instructions
|
||||||
|
|
||||||
|
data class InstructionMode(val opcode: Int, val size: Int, val cycles: Int)
|
@ -1,66 +1,181 @@
|
|||||||
package android.emu6502.instructions
|
package android.emu6502.instructions
|
||||||
|
|
||||||
|
// http://www.obelisk.me.uk/6502/reference.html
|
||||||
class Opcodes {
|
class Opcodes {
|
||||||
companion object {
|
companion object {
|
||||||
val MAP: Map<Instruction, IntArray> = hashMapOf(
|
private fun im(opcode: Int, size: Int, cycles: Int) = InstructionMode(opcode, size, cycles)
|
||||||
/* Name, Imm, ZP, ZPX, ZPY, ABS, ABSX, ABSY, IND, INDX, INDY, SNGL, BRA */
|
|
||||||
Pair(Instruction.ADC, intArrayOf(0x69, 0x65, 0x75, 0xff, 0x6d, 0x7d, 0x79, 0xff, 0x61, 0x71, 0xff, 0xff)),
|
val MAP: Map<Instruction, Array<InstructionMode>> = hashMapOf(
|
||||||
Pair(Instruction.AND, intArrayOf(0x29, 0x25, 0x35, 0xff, 0x2d, 0x3d, 0x39, 0xff, 0x21, 0x31, 0xff, 0xff)),
|
Instruction.ADC to arrayOf(im(0x69, 2, 2), im(0x65, 2, 3), im(0x75, 2, 4), im(0xff, 0, 0),
|
||||||
Pair(Instruction.ASL, intArrayOf(0xff, 0x06, 0x16, 0xff, 0x0e, 0x1e, 0xff, 0xff, 0xff, 0xff, 0x0a, 0xff)),
|
im(0x6d, 3, 4), im(0x7d, 3, 4), im(0x79, 3, 4), im(0xff, 0, 0), im(0x61, 2, 6),
|
||||||
Pair(Instruction.BIT, intArrayOf(0xff, 0x24, 0xff, 0xff, 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
im(0x71, 2, 5), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.BPL, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10)),
|
Instruction.AND to arrayOf(im(0x29, 2, 2), im(0x25, 2, 3), im(0x35, 2, 4), im(0xff, 0, 0),
|
||||||
Pair(Instruction.BMI, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30)),
|
im(0x2d, 3, 4), im(0x3d, 3, 4), im(0x39, 3, 4), im(0xff, 0, 0), im(0x21, 2, 6),
|
||||||
Pair(Instruction.BVC, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50)),
|
im(0x31, 2, 5), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.BVS, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70)),
|
Instruction.ASL to arrayOf(im(0xff, 0, 0), im(0x06, 2, 5), im(0x16, 2, 6), im(0xff, 0, 0),
|
||||||
Pair(Instruction.BCC, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90)),
|
im(0x0e, 2, 5), im(0x1e, 3, 7), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.BCS, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0)),
|
im(0xff, 0, 0), im(0x0a, 1, 2), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.BNE, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0)),
|
Instruction.BIT to arrayOf(im(0xff, 0, 0), im(0x24, 2, 3), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.BEQ, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0)),
|
im(0x2c, 3, 4), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.BRK, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.CMP, intArrayOf(0xc9, 0xc5, 0xd5, 0xff, 0xcd, 0xdd, 0xd9, 0xff, 0xc1, 0xd1, 0xff, 0xff)),
|
Instruction.BPL to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.CPX, intArrayOf(0xe0, 0xe4, 0xff, 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.CPY, intArrayOf(0xc0, 0xc4, 0xff, 0xff, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0x10, 2, 2)),
|
||||||
Pair(Instruction.DEC, intArrayOf(0xff, 0xc6, 0xd6, 0xff, 0xce, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
Instruction.BMI to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.EOR, intArrayOf(0x49, 0x45, 0x55, 0xff, 0x4d, 0x5d, 0x59, 0xff, 0x41, 0x51, 0xff, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.CLC, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0x30, 2, 2)),
|
||||||
Pair(Instruction.SEC, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x38, 0xff)),
|
Instruction.BVC to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.CLI, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x58, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.SEI, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0x50, 2, 2)),
|
||||||
Pair(Instruction.CLV, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0xff)),
|
Instruction.BVS to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.CLD, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd8, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.SED, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0x70, 2, 2)),
|
||||||
Pair(Instruction.INC, intArrayOf(0xff, 0xe6, 0xf6, 0xff, 0xee, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
Instruction.BCC to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.JMP, intArrayOf(0xff, 0xff, 0xff, 0xff, 0x4c, 0xff, 0xff, 0x6c, 0xff, 0xff, 0xff, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.JSR, intArrayOf(0xff, 0xff, 0xff, 0xff, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0x90, 2, 2)),
|
||||||
Pair(Instruction.LDA, intArrayOf(0xa9, 0xa5, 0xb5, 0xff, 0xad, 0xbd, 0xb9, 0xff, 0xa1, 0xb1, 0xff, 0xff)),
|
Instruction.BCS to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.LDX, intArrayOf(0xa2, 0xa6, 0xff, 0xb6, 0xae, 0xff, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.LDY, intArrayOf(0xa0, 0xa4, 0xb4, 0xff, 0xac, 0xbc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xb0, 2, 2)),
|
||||||
Pair(Instruction.LSR, intArrayOf(0xff, 0x46, 0x56, 0xff, 0x4e, 0x5e, 0xff, 0xff, 0xff, 0xff, 0x4a, 0xff)),
|
Instruction.BNE to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.NOP, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.ORA, intArrayOf(0x09, 0x05, 0x15, 0xff, 0x0d, 0x1d, 0x19, 0xff, 0x01, 0x11, 0xff, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xd0, 2, 2)),
|
||||||
Pair(Instruction.TAX, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xff)),
|
Instruction.BEQ to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.TXA, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8a, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.DEX, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xca, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xf0, 2, 2)),
|
||||||
Pair(Instruction.INX, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xff)),
|
Instruction.BRK to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.TAY, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa8, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.TYA, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x98, 0xff)),
|
im(0xff, 0, 0), im(0x00, 1, 7), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.DEY, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0xff)),
|
Instruction.CMP to arrayOf(im(0xc9, 2, 2), im(0xc5, 2, 3), im(0xd5, 2, 4), im(0xff, 0, 0),
|
||||||
Pair(Instruction.INY, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc8, 0xff)),
|
im(0xcd, 3, 4), im(0xdd, 3, 4), im(0xd9, 3, 4), im(0xff, 0, 0), im(0xc1, 2, 6),
|
||||||
Pair(Instruction.ROR, intArrayOf(0xff, 0x66, 0x76, 0xff, 0x6e, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x6a, 0xff)),
|
im(0xd1, 2, 5), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.ROL, intArrayOf(0xff, 0x26, 0x36, 0xff, 0x2e, 0x3e, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xff)),
|
Instruction.CPX to arrayOf(im(0xe0, 2, 2), im(0xe4, 2, 3), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.RTI, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0xff)),
|
im(0xec, 3, 4), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.RTS, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.SBC, intArrayOf(0xe9, 0xe5, 0xf5, 0xff, 0xed, 0xfd, 0xf9, 0xff, 0xe1, 0xf1, 0xff, 0xff)),
|
Instruction.CPY to arrayOf(im(0xc0, 2, 2), im(0xc4, 2, 3), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.STA, intArrayOf(0xff, 0x85, 0x95, 0xff, 0x8d, 0x9d, 0x99, 0xff, 0x81, 0x91, 0xff, 0xff)),
|
im(0xcc, 3, 4), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.TXS, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.TSX, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xba, 0xff)),
|
Instruction.DEC to arrayOf(im(0xff, 0, 0), im(0xc6, 2, 5), im(0xd6, 2, 6), im(0xff, 0, 0),
|
||||||
Pair(Instruction.PHA, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x48, 0xff)),
|
im(0xce, 3, 6), im(0xde, 3, 7), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.PLA, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x68, 0xff)),
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.PHP, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0xff)),
|
Instruction.EOR to arrayOf(im(0x49, 2, 2), im(0x45, 2, 3), im(0x55, 2, 4), im(0xff, 0, 0),
|
||||||
Pair(Instruction.PLP, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0xff)),
|
im(0x4d, 3, 4), im(0x5d, 3, 4), im(0x59, 3, 4), im(0xff, 0, 0), im(0x41, 2, 6),
|
||||||
Pair(Instruction.STX, intArrayOf(0xff, 0x86, 0xff, 0x96, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
im(0x51, 2, 5), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
Pair(Instruction.STY, intArrayOf(0xff, 0x84, 0x94, 0xff, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff)),
|
Instruction.CLC to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
Pair(Instruction.XXX, intArrayOf(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff))
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
)
|
im(0xff, 0, 0), im(0x18, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.SEC to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x38, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.CLI to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x58, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.SEI to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x78, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.CLV to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xb8, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.CLD to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xd8, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.SED to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xf8, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.INC to arrayOf(im(0xff, 0, 0), im(0xe6, 2, 5), im(0xf6, 2, 6), im(0xff, 0, 0),
|
||||||
|
im(0xee, 3, 6), im(0xfe, 3, 7), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.JMP to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0x4c, 3, 3), im(0xff, 0, 0), im(0xff, 0, 0), im(0x6c, 3, 5), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.JSR to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0x20, 3, 6), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.LDA to arrayOf(im(0xa9, 2, 2), im(0xa5, 2, 3), im(0xb5, 2, 4), im(0xff, 0, 0),
|
||||||
|
im(0xad, 3, 4), im(0xbd, 3, 4), im(0xb9, 3, 4), im(0xff, 0, 0), im(0xa1, 2, 6),
|
||||||
|
im(0xb1, 2, 5), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.LDX to arrayOf(im(0xa2, 2, 2), im(0xa6, 2, 3), im(0xff, 0, 0), im(0xb6, 2, 4),
|
||||||
|
im(0xae, 3, 4), im(0xff, 0, 0), im(0xbe, 3, 4), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.LDY to arrayOf(im(0xa0, 2, 2), im(0xa4, 2, 3), im(0xb4, 2, 4), im(0xff, 0, 0),
|
||||||
|
im(0xac, 3, 4), im(0xbc, 3, 4), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.LSR to arrayOf(im(0xff, 0, 0), im(0x46, 2, 5), im(0x56, 2, 6), im(0xff, 0, 0),
|
||||||
|
im(0x4e, 3, 6), im(0x5e, 3, 7), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x4a, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.NOP to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xea, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.ORA to arrayOf(im(0x09, 2, 2), im(0x05, 2, 3), im(0x15, 2, 4), im(0xff, 0, 0),
|
||||||
|
im(0x0d, 3, 4), im(0x1d, 3, 4), im(0x19, 3, 4), im(0xff, 0, 0), im(0x01, 2, 6),
|
||||||
|
im(0x11, 2, 5), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.TAX to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xaa, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.TXA to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x8a, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.DEX to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xca, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.INX to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xe8, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.TAY to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xa8, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.TYA to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x98, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.DEY to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x88, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.INY to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xc8, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.ROR to arrayOf(im(0xff, 0, 0), im(0x66, 2, 5), im(0x76, 2, 6), im(0xff, 0, 0),
|
||||||
|
im(0x6e, 3, 6), im(0x7e, 3, 7), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x6a, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.ROL to arrayOf(im(0xff, 0, 0), im(0x26, 2, 5), im(0x36, 2, 6), im(0xff, 0, 0),
|
||||||
|
im(0x2e, 3, 6), im(0x3e, 3, 7), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x2a, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.RTI to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x40, 1, 6), im(0xff, 0, 0)),
|
||||||
|
Instruction.RTS to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x60, 1, 6), im(0xff, 0, 0)),
|
||||||
|
Instruction.SBC to arrayOf(im(0xe9, 2, 2), im(0xe5, 2, 3), im(0xf5, 2, 4), im(0xff, 0, 0),
|
||||||
|
im(0xed, 3, 4), im(0xfd, 3, 4), im(0xf9, 3, 4), im(0xff, 0, 0), im(0xe1, 2, 6),
|
||||||
|
im(0xf1, 2, 5), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.STA to arrayOf(im(0xff, 0, 0), im(0x85, 2, 3), im(0x95, 2, 4), im(0xff, 0, 0),
|
||||||
|
im(0x8d, 3, 4), im(0x9d, 3, 5), im(0x99, 3, 5), im(0xff, 0, 0), im(0x81, 2, 6),
|
||||||
|
im(0x91, 2, 6), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.TXS to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x9a, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.TSX to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xba, 1, 2), im(0xff, 0, 0)),
|
||||||
|
Instruction.PHA to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x48, 1, 3), im(0xff, 0, 0)),
|
||||||
|
Instruction.PLA to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0x68, 1, 4), im(0xff, 0, 0)),
|
||||||
|
Instruction.PHP to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0x08, 1, 3), im(0xff, 0, 0)),
|
||||||
|
Instruction.PLP to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0x28, 1, 4), im(0xff, 0, 0)),
|
||||||
|
Instruction.STX to arrayOf(im(0xff, 0, 0), im(0x86, 2, 3), im(0xff, 0, 0), im(0x96, 2, 4),
|
||||||
|
im(0x8e, 3, 4), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.STY to arrayOf(im(0xff, 0, 0), im(0x84, 2, 3), im(0x94, 2, 4), im(0xff, 0, 0),
|
||||||
|
im(0x8c, 3, 4), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)),
|
||||||
|
Instruction.XXX to arrayOf(im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0),
|
||||||
|
im(0xff, 0, 0), im(0xff, 0, 0), im(0xff, 0, 0)))
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -15,6 +15,10 @@ class Console(
|
|||||||
val mapper: Mapper,
|
val mapper: Mapper,
|
||||||
val ram: ByteArray = ByteArray(2048)
|
val ram: ByteArray = ByteArray(2048)
|
||||||
) {
|
) {
|
||||||
|
fun step() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun newConsole(cartridge: Cartridge, display: Display): Console {
|
fun newConsole(cartridge: Cartridge, display: Display): Console {
|
||||||
val ppu = PPU()
|
val ppu = PPU()
|
||||||
|
Loading…
Reference in New Issue
Block a user