mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 11:16:42 +01:00
update to new upkr version, use css to scale canvas
This commit is contained in:
4
platform/Cargo.lock
generated
4
platform/Cargo.lock
generated
@@ -183,9 +183,11 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "upkr"
|
name = "upkr"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/exoticorn/upkr.git?rev=479a2e2#479a2e2c899a7aa24fa1fd9b4ebd371f8bc39f8e"
|
source = "git+https://github.com/exoticorn/upkr.git?rev=5e82c65#5e82c65c1821fcf85b97dd9f71e8fce7cddc93c3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
"cdivsufsort",
|
"cdivsufsort",
|
||||||
|
"pico-args",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -10,8 +10,6 @@ export fn load_uw8(module_size: i32) -> i32 {
|
|||||||
|
|
||||||
let module_end = 0x1e000 + module_size;
|
let module_end = 0x1e000 + module_size;
|
||||||
if version & 1 {
|
if version & 1 {
|
||||||
module_size?0 = 0;
|
|
||||||
module_size?1 = 0;
|
|
||||||
module_end = uncompress(1, 0x1e001);
|
module_end = uncompress(1, 0x1e001);
|
||||||
} else {
|
} else {
|
||||||
copy(0x1e000, 0, module_size);
|
copy(0x1e000, 0, module_size);
|
||||||
@@ -76,17 +74,13 @@ fn copy(dest: i32, src: i32, len: i32) {
|
|||||||
// upkr unpacker
|
// upkr unpacker
|
||||||
|
|
||||||
global mut upkr_src_ptr: i32 = 0;
|
global mut upkr_src_ptr: i32 = 0;
|
||||||
global mut upkr_code: i64 = 0i64;
|
global mut upkr_state: i32 = 0;
|
||||||
global mut upkr_low: i64 = 0i64;
|
|
||||||
global mut upkr_range: i64 = 0i64;
|
|
||||||
|
|
||||||
// uncompress upkr compressed data at `src` into the buffer at `dest`
|
// uncompress upkr compressed data at `src` into the buffer at `dest`
|
||||||
// returns the end of the uncompressed data
|
// returns the end of the uncompressed data
|
||||||
export fn uncompress(src_ptr: i32, dest_ptr: i32) -> i32 {
|
export fn uncompress(src_ptr: i32, dest_ptr: i32) -> i32 {
|
||||||
upkr_src_ptr = src_ptr;
|
upkr_src_ptr = src_ptr;
|
||||||
upkr_code = 0i64;
|
upkr_state = 0;
|
||||||
upkr_low = 0i64;
|
|
||||||
upkr_range = 1i64;
|
|
||||||
|
|
||||||
let offset: i32;
|
let offset: i32;
|
||||||
|
|
||||||
@@ -94,7 +88,7 @@ export fn uncompress(src_ptr: i32, dest_ptr: i32) -> i32 {
|
|||||||
|
|
||||||
let i: i32;
|
let i: i32;
|
||||||
loop init_contexts {
|
loop init_contexts {
|
||||||
i!0x3c000 = 0x8000;
|
i!0x3c000 = 0x800;
|
||||||
branch_if (i := i + 4) < (256 + 1 + 128) * 4: init_contexts
|
branch_if (i := i + 4) < (256 + 1 + 128) * 4: init_contexts
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,45 +138,32 @@ fn upkr_length(context_index: i32) -> i32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn upkr_bit(context_index: i32) -> i32 {
|
fn upkr_bit(context_index: i32) -> i32 {
|
||||||
let prob = ((context_index * 4)!0x3c000) as i64;
|
let prob = (context_index * 4)!0x3c000;
|
||||||
|
|
||||||
loop refill {
|
loop refill {
|
||||||
if upkr_low >> 32i64 == (upkr_low + upkr_range - 1i64) >> 32i64 {
|
if upkr_state < 1<<16 {
|
||||||
upkr_append_byte();
|
upkr_state = (upkr_state << 8) | ?upkr_src_ptr;
|
||||||
|
upkr_src_ptr = upkr_src_ptr + 1;
|
||||||
branch refill;
|
branch refill;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if upkr_range < (1i64 << 24i64) {
|
let lazy state_low = upkr_state & 0xfff;
|
||||||
upkr_append_byte();
|
let bit = state_low < prob;
|
||||||
upkr_append_byte();
|
|
||||||
upkr_range = (1i64 << 40i64) - upkr_low;
|
|
||||||
}
|
|
||||||
|
|
||||||
let range = upkr_range / 65536i64;
|
|
||||||
let bit = (upkr_code - upkr_low) / range < prob;
|
|
||||||
|
|
||||||
if bit {
|
if bit {
|
||||||
upkr_range = range * prob;
|
upkr_state = prob * (upkr_state >> 12) + state_low;
|
||||||
prob = prob + (((1i64 << 16i64) - prob) >> 4i64);
|
prob = prob + ((0x1000 - prob) >> 4);
|
||||||
} else {
|
} else {
|
||||||
upkr_low = upkr_low + range * prob;
|
upkr_state = (0x1000 - prob) * (upkr_state >> 12) + state_low - prob;
|
||||||
upkr_range = range * (65536i64 - prob);
|
prob = prob - (prob >> 4);
|
||||||
prob = prob - (prob >> 4i64);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
(context_index * 4)!0x3c000 = prob as i32;
|
(context_index * 4)!0x3c000 = prob;
|
||||||
|
|
||||||
bit
|
bit
|
||||||
}
|
}
|
||||||
|
|
||||||
fn upkr_append_byte() {
|
|
||||||
upkr_code = ((upkr_code & i64.extend_i32_u(-1)) << 8i64) | (?upkr_src_ptr) as i64;
|
|
||||||
upkr_src_ptr = upkr_src_ptr + 1;
|
|
||||||
upkr_low = (upkr_low & i64.extend_i32_u(-1)) << 8i64;
|
|
||||||
upkr_range = upkr_range << 8i64;
|
|
||||||
}
|
|
||||||
|
|
||||||
start fn unpack_base() {
|
start fn unpack_base() {
|
||||||
base_end = uncompress(0, 0x3c800);
|
base_end = uncompress(0, 0x3c800);
|
||||||
}
|
}
|
||||||
|
|||||||
4
uw8-tool/Cargo.lock
generated
4
uw8-tool/Cargo.lock
generated
@@ -63,9 +63,11 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "upkr"
|
name = "upkr"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/exoticorn/upkr.git?rev=479a2e2#479a2e2c899a7aa24fa1fd9b4ebd371f8bc39f8e"
|
source = "git+https://github.com/exoticorn/upkr.git?rev=11b43f9bc4460d960a13829a8a64ff4af11d1665#11b43f9bc4460d960a13829a8a64ff4af11d1665"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
"cdivsufsort",
|
"cdivsufsort",
|
||||||
|
"pico-args",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ wasmparser = "0.81"
|
|||||||
wasm-encoder = "0.8"
|
wasm-encoder = "0.8"
|
||||||
anyhow = "1"
|
anyhow = "1"
|
||||||
pico-args = "0.4"
|
pico-args = "0.4"
|
||||||
upkr = { git = "https://github.com/exoticorn/upkr.git", rev = "479a2e2" }
|
upkr = { git = "https://github.com/exoticorn/upkr.git", rev = "5e82c65" }
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="centered">
|
<div id="centered">
|
||||||
<canvas id="screen" width="640" height="480"></canvas>
|
<canvas id="screen" width="320" height="240"></canvas>
|
||||||
<div id="message"></div>
|
<div id="message"></div>
|
||||||
<button id="cartButton">Load cart...</button>
|
<button id="cartButton">Load cart...</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,13 +9,9 @@ function setMessage(size, error) {
|
|||||||
document.getElementById('message').innerHTML = html;
|
document.getElementById('message').innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
let framebufferCanvas = document.createElement("canvas");
|
|
||||||
framebufferCanvas.width = 320;
|
|
||||||
framebufferCanvas.height = 240;
|
|
||||||
let framebufferCanvasCtx = framebufferCanvas.getContext("2d");
|
|
||||||
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');
|
||||||
|
let imageData = canvasCtx.createImageData(320, 240);
|
||||||
|
|
||||||
let cancelFunction;
|
let cancelFunction;
|
||||||
|
|
||||||
@@ -117,9 +113,7 @@ async function runModule(data) {
|
|||||||
for (let i = 0; i < 320 * 240; ++i) {
|
for (let i = 0; i < 320 * 240; ++i) {
|
||||||
buffer[i] = palette[memU8[i + 120]] | 0xff000000;
|
buffer[i] = palette[memU8[i + 120]] | 0xff000000;
|
||||||
}
|
}
|
||||||
framebufferCanvasCtx.putImageData(imageData, 0, 0);
|
canvasCtx.putImageData(imageData, 0, 0);
|
||||||
canvasCtx.imageSmoothingEnabled = false;
|
|
||||||
canvasCtx.drawImage(framebufferCanvas, 0, 0, 640, 480);
|
|
||||||
|
|
||||||
window.requestAnimationFrame(mainloop);
|
window.requestAnimationFrame(mainloop);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
@@ -33,7 +33,10 @@ a:hover {
|
|||||||
color: #405040;
|
color: #405040;
|
||||||
}
|
}
|
||||||
|
|
||||||
canvas {
|
#screen {
|
||||||
|
width: 320px;
|
||||||
|
height: 240px;
|
||||||
|
image-rendering: pixelated;
|
||||||
background-color: #202428;
|
background-color: #202428;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
border: 4px solid #303040;
|
border: 4px solid #303040;
|
||||||
@@ -63,4 +66,18 @@ button:hover {
|
|||||||
|
|
||||||
button:active {
|
button:active {
|
||||||
background-color: #504450;
|
background-color: #504450;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 680px) and (min-height: 560px) {
|
||||||
|
#screen {
|
||||||
|
width: 640px;
|
||||||
|
height: 480px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1000px) and (min-height: 800px) {
|
||||||
|
#screen {
|
||||||
|
width: 960px;
|
||||||
|
height: 720px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user