From cab26997941252539256b7648ee54e80f0006ff0 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 21 Sep 2022 21:26:18 +0900 Subject: [PATCH] new clcd ui (this will be the new default portable machine) --- assets/clcd.kra | 3 + assets/clcd.png | Bin 0 -> 9966 bytes assets/disk0/tvdos/bin/encodeipf.js | 2 +- assets/lcd.png | Bin 3758 -> 3761 bytes assets/lcd2.png | Bin 2745 -> 2732 bytes .../torvald/tsvm/peripheral/CLCDDisplay.kt | 71 ++++++++++++++++++ .../tsvm/peripheral/CharacterLCDdisplay.kt | 2 +- .../src/net/torvald/tsvm/AppLoader.java | 12 +-- 8 files changed, 82 insertions(+), 8 deletions(-) create mode 100644 assets/clcd.kra create mode 100644 assets/clcd.png create mode 100644 tsvm_core/src/net/torvald/tsvm/peripheral/CLCDDisplay.kt diff --git a/assets/clcd.kra b/assets/clcd.kra new file mode 100644 index 0000000..9781035 --- /dev/null +++ b/assets/clcd.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9421834ba5ad160d97a55ab426d7bcbfcb2ab092e5ef276cf79361419b49e265 +size 31181 diff --git a/assets/clcd.png b/assets/clcd.png new file mode 100644 index 0000000000000000000000000000000000000000..a21142e1a67168c593a1007ed55aab04d552d546 GIT binary patch literal 9966 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 G?*9TaW?{wv delta 3300 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 diff --git a/assets/lcd2.png b/assets/lcd2.png index 1be472aa5c274ca025d7f7e1b275a2e44639b571..7fd5a140553411a3f40011d4c87d01214e7a274f 100644 GIT binary patch delta 2559 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 m;Ox6G**6OGqLUX2fE5V`s`PvX?9L (-1).toByte() + else -> super.peek(addr) + } + } + + override fun poke(addr: Long, byte: Byte) { + when (addr) { + in 0 until 250880 -> { /*do nothing*/ } + else -> super.poke(addr, byte) + } + }*/ + + override fun render( + delta: Float, + batch: SpriteBatch, + xoff: Float, + yoff: Float, + flipY: Boolean, + uiFBO: FrameBuffer? + ) { + batch.shader = null + batch.inUse { + batch.color = Color.WHITE + batch.draw(machine, xoff, yoff) + } + super.render(delta, batch, xoff+60, yoff+90, flipY, uiFBO) + } + + + + fun currentTimeInMills(): Long { + vm.poke(-69, -1) + var r = 0L + for (i in 0L..7L) { + r = r or vm.peek(-81 - i)!!.toUlong().shl(8 * i.toInt()) + } + return r + } + + + override fun dispose() { + machine.dispose() + lcdFont.dispose() + super.dispose() + } +} \ No newline at end of file diff --git a/tsvm_core/src/net/torvald/tsvm/peripheral/CharacterLCDdisplay.kt b/tsvm_core/src/net/torvald/tsvm/peripheral/CharacterLCDdisplay.kt index cfc6fb4..82a2052 100644 --- a/tsvm_core/src/net/torvald/tsvm/peripheral/CharacterLCDdisplay.kt +++ b/tsvm_core/src/net/torvald/tsvm/peripheral/CharacterLCDdisplay.kt @@ -9,7 +9,7 @@ import net.torvald.tsvm.TsvmTextureRegionPack import net.torvald.tsvm.VM class CharacterLCDdisplay(assetsRoot: String, vm: VM) : GraphicsAdapter(assetsRoot, vm, AdapterConfig( - "pmlcd_inverted", 240, 64, 40, 8, 253, 255, 262144L, "lcd2.png", 0.7f, TEXT_TILING_SHADER_LCD, DRAW_SHADER_FRAG_LCD, 2f + "pmlcd_inverted", 480, 128, 40, 16, 253, 255, 262144L, "lcd2.png", 0.7f, TEXT_TILING_SHADER_LCD, DRAW_SHADER_FRAG_LCD, 2f ) ) { diff --git a/tsvm_executable/src/net/torvald/tsvm/AppLoader.java b/tsvm_executable/src/net/torvald/tsvm/AppLoader.java index 7a0cd8c..78d403c 100644 --- a/tsvm_executable/src/net/torvald/tsvm/AppLoader.java +++ b/tsvm_executable/src/net/torvald/tsvm/AppLoader.java @@ -12,8 +12,8 @@ public class AppLoader { public static String appTitle = "tsvm"; public static Lwjgl3ApplicationConfiguration appConfig; - public static int WIDTH = 640;//810;//720; - public static int HEIGHT = 480;//360;//480; + public static int WIDTH = 1080;//810;//720; + public static int HEIGHT = 436;//360;//480; public static void main(String[] args) { ShaderProgram.pedantic = false; @@ -30,10 +30,10 @@ public class AppLoader { // 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[]{TandemBios.INSTANCE, BasicRom.INSTANCE}); + VM vm = new VM("./assets", 64 << 10, new TheRealWorld(), new VMProgramRom[]{TandemBios.INSTANCE, BasicRom.INSTANCE}, 2); // VM vm = new VM(128 << 10, new TheRealWorld(), new VMProgramRom[]{BasicBios.INSTANCE, WPBios.INSTANCE}); // VM vm = new VM("./assets", 8192 << 10, new TheRealWorld(), new VMProgramRom[]{TsvmBios.INSTANCE}); - VM vm = new VM("./assets", 8192 << 10, new TheRealWorld(), new VMProgramRom[]{OpenBios.INSTANCE}, 8); +// VM vm = new VM("./assets", 8192 << 10, new TheRealWorld(), new VMProgramRom[]{OpenBios.INSTANCE}, 8); VM pipvm = new VM("./assets", 4096, new TheRealWorld(), new VMProgramRom[]{PipBios.INSTANCE, PipROM.INSTANCE}, 8); String diskPath = "assets/disk0"; @@ -41,7 +41,7 @@ public class AppLoader { EmulInstance reference = new EmulInstance(vm, "net.torvald.tsvm.peripheral.ReferenceGraphicsAdapter2", diskPath, 560, 448); EmulInstance reference2 = new EmulInstance(vm, "net.torvald.tsvm.peripheral.ReferenceLikeLCD", diskPath, 560, 448); EmulInstance term = new EmulInstance(vm, "net.torvald.tsvm.peripheral.Term", diskPath, 720, 480); - EmulInstance portable = new EmulInstance(vm, "net.torvald.tsvm.peripheral.CharacterLCDdisplay", diskPath, 628, 302); + EmulInstance portable = new EmulInstance(vm, "net.torvald.tsvm.peripheral.CLCDDisplay", diskPath, 1080, 436); EmulInstance wp = new EmulInstance(vm, "net.torvald.tsvm.peripheral.WpTerm", "assets/wpdisk", 810, 360); EmulInstance pip = new EmulInstance(pipvm, null, diskPath, 640, 480, CollectionsKt.listOf(new Pair(1, new PeripheralEntry2( 32768L, @@ -51,6 +51,6 @@ public class AppLoader { pipvm, 160, 140 )))); - new Lwjgl3Application(new VMGUI(reference, WIDTH, HEIGHT), appConfig); + new Lwjgl3Application(new VMGUI(portable, WIDTH, HEIGHT), appConfig); } }