mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-15 00:44:05 +09:00
emulator loading parameters are now neatly packed into a dataclass
This commit is contained in:
@@ -30,10 +30,15 @@ public class AppLoader {
|
|||||||
// val vm = VM(64.kB(), TheRealWorld(), arrayOf(GenericBios))
|
// 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[]{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[]{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[]{QuickBios.INSTANCE});
|
||||||
//VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{TBASRelBios.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) {
|
public static ShaderProgram loadShaderFromFile(String vert, String frag) {
|
||||||
|
|||||||
@@ -12,7 +12,18 @@ import java.io.File
|
|||||||
|
|
||||||
fun ByteArray.startsWith(other: ByteArray) = this.sliceArray(other.indices).contentEquals(other)
|
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 batch: SpriteBatch
|
||||||
lateinit var camera: OrthographicCamera
|
lateinit var camera: OrthographicCamera
|
||||||
@@ -41,13 +52,14 @@ class VMGUI(val vm: VM, val appConfig: LwjglApplicationConfiguration) : Applicat
|
|||||||
camera.setToOrtho(false)
|
camera.setToOrtho(false)
|
||||||
camera.update()
|
camera.update()
|
||||||
batch.projectionMatrix = camera.combined
|
batch.projectionMatrix = camera.combined
|
||||||
//Gdx.gl20.glViewport(0, 0, appConfig.width, appConfig.height)
|
|
||||||
|
|
||||||
|
|
||||||
//gpu = GraphicsAdapter(vm, GraphicsAdapter.DEFAULT_CONFIG_COLOR_CRT)
|
val loadedClass = Class.forName(loaderInfo.display)
|
||||||
//gpu = GraphicsAdapter(vm, GraphicsAdapter.DEFAULT_CONFIG_PMLCD)
|
val loadedClassConstructor = loadedClass.getConstructor(vm::class.java)
|
||||||
//gpu = TexticsAdapter(vm)
|
val loadedClassInstance = loadedClassConstructor.newInstance(vm)
|
||||||
gpu = CharacterLCDdisplay(vm)
|
gpu = (loadedClassInstance as GraphicsAdapter)
|
||||||
|
|
||||||
|
vm.getIO().blockTransferPorts[0].attachDevice(TestDiskDrive(vm, 0, File(loaderInfo.diskPath)))
|
||||||
|
|
||||||
vm.peripheralTable[1] = PeripheralEntry(
|
vm.peripheralTable[1] = PeripheralEntry(
|
||||||
VM.PERITYPE_GPU_AND_TERM,
|
VM.PERITYPE_GPU_AND_TERM,
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ data class SuperGraphicsAddonConfig(
|
|||||||
val hasSecondBank: Boolean = false
|
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
|
* NOTE: if TTY size is greater than 80*32, SEGFAULT will occur because text buffer is fixed in size
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -41,7 +41,9 @@ class IOSpace(val vm: VM) : PeriBase, InputProcessor {
|
|||||||
init {
|
init {
|
||||||
//blockTransferPorts[1].attachDevice(TestFunctionGenerator())
|
//blockTransferPorts[1].attachDevice(TestFunctionGenerator())
|
||||||
//blockTransferPorts[0].attachDevice(TestDiskDrive(vm, 0, File("assets")))
|
//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 {
|
private fun composeBlockTransferStatus(portno: Int): Int {
|
||||||
|
|||||||
Reference in New Issue
Block a user