program RandomSquaresExpand {
section module {
sdl,
std
}
section data {
int rax = 0
int rbx = 0
int rcx = 0
int rdx = 0
int rsi = 0
int rdi = 0
int r8 = 0
int r9 = 0
int r10 = 0
int r11 = 0
int r12 = 0
string str_0 = "Random Squares"
int window_id = 0
int renderer = 0
int event_type_result = 0
int running = 0
int color_value_r = 0
int color_value_g = 0
int color_value_b = 0
int max_cols = 0
int max_rows = 0
int index_w = 0
int index_h = 0
int render_cols = 0
int render_rows = 0
int render_z = 0
int render_i = 0
int __funcret_init = 0
}
section code {
start:
mov index_w, 2
mov index_h, 2
mov max_cols, 24
mov max_rows, 24
call PROC_init
mov running, 1
WHILE_0:
cmp running, 0
je ENDWHILE_1
WHILE_2:
invoke poll_event
return rbx
cmp rbx, 0
je ENDWHILE_3
invoke get_event_type
return rdx
mov event_type_result, rdx
cmp event_type_result, 256
jne ELSE_6
mov running, 0
ELSE_6:
cmp event_type_result, 768
jne ELSE_10
invoke get_key_code
return r8
cmp r8, 27
jne ELSE_10
mov running, 0
ELSE_10:
jmp WHILE_2
ENDWHILE_3:
mov r9, 0
mov r10, 0
mov r11, 0
mov r12, 255
invoke set_draw_color, renderer, r9, r10, r11, r12
invoke clear, renderer
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, index_w
mov rcx, index_h
call PROC_render
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp index_w, max_cols
jge OR_ONE_24
cmp index_h, max_rows
jl ELSE_18
OR_ONE_24:
mov index_w, 2
mov index_h, 2
jmp ENDIF_19
ELSE_18:
mov r9, index_w
add r9, 1
mov index_w, r9
mov r9, index_h
add r9, 1
mov index_h, r9
ENDIF_19:
invoke present, renderer
mov r9, 16
invoke delay, r9
jmp WHILE_0
ENDWHILE_1:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_cleanup
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
done
function PROC_render:
mov render_cols, rbx
mov render_rows, rcx
mov render_z, 0
FOR_26:
cmp render_z, render_rows
jg ENDFOR_27
mov render_i, 0
FOR_29:
cmp render_i, render_cols
jg ENDFOR_30
invoke rand
return rbx
mov color_value_r, rbx
mod color_value_r, 255
invoke rand
return rdx
mov color_value_g, rdx
mod color_value_g, 255
invoke rand
return rdi
mov color_value_b, rdi
mod color_value_b, 255
mov r9, 255
invoke set_draw_color, renderer, color_value_r, color_value_g, color_value_b, r9
mov r9, render_i
mul r9, 32
mov r10, render_z
mul r10, 32
mov r11, 32
mov r12, 32
invoke fill_rect, renderer, r9, r10, r11, r12
FOR_CONTINUE_31:
add render_i, 1
jmp FOR_29
ENDFOR_30:
FOR_CONTINUE_28:
add render_z, 1
jmp FOR_26
ENDFOR_27:
PROC_END_render:
ret
function PROC_init:
invoke init
return rbx
mov __funcret_init, rbx
cmp __funcret_init, 0
je ELSE_32
exit 0
ELSE_32:
mov rsi, 100
mov rdi, 100
mov r8, 800
mov r9, 800
mov r10, 4
invoke create_window, str_0, rsi, rdi, r8, r9, r10
return rdx
mov window_id, rdx
mov rsi, 0
sub rsi, 1
cmp window_id, rsi
jne ELSE_36
invoke quit
exit 0
ELSE_36:
mov r8, 0
sub r8, 1
mov r10, 2
invoke create_renderer, window_id, r8, r10
return r9
mov renderer, r9
mov r8, 0
sub r8, 1
cmp renderer, r8
jne ELSE_40
invoke destroy_window, window_id
invoke quit
exit 0
ELSE_40:
invoke get_ticks
return r9
invoke srand, r9
PROC_END_init:
ret
function PROC_cleanup:
invoke destroy_renderer, renderer
invoke destroy_window, window_id
invoke quit
PROC_END_cleanup:
ret
}
}