diff --git a/assets/!BOOTSEC b/assets/!BOOTSEC new file mode 100644 index 0000000..d014ab6 --- /dev/null +++ b/assets/!BOOTSEC @@ -0,0 +1 @@ +let p=_BIOS.FIRST_BOOTABLE_PORT;com.sendMessage(p[0],'OPENR"tvdos/TVDOS.SYS",'+p[1]);let r=com.getStatusCode(p[0]);if(0==r)if(com.sendMessage(p[0],"READ"),r=com.getStatusCode([0]),0==r){let g=com.pullMessage(p[0]);eval(g)}else println("I/O Error");else println("TVDOS.SYS not found"); \ No newline at end of file diff --git a/assets/bios1.js b/assets/bios1.js index d7dc9e1..c193e58 100644 --- a/assets/bios1.js +++ b/assets/bios1.js @@ -82,4 +82,5 @@ Object.freeze(_BIOS); /////////////////////////////////////////////////////////////////////////////// +// TODO load a bootsector using 'LOADBOOT' con.move(4,1); \ No newline at end of file diff --git a/assets/bootsec_source.js b/assets/bootsec_source.js new file mode 100644 index 0000000..05ffb6a --- /dev/null +++ b/assets/bootsec_source.js @@ -0,0 +1,17 @@ +// load TVDOS.SYS +let p = _BIOS.FIRST_BOOTABLE_PORT; +com.sendMessage(p[0], 'OPENR"tvdos/TVDOS.SYS",'+p[1]); +let r = com.getStatusCode(p[0]); +if (r == 0){ + com.sendMessage(p[0], "READ"); + r = com.getStatusCode([0]); + if (r == 0) { + let g=com.pullMessage(p[0]); + eval(g); + 0; + } + else + println("I/O Error"); +} +else + println("TVDOS.SYS not found"); diff --git a/assets/tvdos/TVDOS.SYS b/assets/tvdos/TVDOS.SYS index 37f29e8..7a7893e 100644 --- a/assets/tvdos/TVDOS.SYS +++ b/assets/tvdos/TVDOS.SYS @@ -1,11 +1,11 @@ -// Boot script +// define TVDOS var _TVDOS = {}; _TVDOS.VERSION = "1.0"; _TVDOS.DRIVES = {}; // Object where key-value pair is : [serial-port, drive-number] // actually figure out the drive letter association // Drive A is always the device we're currently on _TVDOS.DRIVES["A"] = _BIOS.FIRST_BOOTABLE_PORT; - +//TODO Object.freeze(_TVDOS); @@ -53,4 +53,16 @@ filesystem.readAll = function(driveLetter) { } return com.pullMessage(port[0]); }; -Object.freeze(filesystem); \ No newline at end of file +Object.freeze(filesystem); + +/////////////////////////////////////////////////////////////////////////////// + +// install other stuffs +filesystem.open("A", "tvdos/gl.js", "R"); +var GL = eval(filesystem.readAll("A")); + +/////////////////////////////////////////////////////////////////////////////// + +// Boot script +filesystem.open("A", "tvdos/command.js", "R"); +eval(filesystem.readAll("A")); diff --git a/assets/tvdos/flsh.js b/assets/tvdos/flsh.js index 75756e8..8b0f957 100644 --- a/assets/tvdos/flsh.js +++ b/assets/tvdos/flsh.js @@ -7,11 +7,11 @@ const welcome_text = "TSVM Disk Operating System, version " + _TVDOS.VERSION; function print_prompt_text() { // oh-my-zsh-like prompt con.color_pair(239,161); - print(" "+CURRENT_DRIVE); + print(" "+CURRENT_DRIVE+":"); con.color_pair(161,253); con.addch(16); con.color_pair(0,253); - print("\\"+shell_pwd.join("\\")); + print(" \\"+shell_pwd.join("\\")+" "); con.color_pair(253,255); con.addch(16); con.addch(32); diff --git a/assets/tvdos/gl.js b/assets/tvdos/gl.js index fd9d625..9b7e280 100644 --- a/assets/tvdos/gl.js +++ b/assets/tvdos/gl.js @@ -101,4 +101,4 @@ GL.drawSpriteOver = function(sheet, xi, yi, x, y) { } }; -Object.freeze(GL); +Object.freeze(GL); // this returns frozen 'GL' diff --git a/src/net/torvald/tsvm/VMGUI.kt b/src/net/torvald/tsvm/VMGUI.kt index f7eb732..f0c2ecf 100644 --- a/src/net/torvald/tsvm/VMGUI.kt +++ b/src/net/torvald/tsvm/VMGUI.kt @@ -60,30 +60,22 @@ class VMGUI(val appConfig: LwjglApplicationConfiguration) : ApplicationAdapter() val bios = fr1.readText() fr1.close() - - val fr2 = FileReader("./assets/tvdos/gl.js") - val tvgl = fr2.readText() - fr2.close() - - val fr3 = FileReader("./assets/tvdos/TVDOS.SYS") - val tvknl = fr3.readText() - fr3.close() - - //val fr = FileReader("./assets/tvdos/command.js") //val fr = FileReader("./assets/zippytest.js") //val fr = FileReader("./assets/serialtest.js") //val fr = FileReader("./assets/tvdos/fsh.js") - val fr = FileReader("./assets/tvdos/flsh.js") + //val fr = FileReader("./assets/tvdos/flsh.js") //val fr = FileReader("./assets/tbas/basic.js") //val fr = FileReader("./assets/jscon.js") + val fr = FileReader("./assets/!BOOTSEC") val prg = fr.readText() fr.close() vmRunner = VMRunnerFactory(vm, "js") coroutineJob = GlobalScope.launch { - vmRunner.evalGlobal("$bios\n$tvknl\n$tvgl") - vmRunner.executeCommand(prg) + //vmRunner.evalGlobal("$bios") + //vmRunner.executeCommand(prg) + vmRunner.executeCommand("$bios\n$prg") } } diff --git a/src/net/torvald/tsvm/peripheral/IOSpace.kt b/src/net/torvald/tsvm/peripheral/IOSpace.kt index e8e817f..b3bda14 100644 --- a/src/net/torvald/tsvm/peripheral/IOSpace.kt +++ b/src/net/torvald/tsvm/peripheral/IOSpace.kt @@ -5,6 +5,7 @@ import com.badlogic.gdx.InputProcessor import net.torvald.UnsafeHelper import net.torvald.tsvm.VM import net.torvald.util.CircularArray +import java.io.File import kotlin.experimental.and class IOSpace(val vm: VM) : PeriBase, InputProcessor { @@ -39,7 +40,7 @@ class IOSpace(val vm: VM) : PeriBase, InputProcessor { init { blockTransferPorts[1].attachDevice(TestFunctionGenerator()) - blockTransferPorts[0].attachDevice(TestDiskDrive(0)) + blockTransferPorts[0].attachDevice(TestDiskDrive(0, File("assets/"))) } private fun composeBlockTransferStatus(portno: Int): Int { diff --git a/src/net/torvald/tsvm/peripheral/TestDiskDrive.kt b/src/net/torvald/tsvm/peripheral/TestDiskDrive.kt index 06776b1..2ce1c48 100644 --- a/src/net/torvald/tsvm/peripheral/TestDiskDrive.kt +++ b/src/net/torvald/tsvm/peripheral/TestDiskDrive.kt @@ -6,7 +6,7 @@ import java.io.File import java.io.IOException import java.util.* -class TestDiskDrive(private val driveNum: Int) : BlockTransferInterface(false, true) { +class TestDiskDrive(private val driveNum: Int, theRootPath: File? = null) : BlockTransferInterface(false, true) { companion object { const val STATE_CODE_STANDBY = 0 @@ -41,7 +41,7 @@ class TestDiskDrive(private val driveNum: Int) : BlockTransferInterface(false, t return sb.toByteArray() } - private val rootPath = File("test_assets/test_drive_$driveNum") + private val rootPath = theRootPath ?: File("test_assets/test_drive_$driveNum") private var fileOpen = false private var fileOpenMode = -1 // 1: 'W", 2: 'A'