diff --git a/src/net/torvald/tsvm/AppLoader.java b/src/net/torvald/tsvm/AppLoader.java index a3e54ed..c2e2dd1 100644 --- a/src/net/torvald/tsvm/AppLoader.java +++ b/src/net/torvald/tsvm/AppLoader.java @@ -30,10 +30,15 @@ public class AppLoader { // val vm = VM(64.kB(), TheRealWorld(), arrayOf(GenericBios)) //VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{BasicBios.INSTANCE, BasicRom.INSTANCE}); //VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{OEMBios.INSTANCE, BasicRom.INSTANCE}); - VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{QuickBios.INSTANCE}); //VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{TBASRelBios.INSTANCE}); - new LwjglApplication(new VMGUI(vm, appConfig), appConfig); + + EmulInstance reference = new EmulInstance(appConfig, vm, "net.torvald.tsvm.peripheral.ReferenceGraphicsAdapter", "assets/disk0"); + EmulInstance reference2 = new EmulInstance(appConfig, vm, "net.torvald.tsvm.peripheral.ReferenceLikeLCD", "assets/disk0"); + EmulInstance term = new EmulInstance(appConfig, vm, "net.torvald.tsvm.peripheral.TexticsAdapter", "assets/disk0"); + EmulInstance portable = new EmulInstance(appConfig, vm, "net.torvald.tsvm.peripheral.CharacterLCDdisplay", "assets/disk0"); + + new LwjglApplication(new VMGUI(portable), appConfig); } public static ShaderProgram loadShaderFromFile(String vert, String frag) { diff --git a/src/net/torvald/tsvm/VMGUI.kt b/src/net/torvald/tsvm/VMGUI.kt index c27202c..5f399b0 100644 --- a/src/net/torvald/tsvm/VMGUI.kt +++ b/src/net/torvald/tsvm/VMGUI.kt @@ -12,7 +12,18 @@ import java.io.File fun ByteArray.startsWith(other: ByteArray) = this.sliceArray(other.indices).contentEquals(other) -class VMGUI(val vm: VM, val appConfig: LwjglApplicationConfiguration) : ApplicationAdapter() { + +data class EmulInstance( + val appConfig: LwjglApplicationConfiguration, + val vm: VM, + val display: String, + val diskPath: String = "assets/disk0" +) + +class VMGUI(val loaderInfo: EmulInstance) : ApplicationAdapter() { + + val appConfig = loaderInfo.appConfig + val vm = loaderInfo.vm lateinit var batch: SpriteBatch lateinit var camera: OrthographicCamera @@ -41,13 +52,14 @@ class VMGUI(val vm: VM, val appConfig: LwjglApplicationConfiguration) : Applicat camera.setToOrtho(false) camera.update() batch.projectionMatrix = camera.combined - //Gdx.gl20.glViewport(0, 0, appConfig.width, appConfig.height) - //gpu = GraphicsAdapter(vm, GraphicsAdapter.DEFAULT_CONFIG_COLOR_CRT) - //gpu = GraphicsAdapter(vm, GraphicsAdapter.DEFAULT_CONFIG_PMLCD) - //gpu = TexticsAdapter(vm) - gpu = CharacterLCDdisplay(vm) + val loadedClass = Class.forName(loaderInfo.display) + val loadedClassConstructor = loadedClass.getConstructor(vm::class.java) + val loadedClassInstance = loadedClassConstructor.newInstance(vm) + gpu = (loadedClassInstance as GraphicsAdapter) + + vm.getIO().blockTransferPorts[0].attachDevice(TestDiskDrive(vm, 0, File(loaderInfo.diskPath))) vm.peripheralTable[1] = PeripheralEntry( VM.PERITYPE_GPU_AND_TERM, diff --git a/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt b/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt index da6dafd..a1504f9 100644 --- a/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt +++ b/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt @@ -36,6 +36,9 @@ data class SuperGraphicsAddonConfig( val hasSecondBank: Boolean = false ) +class ReferenceGraphicsAdapter(vm: VM) : GraphicsAdapter(vm, GraphicsAdapter.DEFAULT_CONFIG_COLOR_CRT) +class ReferenceLikeLCD(vm: VM) : GraphicsAdapter(vm, GraphicsAdapter.DEFAULT_CONFIG_PMLCD) + /** * NOTE: if TTY size is greater than 80*32, SEGFAULT will occur because text buffer is fixed in size */ diff --git a/src/net/torvald/tsvm/peripheral/IOSpace.kt b/src/net/torvald/tsvm/peripheral/IOSpace.kt index 45a5ebc..97742c9 100644 --- a/src/net/torvald/tsvm/peripheral/IOSpace.kt +++ b/src/net/torvald/tsvm/peripheral/IOSpace.kt @@ -41,7 +41,9 @@ class IOSpace(val vm: VM) : PeriBase, InputProcessor { init { //blockTransferPorts[1].attachDevice(TestFunctionGenerator()) //blockTransferPorts[0].attachDevice(TestDiskDrive(vm, 0, File("assets"))) - blockTransferPorts[0].attachDevice(TestDiskDrive(vm, 0, File("assets/disk0"))) + //blockTransferPorts[0].attachDevice(TestDiskDrive(vm, 0, File("assets/disk0"))) + + // for testers: use EmulInstance } private fun composeBlockTransferStatus(portno: Int): Int {