https://github.com/akkartik/mu/blob/main/linux/texture.mu

     1 # Playing with emitting cool textures.
     2 #
     3 # To run (on Linux):
     4 #   $ git clone https://github.com/akkartik/mu
     5 #   $ cd mu
     6 #   $ ./translate texture.mu
     7 #   $ ./a.elf > a.ppm
     8
     9 fn main -> _/ebx: int {
    10 #?   var width/esi: int <- copy 0x190  # 400
    11 #?   var height/edi: int <- copy 0xe1  # 225; aspect ratio 16:9
    12   var width/esi: int <- copy 0xff
    13   var height/edi: int <- copy 0xff
    14   print-string 0/screen, "P3\n"
    15   print-int32-decimal 0/screen, width
    16   print-string 0/screen, " "
    17   print-int32-decimal 0/screen, height
    18   print-string 0/screen, "\n"
    19   print-string 0/screen, "255\n"  # color depth
    20   var row/ecx: int <- copy 0
    21   {
    22     compare row, height
    23     break-if->=
    24     var col/edx: int <- copy 0
    25     {
    26       compare col, width
    27       break-if->=
    28       # r
    29       var tmp/eax: int <- copy col
    30       tmp <- multiply row
    31       tmp <- and 0x7f
    32       tmp <- add 0x80
    33       tmp <- copy 0xff
    34       print-int32-decimal 0/screen, tmp
    35       print-string 0/screen, " "
    36       # g
    37       tmp <- copy row
    38       tmp <- multiply col
    39       tmp <- and 0x7f
    40       tmp <- add 0x80
    41 #?       tmp <- copy 0xcf
    42       print-int32-decimal 0/screen, tmp
    43       print-string 0/screen, " "
    44       # b
    45       tmp <- copy row
    46       tmp <- multiply col
    47       tmp <- and 0x7f
    48       tmp <- add 0x80
    49       print-int32-decimal 0/screen, tmp
    50       print-string 0/screen, "\n"
    51       col <- increment
    52       loop
    53     }
    54     row <- increment
    55     loop
    56   }
    57   return 0
    58 }