Mercurial > repos > blastem
comparison menu.s68 @ 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 |
comparison
equal
deleted
inserted
replaced
943:05229aa23b00 | 944:10dd8c04cbbc |
---|---|
183 selected rs.b 1 | 183 selected rs.b 1 |
184 more_pages rs.b 1 | 184 more_pages rs.b 1 |
185 mouse_buf rs.b 3 | 185 mouse_buf rs.b 3 |
186 mouse_shown rs.b 1 | 186 mouse_shown rs.b 1 |
187 last_mbuttons rs.b 1 | 187 last_mbuttons rs.b 1 |
188 num_menu rs.b 1 | |
188 | 189 |
189 | 190 |
190 int_6: | 191 int_6: |
191 dmasrc sprite_list, DMA_SRC_68K | 192 dmasrc sprite_list, DMA_SRC_68K |
192 ;set DMA length | 193 ;set DMA length |
243 | 244 |
244 | 245 |
245 ;d0 = SACBRLUD | 246 ;d0 = SACBRLUD |
246 ;d1 = newly pressed buttons | 247 ;d1 = newly pressed buttons |
247 handle_pad_buttons: | 248 handle_pad_buttons: |
249 tst.b num_menu.w | |
250 bne handle_buttons_menu | |
248 moveq #16, d2 | 251 moveq #16, d2 |
252 | |
253 | |
254 btst #3, d1 | |
255 bne right | |
256 btst #2, d1 | |
257 bne left | |
258 buttons_no_leftright | |
249 btst #1, d1 | 259 btst #1, d1 |
250 bne down | 260 bne down |
251 btst #0, d1 | 261 btst #0, d1 |
252 bne up | 262 bne up |
253 btst #3, d1 | |
254 bne right | |
255 btst #2, d1 | |
256 bne left | |
257 btst #7, d1 | 263 btst #7, d1 |
258 bne select_entry | 264 bne select_entry |
259 btst #5, d1 | 265 btst #5, d1 |
260 bne select_entry | 266 bne select_entry |
261 handle_done: | 267 handle_done: |
262 rts | 268 rts |
269 handle_buttons_menu | |
270 moveq #48, d2 | |
271 bra buttons_no_leftright | |
263 | 272 |
264 down: | 273 down: |
274 | |
265 ;check if we are already at the bottom of the page | 275 ;check if we are already at the bottom of the page |
266 moveq #1, d0 | 276 moveq #1, d0 |
267 add.b (selected).w, d0 | 277 add.b (selected).w, d0 |
278 tst.b num_menu.w | |
279 bne .menu | |
268 move.w d0, d1 | 280 move.w d0, d1 |
269 add.w d0, d0 | 281 add.w d1, d1 |
270 add.w d0, d0 | 282 add.w d1, d1 |
271 lea page_index.w, a2 | 283 lea page_index.w, a2 |
272 tst.l (0, a2, d0.w) | 284 tst.l (0, a2, d1.w) |
273 beq handle_done | 285 beq handle_done |
274 move.b d1, (selected).w | 286 .do_move |
287 move.b d0, (selected).w | |
275 | 288 |
276 add.w d2, (sprite_list).w | 289 add.w d2, (sprite_list).w |
277 add.w d2, (sprite_list+8).w | 290 add.w d2, (sprite_list+8).w |
278 rts | 291 rts |
292 .menu: | |
293 cmp.b num_menu.w, d0 | |
294 beq handle_done | |
295 bra .do_move | |
296 | |
279 up: | 297 up: |
280 ;check if we are already at the top of the page | 298 ;check if we are already at the top of the page |
281 move.b (selected).w, d0 | 299 move.b (selected).w, d0 |
282 beq handle_done | 300 beq handle_done |
283 subq #1, d0 | 301 subq #1, d0 |
574 | 592 |
575 ;a5 - menu pointer | 593 ;a5 - menu pointer |
576 ;d6 - initial Y position of menu | 594 ;d6 - initial Y position of menu |
577 draw_menu: | 595 draw_menu: |
578 moveq #0, d7 | 596 moveq #0, d7 |
597 moveq #0, d5 | |
579 ;save menu pointer for second pass | 598 ;save menu pointer for second pass |
580 movea.l a5, a4 | 599 movea.l a5, a4 |
581 .lenloop | 600 .lenloop |
582 tst.b (a5) | 601 tst.b (a5) |
583 beq .lendone | 602 beq .lendone |
603 addq #1, d5 | |
584 movea.l a5, a6 | 604 movea.l a5, a6 |
585 bsr strlen | 605 bsr strlen |
586 cmp.w d7, d0 | 606 cmp.w d7, d0 |
587 blo .nochange | 607 blo .nochange |
588 move.w d0, d7 | 608 move.w d0, d7 |
590 lea (1, a5, d0.w), a5 | 610 lea (1, a5, d0.w), a5 |
591 bra .lenloop | 611 bra .lenloop |
592 .lendone | 612 .lendone |
593 | 613 |
594 addq #2, d7 | 614 addq #2, d7 |
615 move.b d5, num_menu.w | |
595 | 616 |
596 ;calculate X position | 617 ;calculate X position |
597 move.w d7, d4 | 618 move.w d7, d4 |
598 lsr.w #1, d4 | 619 lsr.w #1, d4 |
599 moveq #20, d5 | 620 moveq #20, d5 |
607 move.w d7, d3 | 628 move.w d7, d3 |
608 lsl.w #3, d3 | 629 lsl.w #3, d3 |
609 add.w d3, d4 | 630 add.w d3, d4 |
610 add.w #32, d4 | 631 add.w #32, d4 |
611 move.w d4, (sprite_list+6+8).w | 632 move.w d4, (sprite_list+6+8).w |
633 ;update left arrow Y | |
634 move.w d6, d4 | |
635 lsl.w #4, d4 | |
636 add.w #256, d4 | |
637 move.w d4, (sprite_list).w | |
638 move.w d4, (sprite_list+8).w | |
612 ;restore menu pointer | 639 ;restore menu pointer |
613 movea.l a4, a5 | 640 movea.l a4, a5 |
614 .drawloop | 641 .drawloop |
615 tst.b (a5) | 642 tst.b (a5) |
616 beq .done | 643 beq .done |