From cd1275a78f3481f1b56feb648a06edbb1f2b3bc2 Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Fri, 31 Dec 2021 22:12:21 +0100 Subject: [PATCH] implement framework for control codes --- examples/curlywas/control.cwa | 12 +++++++ platform/bin/platform.uw8 | Bin 2540 -> 2631 bytes platform/src/platform.cwa | 65 +++++++++++++++++++++++++++++++--- 3 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 examples/curlywas/control.cwa diff --git a/examples/curlywas/control.cwa b/examples/curlywas/control.cwa new file mode 100644 index 0000000..0cdaffb --- /dev/null +++ b/examples/curlywas/control.cwa @@ -0,0 +1,12 @@ +import "env.printChar" fn printChar(i32); +import "env.printString" fn printString(i32); + +export fn upd() { + printString(0x20000); +} + +data 0x20000 { + i8(14, 0xfd, 12) // clear screen to color 0xfd + "Top left" + i8(0) +} diff --git a/platform/bin/platform.uw8 b/platform/bin/platform.uw8 index fe2d3bc426ebd206395baef2b00de6f472baae47..d245d777af918085e590dc6e90c61ba47227d4c1 100644 GIT binary patch literal 2631 zcmV-N3b^$GU(fk&_rrR2EW*%ZY1T=nqStC#B@}DsoUQF4Xd0vt9EQd^f8ygDxv1m@ z^Rs+ad7?J{)ajmnd@fuu1J#bW^K%39X8)BnrF(%w^Tr|rK-+08H5As1g#QzO{J)T< z(Ei*^cMIv_13#Ot2R$x*?5{7_?aC4C3QB#d!Dwpg;u22h&A#D-58$0&PKfE7U(mUA z91;L*rw$8+W0y-c-!gENWd~x7nW0K?&d10PMrq4W!~Z;VJa^GDN5jzfoKpGpCpKYC z?wa9STX{l?dQHr4(Wt2eTB$_Z#;9|#f$bM?iX6hI{SFy|J`&?@p-@hCyt$_F_^fu* zTOYP&hz=2)_}H-b=5CE74hTnqn9qZGFClkgqcd4wz%Yu7x2SoEE^P8eI$$^`$@rbs z>FDHslS>o=?lT0ISQRN{iJh;`>sFiB;1gN1E@OpA8og8EovVIOU}-NHaOr7-%*Buy z`3T-nuG1!`6~h_)Fsv5fy03Kpbx2LEZU}(D4P4NGy*?_tW+iif%V!Qe0KkG&76uL4 z0f(bKbm6cTL;juHE81VU(?3s9NM*smjfieARVE@_?(3AMwoOZ_%K68mWZCPO%+&gD z0jO1|I@u(Jcs6TvPHYpK^WljnaX03H`@2+GrxHSx-FDsyvz{t67C`$2Q1ytK8rHmX|OO zwhFgROiOX^4v58PbDN|32Uj5sq=MqW+LZTFGlYVMcG?YkLBOy+H%JGc;@Di3?BwYG?*-BE`7&R1AIQdmTPs+YlQbAn9_efK$C7BG+VYr~j{VKOolL zJ#8H%f{=*W;7W$ht?h?P-F{fl69JRiyEL~Hd}O`+SM3J3km{<7)Z84l(x+GcrR&Y_gM;>&JJE_-uV zP~e4Q#O*D&wRUzHHu1m`C*{V-W=XtWLSH7%wHal19O>B!52(*5ug#KC@UF{k}=B&J)kl_zn!0v=1HeaFtAWExjY}M zty6ouoDF@CZ`%CUzBENKs<|^F59^l3nX06m451NK97GW_NQZt}X{)HEbijp7BW#th z0CE>BHhPTmAl5=f z8_3@Cc17?@mK6}?<+(i*(`E8(O6u-;IjJ@-L;}cvO66XQ$G+=Tmzv1k;2Dd3EK2AH zO4ZFGBLI-E+Dq-#Pv|&pwp|gb{8weMW35$zv z>}P-VKfc%>^2%x+g(9{i+(N)rnQ|-q7&KSI{Koa{@VrBdCGp=`GwozeFo1LDP_b_= zMU>2xwddN2)!qt(;K1(!jT!=KFJUy0hYKgLYr~E)>4KOxZ!;r{UWej~Fzw@^;zKF$ z)dH|W*5x6JOO}Z1DYogIh-mIM)}EXGhZ1H=D-@2j8*-@gBysKCWy*bs_U*D|bU;UM z3>7M@nV9U50rs{%6zW#%RZMl4wa^jJU>1uyGj7apBwz@2F2J$@2V~+l8h4@5qLh{7 zvi7XG-MG(+^m<3r8yBrM5-{zdGU4U01C%6#MK=alH{Yobv(AH+>c+X*NOC3;c^aGXq zDnnE;;r0@)1R7TL=oSj#l_%w+WiODr-%0er{P=A3ya^ZR7LDam4;d2zIEQ6lsEIq0 z8-9#FW)yvJ&&Ml1Rw6eP6WRfXE~j45nB7o~s_C*%otimnJ=vt9;-fcQwJ%0M6qaVT zzxX&x8Ga4p{0?$poc~Ancdju&bqc34`27@It_(n z%IxN^2#MCDOIZBS5Vs!tL2AI1oF6JHK~)79i8nVVaOdC$wlZk1lHWm{3NpT4*E$#L zI4_s1cbLmL;WfbfmLl6&b}hJvFqyM*^i1L_uYc$U3?O;3r`7x{0iFBxY{9DuQ1>QN zCAoCCermNWHzS9^LoDr+!b{|Uw^&!;@e`em@jegc?@pY{Z}WhJ^C2cZKzrWXG7eN9 zy4N9yAi=W}fA~9ZB>e<7QHt@j=;wP!7`7~xR0iP6bcjmQ!w%~b;2#P-J)_n{J_b}X zN|+?c>tP%L$~zR83sUup+6pNB7dWzO*M8Mtf7pi?@m-=^bnoQc+xF>96!-R3t7?zs p0#Yg<(%684FhEPDgBY5E<=^DEZOqD_rtiRkn#X?(Vh@+SJq6zg8AJd8 literal 2540 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 C67(Mc diff --git a/platform/src/platform.cwa b/platform/src/platform.cwa index 4a53486..53ca1d1 100644 --- a/platform/src/platform.cwa +++ b/platform/src/platform.cwa @@ -308,14 +308,30 @@ export fn printChar(char: i32) { } } +global mut controlCodeLength = 0; + fn printSingleChar(char: i32) { - if char == 4 | char == 5 { - graphicsText = char == 5; + controlCodeLength?0x12d20 = char; + controlCodeLength = controlCodeLength + 1; + char = 0x12d20?0; + if char < 32 & controlCodeLength < char?0x12d00 { + return; + } + controlCodeLength = 0; + + if char == 1 { + drawChar(0x12d20?1); return; } - if char == 10 | (!graphicsText & textCursorX >= 320) { - textCursorX = 0; + if char == 4 | char == 5 { + graphicsText = char == 5; + textCursorX = 0; + textCursorY = 0; + return; + } + + if char == 10 { textCursorY = textCursorY + 8; if !graphicsText & textCursorY >= 240 { textCursorY = 240 - 8; @@ -329,6 +345,47 @@ fn printSingleChar(char: i32) { return; } + if char == 12 { + cls(bgColor); + return; + } + + if char == 13 { + textCursorX = 0; + return; + } + + if char == 14 { + bgColor = 0x12d20?1; + return; + } + + if char == 15 { + textColor = 0x12d20?1; + return; + } + + drawChar(char); +} + +data(0x12d00) { + i8( + 1, 2, 1, 1, // 0-3 + 1, 1, 1, 1, // 4-7 + 1, 1, 1, 1, // 8-11 + 1, 1, 2, 1, // 12-15, + 1, 1, 1, 1, // 16-19, + 1, 1, 1, 1, // 20-23, + 1, 1, 1, 1, // 24-27, + 1, 1, 1, 1 // 28-31 + ) +} + +fn drawChar(char: i32) { + if !graphicsText & textCursorX >= 320 { + printChar(0xd0a); + } + let y: i32; loop rows { let bits = (char * 8 + y)?0x13400;