; vi:filetype=nasm ts=8 sts=8 sw=8: bits 32 %include "gfx.inc" %include "keyb.inc" %include "intr.inc" %include "dbglog.inc" PLAYER_MOVE_SPEED equ 5 ; this is placed at the beginning of our binary at 1mb (see game.ld) ; and it's what gets executed directly by the boot loader section .startup jmp main ; start of main section .text main: call init_intr call kb_init call init_gfx dbglog `hello\n` sti main_loop: call update call clear push dword 0 mov eax, [ship_y] shr eax, 8 push eax mov eax, [ship_x] shr eax, 8 push eax push dword FRAMEBUF_ADDR call sprsheet add esp, 16 call wait_vsync call swap_buffers jmp main_loop update: mov eax, [ship_y] check_key SC_W jnc .not_w sub eax, PLAYER_MOVE_SPEED jns .not_w xor eax, eax .not_w: check_key SC_S jnc .not_s add eax, PLAYER_MOVE_SPEED cmp eax, 200 << 8 jb .not_s mov eax, 200 << 8 .not_s: mov [ship_y], eax mov eax, [ship_x] check_key SC_A jnc .not_a sub eax, PLAYER_MOVE_SPEED jns .not_a xor eax, eax .not_a: check_key SC_D jnc .not_d add eax, PLAYER_MOVE_SPEED cmp eax, 320 << 8 jb .not_d mov eax, 320 << 8 .not_d: mov [ship_x], eax ret section .data align 4 ship_x: dd 160 << 8 ship_y: dd 100 << 8