lemm: pointer vaguely works

This commit is contained in:
Vince Weaver 2022-03-10 00:45:51 -05:00
parent 1b29a4689d
commit 08eaef60d6
7 changed files with 310 additions and 798 deletions

View File

@ -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
####

View File

@ -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

View File

@ -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 #<point_sprite_l
sta INL
lda #>finger_turn_right_sprite
lda #>point_sprite_l
sta INH
jsr hgr_draw_sprite_14x14

46
games/lemm/joystick.s Normal file
View File

@ -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

247
games/lemm/keyboard.s Normal file
View File

@ -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<x<$FE don't decrement
cmp #41
bcc do_dec_cursor_x
cmp #$FE
bcc done_left_pressed
do_dec_cursor_x:
dec CURSOR_X
done_left_pressed:
jmp done_keypress
check_right:
cmp #'D'
beq right_pressed
cmp #$15 ; right key
bne check_up
right_pressed:
lda CURSOR_X ; if 40<x<$FE don't increment
cmp #40
bcc do_inc_cursor_x
cmp #$FE
bcc done_right_pressed
do_inc_cursor_x:
inc CURSOR_X
done_right_pressed:
jmp done_keypress
check_up:
cmp #'W'
beq up_pressed
cmp #$0B ; up key
bne check_down
up_pressed:
lda CURSOR_Y ; if 191<y<$F0 don't decrement
cmp #191
bcc do_dec_cursor_y
cmp #$F0
bcc done_up_pressed
do_dec_cursor_y:
dec CURSOR_Y
dec CURSOR_Y
dec CURSOR_Y
dec CURSOR_Y
done_up_pressed:
jmp done_keypress
check_down:
cmp #'S'
beq down_pressed
cmp #$0A
bne check_escape
down_pressed:
lda CURSOR_Y ; if 191<y<$EE don't decrement
cmp #191
bcc do_inc_cursor_y
cmp #$EE
bcc done_down_pressed
do_inc_cursor_y:
inc CURSOR_Y
inc CURSOR_Y
inc CURSOR_Y
inc CURSOR_Y
done_down_pressed:
jmp done_keypress
check_escape:
cmp #27
bne check_return
escape_pressed:
inc LEVEL_OVER
jmp done_keypress
check_return:
cmp #' '
beq return_pressed
cmp #13
bne done_keypress
return_pressed:
; lda IN_SPECIAL
; beq not_special_return
special_return:
; jsr handle_special
; special case, don't make cursor visible
; jmp no_keypress
;not_special_return:
;
; lda IN_RIGHT
; beq not_right_return
; cmp #1
; beq right_return
;right_uturn:
; jsr uturn
; jmp no_keypress
;right_return:
; jsr turn_right
; jmp no_keypress
;not_right_return:
; lda IN_LEFT
; beq not_left_return
; cmp #1
; beq left_return
;left_uturn:
; jsr uturn
; jmp no_keypress
;left_return:
; jsr turn_left
; jmp no_keypress
;not_left_return:
; jsr go_forward
jmp no_keypress
done_keypress:
jsr draw_pointer
no_keypress:
bit KEYRESET
rts

View File

@ -262,9 +262,9 @@ zurg:
lda #100
sta CURSOR_Y
;=======================
; Play "Let's Go"
;=======================
;=======================
; Play "Let's Go"
;=======================
;=======================
@ -282,6 +282,9 @@ zurg:
sta DOOR_OPEN
sta FRAMEL
sta LOAD_NEXT_CHUNK
sta JOYSTICK_ENABLED
jsr save_bg_14x14 ; save initial bg
; set up time
@ -330,7 +333,9 @@ door_is_open:
sta TIMER_COUNT
timer_not_yet:
jsr draw_pointer
jsr handle_keypress
; jsr draw_pointer
lda #$ff
@ -400,6 +405,9 @@ load_song_chunk_good:
.include "wait_keypress.s"
.include "keyboard.s"
.include "joystick.s"
; .include "print_help.s"
.include "gr_fast_clear.s"

View File

@ -61,6 +61,7 @@ CHUNK_NEXT_PLAY = $7E
LOAD_NEXT_CHUNK = $7F
OVER_LEMMING = $80
TIMER_COUNT = $81
UPDATE_POINTER = $82
APPLEII_MODEL = $8B