diff --git a/assets/bios/tandemport.js b/assets/bios/tandemport.js index 09e8359..1b9186a 100644 --- a/assets/bios/tandemport.js +++ b/assets/bios/tandemport.js @@ -1,37 +1,26 @@ con.curs_set(0) con.clear() let t=`${system.maxmem()>>>10} Kbytes System` -// 0b_HL where H is top pixel -// H-bits -let imgh = [ -[252,0,3,0,0], -[48,0,3,0,0], -[51,239,191,102,255], -[51,237,191,66,219], -[52,45,161,126,219], -[54,109,179,124,219]]; -// L-bits -let imgl = [ -[252,0,3,0,0], -[51,207,31,60,254], -[48,109,191,66,219], -[54,109,179,102,219], -[52,45,161,96,219], -[51,237,159,60,219]]; -let imgc = [32,220,223,219] -for (let y=0;y=0;b--) { -con.mvaddch(y+1,1+x*8+7-b,imgc[(imgh[y][x]>>b&1)<<1|imgl[y][x]>>b&1]) -}}} +let imageBits = gzip.decomp(base64.atob( +"H4sICC62h2ACA3RhbmRlbV9sb2dvXzI0MC5iaW4AhdQ/bsMgGAXwh4hEhyisHSq5R+iYISpX6REydqhkjsZRfASPDJbJ449jQuxUspDsn2XD+z6wAMSIPjiECQOgAwcoIMwQNuoAQ+2TilZlrehbdeioJqspypeTqgfttrXLqhvVljO9qypq/IPqrLLRblcZQQi8oyqqClZwiI+6cdHPVYcdlUnHVmdc5aooypVV+iaS+lYnXMUr9dQjkk6LMsEt/YkRcKL8WlQPj+BO+NtW/vFZpc06Ununcan1S9r3rHL+X+3HgwpkHaim1bPglVSFqFzTpsZeWzWncUZRd+DLTg+HOskL8Jv1+ErtiZk7PaKu4I6W6n8jph+1S+pRd85dOX/Wq6h9UmOjTqg71kAsykD2dI4qnZ5R75RVexbirmWXGSuTTlGF0wH1Dt1R02pg81BtfTIYp5L6qFh0OVWe1NUnUtIb4Dr/QbAEAAA=" +)) +for (let y = 0; y < 40; y++) { + for (let x = 0; x < 30; x++) { + let octet = imageBits[y * 30 + x] + for (let i = 0; i < 8; i++) { + graphics.plotPixel(8*x + i, y+8, ((octet >>> (7 - i)) & 1 != 0) ? 255 : 239) + } + } +} con.move(8,1+(40-t.length>>1)) print(t) // wait arbitrary time -for (let b=0;b<333333;b++) { +for (let b=0;b +#include +#include + +char word_to_byte(char * inbuf) { + return + ((*(inbuf + 0) & 1) << 7) | + ((*(inbuf + 1) & 1) << 6) | + ((*(inbuf + 2) & 1) << 5) | + ((*(inbuf + 3) & 1) << 4) | + ((*(inbuf + 4) & 1) << 3) | + ((*(inbuf + 5) & 1) << 2) | + ((*(inbuf + 6) & 1) << 1) | + ((*(inbuf + 7) & 1) << 0); +} + + +int main(int argc, char const *argv[]) { + FILE * infile; + FILE * outfile; + char word[8]; + + infile = fopen(argv[1], "r"); + outfile = fopen(argv[2], "w"); + + int exit = -1; + while (exit < 0) { + for (int i = 0; i < 8; i++) { + int b = fgetc(infile); + if (b == -1 && exit < 0) exit = i; + word[i] = (char) b; + } + + if (exit == 0) break; // if the first byte is EOF, do not write out + + fputc(word_to_byte(word), outfile); + } + + fflush(outfile); + fclose(infile); + fclose(outfile); + + return 0; +} diff --git a/assets/disk0/home/logotest.js b/assets/disk0/home/logotest.js index ad5fd11..b54f225 100644 --- a/assets/disk0/home/logotest.js +++ b/assets/disk0/home/logotest.js @@ -1,19 +1,15 @@ -var imageBits = gzip.decomp(base64.atob( -"H4sICPx7h2ACA3RhbmRlbV9sb2dvXzI0MC5iaW4A7dQ/boMwFAbwz3Ikd4jitUMleoSOGaL6Kj1Cxg6V8NF8FI7AyIBwPv8hOA6kW6Y8IST4WWC/92zvX/GMsABEj9Y7+BEdoD1vUICfIKJ2MNQ2qqhVlop2XU1Sk5WDoyqHZtFmXZukulJtOdOrqqxmuFGdVFbabCpT4D2fqIqqvBW8hVdNP+vnot2Gyqh9rRPOclFk5coKfRNRh1pHnMUjHah7RB1nZQbX9CekgBPl14IOGODdAX/ryj/eq7RJe2rrNE6lfkn7nlRO/6v9uFGBpB3V1HoUvKIqH5RrWtXQa4umbByR1e042OluV2byBPwm3T9Se2DOne5RVnBDc/W/EbIftIk6oOycq3L+rFdWe6fGBh1RdqyBmJUJ2dIpqHR6QrlTFm1ZiKvmXWasjDoGFU57lDt0Q02tns1DteXJYJyKOgTFrPOpcqeuPJGSvuIpcQH1GZbNgAcAAA==" -)); -for (let y = 0; y < 64; y++) { +con.curs_set(0) +con.clear() +let t=`${system.maxmem()>>>10} Kbytes System` +let imageBits = gzip.decomp(base64.atob( +"H4sICC62h2ACA3RhbmRlbV9sb2dvXzI0MC5iaW4AhdQ/bsMgGAXwh4hEhyisHSq5R+iYISpX6REydqhkjsZRfASPDJbJ449jQuxUspDsn2XD+z6wAMSIPjiECQOgAwcoIMwQNuoAQ+2TilZlrehbdeioJqspypeTqgfttrXLqhvVljO9qypq/IPqrLLRblcZQQi8oyqqClZwiI+6cdHPVYcdlUnHVmdc5aooypVV+iaS+lYnXMUr9dQjkk6LMsEt/YkRcKL8WlQPj+BO+NtW/vFZpc06Ununcan1S9r3rHL+X+3HgwpkHaim1bPglVSFqFzTpsZeWzWncUZRd+DLTg+HOskL8Jv1+ErtiZk7PaKu4I6W6n8jph+1S+pRd85dOX/Wq6h9UmOjTqg71kAsykD2dI4qnZ5R75RVexbirmWXGSuTTlGF0wH1Dt1R02pg81BtfTIYp5L6qFh0OVWe1NUnUtIb4Dr/QbAEAAA=" +)) +for (let y = 0; y < 40; y++) { for (let x = 0; x < 30; x++) { - let word = imageBits[y * 30 + x]; + let octet = imageBits[y * 30 + x] for (let i = 0; i < 8; i++) { - graphics.plotPixel(8*x + i, y, ((word >>> (7 - i)) & 1 != 0) ? 255 : 239); + graphics.plotPixel(8*x + i, y+8, ((octet >>> (7 - i)) & 1 != 0) ? 255 : 239) } } } - -// wait arbitrary time -for (let b=0;b<333333;b++) { - sys.poke(0,(Math.random()*255)|0); - sys.poke(0,0); -} -con.clear(); -graphics.clearPixels(255); +con.move(8,1) \ No newline at end of file diff --git a/assets/tandem_logo_240.bin.gz b/assets/tandem_logo_240.bin.gz new file mode 100644 index 0000000..143324c --- /dev/null +++ b/assets/tandem_logo_240.bin.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31cadce34548003e094098141725f0f9e5882e097a196714a555f1a085f1eeae +size 365 diff --git a/assets/tandem_logo_240.bin.gz.txt b/assets/tandem_logo_240.bin.gz.txt new file mode 100644 index 0000000..4ddd4fc --- /dev/null +++ b/assets/tandem_logo_240.bin.gz.txt @@ -0,0 +1 @@ +H4sICC62h2ACA3RhbmRlbV9sb2dvXzI0MC5iaW4AhdQ/bsMgGAXwh4hEhyisHSq5R+iYISpX6REydqhkjsZRfASPDJbJ449jQuxUspDsn2XD+z6wAMSIPjiECQOgAwcoIMwQNuoAQ+2TilZlrehbdeioJqspypeTqgfttrXLqhvVljO9qypq/IPqrLLRblcZQQi8oyqqClZwiI+6cdHPVYcdlUnHVmdc5aooypVV+iaS+lYnXMUr9dQjkk6LMsEt/YkRcKL8WlQPj+BO+NtW/vFZpc06Ununcan1S9r3rHL+X+3HgwpkHaim1bPglVSFqFzTpsZeWzWncUZRd+DLTg+HOskL8Jv1+ErtiZk7PaKu4I6W6n8jph+1S+pRd85dOX/Wq6h9UmOjTqg71kAsykD2dI4qnZ5R75RVexbirmWXGSuTTlGF0wH1Dt1R02pg81BtfTIYp5L6qFh0OVWe1NUnUtIb4Dr/QbAEAAA= diff --git a/assets/tandem_logo_240.kra b/assets/tandem_logo_240.kra new file mode 100644 index 0000000..a8b344f --- /dev/null +++ b/assets/tandem_logo_240.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06249cdd99df40b2aa2f5273d72ea752ac98e5757e9ef51dba39c330c9fa904e +size 47903 diff --git a/assets/tandem_logo_240.r8 b/assets/tandem_logo_240.r8 new file mode 100644 index 0000000..a4f3b0d Binary files /dev/null and b/assets/tandem_logo_240.r8 differ diff --git a/src/net/torvald/tsvm/AppLoader.java b/src/net/torvald/tsvm/AppLoader.java index b979aab..59f0415 100644 --- a/src/net/torvald/tsvm/AppLoader.java +++ b/src/net/torvald/tsvm/AppLoader.java @@ -38,7 +38,7 @@ public class AppLoader { 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(reference), appConfig); + new LwjglApplication(new VMGUI(portable), appConfig); } public static ShaderProgram loadShaderFromFile(String vert, String frag) { diff --git a/src/net/torvald/tsvm/GraphicsJSR223Delegate.kt b/src/net/torvald/tsvm/GraphicsJSR223Delegate.kt index 3c10e2a..8b66ca8 100644 --- a/src/net/torvald/tsvm/GraphicsJSR223Delegate.kt +++ b/src/net/torvald/tsvm/GraphicsJSR223Delegate.kt @@ -28,15 +28,11 @@ class GraphicsJSR223Delegate(val vm: VM) { } fun loadBulk(fromAddr: Int, toAddr: Int, length: Int) { - getFirstGPU()?.let { - it._loadbulk(fromAddr, toAddr, length) - } + getFirstGPU()?._loadbulk(fromAddr, toAddr, length) } fun storeBulk(fromAddr: Int, toAddr: Int, length: Int) { - getFirstGPU()?.let { - it._storebulk(fromAddr, toAddr, length) - } + getFirstGPU()?._storebulk(fromAddr, toAddr, length) } fun plotPixel(x: Int, y: Int, color: Int) { @@ -74,9 +70,7 @@ class GraphicsJSR223Delegate(val vm: VM) { } fun clearText() { - getFirstGPU()?.let { - it.eraseInDisp(2) - } + getFirstGPU()?.eraseInDisp(2) } fun clearPixels(col: Int) { diff --git a/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt b/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt index 2f11c01..b3a02c1 100644 --- a/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt +++ b/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt @@ -620,8 +620,8 @@ open class GraphicsAdapter(val vm: VM, val config: AdapterConfig, val sgr: Super // feed palette data // must be done every time the shader is "actually loaded" // try this: if above line precedes 'batch.shader = paletteShader', it won't work - outFBObatch.shader.setUniform4fv("pal", paletteOfFloats, 0, paletteOfFloats.size) - if (theme.startsWith("pmlcd")) outFBObatch.shader.setUniformf("lcdBaseCol", LCD_BASE_COL) + paletteShader.setUniform4fv("pal", paletteOfFloats, 0, paletteOfFloats.size) + paletteShader.setUniformf("lcdBaseCol", LCD_BASE_COL) // draw framebuffer outFBObatch.draw(rendertex, 0f, 0f) @@ -648,11 +648,6 @@ open class GraphicsAdapter(val vm: VM, val config: AdapterConfig, val sgr: Super if (drawCursor) ttyFore else spriteAndTextArea[memTextForeOffset + addr].toInt() .and(255) - if (!theme.contains("color")) { - if (back == 255) back = 0 - if (fore == 255) fore = 0 - } - textPixmap.setColor(Color(0f, 0f, char / 255f, 1f)) textPixmap.drawPixel(x, y) textBackPixmap.setColor( @@ -700,7 +695,7 @@ open class GraphicsAdapter(val vm: VM, val config: AdapterConfig, val sgr: Super textShader.setUniformf("screenDimension", WIDTH.toFloat(), HEIGHT.toFloat()) textShader.setUniformf("tilesInAtlas", 16f, 16f) textShader.setUniformf("atlasTexSize", chrrom0.width.toFloat(), chrrom0.height.toFloat()) - if (theme.startsWith("pmlcd")) outFBObatch.shader.setUniformf("lcdBaseCol", LCD_BASE_COL) + textShader.setUniformf("lcdBaseCol", LCD_BASE_COL) outFBObatch.draw(faketex, 0f, 0f, WIDTH.toFloat(), HEIGHT.toFloat()) @@ -830,7 +825,7 @@ uniform vec4 lcdBaseCol; void main(void) { vec4 palCol = pal[int(texture2D(u_texture, v_texCoords).a * 255.0)]; - float lum = floor((3.0 * palCol.r + 4.0 * palCol.g + palCol.b) / 8.0 * intensitySteps) / intensitySteps; + float lum = ceil((3.0 * palCol.r + 4.0 * palCol.g + palCol.b) / 8.0 * intensitySteps) / intensitySteps; vec4 outIntensity = vec4(vec3(1.0 - lum), palCol.a); // LCD output will invert the luminosity. That is, normally white colour will be black on PM-LCD. diff --git a/src/net/torvald/tsvm/peripheral/TexticsAdapter.kt b/src/net/torvald/tsvm/peripheral/TexticsAdapter.kt index 73ff706..5468cd4 100644 --- a/src/net/torvald/tsvm/peripheral/TexticsAdapter.kt +++ b/src/net/torvald/tsvm/peripheral/TexticsAdapter.kt @@ -47,14 +47,14 @@ class TexticsAdapter(vm: VM) : GraphicsAdapter(vm, AdapterConfig( override fun peek(addr: Long): Byte? { return when (addr) { - in 0 until 250880 -> (-1).toByte() + in 0 until 250972 -> (-1).toByte() else -> super.peek(addr) } } override fun poke(addr: Long, byte: Byte) { when (addr) { - in 0 until 250880 -> { /*do nothing*/ } + in 0 until 250972 -> { /*do nothing*/ } else -> super.poke(addr, byte) } }