From 14ffc294e32a3f2a33f3874cce728e42335d6a97 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 23 Apr 2021 23:55:26 +0900 Subject: [PATCH] RESET button impl but won't boot after the reset --- src/net/torvald/tsvm/VM.kt | 6 +++++- src/net/torvald/tsvm/VMGUI.kt | 20 +++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/net/torvald/tsvm/VM.kt b/src/net/torvald/tsvm/VM.kt index 67c5a74..50ec95f 100644 --- a/src/net/torvald/tsvm/VM.kt +++ b/src/net/torvald/tsvm/VM.kt @@ -45,7 +45,7 @@ class VM( var getErrorStream: () -> OutputStream = { TODO() } var getInputStream: () -> InputStream = { TODO() } - val startTime: Long + var startTime: Long = -1 var resetDown = false var stopDown = false @@ -54,6 +54,10 @@ class VM( internal set init { + init() + } + + fun init() { peripheralTable[0] = PeripheralEntry( "io", IOSpace(this), diff --git a/src/net/torvald/tsvm/VMGUI.kt b/src/net/torvald/tsvm/VMGUI.kt index 5f399b0..94319c6 100644 --- a/src/net/torvald/tsvm/VMGUI.kt +++ b/src/net/torvald/tsvm/VMGUI.kt @@ -84,6 +84,17 @@ class VMGUI(val loaderInfo: EmulInstance) : ApplicationAdapter() { } } + private var rebootRequested = false + + private fun reboot() { + coroutineJob.cancel("reboot requested") + + vmRunner = VMRunnerFactory(vm, "js") + coroutineJob = GlobalScope.launch { + vmRunner.executeCommand(vm.roms[0]!!.readAll()) + } + } + private var updateAkku = 0.0 private var updateRate = 1f / 60f @@ -113,14 +124,21 @@ class VMGUI(val loaderInfo: EmulInstance) : ApplicationAdapter() { private var latch = true private fun updateGame(delta: Float) { + if (!vm.resetDown && rebootRequested) { + reboot() + vm.init() + rebootRequested = false + } + vm.update(delta) + + if (vm.resetDown) rebootRequested = true } fun poke(addr: Long, value: Byte) = vm.poke(addr, value) private fun renderGame(delta: Float) { gpu.render(delta, batch, 0f, 0f) - //batch.inUse { batch.draw(testTex, 0f, 0f) } } private fun setCameraPosition(newX: Float, newY: Float) {