mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-13 16:04:05 +09:00
sys.memcpy now has rambank device support
This commit is contained in:
@@ -6,9 +6,7 @@ import kotlinx.coroutines.launch
|
|||||||
import net.torvald.UnsafeHelper
|
import net.torvald.UnsafeHelper
|
||||||
import net.torvald.UnsafePtr
|
import net.torvald.UnsafePtr
|
||||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.toUlong
|
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.toUlong
|
||||||
import net.torvald.tsvm.peripheral.AudioAdapter
|
import net.torvald.tsvm.peripheral.*
|
||||||
import net.torvald.tsvm.peripheral.GraphicsAdapter
|
|
||||||
import net.torvald.tsvm.peripheral.IOSpace
|
|
||||||
import java.nio.charset.Charset
|
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 if (relPtrInDev(fromRel, len, 262144, 513023)) dev.framebuffer2?.ptr?.plus(fromRel)?.minus(253950)
|
||||||
else null
|
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
|
else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ open class RamBank(val vm: VM, bankCount: Int) : PeriBase("ramb") {
|
|||||||
|
|
||||||
internal val mem = UnsafeHelper.allocate(bankSize * banks, this)
|
internal val mem = UnsafeHelper.allocate(bankSize * banks, this)
|
||||||
|
|
||||||
protected var map0 = 0
|
internal var map0 = 0
|
||||||
protected var map1 = 1
|
internal var map1 = 1
|
||||||
|
|
||||||
override fun peek(addr: Long): Byte {
|
override fun peek(addr: Long): Byte {
|
||||||
return when (addr) {
|
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())
|
UnsafeHelper.memcpyRaw(bytes, 0, null, mem.ptr, bytes.size.toLong())
|
||||||
}
|
}
|
||||||
override val typestring = "ROMB"
|
override val typestring = "ROMB"
|
||||||
|
override fun poke(addr: Long, byte: Byte) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -402,15 +402,21 @@ class VMEmuExecutable(val windowWidth: Int, val windowHeight: Int, var panelsX:
|
|||||||
private val menuTabX = windowWidth * (panelsX-1) + 2
|
private val menuTabX = windowWidth * (panelsX-1) + 2
|
||||||
private val menuTabY =windowHeight * (panelsY-1) + FONT.H + 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 tabPos = (menuTabs + "").mapIndexed { index, _ -> 1 + menuTabs.subList(0, index).sumBy { it.length } + 2 * index }
|
||||||
private val tabs = listOf(
|
private val tabs = listOf(
|
||||||
ProfilesMenu(this, menuTabX, menuTabY, menuTabW, menuTabH),
|
ProfilesMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Profiles
|
||||||
MMUMenu(this, menuTabX, menuTabY, menuTabW, menuTabH),
|
DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // MMIO
|
||||||
DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH),
|
MMUMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // MMU
|
||||||
DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH),
|
DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // COM
|
||||||
DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH),
|
DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH), // Card1
|
||||||
DummyMenu(this, menuTabX, menuTabY, menuTabW, menuTabH),
|
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
|
private var menuTabSel = 0
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user