From 08eaef60d6fe57cdddf1d01982a9b7c20e50cda7 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 10 Mar 2022 00:45:51 -0500 Subject: [PATCH] lemm: pointer vaguely works --- games/lemm/Makefile | 2 +- games/lemm/common_sprites.inc | 790 ---------------------------------- games/lemm/draw_pointer.s | 6 +- games/lemm/joystick.s | 46 ++ games/lemm/keyboard.s | 247 +++++++++++ games/lemm/lemm.s | 16 +- games/lemm/zp.inc | 1 + 7 files changed, 310 insertions(+), 798 deletions(-) create mode 100644 games/lemm/joystick.s create mode 100644 games/lemm/keyboard.s diff --git a/games/lemm/Makefile b/games/lemm/Makefile index 13884be7..1a492297 100644 --- a/games/lemm/Makefile +++ b/games/lemm/Makefile @@ -29,7 +29,7 @@ LEMM_TEST: lemm_test.o lemm_test.o: lemm_test.s zp.inc hardware.inc \ graphics/graphics_test.inc \ - interrupt_handler.s + interrupt_handler.s keyboard.s ca65 -o lemm_test.o lemm_test.s -l lemm_test.lst #### diff --git a/games/lemm/common_sprites.inc b/games/lemm/common_sprites.inc index dd8bd76e..dadea43a 100644 --- a/games/lemm/common_sprites.inc +++ b/games/lemm/common_sprites.inc @@ -69,794 +69,4 @@ point_mask_r: ; X 654 3 210 .byte $c0 ; 1 100 0 000 -finger_grab_sprite: -;=============== -; grab sprite -;=============== - -grab_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $4c ; 0 100 1 100 -.byte $4c ; 0 100 1 100 -.byte $58 ; 0 101 1 000 -.byte $58 ; 0 101 1 000 -.byte $70 ; 0 111 0 000 -.byte $73 ; 0 111 0 011 -.byte $77 ; 0 111 0 111 -.byte $7e ; 0 111 1 110 -.byte $7c ; 0 111 1 100 -.byte $7c ; 0 111 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 - -grab_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $0d ; 0 000 1 101 -.byte $0d ; 0 000 1 101 -.byte $0d ; 0 000 1 101 -.byte $6d ; 0 110 1 101 -.byte $6f ; 0 110 1 111 -.byte $7f ; 0 111 1 111 -.byte $3f ; 0 011 1 111 -.byte $3f ; 0 011 1 111 -.byte $3f ; 0 011 1 111 -.byte $1f ; 0 001 1 111 -.byte $1f ; 0 001 1 111 -.byte $0f ; 0 000 1 111 -.byte $0f ; 0 000 1 111 - -grab_mask_l: ; X 654 3 210 -.byte $b3 ; 1 011 0 011 -.byte $81 ; 1 000 0 001 -.byte $81 ; 1 000 0 001 -.byte $83 ; 1 000 0 011 -.byte $83 ; 1 000 0 011 -.byte $84 ; 1 000 0 100 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $81 ; 1 000 0 001 -.byte $81 ; 1 000 0 001 -.byte $83 ; 1 000 0 011 -.byte $c7 ; 1 100 0 111 -.byte $c7 ; 1 100 1 111 - -grab_mask_r: ; X 654 3 210 -.byte $f2 ; 1 111 0 010 -.byte $e0 ; 1 110 0 000 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 -.byte $e0 ; 1 110 0 000 -.byte $e0 ; 1 110 0 000 - - -;====================== -; finger left -;====================== -; TODO - -finger_left_sprite: - -finger_left_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_left_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_left_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_left_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 - - -;==================== -; finger right -;==================== -; TODO - -finger_right_sprite: -finger_right_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_right_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_right_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_right_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 - - -;==================== -; Finger turn left -;==================== -finger_turn_left_sprite: - -finger_turn_left_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_turn_left_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_turn_left_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_turn_left_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 - -;===================== -; Finger turn right -;===================== -; TODO - -finger_turn_right_sprite: - -finger_turn_right_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_turn_right_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_turn_right_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_turn_right_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 - - -;===================== -; finger match -;===================== -; TODO - -finger_match_sprite: -.if 0 -finger_match_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_match_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_match_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_match_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 -.endif - -;====================== -; finger match lit -;====================== -; TODO - -finger_match_lit_sprite: -.if 0 -finger_match_lit_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_match_lit_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_match_lit_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_match_lit_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 -.endif - -;========================= -; finger key sprite -;========================= -; TODO - -finger_key_sprite: -.if 0 -finger_key_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_key_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_key_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_key_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 -.endif - -;=========================== -; finger red sprite -;=========================== -; TODO - -finger_red_page_sprite: - -finger_red_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_red_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_red_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_red_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 - -;===================== -; finger blue sprite -;===================== -; TODO - -finger_blue_page_sprite: - -finger_blue_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_blue_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_blue_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_blue_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 - - -;======================== -; finger white page -;======================== -; TODO - -finger_white_page_sprite: - -finger_white_sprite_l: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 -.byte $63 ; 0 110 0 011 -.byte $66 ; 0 110 0 110 -.byte $2c ; 0 010 1 100 -.byte $6c ; 0 110 1 100 -.byte $78 ; 0 111 1 000 -.byte $70 ; 0 111 0 000 -.byte $70 ; 0 111 0 000 -.byte $60 ; 0 110 0 000 -.byte $60 ; 0 110 0 000 - -finger_white_sprite_r: ; X 654 3 210 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $00 ; 0 000 0 000 -.byte $0A ; 0 000 1 010 -.byte $2A ; 0 010 1 010 -.byte $2D ; 0 010 1 101 -.byte $37 ; 0 011 0 111 -.byte $3F ; 0 011 1 111 -.byte $3F ; 0 011 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 -.byte $1F ; 0 001 1 111 - -finger_white_mask_l: ; X 654 3 210 -.byte $ff ; 1 001 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 000 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 001 -.byte $ff ; 1 000 0 011 -.byte $ff ; 1 000 0 111 -.byte $ff ; 1 000 1 111 -.byte $ff ; 1 000 1 111 - -finger_white_mask_r: ; X 654 3 210 -.byte $ff ; 1 111 1 111 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $fe ; 1 111 1 110 -.byte $e0 ; 1 110 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $80 ; 1 000 0 000 -.byte $c0 ; 1 100 0 000 -.byte $c0 ; 1 100 0 000 - - - - - - - diff --git a/games/lemm/draw_pointer.s b/games/lemm/draw_pointer.s index aa7e7112..2c8f6e95 100644 --- a/games/lemm/draw_pointer.s +++ b/games/lemm/draw_pointer.s @@ -8,7 +8,7 @@ draw_pointer: lda #0 sta OVER_LEMMING -; jsr save_bg_14x14 ; save old bg + jsr save_bg_14x14 ; save old bg ; for now assume the only 14x14 sprites are the pointers @@ -43,9 +43,9 @@ draw_pointer: - lda #>finger_turn_right_sprite + lda #finger_turn_right_sprite + lda #>point_sprite_l sta INH jsr hgr_draw_sprite_14x14 diff --git a/games/lemm/joystick.s b/games/lemm/joystick.s new file mode 100644 index 00000000..751fd039 --- /dev/null +++ b/games/lemm/joystick.s @@ -0,0 +1,46 @@ +; Oliver Schmidt +; comp.sys.apple2.programmer + +; Call with joystick number (0 or 1) in A. +; Results are stored in value0 and value1. +; UPPER_THRESHOLD is the paddle value you want to consider as "right enough" / +; "down enough". + +UPPER_THRESHOLD = 128 + +;PTRIG = $c070 +PADDL1 = $C065 + +handle_joystick: + lda #0 + + ; Read both paddles simultaneously + asl ; Joystick number -> paddle number + tax + ldy #$00 + sty value0 + sty value1 + lda PTRIG ; Trigger paddles +loop: lda PADDL0,x ; Read paddle (0 or 2) + bmi set0 ; Cycles: 2 3 + nop ; Cycles: 2 + bpl nop0 ; Cycles: 3 +set0: sty value0 ; Cycles: 4 +nop0: ; - - + ; Cycles: 7 7 + lda PADDL1,x ; Read paddle (1 or 3) + bmi set1 ; Cycles: 2 3 + nop ; Cycles: 2 + bpl nop1 ; Cycles: 3 +set1: sty value1 ; Cycles: 4 +nop1: ; - - + ; Cycles: 7 7 + iny + cpy #UPPER_THRESHOLD+1 + bne loop + + rts + +value0: .byte $00 +value1: .byte $00 + diff --git a/games/lemm/keyboard.s b/games/lemm/keyboard.s new file mode 100644 index 00000000..9e65c91c --- /dev/null +++ b/games/lemm/keyboard.s @@ -0,0 +1,247 @@ + + ;============================== + ; Handle Keypress + ;============================== +handle_keypress: + + ; first handle joystick + lda JOYSTICK_ENABLED + beq actually_handle_keypress + + ; only check joystick every-other frame + lda FRAMEL + and #$1 + beq actually_handle_keypress + +check_button: + lda PADDLE_BUTTON0 + bpl button_clear + + lda JS_BUTTON_STATE + bne js_check + + lda #1 + sta JS_BUTTON_STATE + lda #' ' + jmp handle_input + +button_clear: + lda #0 + sta JS_BUTTON_STATE + +js_check: + jsr handle_joystick + +js_check_left: + lda value0 + cmp #$20 + bcs js_check_right ; if less than 32, left + lda #'A' + bne handle_input + +js_check_right: + cmp #$40 + bcc js_check_up + lda #'D' + bne handle_input + +js_check_up: + lda value1 + cmp #$20 + bcs js_check_down + lda #'W' + + bne handle_input + +js_check_down: + cmp #$40 + bcc done_joystick + lda #'S' + bne handle_input + + +done_joystick: + + + +actually_handle_keypress: + lda KEYPRESS + bmi keypress + + jmp no_keypress + +keypress: + and #$7f ; clear high bit + cmp #' ' + beq handle_input ; make sure not to lose space + and #$df ; convert uppercase to lower case + + +handle_input: + + pha + jsr restore_bg_14x14 ; restore old background + pla + +check_sound: + cmp #$14 ; control-T + bne check_joystick + + lda SOUND_STATUS + eor #SOUND_DISABLED + sta SOUND_STATUS + jmp done_keypress + + ; can't be ^J as that's the same as down +check_joystick: +; cmp #$10 ; control-P + cmp #'J' + bne check_left + + lda JOYSTICK_ENABLED + eor #1 + sta JOYSTICK_ENABLED + jmp done_keypress + +check_left: + cmp #'A' + beq left_pressed + cmp #8 ; left key + bne check_right +left_pressed: + lda CURSOR_X ; if 41