fix rectangle function, change resolution to 320x240

This commit is contained in:
dranke committed 2021-11-14 17:09:37 +01:00
1 parent 289382f351
commit dbe59a45f5
6 files changed
+24 -24

No files matched your search

+10 -10
View File
@@ -34,18 +34,18 @@ export fn cls(col: i32) {
col = (col & 255) * 0x1010101; col = (col & 255) * 0x1010101;
loop pixels { loop pixels {
i!120 = col; i!120 = col;
branch_if (i := i + 4) < 320*256: pixels; branch_if (i := i + 4) < 320*240: pixels;
} }
} }
export fn setPixel(x: i32, y: i32, col: i32) { export fn setPixel(x: i32, y: i32, col: i32) {
if x #< 320 & y #< 256 { if x #< 320 & y #< 240 {
(x + y * 320)?120 = col (x + y * 320)?120 = col
} }
} }
export fn getPixel(x: i32, y: i32) -> i32 { export fn getPixel(x: i32, y: i32) -> i32 {
if x #< 320 & y #< 256 { if x #< 320 & y #< 240 {
(x + y * 320)?120 (x + y * 320)?120
} else { } else {
0 0
@@ -59,7 +59,7 @@ fn clamp(v: i32, min: i32, max: i32) -> i32 {
export fn hline(x1: i32, x2: i32, y: i32, col: i32) { export fn hline(x1: i32, x2: i32, y: i32, col: i32) {
x1 = clamp(x1, 0, 320); x1 = clamp(x1, 0, 320);
x2 = clamp(x2, 0, 320); x2 = clamp(x2, 0, 320);
if x1 < x2 & y #< 256 { if x1 < x2 & y #< 240 {
let ptr = y * 320 + x1; let ptr = y * 320 + x1;
let end = ptr + x2 - x1; let end = ptr + x2 - x1;
loop pixels { loop pixels {
@@ -72,13 +72,13 @@ export fn hline(x1: i32, x2: i32, y: i32, col: i32) {
export fn rectangle(x: f32, y: f32, w: f32, h: f32, col: i32) { export fn rectangle(x: f32, y: f32, w: f32, h: f32, col: i32) {
if abs(w) == w & abs(h) == h { if abs(w) == w & abs(h) == h {
let x1 = nearest(x) as i32; let x1 = nearest(x) as i32;
let y1 = clamp(nearest(y) as i32, 0, 256); let y1 = clamp(nearest(y) as i32, 0, 240);
let x2 = nearest(x + w) as i32; let x2 = nearest(x + w) as i32;
let y2 = clamp(nearest(y + h) as i32, 0, 256); let y2 = clamp(nearest(y + h) as i32, 0, 240);
block done { block done {
loop lines { loop lines {
branch_if y1 >= y2: done; branch_if y1 >= y2: done;
hline(x1, y1, x2, col); hline(x1, x2, y1, col);
y1 = y1 + 1; y1 = y1 + 1;
branch lines; branch lines;
} }
@@ -87,8 +87,8 @@ export fn rectangle(x: f32, y: f32, w: f32, h: f32, col: i32) {
} }
export fn circle(cx: f32, cy: f32, radius: f32, col: i32) { export fn circle(cx: f32, cy: f32, radius: f32, col: i32) {
let y = clamp(nearest(cy - radius) as i32, 0, 256); let y = clamp(nearest(cy - radius) as i32, 0, 240);
let maxY = clamp(nearest(cy + radius) as i32, 0, 256); let maxY = clamp(nearest(cy + radius) as i32, 0, 240);
block done { block done {
loop lines { loop lines {
@@ -110,7 +110,7 @@ export fn circle(cx: f32, cy: f32, radius: f32, col: i32) {
start fn setup() { start fn setup() {
let i: i32; let i: i32;
loop colors { loop colors {
(i*4)!(120+320*256) = i * 0x10101; (i*4)!(120+320*240) = i * 0x10101;
branch_if (i := i + 1) < 256: colors branch_if (i := i + 1) < 256: colors
} }
randomSeed(random()); randomSeed(random());
+3 -3
View File
@@ -83,6 +83,6 @@ possible but no examples are provided, yet.
## Examples ## Examples
* [Technotunnel](v0.1pre2#AQrDAQHAAQIBfwp9A0AgAUEAsiABQcACb7JDmhkgQ5MiBCAEIASUIAFBwAJtQYABa7IiBSAFlJKRIgaVIgcgByAAskHQD7KVIgIQAEPNzEw/lCIDlCAHIAeUIAOUIAOUQQGykiADIAOUk5GSIgiUIAOTQQqylCACkiIJqCAFIAaVIAiUQQqylCACkiIKqHMgCEEyspQgBpUiCyACkkEUspSocUEFcbJBArIgC5OUQRaylJeoOgB4IAFBAWoiAUGAgAVIDQALCw==) (199 bytes): A port of my [entry](https://tic80.com/play?cart=1873) in the Outline'21 bytebattle quater final * [Technotunnel](v0.1pre2#AQrDAQHAAQIBfwp9A0AgAUEAsiABQcACb7JDmhkgQ5MiBCAEIASUIAFBwAJtQfgAa7IiBSAFlJKRIgaVIgcgByAAskHQD7KVIgIQAEPNzEw/lCIDlCAHIAeUIAOUIAOUQQGykiADIAOUk5GSIgiUIAOTQQqylCACkiIJqCAFIAaVIAiUQQqylCACkiIKqHMgCEEyspQgBpUiCyACkkEUspSocUEFcbJBArIgC5OUQRaylJeoOgB4IAFBAWoiAUGA2ARIDQALCw==) (199 bytes): A port of my [entry](https://tic80.com/play?cart=1873) in the Outline'21 bytebattle quater final
* [XorScroll](v0.1pre2#AQovAS0BAX8DQCABIAFBwAJvIABBCm1qIAFBwAJtczoAeCABQQFqIgFBgIAFSA0ACws=) (50 bytes): A simple scrolling XOR pattern. Fun fact: This is the pre-loaded effect when entering a bytebattle. * [XorScroll](v0.1pre2#AQovAS0BAX8DQCABIAFBwAJvIABBCm1qIAFBwAJtczoAeCABQQFqIgFBgNgESA0ACws=) (50 bytes): A simple scrolling XOR pattern. Fun fact: This is the pre-loaded effect when entering a bytebattle.
* [CircleWorm](v0.1pre2#AQp7AXkCAX8CfUEgEA0DQCABskEEspUiAkECspUgALJBiCeylSIDQQWylJIQAEEBspJBoAGylCACQQOylSADQQSylJIQAEEBspJBgAGylCADQRGylCACQQKylJIQAEECspJBELKUIAFBAmxBP2oQEiABQQFqIgFBP0gNAAsL) (126 bytes): Just a test for the circle fill function. * [CircleWorm](v0.1pre2#AQp7AXkCAX8CfUEgEA0DQCABskEEspUiAkECspUgALJBiCeylSIDQQWylJIQAEEBspJBoAGylCACQQOylSADQQSylJIQAEEBspJB+ACylCADQRGylCACQQKylJIQAEECspJBELKUIAFBAmxBP2oQEiABQQFqIgFBP0gNAAsL) (126 bytes): Just a test for the circle fill function.
+1 -1
View File
@@ -1 +1 @@
<!doctype html><html><head><meta charset="utf8"><title>MicroW8</title><link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@500&display=swap" rel="stylesheet"><style>body,canvas,html{margin:0;padding:0}html{background-color:#202024;color:#808070;font-family:Josefin Sans,Verdana,Arial Black,sans-serif}body,html{height:100%}body{display:grid;grid-template-rows:1fr 0fr}#centered{align-self:center;justify-self:center}.footer{color:#202420}a{color:#303630}a:hover{color:#405040}canvas{background-color:#202428;border:4px solid #303040;box-shadow:5px 5px 20px #000}#message,canvas{margin-bottom:8px}.error{color:#e04030}button{background-color:#303440;border:1px solid #404040;border-radius:4px;color:#808070;font-family:inherit;padding:4px}button:hover{background-color:#202010}button:active{background-color:#504450}</style></head><body> <div id="centered"> <canvas id="screen" width="640" height="512"></canvas> <div id="message"></div> <button id="cartButton">Load cart...</button> </div> <div id="footer"> <a href="http://unlicense.org/" ref="license">Unlicense</a> </div> </body><script type="module">function A(A){return A&&A.__esModule?A.default:A}async function n(A,n){let e=await(await fetch(A)).arrayBuffer(),g=await WebAssembly.compile(e);return new WebAssembly.Instance(g,n)}function e(A,n){let e=A?`${A} bytes`:"Insert cart";n&&(e+=` - <span class="error">${n.replaceAll("<","&lt;")}</span>`),document.getElementById("message").innerHTML=e}let g=document.createElement("canvas");g.width=320,g.height=256;let l,t=g.getContext("2d"),f=t.createImageData(320,256),Z=document.getElementById("screen"),B=Z.getContext("2d");async function Q(Q){l&&(l(),l=null);let a=Q.byteLength;if(e(a),0==a)return;let c=new Uint8Array(Q),X=window.location.pathname;if(a<=1024){let A="";for(let n of c)A+=String.fromCharCode(n);X+="#"+btoa(A)}X!=window.location.pathname+window.location.hash&&history.pushState(null,null,X),Z.width=Z.width;try{let Z={env:{memory:new WebAssembly.Memory({initial:9})}},X=Z.env.memory.buffer,C=await n(A("data:application/wasm;base64,AGFzbQEAAAABGgRgBH9%2Ff38Bf2ABfwF%2FYAJ%2FfwF%2FYAN%2Ff38AAg8BA2VudgZtZW1vcnkCAAgDBQQAAQIDBwwBCGxvYWRfdXc4AAAKtAIErwEBBX8gAC0AAEEARgRAIAMgACABIABrIgQQAyADIARqDwsgAyACQQgQAyACQQhqIQIgA0EIaiEFIABBAWohBgNAIAYgAUggAiADTiAGLQAAIAItAABMcnEEQCAFIAUgBhACIgdqIQUgAiADSCAGLQAAIAItAABGcQRAIAIgAhABaiECCyAGIAdqIQYMAQsgAiADSARAIAUgBSACEAIiCGohBSACIAhqIQIMAQsLIAULRwEEfyAAQQFqIQFBACECQQAhAwNAIAIgAS0AACIEQf8AcSADdHIhAiADQQdqIQMgAUEBaiEBIARBgAFxDQALIAEgAGsgAmoLEgEBfyAAIAEgARABIgIQAyACCyYAIAJBAEoEQANAIAAgAkEBayICaiABIAJqLQAAOgAAIAINAAsLCw%3D%3D"),Z),F=await(await fetch(A("data:application/wasm;base64,AGFzbQEAAAABugM%2FYAAAYAABf2AAAX1gAX8AYAF%2FAX9gAX8BfWABfQBgAX0Bf2ABfQF9YAJ%2FfwBgAn9%2FAX9gAn9%2FAX1gAn1%2FAGACfX8Bf2ACfX8BfWACfX0AYAJ9fQF%2FYAJ9fQF9YAN%2Ff38AYAN%2Ff38Bf2ADf39%2FAX1gA31%2FfwBgA31%2FfwF%2FYAN9f38BfWADfX1%2FAGADfX1%2FAX9gA319fwF9YAN9fX0AYAN9fX0Bf2ADfX19AX1gBH9%2Ff38AYAR%2Ff39%2FAX9gBH9%2Ff38BfWAEfX9%2FfwBgBH1%2Ff38Bf2AEfX9%2FfwF9YAR9fX9%2FAGAEfX1%2FfwF%2FYAR9fX9%2FAX1gBH19fX8AYAR9fX1%2FAX9gBH19fX8BfWAEfX19fQBgBH19fX0Bf2AEfX19fQF9YAV%2Ff39%2FfwBgBX9%2Ff39%2FAX9gBX9%2Ff39%2FAX1gBX1%2Ff39%2FAGAFfX9%2Ff38Bf2AFfX9%2Ff38BfWAFfX1%2Ff38AYAV9fX9%2FfwF%2FYAV9fX9%2FfwF9YAV9fX1%2FfwBgBX19fX9%2FAX9gBX19fX9%2FAX1gBX19fX1%2FAGAFfX19fX8Bf2AFfX19fX8BfWAFfX19fX0AYAV9fX19fQF%2FYAV9fX19fQF9AqkKUQNlbnYDc2luAAgDZW52A2NvcwAIA2VudgN0YW4ACANlbnYEYXNpbgAIA2VudgRhY29zAAgDZW52BGF0YW4ACANlbnYFYXRhbjIAEQNlbnYDcG93ABEDZW52A2xvZwAIA2VudgRmbW9kABEDZW52BnJhbmRvbQABA2VudgdyYW5kb21mAAIDZW52CnJhbmRvbVNlZWQAAwNlbnYDY2xzAAMDZW52CHNldFBpeGVsABIDZW52CGdldFBpeGVsAAoDZW52BWhsaW5lAB4DZW52CXJlY3RhbmdsZQA5A2VudgZjaXJjbGUAJwNlbnYKcmVzZXJ2ZWQxOQAAA2VudgpyZXNlcnZlZDIwAAADZW52CnJlc2VydmVkMjEAAANlbnYKcmVzZXJ2ZWQyMgAAA2VudgpyZXNlcnZlZDIzAAADZW52CnJlc2VydmVkMjQAAANlbnYKcmVzZXJ2ZWQyNQAAA2VudgpyZXNlcnZlZDI2AAADZW52CnJlc2VydmVkMjcAAANlbnYKcmVzZXJ2ZWQyOAAAA2VudgpyZXNlcnZlZDI5AAADZW52CnJlc2VydmVkMzAAAANlbnYKcmVzZXJ2ZWQzMQAAA2VudgpyZXNlcnZlZDMyAAADZW52CnJlc2VydmVkMzMAAANlbnYKcmVzZXJ2ZWQzNAAAA2VudgpyZXNlcnZlZDM1AAADZW52CnJlc2VydmVkMzYAAANlbnYKcmVzZXJ2ZWQzNwAAA2VudgpyZXNlcnZlZDM4AAADZW52CnJlc2VydmVkMzkAAANlbnYKcmVzZXJ2ZWQ0MAAAA2VudgpyZXNlcnZlZDQxAAADZW52CnJlc2VydmVkNDIAAANlbnYKcmVzZXJ2ZWQ0MwAAA2VudgpyZXNlcnZlZDQ0AAADZW52CnJlc2VydmVkNDUAAANlbnYKcmVzZXJ2ZWQ0NgAAA2VudgpyZXNlcnZlZDQ3AAADZW52CnJlc2VydmVkNDgAAANlbnYKcmVzZXJ2ZWQ0OQAAA2VudgpyZXNlcnZlZDUwAAADZW52CnJlc2VydmVkNTEAAANlbnYKcmVzZXJ2ZWQ1MgAAA2VudgpyZXNlcnZlZDUzAAADZW52CnJlc2VydmVkNTQAAANlbnYKcmVzZXJ2ZWQ1NQAAA2VudgpyZXNlcnZlZDU2AAADZW52CnJlc2VydmVkNTcAAANlbnYKcmVzZXJ2ZWQ1OAAAA2VudgpyZXNlcnZlZDU5AAADZW52CnJlc2VydmVkNjAAAANlbnYKcmVzZXJ2ZWQ2MQAAA2VudgpyZXNlcnZlZDYyAAADZW52CnJlc2VydmVkNjMAAANlbnYLZ19yZXNlcnZlZDADfwADZW52C2dfcmVzZXJ2ZWQxA38AA2VudgtnX3Jlc2VydmVkMgN%2FAANlbnYLZ19yZXNlcnZlZDMDfwADZW52C2dfcmVzZXJ2ZWQ0A38AA2VudgtnX3Jlc2VydmVkNQN%2FAANlbnYLZ19yZXNlcnZlZDYDfwADZW52C2dfcmVzZXJ2ZWQ3A38AA2VudgtnX3Jlc2VydmVkOAN%2FAANlbnYLZ19yZXNlcnZlZDkDfwADZW52DGdfcmVzZXJ2ZWQxMAN%2FAANlbnYMZ19yZXNlcnZlZDExLine truncated <!doctype html><html><head><meta charset="utf8"><title>MicroW8</title><link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@500&display=swap" rel="stylesheet"><style>body,canvas,html{margin:0;padding:0}html{background-color:#202024;color:#808070;font-family:Josefin Sans,Verdana,Arial Black,sans-serif}body,html{height:100%}body{display:grid;grid-template-rows:1fr 0fr}#centered{align-self:center;justify-self:center}.footer{color:#202420}a{color:#303630}a:hover{color:#405040}canvas{background-color:#202428;border:4px solid #303040;box-shadow:5px 5px 20px #000}#message,canvas{margin-bottom:8px}.error{color:#e04030}button{background-color:#303440;border:1px solid #404040;border-radius:4px;color:#808070;font-family:inherit;padding:4px}button:hover{background-color:#202010}button:active{background-color:#504450}</style></head><body> <div id="centered"> <canvas id="screen" width="640" height="480"></canvas> <div id="message"></div> <button id="cartButton">Load cart...</button> </div> <div id="footer"> <a href="http://unlicense.org/" ref="license">Unlicense</a> </div> </body><script type="module">function A(A){return A&&A.__esModule?A.default:A}async function n(A,n){let e=await(await fetch(A)).arrayBuffer(),g=await WebAssembly.compile(e);return new WebAssembly.Instance(g,n)}function e(A,n){let e=A?`${A} bytes`:"Insert cart";n&&(e+=` - <span class="error">${n.replaceAll("<","&lt;")}</span>`),document.getElementById("message").innerHTML=e}let g=document.createElement("canvas");g.width=320,g.height=240;let l,f=g.getContext("2d"),t=f.createImageData(320,240),B=document.getElementById("screen"),Z=B.getContext("2d");async function Q(Q){l&&(l(),l=null);let a=Q.byteLength;if(e(a),0==a)return;let c=new Uint8Array(Q),X=window.location.pathname;if(a<=1024){let A="";for(let n of c)A+=String.fromCharCode(n);X+="#"+btoa(A)}X!=window.location.pathname+window.location.hash&&history.pushState(null,null,X),B.width=B.width;try{let B={env:{memory:new WebAssembly.Memory({initial:9})}},X=B.env.memory.buffer,C=await n(A("data:application/wasm;base64,AGFzbQEAAAABGgRgBH9%2Ff38Bf2ABfwF%2FYAJ%2FfwF%2FYAN%2Ff38AAg8BA2VudgZtZW1vcnkCAAgDBQQAAQIDBwwBCGxvYWRfdXc4AAAKtAIErwEBBX8gAC0AAEEARgRAIAMgACABIABrIgQQAyADIARqDwsgAyACQQgQAyACQQhqIQIgA0EIaiEFIABBAWohBgNAIAYgAUggAiADTiAGLQAAIAItAABMcnEEQCAFIAUgBhACIgdqIQUgAiADSCAGLQAAIAItAABGcQRAIAIgAhABaiECCyAGIAdqIQYMAQsgAiADSARAIAUgBSACEAIiCGohBSACIAhqIQIMAQsLIAULRwEEfyAAQQFqIQFBACECQQAhAwNAIAIgAS0AACIEQf8AcSADdHIhAiADQQdqIQMgAUEBaiEBIARBgAFxDQALIAEgAGsgAmoLEgEBfyAAIAEgARABIgIQAyACCyYAIAJBAEoEQANAIAAgAkEBayICaiABIAJqLQAAOgAAIAINAAsLCw%3D%3D"),B),F=await(await fetch(A("data:application/wasm;base64,AGFzbQEAAAABugM%2FYAAAYAABf2AAAX1gAX8AYAF%2FAX9gAX8BfWABfQBgAX0Bf2ABfQF9YAJ%2FfwBgAn9%2FAX9gAn9%2FAX1gAn1%2FAGACfX8Bf2ACfX8BfWACfX0AYAJ9fQF%2FYAJ9fQF9YAN%2Ff38AYAN%2Ff38Bf2ADf39%2FAX1gA31%2FfwBgA31%2FfwF%2FYAN9f38BfWADfX1%2FAGADfX1%2FAX9gA319fwF9YAN9fX0AYAN9fX0Bf2ADfX19AX1gBH9%2Ff38AYAR%2Ff39%2FAX9gBH9%2Ff38BfWAEfX9%2FfwBgBH1%2Ff38Bf2AEfX9%2FfwF9YAR9fX9%2FAGAEfX1%2FfwF%2FYAR9fX9%2FAX1gBH19fX8AYAR9fX1%2FAX9gBH19fX8BfWAEfX19fQBgBH19fX0Bf2AEfX19fQF9YAV%2Ff39%2FfwBgBX9%2Ff39%2FAX9gBX9%2Ff39%2FAX1gBX1%2Ff39%2FAGAFfX9%2Ff38Bf2AFfX9%2Ff38BfWAFfX1%2Ff38AYAV9fX9%2FfwF%2FYAV9fX9%2FfwF9YAV9fX1%2FfwBgBX19fX9%2FAX9gBX19fX9%2FAX1gBX19fX1%2FAGAFfX19fX8Bf2AFfX19fX8BfWAFfX19fX0AYAV9fX19fQF%2FYAV9fX19fQF9AqkKUQNlbnYDc2luAAgDZW52A2NvcwAIA2VudgN0YW4ACANlbnYEYXNpbgAIA2VudgRhY29zAAgDZW52BGF0YW4ACANlbnYFYXRhbjIAEQNlbnYDcG93ABEDZW52A2xvZwAIA2VudgRmbW9kABEDZW52BnJhbmRvbQABA2VudgdyYW5kb21mAAIDZW52CnJhbmRvbVNlZWQAAwNlbnYDY2xzAAMDZW52CHNldFBpeGVsABIDZW52CGdldFBpeGVsAAoDZW52BWhsaW5lAB4DZW52CXJlY3RhbmdsZQA5A2VudgZjaXJjbGUAJwNlbnYKcmVzZXJ2ZWQxOQAAA2VudgpyZXNlcnZlZDIwAAADZW52CnJlc2VydmVkMjEAAANlbnYKcmVzZXJ2ZWQyMgAAA2VudgpyZXNlcnZlZDIzAAADZW52CnJlc2VydmVkMjQAAANlbnYKcmVzZXJ2ZWQyNQAAA2VudgpyZXNlcnZlZDI2AAADZW52CnJlc2VydmVkMjcAAANlbnYKcmVzZXJ2ZWQyOAAAA2VudgpyZXNlcnZlZDI5AAADZW52CnJlc2VydmVkMzAAAANlbnYKcmVzZXJ2ZWQzMQAAA2VudgpyZXNlcnZlZDMyAAADZW52CnJlc2VydmVkMzMAAANlbnYKcmVzZXJ2ZWQzNAAAA2VudgpyZXNlcnZlZDM1AAADZW52CnJlc2VydmVkMzYAAANlbnYKcmVzZXJ2ZWQzNwAAA2VudgpyZXNlcnZlZDM4AAADZW52CnJlc2VydmVkMzkAAANlbnYKcmVzZXJ2ZWQ0MAAAA2VudgpyZXNlcnZlZDQxAAADZW52CnJlc2VydmVkNDIAAANlbnYKcmVzZXJ2ZWQ0MwAAA2VudgpyZXNlcnZlZDQ0AAADZW52CnJlc2VydmVkNDUAAANlbnYKcmVzZXJ2ZWQ0NgAAA2VudgpyZXNlcnZlZDQ3AAADZW52CnJlc2VydmVkNDgAAANlbnYKcmVzZXJ2ZWQ0OQAAA2VudgpyZXNlcnZlZDUwAAADZW52CnJlc2VydmVkNTEAAANlbnYKcmVzZXJ2ZWQ1MgAAA2VudgpyZXNlcnZlZDUzAAADZW52CnJlc2VydmVkNTQAAANlbnYKcmVzZXJ2ZWQ1NQAAA2VudgpyZXNlcnZlZDU2AAADZW52CnJlc2VydmVkNTcAAANlbnYKcmVzZXJ2ZWQ1OAAAA2VudgpyZXNlcnZlZDU5AAADZW52CnJlc2VydmVkNjAAAANlbnYKcmVzZXJ2ZWQ2MQAAA2VudgpyZXNlcnZlZDYyAAADZW52CnJlc2VydmVkNjMAAANlbnYLZ19yZXNlcnZlZDADfwADZW52C2dfcmVzZXJ2ZWQxA38AA2VudgtnX3Jlc2VydmVkMgN%2FAANlbnYLZ19yZXNlcnZlZDMDfwADZW52C2dfcmVzZXJ2ZWQ0A38AA2VudgtnX3Jlc2VydmVkNQN%2FAANlbnYLZ19yZXNlcnZlZDYDfwADZW52C2dfcmVzZXJ2ZWQ3A38AA2VudgtnX3Jlc2VydmVkOAN%2FAANlbnYLZ19yZXNlcnZlZDkDfwADZW52DGdfcmVzZXJ2ZWQxMAN%2FAANlbnYMZ19yZXNlcnZlZDExLine truncated
+3 -3
View File
@@ -133,13 +133,13 @@ impl MicroW8 {
)?; )?;
let framebuffer = &instance.memory.data(&instance.store)[120..]; let framebuffer = &instance.memory.data(&instance.store)[120..];
let palette = &framebuffer[320 * 256..]; let palette = &framebuffer[320 * 240..];
for i in 0..320 * 240 { for i in 0..320 * 240 {
let offset = framebuffer[i] as usize * 4; let offset = framebuffer[i] as usize * 4;
self.window_buffer[i] = 0xff000000 self.window_buffer[i] = 0xff000000
| ((palette[offset + 2] as u32) << 16) | ((palette[offset + 0] as u32) << 16)
| ((palette[offset + 1] as u32) << 8) | ((palette[offset + 1] as u32) << 8)
| palette[offset] as u32; | palette[offset + 2] as u32;
} }
self.instance = Some(instance); self.instance = Some(instance);
+1 -1
View File
@@ -10,7 +10,7 @@
</head> </head>
<body> <body>
<div id="centered"> <div id="centered">
<canvas id="screen" width="640" height="512"></canvas> <canvas id="screen" width="640" height="480"></canvas>
<div id="message"></div> <div id="message"></div>
<button id="cartButton">Load cart...</button> <button id="cartButton">Load cart...</button>
</div> </div>
+6 -6
View File
@@ -19,9 +19,9 @@ function setMessage(size, error) {
let framebufferCanvas = document.createElement("canvas"); let framebufferCanvas = document.createElement("canvas");
framebufferCanvas.width = 320; framebufferCanvas.width = 320;
framebufferCanvas.height = 256; framebufferCanvas.height = 240;
let framebufferCanvasCtx = framebufferCanvas.getContext("2d"); let framebufferCanvasCtx = framebufferCanvas.getContext("2d");
let imageData = framebufferCanvasCtx.createImageData(320, 256); let imageData = framebufferCanvasCtx.createImageData(320, 240);
let screen = document.getElementById('screen'); let screen = document.getElementById('screen');
let canvasCtx = screen.getContext('2d'); let canvasCtx = screen.getContext('2d');
@@ -120,14 +120,14 @@ async function runModule(data) {
try { try {
instance.exports.tic(Date.now() - startTime); instance.exports.tic(Date.now() - startTime);
let framebuffer = new Uint8Array(importObject.env.memory.buffer.slice(120, 120 + 320 * 256)); let framebuffer = new Uint8Array(importObject.env.memory.buffer.slice(120, 120 + 320 * 240));
let palette = new Uint32Array(importObject.env.memory.buffer.slice(82040, 82040 + 1024)); let palette = new Uint32Array(importObject.env.memory.buffer.slice(76920, 76920 + 1024));
for (let i = 0; i < 320 * 256; ++i) { for (let i = 0; i < 320 * 240; ++i) {
buffer[i] = palette[framebuffer[i]] | 0xff000000; buffer[i] = palette[framebuffer[i]] | 0xff000000;
} }
framebufferCanvasCtx.putImageData(imageData, 0, 0); framebufferCanvasCtx.putImageData(imageData, 0, 0);
canvasCtx.imageSmoothingEnabled = false; canvasCtx.imageSmoothingEnabled = false;
canvasCtx.drawImage(framebufferCanvas, 0, 0, 640, 512); canvasCtx.drawImage(framebufferCanvas, 0, 0, 640, 480);
window.requestAnimationFrame(mainloop); window.requestAnimationFrame(mainloop);
} catch (err) { } catch (err) {