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 = "Logo"
string str_1 = "font.ttf"
string str_2 = "Hello, World in Pascal MXVM"
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 init_title = null
int init_x = 0
int init_y = 0
int init_w = 0
int init_h = 0
int __funcret_init = 0
}
section code {
start:
mov title, str_0
mov filename, str_1
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
done
function PROC_render:
invoke set_render_target, renderer, target_id
mov rbx, 25
mov rcx, 25
mov rdx, 255
mov rsi, 255
mov rdi, 255
mov r8, 255
invoke draw_text, renderer, font_id, str_2, rbx, rcx, rdx, rsi, rdi, r8
PROC_END_render:
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_20
print fmt_str, str_3
print newline
exit 1
ELSE_20:
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_24
print fmt_str, str_4
print newline
invoke quit
exit 1
ELSE_24:
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_28
print fmt_str, str_5
print newline
invoke destroy_window, window_id
invoke quit
exit 1
ELSE_28:
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_32
print fmt_str, str_6
print newline
invoke destroy_window, window_id
invoke destroy_renderer, renderer
exit 1
invoke quit
ELSE_32:
invoke get_ticks
return r9
invoke srand, r9
invoke init_text
return r9
cmp r9, 1
je ELSE_36
print fmt_str, str_7
print newline
exit 1
ELSE_36:
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_40
print fmt_str, str_8
print fmt_str, filename
print newline
exit 1
ELSE_40:
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
}
}