41 lines
1.3 KiB
Kotlin
41 lines
1.3 KiB
Kotlin
package de.platon42.mc68kemu
|
|
|
|
open class CustomChips(var debug: Boolean = false) : MemoryRegion(0xdff000, 0x200) {
|
|
var vhpos = 0
|
|
override fun readByte(address: Int): Int {
|
|
val v = 0
|
|
println("${v.toHex(4)} = R[${address.toHex(2)}]")
|
|
return v
|
|
}
|
|
|
|
override fun readWord(address: Int): Int {
|
|
val v = when (address) {
|
|
0xdff004 -> (vhpos shr 16)
|
|
0xdff006 -> (vhpos and 0xffff).also { vhpos = (vhpos + 0x400) % (311 shl 8) }
|
|
else -> 0
|
|
}
|
|
if (debug) println("${v.toHex(4)} = R[${address.toHex(8)}]")
|
|
return v
|
|
}
|
|
|
|
override fun readLong(address: Int): Int {
|
|
val v = when (address) {
|
|
0xdff004 -> vhpos.also { vhpos = (vhpos + 0x400) % (311 shl 8) }
|
|
else -> (readWord(address) shl 16) or (readWord(address + 2) and 0xffff)
|
|
}
|
|
if (debug) println("${v.toHex(8)} = R[${address.toHex(8)}]")
|
|
return v
|
|
}
|
|
|
|
override fun writeByte(address: Int, value: Int) {
|
|
println("W[${address.toHex(8)}] = ${value.toHex(2)}")
|
|
}
|
|
|
|
override fun writeWord(address: Int, value: Int) {
|
|
if (debug) println("W[${address.toHex(8)}] = ${value.toHex(4)}")
|
|
}
|
|
|
|
override fun writeLong(address: Int, value: Int) {
|
|
if (debug) println("W[${address.toHex(8)}] = ${value.toHex(8)}")
|
|
}
|
|
} |