From 033d820931e5930051b9df6a0c4a8183aa9299ee Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Sun, 13 Oct 2019 19:20:42 +0300 Subject: [PATCH] sortof bounds-check while moving --- src/keyb.asm | 14 +++++--------- src/keyb.inc | 4 ++-- src/main.asm | 29 ++++++++++++++++++++++++----- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/keyb.asm b/src/keyb.asm index d9fdd4e..b953474 100644 --- a/src/keyb.asm +++ b/src/keyb.asm @@ -41,15 +41,11 @@ kbintr: and bl, 07fh add ebx, keystate - ; determine if it's a press or release - test al, 80h - jz .press - ; key release - mov byte [ebx], 0 - jmp .eoi -.press: ; key press - mov byte [ebx], 1 - + ; determine if it's a press or release (high bit set on release) + rol al, 1 + and al, 1 + xor al, 1 + mov byte [ebx], al .eoi: cli end_of_irq KB_IRQ diff --git a/src/keyb.inc b/src/keyb.inc index 6ecb5d9..abd38d0 100644 --- a/src/keyb.inc +++ b/src/keyb.inc @@ -14,6 +14,6 @@ SC_SPACE equ 57 ; carry set if key is pressed %macro check_key 1 mov ebx, keystate + %1 - mov al, [ebx] - add al, 0xff + mov bl, [ebx] + add bl, 0xff %endmacro diff --git a/src/main.asm b/src/main.asm index c3ab902..a5e0754 100644 --- a/src/main.asm +++ b/src/main.asm @@ -5,6 +5,8 @@ %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 @@ -41,19 +43,36 @@ main_loop: jmp main_loop update: + mov eax, [ship_y] + check_key SC_W jnc .not_w - dec dword [ship_y] + sub eax, PLAYER_MOVE_SPEED + jns .not_w + xor eax, eax .not_w: check_key SC_S jnc .not_s - inc dword [ship_y] -.not_s: check_key SC_A + 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 - dec dword [ship_x] + sub eax, PLAYER_MOVE_SPEED + jns .not_a + xor eax, eax .not_a: check_key SC_D jnc .not_d - inc dword [ship_x] + 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 -- 1.7.10.4