diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2021-07-19 17:57:41 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2021-07-19 17:57:41 -0700 |
commit | a4c28e1bfbf5e0614d3a2cb4c3ea563ed0559df2 (patch) | |
tree | 003cabf7d069ec8580074a7a353af04f2e432138 | |
parent | 542773df2f2055fb06efedd353cbce1474653607 (diff) | |
download | mu-a4c28e1bfbf5e0614d3a2cb4c3ea563ed0559df2.tar.gz |
.
-rw-r--r-- | apps/ex10.mu. | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/apps/ex10.mu. b/apps/ex10.mu. deleted file mode 100644 index 35fea653..00000000 --- a/apps/ex10.mu. +++ /dev/null @@ -1,176 +0,0 @@ -# Demo of mouse support. -# -# To build a disk image: -# ./translate ex10.mu # emits disk.img -# To run: -# qemu-system-i386 disk.img -# Or: -# bochs -f bochsrc # bochsrc loads disk.img - -fn main screen: (addr screen), keyboard: (addr keyboard), data-disk: (addr disk) { -#? var x/esi: int <- copy 0x200 -#? var y/edi: int <- copy 0x180 -#? render-grid x, y - $main:event-loop: { - # read deltas from mouse - var dx/eax: int <- copy 0 - var dy/ecx: int <- copy 0 - dx, dy <- read-mouse-event - # loop if deltas are both 0 - { - compare dx, 0 - break-if-!= - compare dy, 0 - break-if-!= - loop $main:event-loop - } - # render unclamped deltas -#? render-grid x, y - draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen screen, dx, 7/fg, 0/bg - draw-text-wrapping-right-then-down-from-cursor-over-full-screen screen, " ", 7/fg, 0/bg - draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen screen, dy, 7/fg, 0/bg - move-cursor-to-left-margin-of-next-line screen -#? { -#? var dummy1/eax: int <- copy 0 -#? var dummy2/ecx: int <- copy 0 -#? dummy1, dummy2 <- draw-text-wrapping-right-then-down-over-full-screen screen, " ", 0/x, 0x10/y, 0x31/fg, 0/bg -#? } -#? { -#? var ephemeral-dx/eax: int <- copy dx -#? var dummy/ecx: int <- copy 0 -#? ephemeral-dx, dummy <- draw-int32-decimal-wrapping-right-then-down-over-full-screen screen, ephemeral-dx, 0/x, 0x10/y, 0x31/fg, 0/bg -#? } -#? { -#? var dummy/eax: int <- copy 0 -#? var ephemeral-dy/ecx: int <- copy dy -#? dummy, ephemeral-dy <- draw-int32-decimal-wrapping-right-then-down-over-full-screen screen, ephemeral-dy, 5/x, 0x10/y, 0x31/fg, 0/bg -#? } -#? # clamp deltas -#? $clamp-dx: { -#? compare dx, -0xa -#? { -#? break-if-> -#? dx <- copy -0xa -#? break $clamp-dx -#? } -#? compare dx, 0xa -#? { -#? break-if-< -#? dx <- copy 0xa -#? break $clamp-dx -#? } -#? dx <- copy 0 -#? } -#? $clamp-dy: { -#? compare dy, -0xa -#? { -#? break-if-> -#? dy <- copy -0xa -#? break $clamp-dy -#? } -#? compare dy, 0xa -#? { -#? break-if-< -#? dy <- copy 0xa -#? break $clamp-dy -#? } -#? dy <- copy 0 -#? } -#? # render clamped deltas -#? { -#? var dummy1/eax: int <- copy 0 -#? var dummy2/ecx: int <- copy 0 -#? dummy1, dummy2 <- draw-text-wrapping-right-then-down-over-full-screen screen, " ", 0/x, 0x20/y, 0x31/fg, 0/bg -#? } -#? { -#? var save-dx/eax: int <- copy dx -#? var dummy/ecx: int <- copy 0 -#? save-dx, dummy <- draw-int32-decimal-wrapping-right-then-down-over-full-screen screen, save-dx, 0/x, 0x20/y, 0x31/fg, 0/bg -#? } -#? { -#? var dummy/eax: int <- copy 0 -#? var save-dy/ecx: int <- copy dy -#? dummy, save-dy <- draw-int32-decimal-wrapping-right-then-down-over-full-screen screen, save-dy, 5/x, 0x20/y, 0x31/fg, 0/bg -#? } -#? # loop if deltas are both 0 -#? { -#? compare dx, 0 -#? break-if-!= -#? compare dy, 0 -#? break-if-!= -#? loop $main:event-loop -#? } -#? # accumulate deltas and clamp result within screen bounds -#? x <- add dx -#? compare x, 0 -#? { -#? break-if->= -#? x <- copy 0 -#? } -#? compare x, 0x400 -#? { -#? break-if-< -#? x <- copy 0x3ff -#? } -#? y <- subtract dy # mouse y coordinates are reverse compared to screen -#? compare y, 0 -#? { -#? break-if->= -#? y <- copy 0 -#? } -#? compare y, 0x300 -#? { -#? break-if-< -#? y <- copy 0x2ff -#? } - loop - } -} - -#? fn render-grid curr-x: int, curr-y: int { -#? and-with curr-x, 0xfffffffc -#? and-with curr-y, 0xfffffffc -#? var y/eax: int <- copy 0 -#? { -#? compare y, 0x300/screen-height=768 -#? break-if->= -#? var x/edx: int <- copy 0 -#? { -#? compare x, 0x400/screen-width=1024 -#? break-if->= -#? var color/ecx: int <- copy 0 -#? # set color if either x or y is divisible by 4 -#? var tmp/ebx: int <- copy y -#? tmp <- and 3 -#? compare tmp, 0 -#? { -#? break-if-!= -#? color <- copy 3 -#? } -#? tmp <- copy x -#? tmp <- and 3 -#? compare tmp, 0 -#? { -#? break-if-!= -#? color <- copy 3 -#? } -#? # highlight color if x and y match curr-x and curr-y (quantized) -#? { -#? var xq/edx: int <- copy x -#? xq <- and 0xfffffffc -#? var yq/eax: int <- copy y -#? yq <- and 0xfffffffc -#? compare xq, curr-x -#? break-if-!= -#? compare yq, curr-y -#? break-if-!= -#? color <- copy 0xc -#? } -#? pixel-on-real-screen x, y, color -#? x <- increment -#? loop -#? } -#? y <- increment -#? loop -#? } -#? } |