; 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
; 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
- push dword 100
- push dword 160
+ 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