program AppSkeleton {
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
ptr arg0 = null
string str_0 = "Space"
string str_1 = "font.ttf"
string str_2 = "Grid Shift"
string str_3 = "failed to init SDL"
string str_4 = "Could not create window"
string str_5 = "could not create renderer"
string str_6 = "could not create render target"
string str_7 = "Font subsystem failed to load"
string str_8 = "failed to open: "
string fmt_str = "%s "
string newline = "\n"
ptr title = null
ptr filename = null
int running = 0
int event_type_result = 0
int window_id = 0
int renderer = 0
int target_id = 0
int font_id = 0
ptr blocks = null
ptr color = null
int setcolor_color_index = 0
int shift_array_left_wrap_iq = 0
int shift_array_left_wrap_first = 0
int render_ix = 0
int render_iy = 0
int render_block = 0
int init_array_index = 0
ptr init_title = null
int init_x = 0
int init_y = 0
int init_w = 0
int init_h = 0
int init_result = 0
int __funcret_init = 0
int indexAt_xval = 0
int indexAt_yval = 0
int __funcret_indexAt = 0
}
section code {
start:
mov title, str_0
mov filename, str_1
alloc blocks, 8, 529
alloc color, 8, 4
mov arg0, title
mov rbx, 100
mov rcx, 100
mov rdx, 1280
mov rsi, 720
call PROC_init
mov running, 1
WHILE_0:
cmp running, 1
jne ENDWHILE_1
WHILE_4:
invoke poll_event
return rcx
cmp rcx, 0
je ENDWHILE_5
invoke get_event_type
return rsi
mov event_type_result, rsi
cmp event_type_result, 256
jne ELSE_8
mov running, 0
ELSE_8:
cmp event_type_result, 768
jne ELSE_12
invoke get_key_code
return r9
cmp r9, 27
jne ELSE_12
mov running, 0
ELSE_12:
jmp WHILE_4
ENDWHILE_5:
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
call PROC_render
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, 1280
mov r10, 720
invoke present_scaled, renderer, target_id, r9, r10
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
free blocks
free color
done
function PROC_setcolor:
mov setcolor_color_index, rbx
cmp setcolor_color_index, 0
je CASE_0_21
cmp setcolor_color_index, 1
je CASE_1_22
cmp setcolor_color_index, 2
je CASE_2_23
cmp setcolor_color_index, 3
je CASE_3_24
cmp setcolor_color_index, 4
je CASE_4_25
jmp CASE_END_20
CASE_0_21:
cmp 0, 0
jl IDX_OOB_28
cmp 0, 3
jg IDX_OOB_28
jmp IDX_OK_27
IDX_OOB_28:
exit 1
IDX_OK_27:
mov rbx, 0
store 255, color, rbx, 8
cmp 1, 0
jl IDX_OOB_30
cmp 1, 3
jg IDX_OOB_30
jmp IDX_OK_29
IDX_OOB_30:
exit 1
IDX_OK_29:
mov rbx, 1
store 255, color, rbx, 8
cmp 2, 0
jl IDX_OOB_32
cmp 2, 3
jg IDX_OOB_32
jmp IDX_OK_31
IDX_OOB_32:
exit 1
IDX_OK_31:
mov rbx, 2
store 0, color, rbx, 8
jmp CASE_END_20
CASE_1_22:
cmp 0, 0
jl IDX_OOB_34
cmp 0, 3
jg IDX_OOB_34
jmp IDX_OK_33
IDX_OOB_34:
exit 1
IDX_OK_33:
mov rbx, 0
store 255, color, rbx, 8
cmp 1, 0
jl IDX_OOB_36
cmp 1, 3
jg IDX_OOB_36
jmp IDX_OK_35
IDX_OOB_36:
exit 1
IDX_OK_35:
mov rbx, 1
store 0, color, rbx, 8
cmp 2, 0
jl IDX_OOB_38
cmp 2, 3
jg IDX_OOB_38
jmp IDX_OK_37
IDX_OOB_38:
exit 1
IDX_OK_37:
mov rbx, 2
store 0, color, rbx, 8
jmp CASE_END_20
CASE_2_23:
cmp 0, 0
jl IDX_OOB_40
cmp 0, 3
jg IDX_OOB_40
jmp IDX_OK_39
IDX_OOB_40:
exit 1
IDX_OK_39:
mov rbx, 0
store 0, color, rbx, 8
cmp 1, 0
jl IDX_OOB_42
cmp 1, 3
jg IDX_OOB_42
jmp IDX_OK_41
IDX_OOB_42:
exit 1
IDX_OK_41:
mov rbx, 1
store 255, color, rbx, 8
cmp 2, 0
jl IDX_OOB_44
cmp 2, 3
jg IDX_OOB_44
jmp IDX_OK_43
IDX_OOB_44:
exit 1
IDX_OK_43:
mov rbx, 2
store 0, color, rbx, 8
jmp CASE_END_20
CASE_3_24:
cmp 0, 0
jl IDX_OOB_46
cmp 0, 3
jg IDX_OOB_46
jmp IDX_OK_45
IDX_OOB_46:
exit 1
IDX_OK_45:
mov rbx, 0
store 0, color, rbx, 8
cmp 1, 0
jl IDX_OOB_48
cmp 1, 3
jg IDX_OOB_48
jmp IDX_OK_47
IDX_OOB_48:
exit 1
IDX_OK_47:
mov rbx, 1
store 0, color, rbx, 8
cmp 2, 0
jl IDX_OOB_50
cmp 2, 3
jg IDX_OOB_50
jmp IDX_OK_49
IDX_OOB_50:
exit 1
IDX_OK_49:
mov rbx, 2
store 255, color, rbx, 8
jmp CASE_END_20
CASE_4_25:
cmp 0, 0
jl IDX_OOB_52
cmp 0, 3
jg IDX_OOB_52
jmp IDX_OK_51
IDX_OOB_52:
exit 1
IDX_OK_51:
mov rbx, 0
store 255, color, rbx, 8
cmp 1, 0
jl IDX_OOB_54
cmp 1, 3
jg IDX_OOB_54
jmp IDX_OK_53
IDX_OOB_54:
exit 1
IDX_OK_53:
mov rbx, 1
store 255, color, rbx, 8
cmp 2, 0
jl IDX_OOB_56
cmp 2, 3
jg IDX_OOB_56
jmp IDX_OK_55
IDX_OOB_56:
exit 1
IDX_OK_55:
mov rbx, 2
store 255, color, rbx, 8
jmp CASE_END_20
CASE_END_20:
PROC_END_setcolor:
ret
function PROC_shift_array_left_wrap:
mov rbx, 0
load rcx, blocks, rbx, 8
mov shift_array_left_wrap_first, rcx
mov shift_array_left_wrap_iq, 0
FOR_57:
cmp shift_array_left_wrap_iq, 527
jg ENDFOR_58
mov rbx, shift_array_left_wrap_iq
add rbx, 1
mov rdx, rbx
load rsi, blocks, rdx, 8
cmp shift_array_left_wrap_iq, 0
jl IDX_OOB_61
cmp shift_array_left_wrap_iq, 528
jg IDX_OOB_61
jmp IDX_OK_60
IDX_OOB_61:
exit 1
IDX_OK_60:
mov rdx, shift_array_left_wrap_iq
store rsi, blocks, rdx, 8
FOR_CONTINUE_59:
add shift_array_left_wrap_iq, 1
jmp FOR_57
ENDFOR_58:
cmp 528, 0
jl IDX_OOB_63
cmp 528, 528
jg IDX_OOB_63
jmp IDX_OK_62
IDX_OOB_63:
exit 1
IDX_OK_62:
mov rdx, 528
store shift_array_left_wrap_first, blocks, rdx, 8
PROC_END_shift_array_left_wrap:
ret
function PROC_render:
invoke set_render_target, renderer, target_id
mov render_iy, 0
FOR_64:
cmp render_iy, 21
jg ENDFOR_65
mov render_ix, 0
FOR_67:
cmp render_ix, 20
jg ENDFOR_68
mov rbx, render_ix
mov rcx, render_iy
push render_ix
push render_iy
push render_block
call FUNC_indexAt
pop render_block
pop render_iy
pop render_ix
mov rbx, rax
mov rcx, rbx
load rdx, blocks, rcx, 8
mov render_block, rdx
push rbx
push rdx
mov rbx, render_block
push render_ix
push render_iy
push render_block
call PROC_setcolor
pop render_block
pop render_iy
pop render_ix
pop rdx
pop rbx
mov rcx, 0
load rsi, color, rcx, 8
mov rcx, 1
load rdi, color, rcx, 8
mov rcx, 2
load r8, color, rcx, 8
mov rcx, 255
invoke set_draw_color, renderer, rsi, rdi, r8, rcx
mov rcx, render_ix
mul rcx, 32
mov rsi, render_iy
mul rsi, 16
mov rdi, 32
mov r8, 16
invoke fill_rect, renderer, rcx, rsi, rdi, r8
FOR_CONTINUE_69:
add render_ix, 1
jmp FOR_67
ENDFOR_68:
FOR_CONTINUE_66:
add render_iy, 1
jmp FOR_64
ENDFOR_65:
invoke rand
return rcx
mov rsi, rcx
mod rsi, 255
invoke rand
return rdi
mov r8, rdi
mod r8, 255
invoke rand
return r9
mod r9, 255
mov r10, 15
mov r11, 15
mov r12, 255
invoke draw_text, renderer, font_id, str_2, r10, r11, rsi, r8, r9, r12
push rbx
push rcx
push rdx
push rdi
push render_ix
push render_iy
push render_block
call PROC_shift_array_left_wrap
pop render_block
pop render_iy
pop render_ix
pop rdi
pop rdx
pop rcx
pop rbx
PROC_END_render:
ret
function PROC_init_array:
mov init_array_index, 0
FOR_70:
cmp init_array_index, 527
jg ENDFOR_71
invoke rand
return rbx
mov rcx, rbx
mod rcx, 4
cmp init_array_index, 0
jl IDX_OOB_74
cmp init_array_index, 528
jg IDX_OOB_74
jmp IDX_OK_73
IDX_OOB_74:
exit 1
IDX_OK_73:
mov rdx, init_array_index
store rcx, blocks, rdx, 8
FOR_CONTINUE_72:
add init_array_index, 1
jmp FOR_70
ENDFOR_71:
PROC_END_init_array:
ret
function PROC_init:
mov init_title, arg0
mov init_x, rbx
mov init_y, rcx
mov init_w, rdx
mov init_h, rsi
invoke init
return rbx
mov __funcret_init, rbx
cmp __funcret_init, 0
je ELSE_75
print fmt_str, str_3
print newline
exit 1
ELSE_75:
mov rsi, 4
invoke create_window, title, init_x, init_y, init_w, init_h, rsi
return rdx
mov window_id, rdx
mov rsi, 0
sub rsi, 1
cmp window_id, rsi
jne ELSE_79
print fmt_str, str_4
print newline
invoke quit
exit 1
ELSE_79:
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_83
print fmt_str, str_5
print newline
invoke destroy_window, window_id
invoke quit
exit 1
ELSE_83:
mov r10, 640
mov r11, 360
invoke create_render_target, renderer, r10, r11
return r9
mov target_id, r9
mov r9, 0
sub r9, 1
cmp target_id, r9
jne ELSE_87
print fmt_str, str_6
print newline
invoke destroy_window, window_id
invoke destroy_renderer, renderer
exit 1
invoke quit
ELSE_87:
invoke get_ticks
return r9
invoke srand, r9
invoke init_text
return r9
cmp r9, 1
je ELSE_91
print fmt_str, str_7
print newline
exit 1
ELSE_91:
mov r10, 32
invoke load_font, filename, r10
return r9
mov font_id, r9
mov r9, 0
sub r9, 1
cmp font_id, r9
jne ELSE_95
print fmt_str, str_8
print fmt_str, filename
print newline
exit 1
ELSE_95:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push init_title
push init_x
push init_y
push init_w
push init_h
push init_result
call PROC_init_array
pop init_result
pop init_h
pop init_w
pop init_y
pop init_x
pop init_title
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
PROC_END_init:
ret
function PROC_cleanup:
invoke destroy_render_target, target_id
invoke destroy_renderer, renderer
invoke destroy_window, window_id
invoke quit_text
invoke quit
PROC_END_cleanup:
ret
function FUNC_indexAt:
mov indexAt_xval, rbx
mov indexAt_yval, rcx
mov __funcret_indexAt, indexAt_yval
mul __funcret_indexAt, 22
add __funcret_indexAt, indexAt_xval
FUNC_END_indexAt:
mov rax, __funcret_indexAt
ret
}
}