From ed24904d60b1e7520f3ef631fb86b143f31a97d9 Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Wed, 8 Dec 2021 23:59:58 +0100 Subject: [PATCH] more font and text functions --- examples/curlywas/font_palette.uw8 | 34 +++++++++++++++++++++++++++++ platform/bin/loader.wasm | Bin 1243 -> 1278 bytes platform/bin/platform.uw8 | Bin 1397 -> 2072 bytes platform/src/font.png | Bin 2731 -> 3083 bytes platform/src/font.pxo | Bin 4312 -> 4740 bytes platform/src/platform.cwa | 23 ++++++++++++++----- uw8-tool/src/base_module.rs | 3 +++ 7 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 examples/curlywas/font_palette.uw8 diff --git a/examples/curlywas/font_palette.uw8 b/examples/curlywas/font_palette.uw8 new file mode 100644 index 0000000..df3de4c --- /dev/null +++ b/examples/curlywas/font_palette.uw8 @@ -0,0 +1,34 @@ +import "env.memory" memory(4); + +import "env.cls" fn cls(i32); +import "env.printString" fn printString(i32); +import "env.printChar" fn printChar(i32); +import "env.setCursorPosition" fn setCursor(i32, i32); +import "env.setTextColor" fn setTextColor(i32); + +export fn upd() { + cls(0); + + printString(0); + + let y: i32; + loop y { + setCursor(y + 2, 3); + let lazy hexChar = select(y < 10, y + 48, y + 87); + printChar(hexChar); + setCursor(0, y + 5); + printChar(hexChar); + printChar(32); + let x = 0; + loop x { +// setTextColor(x + y * 16); + printChar(x + y * 16); + branch_if (x := x + 1) < 16: x; + } + branch_if (y := y + 1) < 16: y; + } +} + +data 0 { + "Default font:" i8(0) +} \ No newline at end of file diff --git a/platform/bin/loader.wasm b/platform/bin/loader.wasm index 0221d2f97b5459a84830b90ffbaeabb64ec0fab9..dc8fc96275e306451e7fe862579cd5773411de2b 100644 GIT binary patch delta 467 zcmV;^0WAL83H}MNHUodg0|5X*01LkZ4*UN1iQ~|zmsvTxrPCl&?F2gtDl8691XVK^ z9+$Sh-t9@7=e>1p1GSw4zZ?X|dVXGn1*#Fns75z8llq@xWbe^r~*pQ7q%BFgQnOwNgvnJJ-Z`^hu>y*lH2$c%2Cd zOlxPcTnam67^T^*(9;VJCvm4eo#3-c}>Ww$ta_U7|>0C4%G z0V-tFMk72kKP=S+v#j-qJ`B20zA+Dm1`1Ia@9zgcAQrPDE~s4cF$%OLp2~@xWNYmC zw5^1WV-nbq3i!%(4PKNwhF9Gn`XV`tKCVKwTkphn+!)_m%%t&5;pkPVag8&&C?=<1 za~mD6%7>y2=YfBhx%|$k`uqq2yqPVlZJ;3HhIbq6e0-&lP`3l#GP}3Yt~5p4R`}0x zpdqYR9ft{_EOSGyoS(tgLNZ+#>M_`0p5wBxw>4+y0SbAhGrhPU1aKyzZ}c?NuTj8~ zMpbbsy2$}4P~0EqE?S?}8>)pkUj=Id{*k#JS_lyLwZJGwVc2Tqve>6&6RvH)+fLe_taAW diff --git a/platform/bin/platform.uw8 b/platform/bin/platform.uw8 index 3a4ecd7e3df584e4bce71fa59bd895f7787128fc..c1ba9e98b1be9c5a26147639afc27af16cf08c85 100644 GIT binary patch literal 2072 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 D;pn@2 diff --git a/platform/src/font.png b/platform/src/font.png index c531dd47ac6fc74450f8a2380ef88e6bc5db22a4..783a6913a50e5a567fc13f6e13815c86f3e4ce4c 100644 GIT binary patch delta 3065 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 Hu0mjf7?|=t delta 2711 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 Gng0cGtsp)C diff --git a/platform/src/font.pxo b/platform/src/font.pxo index c11d7a9ad900800ae9d526b672720886c9e76167..5fe7f8acaa8475a856ec09e3c8ab4ae806da2e95 100644 GIT binary patch literal 4740 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 literal 4312 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 diff --git a/platform/src/platform.cwa b/platform/src/platform.cwa index a53be17..e986fdc 100644 --- a/platform/src/platform.cwa +++ b/platform/src/platform.cwa @@ -55,9 +55,6 @@ export fn fmod(a: f32, b: f32) -> f32 { // DRAWING // ///////////// -global mut textCursorX = 0; -global mut textCursorY = 0; - export fn cls(col: i32) { let i: i32; textCursorX = 0; @@ -142,7 +139,10 @@ export fn circle(cx: f32, cy: f32, radius: f32, col: i32) { // TEXT // ////////// +global mut textCursorX = 0; +global mut textCursorY = 0; global mut textColor = 15; +global mut bgColor = 0; export fn printChar(char: i32) { if char == 10 | textCursorX >= 320 { @@ -156,9 +156,7 @@ export fn printChar(char: i32) { let bits = (char * 8 + y)?0x13400; let x = 0; loop pixels { - if (bits := bits << 1) & 256 { - setPixel(textCursorX + x, textCursorY + y, textColor); - } + setPixel(textCursorX + x, textCursorY + y, select((bits := bits << 1) & 256, textColor, bgColor)); branch_if (x := x + 1) < 8: pixels; } branch_if (y := y + 1) < 8: rows; @@ -191,6 +189,19 @@ export fn printInt(num: i32) { printString(p); } +export fn setTextColor(col: i32) { + textColor = col; +} + +export fn setBackgroundColor(col: i32) { + bgColor = col; +} + +export fn setCursorPosition(x: i32, y: i32) { + textCursorX = x * 8; + textCursorY = y * 8; +} + /////////// // SETUP // /////////// diff --git a/uw8-tool/src/base_module.rs b/uw8-tool/src/base_module.rs index 567bd6e..1085adb 100644 --- a/uw8-tool/src/base_module.rs +++ b/uw8-tool/src/base_module.rs @@ -84,6 +84,9 @@ impl BaseModule { add_function(&mut functions, &type_map, "printChar", &[I32], None); add_function(&mut functions, &type_map, "printString", &[I32], None); add_function(&mut functions, &type_map, "printInt", &[I32], None); + add_function(&mut functions, &type_map, "setTextColor", &[I32], None); + add_function(&mut functions, &type_map, "setBackgroundColor", &[I32], None); + add_function(&mut functions, &type_map, "setCursorPosition", &[I32, I32], None); for i in functions.len()..64 { add_function(