diff options
-rw-r--r-- | 304screen.subx | 48 | ||||
-rwxr-xr-x | apps/mu | bin | 369023 -> 369145 bytes | |||
-rw-r--r-- | apps/mu.subx | 2 |
3 files changed, 48 insertions, 2 deletions
diff --git a/304screen.subx b/304screen.subx index 2badb1eb..2e3635ee 100644 --- a/304screen.subx +++ b/304screen.subx @@ -131,19 +131,63 @@ $print-string-to-real-screen:end: 5d/pop-to-ebp c3/return -# currently only supports ascii +# print a grapheme in utf-8 (only up to 4 bytes so far) print-grapheme-to-real-screen: # c: grapheme # . prologue 55/push-ebp 89/<- %ebp 4/r32/esp # . save registers + 50/push-eax + # var curr/eax: byte = 0 + b8/copy-to-eax 0/imm32 + # curr = *(ebp+8) + 8a/byte-> *(ebp+8) 0/r32/al + # if (curr == 0) return + 3d/compare-eax-and 0/imm32 + 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 + # + (print-byte-to-real-screen %eax) + # curr = *(ebp+9) + 8a/byte-> *(ebp+9) 0/r32/al + # if (curr == 0) return + 3d/compare-eax-and 0/imm32 + 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 + # + (print-byte-to-real-screen %eax) + # curr = *(ebp+10) + 8a/byte-> *(ebp+0xa) 0/r32/al + # if (curr == 0) return + 3d/compare-eax-and 0/imm32 + 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 + # + (print-byte-to-real-screen %eax) + # curr = *(ebp+11) + 8a/byte-> *(ebp+0xb) 0/r32/al + # if (curr == 0) return + 3d/compare-eax-and 0/imm32 + 74/jump-if-= $print-grapheme-to-real-screen:end/disp8 + # + (print-byte-to-real-screen %eax) +$print-grapheme-to-real-screen:end: + # . restore registers + 58/pop-to-eax + # . epilogue + 89/<- %esp 5/r32/ebp + 5d/pop-to-ebp + c3/return + +print-byte-to-real-screen: # c: byte + # . prologue + 55/push-ebp + 89/<- %ebp 4/r32/esp + # . save registers 51/push-ecx # var s/ecx: (addr array byte) ff 6/subop/push *(ebp+8) 68/push 1/imm32/size 89/<- %ecx 4/r32/esp (write 1 %ecx) -$print-grapheme-to-real-screen:end: +$print-byte-to-real-screen:end: # . reclaim locals 81 0/subop/add %esp 8/imm32 # . restore registers diff --git a/apps/mu b/apps/mu index d53be2e7..04eefef8 100755 --- a/apps/mu +++ b/apps/mu Binary files differdiff --git a/apps/mu.subx b/apps/mu.subx index 20f59336..912b2b1f 100644 --- a/apps/mu.subx +++ b/apps/mu.subx @@ -414,6 +414,8 @@ Type-id: # (stream (addr array byte)) "slice"/imm32 # 12 "code-point"/imm32 # 13; smallest scannable unit from a text stream "grapheme"/imm32 # 14; smallest printable unit; will eventually be composed of multiple code-points, but currently corresponds 1:1 + # only 4-byte graphemes in utf-8 are currently supported; + # unclear how we should deal with larger clusters. # Keep Primitive-type-ids in sync if you add types here. 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 0/imm32 |