emulator loading parameters are now neatly packed into a dataclass

This commit is contained in:
minjaesong
2021-04-05 20:22:24 +09:00
parent 3b11cf60c1
commit 38b4566489
4 changed files with 31 additions and 9 deletions

View File

@@ -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) {

View File

@@ -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,

View File

@@ -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
*/

View File

@@ -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 {