RESET button works now

This commit is contained in:
minjaesong
2021-04-24 09:46:15 +09:00
parent 14ffc294e3
commit 07136a46d9
3 changed files with 17 additions and 10 deletions

View File

@@ -27,7 +27,7 @@ con.mvaddch(y+1,1+x*8+7-b,imgc[(imgh[y][x]>>b&1)<<1|imgl[y][x]>>b&1])
con.move(8,1+(40-t.length>>1)) con.move(8,1+(40-t.length>>1))
print(t) print(t)
// wait arbitrary time // wait arbitrary time
for (let b=0;b<system.maxmem()*10;b++) { for (let b=0;b<333333;b++) {
sys.poke(0,(Math.random()*255)|0) sys.poke(0,(Math.random()*255)|0)
sys.poke(0,0) sys.poke(0,0)
} }

View File

@@ -54,6 +54,10 @@ class VMGUI(val loaderInfo: EmulInstance) : ApplicationAdapter() {
batch.projectionMatrix = camera.combined batch.projectionMatrix = camera.combined
init()
}
private fun init() {
val loadedClass = Class.forName(loaderInfo.display) val loadedClass = Class.forName(loaderInfo.display)
val loadedClassConstructor = loadedClass.getConstructor(vm::class.java) val loadedClassConstructor = loadedClass.getConstructor(vm::class.java)
val loadedClassInstance = loadedClassConstructor.newInstance(vm) val loadedClassInstance = loadedClassConstructor.newInstance(vm)
@@ -87,12 +91,11 @@ class VMGUI(val loaderInfo: EmulInstance) : ApplicationAdapter() {
private var rebootRequested = false private var rebootRequested = false
private fun reboot() { private fun reboot() {
vmRunner.close()
coroutineJob.cancel("reboot requested") coroutineJob.cancel("reboot requested")
vmRunner = VMRunnerFactory(vm, "js") vm.init()
coroutineJob = GlobalScope.launch { init()
vmRunner.executeCommand(vm.roms[0]!!.readAll())
}
} }
private var updateAkku = 0.0 private var updateAkku = 0.0
@@ -121,12 +124,9 @@ class VMGUI(val loaderInfo: EmulInstance) : ApplicationAdapter() {
renderGame(dt) renderGame(dt)
} }
private var latch = true
private fun updateGame(delta: Float) { private fun updateGame(delta: Float) {
if (!vm.resetDown && rebootRequested) { if (!vm.resetDown && rebootRequested) {
reboot() reboot()
vm.init()
rebootRequested = false rebootRequested = false
} }

View File

@@ -8,10 +8,9 @@ import java.io.FileReader
import javax.script.ScriptEngineManager import javax.script.ScriptEngineManager
abstract class VMRunner(val extension: String) { abstract class VMRunner(val extension: String) {
abstract suspend fun executeCommand(command: String) abstract suspend fun executeCommand(command: String)
abstract suspend fun evalGlobal(command: String) abstract suspend fun evalGlobal(command: String)
abstract fun close()
} }
object VMRunnerFactory { object VMRunnerFactory {
@@ -41,6 +40,10 @@ object VMRunnerFactory {
override suspend fun evalGlobal(command: String) { override suspend fun evalGlobal(command: String) {
TODO("Not yet implemented") TODO("Not yet implemented")
} }
override fun close() {
TODO("Not yet implemented")
}
} }
} }
"js" -> { "js" -> {
@@ -84,6 +87,10 @@ object VMRunnerFactory {
override suspend fun evalGlobal(command: String) { override suspend fun evalGlobal(command: String) {
context.eval("js", "\"use strict\";" + sanitiseJS(command)) context.eval("js", "\"use strict\";" + sanitiseJS(command))
} }
override fun close() {
context.close(true)
}
} }
} }
else -> throw UnsupportedOperationException("Unsupported script extension: $extension") else -> throw UnsupportedOperationException("Unsupported script extension: $extension")