From 102c192eadab7c4371ff70ecc817746f675189c0 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sat, 21 Jan 2023 19:59:41 +0900 Subject: [PATCH] sys.memcpy now has rambank device support --- .../src/net/torvald/tsvm/VMJSR223Delegate.kt | 12 ++++++++--- .../net/torvald/tsvm/peripheral/RamBank.kt | 7 +++++-- .../src/net/torvald/tsvm/VMEmuExecutable.kt | 20 ++++++++++++------- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/tsvm_core/src/net/torvald/tsvm/VMJSR223Delegate.kt b/tsvm_core/src/net/torvald/tsvm/VMJSR223Delegate.kt index 03d98c7..b8a1b88 100644 --- a/tsvm_core/src/net/torvald/tsvm/VMJSR223Delegate.kt +++ b/tsvm_core/src/net/torvald/tsvm/VMJSR223Delegate.kt @@ -6,9 +6,7 @@ import kotlinx.coroutines.launch import net.torvald.UnsafeHelper import net.torvald.UnsafePtr import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.toUlong -import net.torvald.tsvm.peripheral.AudioAdapter -import net.torvald.tsvm.peripheral.GraphicsAdapter -import net.torvald.tsvm.peripheral.IOSpace +import net.torvald.tsvm.peripheral.* import java.nio.charset.Charset /** @@ -67,6 +65,14 @@ class VMJSR223Delegate(private val vm: VM) { else if (relPtrInDev(fromRel, len, 262144, 513023)) dev.framebuffer2?.ptr?.plus(fromRel)?.minus(253950) else null } + else if (dev is RamBank) { + if (relPtrInDev(fromRel, len, 0, 524287)) + dev.mem.ptr + 524288*dev.map0 + fromRel + else if (relPtrInDev(fromRel, len, 524288, 131071)) + dev.mem.ptr + 524288*dev.map1 + fromRel - 524288 + else + null + } else null } } diff --git a/tsvm_core/src/net/torvald/tsvm/peripheral/RamBank.kt b/tsvm_core/src/net/torvald/tsvm/peripheral/RamBank.kt index 9535a43..5eef03a 100644 --- a/tsvm_core/src/net/torvald/tsvm/peripheral/RamBank.kt +++ b/tsvm_core/src/net/torvald/tsvm/peripheral/RamBank.kt @@ -21,8 +21,8 @@ open class RamBank(val vm: VM, bankCount: Int) : PeriBase("ramb") { internal val mem = UnsafeHelper.allocate(bankSize * banks, this) - protected var map0 = 0 - protected var map1 = 1 + internal var map0 = 0 + internal var map1 = 1 override fun peek(addr: Long): Byte { return when (addr) { @@ -68,4 +68,7 @@ open class RomBank(vm: VM, romfile: File, bankCount: Int) : RamBank(vm, bankCoun UnsafeHelper.memcpyRaw(bytes, 0, null, mem.ptr, bytes.size.toLong()) } override val typestring = "ROMB" + override fun poke(addr: Long, byte: Byte) { + + } } \ No newline at end of file diff --git a/tsvm_executable/src/net/torvald/tsvm/VMEmuExecutable.kt b/tsvm_executable/src/net/torvald/tsvm/VMEmuExecutable.kt index 7c05e8b..cdc5d13 100644 --- a/tsvm_executable/src/net/torvald/tsvm/VMEmuExecutable.kt +++ b/tsvm_executable/src/net/torvald/tsvm/VMEmuExecutable.kt @@ -402,15 +402,21 @@ class VMEmuExecutable(val windowWidth: Int, val windowHeight: Int, var panelsX: private val menuTabX = windowWidth * (panelsX-1) + 2 private val menuTabY =windowHeight * (panelsY-1) + FONT.H + 2 - private val menuTabs = listOf("Profiles", "MMU", "Machine", "COMs", "Cards", "Setup") + private val menuTabs = listOf("Profiles", "MMIO", "MMU", "COM", "Card1", "Card2", "Card3", "Card4", "Card5", "Card6", "Card7", "Setup") private val tabPos = (menuTabs + "").mapIndexed { index, _ -> 1 + menuTabs.subList(0, index).sumBy { it.length } + 2 * index } private val tabs = listOf( - ProfilesMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), - MMUMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), - DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), - DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), - DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), - DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), + ProfilesMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Profiles + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // MMIO + MMUMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // MMU + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // COM + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card1 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card2 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card3 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card4 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card5 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card6 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card7 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Setup ) private var menuTabSel = 0