// x86-64
// I want to be run under a vt100 terminal emulator
.globl _start
.include "macro.s"
prntfield:
pushq %rcx
pushq %rdx
pushq %rax
movq $63, %rcx
movq $8, %rdx
1:
pushq %rcx
bt $1, (%rbp)
jnc 2f
docall3 $NR_write, $1, $live_cell, $6
jmp 3f
2:
docall3 $NR_write, $1, $dead_cell, $6
3:
testq %rdx, %rdx
jnz 4f
jmp 5f
4:
dec %rdx
rorq $1, (%rbp)
popq %rcx
loopq 1b
popq %rax
popq %rdx
popq %rcx
ret
5:
docall3 $NR_write, $1, $str3+2, $1
movq $9, %rdx
jmp 4b
_start:
movq %rsp, %rbp
subq $8, %rsp
docall2 $NR_open, $str1, $0
testq %rax, %rax
jl 1f
movq %rax, %r11
docall3 $NR_read, %r11, %rbp, $8
docall $NR_close, %r11
call prntfield
jmp 2f
1:
docall3 $NR_write, $1, $str2, $28
docall3 $NR_write, $1, $str3+2, $1
2:
docall $NR_exit, $15
live_cell:
.ascii "\x1b[42m "
dead_cell:
.ascii "\x1b[40m "
str3:
.ascii "#.\n"
str2:
.ascii "Failed to open "
str1:
.asciz "/dev/urandom"