From 4e18d38538d87cb2c30964aba37ee24e5cb2a1df Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Sun, 7 Apr 2024 23:59:14 +0200 Subject: [PATCH] add untested implementation of text scale --- platform/bin/platform.uw8 | Bin 4097 -> 4133 bytes platform/src/platform.cwa | 51 +++++++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/platform/bin/platform.uw8 b/platform/bin/platform.uw8 index 16b588b0380e69117f013b69dcc52c8b3dac69d8..69d78ee97fba3746d5470db72584040c209909e8 100644 GIT binary patch literal 4133 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 literal 4097 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 2 & (char < 4 | char > 6) { logChar(char); return; @@ -491,9 +494,9 @@ fn printSingleChar(char: i32) { } if char == 8 { - textCursorX = textCursorX - 8; + textCursorX = textCursorX - charSize; if !outputChannel & textCursorX < 0 { - textCursorX = 320-8; + textCursorX = 320-charSize; printSingleChar(11); } return; @@ -503,34 +506,34 @@ fn printSingleChar(char: i32) { if !outputChannel & textCursorX >= 320 { printChar(0xd0a); } - textCursorX = textCursorX + 8; + textCursorX = textCursorX + charSize; return; } if char == 10 { - textCursorY = textCursorY + 8; + textCursorY = textCursorY + charSize; if !outputChannel & textCursorY >= 240 { - textCursorY = 240 - 8; + textCursorY = 240 - charSize; let i: i32; loop scroll_copy { - i!120 = i!(120 + 320 * 8); - branch_if (i := i + 4) < 320 * (240 - 8): scroll_copy; + i!120 = (i + 320 * charSize)!120; + branch_if (i := i + 4) < 320 * (240 - charSize): scroll_copy; } - rectangle(0 as f32, (240 - 8) as f32, 320 as f32, 8 as f32, bgColor); + rectangle(0 as f32, (240 - charSize) as f32, 320 as f32, charSize as f32, bgColor); } return; } if char == 11 { - textCursorY = textCursorY - 8; + textCursorY = textCursorY - charSize; if !outputChannel & textCursorY < 0 { textCursorY = 0; - let i = 320 * (240 - 8); + let i = 320 * (240 - charSize); loop scroll_copy { - i!(116 + 320 * 8) = i!116; + (i + 320 * charSize)!116 = i!116; branch_if (i := i - 4): scroll_copy; } - rectangle(0 as f32, 0 as f32, 320 as f32, 8 as f32, bgColor); + rectangle(0 as f32, 0 as f32, 320 as f32, charSize as f32, bgColor); } return; } @@ -562,6 +565,12 @@ fn printSingleChar(char: i32) { return; } + if char == 30 { + let scale = 0x12d20?1; + textScale = select(scale > 0 & scale <= 16, scale, 1); + return; + } + if char == 31 { textCursorX = 0x12d20?1 * (8 - outputChannel * 6); textCursorY = 0x12d20?2 * (8 - outputChannel * 7); @@ -584,7 +593,7 @@ data(0x12d00) { 1, 1, 1, 1, // 16-19, 1, 1, 1, 1, // 20-23, 1, 1, 1, 1, // 24-27, - 1, 1, 1, 3 // 28-31 + 1, 1, 2, 3 // 28-31 ) } @@ -593,26 +602,28 @@ fn drawChar(char: i32) { printChar(0xd0a); } + let charSize = 8 * textScale; + let y: i32; loop rows { - let bits = (char * 8 + y)?0x13400; + let bits = (char * 8 + y / textScale)?0x13400; let x = 0; if outputChannel { loop pixels { - if (bits := bits << 1) & 256 { + if (bits << (x / textScale)) & 128 { setPixel(textCursorX + x, textCursorY + y, textColor); } - branch_if (x := x + 1) < 8: pixels; + branch_if (x := x + 1) < charSize: pixels; } } else { loop pixels { - setPixel(textCursorX + x, textCursorY + y, select((bits := bits << 1) & 256, textColor, bgColor)); - branch_if (x := x + 1) < 8: pixels; + setPixel(textCursorX + x, textCursorY + y, select((bits << (x / textScale)) & 128, textColor, bgColor)); + branch_if (x := x + 1) < charSize: pixels; } } - branch_if (y := y + 1) < 8: rows; + branch_if (y := y + 1) < charSize: rows; } - textCursorX = textCursorX + 8; + textCursorX = textCursorX + charSize; } export fn printString(ptr: i32) {