From f33979aab1613dd0ab5302b8739945804b346b79 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Thu, 2 Jul 2020 15:22:14 -0700 Subject: [PATCH] 6606 --- apps/tile.mu | 9 +++ html/apps/tile.mu.html | 127 ++++++++++++++++++++++------------------- 2 files changed, 77 insertions(+), 59 deletions(-) diff --git a/apps/tile.mu b/apps/tile.mu index 44451aa1..d7185075 100644 --- a/apps/tile.mu +++ b/apps/tile.mu @@ -1,4 +1,13 @@ # little example program: animate a line in text-mode +# +# To run (on Linux and x86): +# $ git clone https://github.com/akkartik/mu +# $ cd mu +# $ ./translate_mu apps/tile.mu +# $ ./a.elf +# You should see a line drawn on a blank screen. Press a key. You should see +# the line seem to fall down the screen. Press a second key to quit. +# https://archive.org/details/akkartik-2min-2020-07-01 fn main -> exit-status/ebx: int { clear-screen diff --git a/html/apps/tile.mu.html b/html/apps/tile.mu.html index 64a7b564..fa01fcb6 100644 --- a/html/apps/tile.mu.html +++ b/html/apps/tile.mu.html @@ -57,65 +57,74 @@ if ('onhashchange' in window) { https://github.com/akkartik/mu/blob/master/apps/tile.mu
  1 # little example program: animate a line in text-mode
- 2 
- 3 fn main -> exit-status/ebx: int {
- 4   clear-screen
- 5   move-cursor-on-screen 5, 5
- 6   print-string-to-screen "_________"
- 7   enable-keyboard-immediate-mode
- 8   var dummy/eax: byte <- read-key
- 9   var row/eax: int <- copy 5
-10   {
-11     compare row, 0xe  # 15
-12     break-if-=
-13     animate row
-14     row <- increment
-15     sleep 0 0x5f5e100  # 100ms
-16     loop
-17   }
-18   var dummy/eax: byte <- read-key
-19   enable-keyboard-type-mode
-20   clear-screen
-21   exit-status <- copy 0
-22 }
-23 
-24 fn animate row: int {
-25   var col/eax: int <- copy 5
-26   {
-27     compare col, 0xe
-28     break-if-=
-29     move-cursor-on-screen row, col
-30     print-string-to-screen " "
-31     increment row
-32     move-cursor-on-screen row, col
-33     print-string-to-screen "_"
-34     decrement row
-35     col <- increment
-36     loop
-37   }
-38 }
-39 
-40 type timespec {
-41   tv_sec: int
-42   tv_nsec: int
-43 }
-44 
-45 # prototype wrapper around syscall_nanosleep
-46 # nsecs must be less than 999999999 or 0x3b9ac9ff nanoseconds
-47 fn sleep secs: int, nsecs: int {
-48   var t: timespec
-49   # initialize t
-50   var tmp/eax: (addr int) <- get t, tv_sec
-51   var tmp2/ecx: int <- copy secs
-52   copy-to *tmp, tmp2
-53   tmp <- get t, tv_nsec
-54   tmp2 <- copy nsecs
-55   copy-to *tmp, tmp2
-56   # perform the syscall
-57   var t-addr/ebx: (addr timespec) <- address t
-58   var rem-addr/ecx: (addr timespec) <- copy 0
-59   syscall_nanosleep
-60 }
+ 2 #
+ 3 # To run (on Linux and x86):
+ 4 #   $ git clone https://github.com/akkartik/mu
+ 5 #   $ cd mu
+ 6 #   $ ./translate_mu apps/tile.mu
+ 7 #   $ ./a.elf
+ 8 # You should see a line drawn on a blank screen. Press a key. You should see
+ 9 # the line seem to fall down the screen. Press a second key to quit.
+10 # https://archive.org/details/akkartik-2min-2020-07-01
+11 
+12 fn main -> exit-status/ebx: int {
+13   clear-screen
+14   move-cursor-on-screen 5, 5
+15   print-string-to-screen "_________"
+16   enable-keyboard-immediate-mode
+17   var dummy/eax: byte <- read-key
+18   var row/eax: int <- copy 5
+19   {
+20     compare row, 0xe  # 15
+21     break-if-=
+22     animate row
+23     row <- increment
+24     sleep 0 0x5f5e100  # 100ms
+25     loop
+26   }
+27   var dummy/eax: byte <- read-key
+28   enable-keyboard-type-mode
+29   clear-screen
+30   exit-status <- copy 0
+31 }
+32 
+33 fn animate row: int {
+34   var col/eax: int <- copy 5
+35   {
+36     compare col, 0xe
+37     break-if-=
+38     move-cursor-on-screen row, col
+39     print-string-to-screen " "
+40     increment row
+41     move-cursor-on-screen row, col
+42     print-string-to-screen "_"
+43     decrement row
+44     col <- increment
+45     loop
+46   }
+47 }
+48 
+49 type timespec {
+50   tv_sec: int
+51   tv_nsec: int
+52 }
+53 
+54 # prototype wrapper around syscall_nanosleep
+55 # nsecs must be less than 999999999 or 0x3b9ac9ff nanoseconds
+56 fn sleep secs: int, nsecs: int {
+57   var t: timespec
+58   # initialize t
+59   var tmp/eax: (addr int) <- get t, tv_sec
+60   var tmp2/ecx: int <- copy secs
+61   copy-to *tmp, tmp2
+62   tmp <- get t, tv_nsec
+63   tmp2 <- copy nsecs
+64   copy-to *tmp, tmp2
+65   # perform the syscall
+66   var t-addr/ebx: (addr timespec) <- address t
+67   var rem-addr/ecx: (addr timespec) <- copy 0
+68   syscall_nanosleep
+69 }