diff --git a/tsvm_core/src/net/torvald/tsvm/VMSetupBroker.kt b/tsvm_core/src/net/torvald/tsvm/VMSetupBroker.kt index 2cb8873..7c53ffb 100644 --- a/tsvm_core/src/net/torvald/tsvm/VMSetupBroker.kt +++ b/tsvm_core/src/net/torvald/tsvm/VMSetupBroker.kt @@ -111,7 +111,7 @@ object VMSetupBroker { try { val argTypes = argTypess[k].parameterTypes - println("loadedClass = $className") + println("COM${index+1} loadedClass = $className") println("trying constructor args[${k}/${argTypess.lastIndex}]: ${argTypes.joinToString { it.canonicalName }}") val args = deviceInfo.get("args").allIntoJavaType(argTypes.tail()) @@ -140,6 +140,8 @@ object VMSetupBroker { jsonValue?.let { deviceInfo -> val className = deviceInfo.getString("cls") + println("CARD${index} loadedClass = $className") + val loadedClass = Class.forName(className) val argTypes = loadedClass.declaredConstructors[0].parameterTypes val args = deviceInfo.get("args").allIntoJavaType(argTypes.tail()) diff --git a/tsvm_core/src/net/torvald/tsvm/peripheral/RamBank.kt b/tsvm_core/src/net/torvald/tsvm/peripheral/RamBank.kt index b193d49..73df87f 100644 --- a/tsvm_core/src/net/torvald/tsvm/peripheral/RamBank.kt +++ b/tsvm_core/src/net/torvald/tsvm/peripheral/RamBank.kt @@ -8,7 +8,9 @@ import java.io.File /** * Created by minjaesong on 2022-07-20. */ -open class RamBank(val vm: VM, bankCount: Int, val writable: Boolean = true) : PeriBase("ramb") { +open class RamBank(val vm: VM, bankCount: Int) : PeriBase("ramb") { + + open val writable = true val bankSize = 524288L @@ -283,12 +285,13 @@ open class RamBank(val vm: VM, bankCount: Int, val writable: Boolean = true) : P override fun getVM() = vm } -open class RomBank(vm: VM, romfile: File, bankCount: Int) : RamBank(vm, bankCount, false) { +open class RomBank(vm: VM, romfile: File, bankCount: Int) : RamBank(vm, bankCount) { init { val bytes = romfile.readBytes() UnsafeHelper.memcpyRaw(bytes, 0, null, mem.ptr, bytes.size.toLong()) } override val typestring = "romb" + override val writable = false override fun poke(addr: Long, byte: Byte) { } diff --git a/tsvm_executable/src/net/torvald/tsvm/VMEmuExecutable.kt b/tsvm_executable/src/net/torvald/tsvm/VMEmuExecutable.kt index 683529e..911570c 100644 --- a/tsvm_executable/src/net/torvald/tsvm/VMEmuExecutable.kt +++ b/tsvm_executable/src/net/torvald/tsvm/VMEmuExecutable.kt @@ -421,13 +421,16 @@ class VMEmuExecutable(val windowWidth: Int, val windowHeight: Int, var panelsX: "DUMMY" to dummyMenu ) - private val menuTabs = listOf("Profiles", "MMIO", "MMU", "COM", "Card1", "Card2", "Card3", "Card4", "Card5", "Card6", "Card7", "Setup") + private val menuTabs = listOf("Profiles", "MMIO", "MMU", "COM1", "COM2", "COM3", "COM4", "Crd1", "Crd2", "Crd3", "Crd4", "Crd5", "Crd6", "Crd7") private val tabPos = (menuTabs + "").mapIndexed { index, _ -> 1 + menuTabs.subList(0, index).sumBy { it.length } + 2 * index } private val tabs = arrayOf( 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), // COM1 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // COM2 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // COM3 + DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // COM4 DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card1 DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card2 DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card3 @@ -435,10 +438,12 @@ class VMEmuExecutable(val windowWidth: Int, val windowHeight: Int, var panelsX: 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 + private val cardTabIndex = menuTabs.indexOf("Crd1") + private val comTabIndex = menuTabs.indexOf("COM1") + private var tabChangeRequested: Int? = 0 // null: not requested // call this whenever the VM selection has changed @@ -450,7 +455,20 @@ class VMEmuExecutable(val windowWidth: Int, val windowHeight: Int, var panelsX: val periType = vm.peripheralTable[i].type ?: "DUMMY" val menu = menuRepository[periType] ?: dummyMenu menu.cardIndex = i - tabs[3 + i] = menu + tabs[cardTabIndex + i - 1] = menu + } + } + } + // call this whenever the VM selection has changed + private fun refreshComTabs() { + val vm = getCurrentlySelectedVM()?.vm + + if (vm != null) { + for (i in 1..7) { + val periType = TODO() ?: "DUMMY" + val menu = menuRepository[periType] ?: dummyMenu + menu.cardIndex = i // COM will recycle cardIndex + tabs[comTabIndex + i - 1] = menu } } }