# HG changeset patch # User Michael Pavone # Date 1462171454 25200 # Node ID 4a14d80584b6e092e04367c73db0f5f9527ab9e4 # Parent edab85c29d4df10769be2123be483e91a00fad6f Fully functional next/previous buttons diff -r edab85c29d4d -r 4a14d80584b6 menu.s68 --- a/menu.s68 Sun May 01 22:21:58 2016 -0700 +++ b/menu.s68 Sun May 01 23:44:14 2016 -0700 @@ -182,6 +182,7 @@ mouse_sprite rs.l 1 menu_functions rs.l 1 cursor_show_fun rs.l 1 +special_click rs.l 1 mouse_x rs.w 1 selection_top rs.w 1 selection_bot rs.w 1 @@ -423,6 +424,12 @@ move.b d2, num_sprites.w move.b #1, mouse_shown.w + + move.l cursor_show_fun.w, d2 + beq .skip_show_check + move.l d2, a2 + jsr (a2) + .skip_show_check neg.w d1 @@ -436,7 +443,7 @@ cmp.w selection_top.w, d1 blo .done cmp.w selection_bot.w, d1 - bhi .done + bhi .special_click tst.b num_menu.w bne .handle_menu tst.b num_slots.w @@ -449,7 +456,7 @@ sub.w #264, d1 lsr.w #4, d1 move.b d1, selected.w - bra .no_mouse_move + bra .normal_click .handle_menu ;TODO: FIXME and.w #$FFF0, d1 @@ -481,7 +488,7 @@ move.b d0, selected.w - bra .no_mouse_move + bra .normal_click .handle_slots and.w #$FFE0, d1 subq #8, d1 @@ -491,11 +498,22 @@ sub.w #264, d1 lsr.w #5, d1 move.b d1, selected.w -.no_mouse_move +.normal_click btst #0, d4 bne select_entry .done rts +.no_mouse_move + tst.b mouse_shown + bne .skip_show_check + rts +.special_click: + btst #0, d4 + beq .done + move.l special_click.w, d2 + beq .done + move.l d2, a2 + jmp (a2) int_4: empty_handler: rte @@ -686,6 +704,9 @@ moveq #0, d5 ;clear out save slot state move.b d5, num_slots.w + ;clear out event handlers + move.l d5, cursor_show_fun.w + move.l d5, special_click.w ;select first item move.b d7, selected.w ;save menu pointer for second pass @@ -881,10 +902,11 @@ bra gamepad_setup menu_start: + moveq #0, d0 ;init vertical scroll RAM vdpaccess $0, VDP_VSRAM_WRITE - move.w #0, (a0) - move.w #0, (a0) + move.w d0, (a0) + move.w d0, (a0) ;reset arrow position move.w #$0108, sprite_list.w @@ -893,7 +915,10 @@ move.w #$01AA, (sprite_list + 6 + 8).w ;reset selection - move.b #0, selected.w + move.b d0, selected.w + + ;reset special click handler + move.l d0, special_click.w lea page_pointers.w, a5 @@ -1002,7 +1027,7 @@ beq .no_prev_page ;draw Prev button - moveq #4, d0 + moveq #3, d0 moveq #26, d1 moveq #6, d2 bsr draw_button @@ -1010,7 +1035,7 @@ ;base attribute move.w #$206B, d0 ;x pos - moveq #6, d1 + moveq #5, d1 ;y pos moveq #26, d2 lea prev_str(pc), a6 @@ -1022,8 +1047,9 @@ bra .done_page_buttons .no_mouse - ;TODO - setup cusrsor_show_fun + move.l #show_prev_next_buttons, cursor_show_fun.w .done_page_buttons + move.l #handle_prev_next_click, special_click.w gamepad_setup: ;setup gamepads @@ -1037,6 +1063,94 @@ stop #2500 bra wait_forever +handle_prev_next_click: + ;make sure we're actually low enough + cmp.w #663, d1 + bls .no_prev_page + + + tst.b more_pages.w + beq .no_next_page + + cmp.w #373, d0 + blo .no_next_page + + cmp.w #419, d0 + bhi .no_next_page + + ;switch to the next page + move.l page_stack.w, a6 + move.l (-4, a6), a6 + + add.w #10, a7 + bra render_page + +.no_next_page + cmp.l #(page_pointers+8), a5 + beq .no_prev_page + + cmp.w #157, d0 + blo .no_prev_page + + cmp.w #203, d0 + bhi .no_prev_page + + ;switch to previous page + lea (-12, a5), a5 + move.l (a5)+, a6 + move.l a5, page_stack.w + + add.w #10, a7 + bra render_page + +.no_prev_page + rts + +show_prev_next_buttons: + movem.l d0-d2/a6, -(a7) + tst.b more_pages.w + beq .no_next_page + + ;draw Next button + moveq #30, d0 + moveq #26, d1 + moveq #6, d2 + bsr draw_button + + ;base attribute + move.w #$206B, d0 + ;x pos + moveq #32, d1 + ;y pos + moveq #26, d2 + lea next_str(pc), a6 + bsr print_string_fixed + +.no_next_page + + cmp.l #(page_pointers+8), a5 + beq .no_prev_page + + ;draw Prev button + moveq #3, d0 + moveq #26, d1 + moveq #6, d2 + bsr draw_button + + ;base attribute + move.w #$206B, d0 + ;x pos + moveq #5, d1 + ;y pos + moveq #26, d2 + lea prev_str(pc), a6 + bsr print_string_fixed + +.no_prev_page + move.l #0, cursor_show_fun.w + movem.l (a7)+, d0-d2/a6 + rts + show_about: bsr clear_screen moveq #1, d7