mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-03-08 12:11:51 +09:00
bootable from encrypted bios
This commit is contained in:
BIN
assets/bios/tsvmbios.bin
Normal file
BIN
assets/bios/tsvmbios.bin
Normal file
Binary file not shown.
@@ -6,6 +6,7 @@ import net.torvald.tsvm.CompressorDelegate
|
||||
import net.torvald.tsvm.CompressorDelegate.Companion.GZIP_HEADER
|
||||
import net.torvald.tsvm.VM
|
||||
import java.io.File
|
||||
import kotlin.experimental.xor
|
||||
|
||||
open class VMProgramRom {
|
||||
private val contents: ByteArray
|
||||
@@ -26,13 +27,58 @@ open class VMProgramRom {
|
||||
|
||||
fun readAll(): String {
|
||||
// check if bios is compressed in gzip
|
||||
return if (contents.startsWith(GZIP_HEADER))
|
||||
return if (contents.startsWith(byteArrayOf(31, -85, 26)))
|
||||
CompressorDelegate.decomp(dec(contents)).toString(VM.CHARSET)
|
||||
else if (contents.startsWith(GZIP_HEADER))
|
||||
CompressorDelegate.decomp(contents).toString(VM.CHARSET)
|
||||
else
|
||||
contents.toString(VM.CHARSET)
|
||||
}
|
||||
|
||||
fun get(addr: Int): Byte = contents[addr]
|
||||
|
||||
|
||||
private fun seq(s: String): String {
|
||||
var out = ""
|
||||
var cnt = 0
|
||||
var oldchar = s[0]
|
||||
for (char in s) {
|
||||
if (char == oldchar) {
|
||||
cnt += 1
|
||||
}
|
||||
else {
|
||||
out += "$cnt$oldchar"
|
||||
cnt = 1
|
||||
}
|
||||
oldchar = char
|
||||
}
|
||||
return out + cnt + oldchar
|
||||
}
|
||||
|
||||
private data class EncState(
|
||||
var key: String = "00",
|
||||
var keyBytes: ByteArray = byteArrayOf(0),
|
||||
var keyCursor: Int = 0
|
||||
)
|
||||
|
||||
private fun getNewKeySeq(s: EncState) {
|
||||
s.key = seq(s.key)
|
||||
s.keyCursor = 0
|
||||
s.keyBytes = ByteArray(s.key.length / 2) {
|
||||
Integer.parseInt(s.key.substring(it*2, it*2 + 2), 16).toByte()
|
||||
}
|
||||
}
|
||||
|
||||
private fun dec(b: ByteArray): ByteArray {
|
||||
val s = EncState()
|
||||
return ByteArray(b.size) {
|
||||
(b[it] xor s.keyBytes[s.keyCursor++]).also {
|
||||
if (s.keyCursor >= s.keyBytes.size) {
|
||||
getNewKeySeq(s)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object GenericBios : VMProgramRom(File("./assets/bios/bios1.bin"))
|
||||
@@ -40,7 +86,7 @@ object OEMBios : VMProgramRom(File("./assets/bios/TBMBIOS.js"))
|
||||
object QuickBios : VMProgramRom(File("./assets/bios/quick.js"))
|
||||
object BasicBios : VMProgramRom(File("./assets/bios/basicbios.js"))
|
||||
object TandemBios : VMProgramRom(File("./assets/bios/tandemport.js"))
|
||||
object TsvmBios : VMProgramRom(File("./assets/bios/tsvmbios.js"))
|
||||
object TsvmBios : VMProgramRom(File("./assets/bios/tsvmbios.bin"))
|
||||
object BasicRom : VMProgramRom(File("./assets/bios/basic.bin"))
|
||||
object WPBios : VMProgramRom(File("./assets/bios/wp.js"))
|
||||
object OpenBios : VMProgramRom(File("./assets/bios/openbios.js"))
|
||||
|
||||
@@ -556,7 +556,7 @@ class VMEmuExecutable(val windowWidth: Int, val windowHeight: Int, var panelsX:
|
||||
"assetsdir":"./assets",
|
||||
"ramsize":8388608,
|
||||
"cardslots":8,
|
||||
"roms":["./assets/bios/tsvmbios.js"],
|
||||
"roms":["./assets/bios/tsvmbios.bin"],
|
||||
"com1":{"cls":"net.torvald.tsvm.peripheral.TestDiskDrive", "args":[0, "./assets/disk0/"]},
|
||||
"com2":{"cls":"net.torvald.tsvm.peripheral.HttpModem", "args":[1024, -1]},
|
||||
"card4":{"cls":"net.torvald.tsvm.peripheral.RamBank", "args":[256]}
|
||||
|
||||
Reference in New Issue
Block a user