changeset 944:10dd8c04cbbc

Handle up down buttons when in a menu
author Michael Pavone <pavone@retrodev.com>
date Sat, 12 Mar 2016 14:24:43 -0800
parents 05229aa23b00
children 67f738bda7e2
files menu.s68
diffstat 1 files changed, 35 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/menu.s68	Wed Mar 09 21:46:31 2016 -0800
+++ b/menu.s68	Sat Mar 12 14:24:43 2016 -0800
@@ -185,6 +185,7 @@
 mouse_buf     rs.b 3
 mouse_shown   rs.b 1
 last_mbuttons rs.b 1
+num_menu      rs.b 1
 
 
 int_6:
@@ -245,37 +246,54 @@
 ;d0 = SACBRLUD
 ;d1 = newly pressed buttons
 handle_pad_buttons:
+	tst.b num_menu.w
+	bne handle_buttons_menu
 	moveq #16, d2
+
+
+	btst #3, d1
+	bne right
+	btst #2, d1
+	bne left
+buttons_no_leftright
 	btst #1, d1
 	bne down
 	btst #0, d1
 	bne up
-	btst #3, d1
-	bne right
-	btst #2, d1
-	bne left
 	btst #7, d1
 	bne select_entry
 	btst #5, d1
 	bne select_entry
 handle_done:
 	rts
+handle_buttons_menu
+	moveq #48, d2
+	bra buttons_no_leftright
 
 down:
+	
 	;check if we are already at the bottom of the page
 	moveq #1, d0
 	add.b (selected).w, d0
+	tst.b num_menu.w
+	bne .menu
 	move.w d0, d1
-	add.w d0, d0
-	add.w d0, d0
+	add.w d1, d1
+	add.w d1, d1
 	lea page_index.w, a2
-	tst.l (0, a2, d0.w)
+	tst.l (0, a2, d1.w)
 	beq handle_done
-	move.b d1, (selected).w
+.do_move
+	move.b d0, (selected).w
 
 	add.w d2, (sprite_list).w
 	add.w d2, (sprite_list+8).w
 	rts
+.menu:
+	cmp.b num_menu.w, d0
+	beq handle_done
+	bra .do_move
+	
 up:
 	;check if we are already at the top of the page
 	move.b (selected).w, d0
@@ -576,11 +594,13 @@
 ;d6 - initial Y position of menu
 draw_menu:
 	moveq #0, d7
+	moveq #0, d5
 	;save menu pointer for second pass
 	movea.l a5, a4
 .lenloop	
 	tst.b (a5)
 	beq .lendone
+	addq #1, d5
 	movea.l a5, a6
 	bsr strlen
 	cmp.w d7, d0
@@ -592,6 +612,7 @@
 .lendone
 	
 	addq #2, d7
+	move.b d5, num_menu.w
 	
 	;calculate X position
 	move.w d7, d4
@@ -609,6 +630,12 @@
 	add.w d3, d4
 	add.w #32, d4
 	move.w d4, (sprite_list+6+8).w
+	;update left arrow Y
+	move.w d6, d4
+	lsl.w #4, d4
+	add.w #256, d4
+	move.w d4, (sprite_list).w
+	move.w d4, (sprite_list+8).w
 	;restore menu pointer
 	movea.l a4, a5
 .drawloop