2026-04-12 17:08:20 +02:00

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)}")
}
}