From eb58838a5711f7b91b948af97c1f7aee280b309c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 27 Apr 2021 16:02:30 +0900 Subject: [PATCH] graphics: fixed pixels not plotting on non crt_color --- assets/bios/tandemport.js | 39 ++++++---------- assets/bw_r8_to_bits.c | 44 ++++++++++++++++++ assets/disk0/home/logotest.js | 24 ++++------ assets/tandem_logo_240.bin.gz | 3 ++ assets/tandem_logo_240.bin.gz.txt | 1 + assets/tandem_logo_240.kra | 3 ++ assets/tandem_logo_240.r8 | Bin 0 -> 9600 bytes src/net/torvald/tsvm/AppLoader.java | 2 +- .../torvald/tsvm/GraphicsJSR223Delegate.kt | 12 ++--- .../tsvm/peripheral/GraphicsAdapter.kt | 13 ++---- .../torvald/tsvm/peripheral/TexticsAdapter.kt | 4 +- 11 files changed, 85 insertions(+), 60 deletions(-) create mode 100644 assets/bw_r8_to_bits.c create mode 100644 assets/tandem_logo_240.bin.gz create mode 100644 assets/tandem_logo_240.bin.gz.txt create mode 100644 assets/tandem_logo_240.kra create mode 100644 assets/tandem_logo_240.r8 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 0000000000000000000000000000000000000000..a4f3b0daad1b5ca35aeb19732b11dfbb7c1b7a40 GIT binary patch literal 9600 zcmdT|$#xqt49g+^|I4XFkpw_e<1FoKn}Y>nljIp6+K;zS{eA2|aT>!PqQ0@h$y&oH z&FFUQOFWdl=-{Jd%>Z^yp-c0ljA-wHwh)(!Fb+c*7mV^)R7q4qoo~EfR;~TWlKsApaq4Cn(i&#c>Is{Zh5iImD zPGym{wPpG-n`IHV?5pn7QMxD$7v!;vO7v8gdu~A90|%;kF4v_u&-Q3J+8Nq(2&j%u zveAtg%f@XZ`X}#;Um|_a;}PRDx!Rd?x`MIn$M-!2!=}{yVrPU$BVGm`514uo_8X94uxx$Pvo8Y&z?3K*$pEBQ(?#ITFKN(;vLu;(5gF3L z{Qr92e0}7KGSGeLi}>r$SI#Iy9vCc8h{DJaj=e&7c<(t-GLd&njJ#gcPXY?qMJ&PN z5JCoS;0rJQ?xPS)KrVv-qU44*0lfYI^M%zc?A|Yg3~o3J6x~KlI#48`J8~wV;ZNMx z0w|z7lZ>}TW*Mm93qGV!M#yBE0TC=76-uCt$IB$+t;#IJZJ+gk;hT{~A(8)uf;}k> zQg$}_eeww>0~f4((XJc8HzNx|`oO7FdB5*S>G>GWPCnseC|4}nywQ)Ium1YqzItCA za2M^r&M>ErHX*zv`GfS0`_idaDXJ7-_G6l(&cCG8Ad?Kd4r<7TymRIu3`H5nuK%Cb( zoeLBVBbh)t(p-}daSARX(NZ>sDtYGoM3+;INb3SB>eTWsOAHY~x2%}C z<~eaRF3S&qd7hu_HS1o`h8A0xGGdD&45O4qkbIpA##eZaz=&_16ZjvprNhh?qRp^0 z7(3! (-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) } }