comparison menu.s68 @ 941:c96647630320

WIP buttons in menu ROM
author Michael Pavone <pavone@retrodev.com>
date Mon, 07 Mar 2016 19:26:23 -0800
parents 5e90fa4da2ec
children 74bb286e6174
comparison
equal deleted inserted replaced
940:4f4f8385da8d 941:c96647630320
570 .nomiddlebot 570 .nomiddlebot
571 ;bottom right corner 571 ;bottom right corner
572 move.w #(botcorner | horiz_flip), (a0) 572 move.w #(botcorner | horiz_flip), (a0)
573 rts 573 rts
574 574
575 ;a5 - menu pointer
576 ;d6 - initial Y position of menu
577 draw_menu:
578 moveq #0, d7
579 ;save menu pointer for second pass
580 movea.l a5, a4
581 .lenloop
582 tst.b (a5)
583 beq .lendone
584 movea.l a5, a6
585 bsr strlen
586 cmp.w d7, d0
587 blo .nochange
588 move.w d0, d7
589 .nochange
590 lea (1, a5, d0.w), a5
591 bra .lenloop
592 .lendone
593
594 addq #2, d7
595
596 ;calculate X position
597 move.w d7, d4
598 lsr.w #1, d4
599 moveq #20, d5
600 sub.w d4, d5
601 ;restore menu pointer
602 movea.l a4, a5
603 .drawloop
604 tst.b (a5)
605 beq .done
606 ;x pos
607 move.w d5, d0
608 ;y pos
609 move.w d6, d1
610 ;width
611 move.w d7, d2
612 bsr draw_button
613 addq #4, d6
614
615 movea.l a5, a6
616 bsr strlen
617 movea.l a5, a6
618 lea (1, a5, d0.w), a5
619 ;TODO: draw string
620 bra .drawloop
621 .done
622 rts
623
575 initial_regs: 624 initial_regs:
576 vdpreg MODE_2, $4 ;Mode 5, everything turned off 625 vdpreg MODE_2, $4 ;Mode 5, everything turned off
577 vdpreg MODE_1, $4 626 vdpreg MODE_1, $4
578 vdpreg SCROLL_A, $20 ;Scroll a table $8000 627 vdpreg SCROLL_A, $20 ;Scroll a table $8000
579 vdpreg SCROLL_B, $05 ;Scroll b table $A000 628 vdpreg SCROLL_B, $05 ;Scroll b table $A000
620 lea font(pc), a2 669 lea font(pc), a2
621 move.w #((buttonend-font)/4 - 1), d0 670 move.w #((buttonend-font)/4 - 1), d0
622 tloop: 671 tloop:
623 move.l (a2)+, (a0) 672 move.l (a2)+, (a0)
624 dbra d0, tloop 673 dbra d0, tloop
674 move.w #((fontfixedend-fontfixed)/4 - 1), d0
675 dtloop:
676 move.l (a2)+, d1
677 move.l d1, (a0)
678 move.l d1, (a0)
679 dbra d0, dtloop
625 680
626 681
627 ;setup SAT 682 ;setup SAT
628 ;;vdpaccess $C000, VDP_VRAM_WRITE 683 ;;vdpaccess $C000, VDP_VRAM_WRITE
629 684
634 689
635 ;right arrow 690 ;right arrow
636 move.l #$01080500, (a2)+ 691 move.l #$01080500, (a2)+
637 move.l #$887F01AA, (a2)+ 692 move.l #$887F01AA, (a2)+
638 move.b #2, num_sprites.w 693 move.b #2, num_sprites.w
694
695
639 696
640 menu_start: 697 menu_start:
641 lea page_pointers.w, a5 698 lea page_pointers.w, a5
642 lea dir_buffer, a6 699 lea dir_buffer, a6
643 move.l a6, (a5)+ 700 move.l a6, (a5)+
666 ;bsr draw_button 723 ;bsr draw_button
667 724
668 move.l #$40860002, d3 725 move.l #$40860002, d3
669 move.l d3, (a1) 726 move.l d3, (a1)
670 move.l d3, base_cmd.w 727 move.l d3, base_cmd.w
728
729 moveq #4, d6
730 lea main_menu(pc), a5
731 bsr draw_menu
732 bra gamepad_setup
733
671 734
672 move.b #0, more_pages.w 735 move.b #0, more_pages.w
673 lea page_index.w, a3 736 lea page_index.w, a3
674 moveq #MAX_DISPLAY-1, d7 737 moveq #MAX_DISPLAY-1, d7
675 file_loop: 738 file_loop:
717 780
718 ;null terminate page_index 781 ;null terminate page_index
719 moveq #0, d0 782 moveq #0, d0
720 move.l d0, (a3) 783 move.l d0, (a3)
721 784
785 gamepad_setup:
722 ;setup gamepads 786 ;setup gamepads
723 move.b #$40, PAD1_CTRL 787 move.b #$40, PAD1_CTRL
724 move.b #$40, PAD2_CTRL 788 move.b #$40, PAD2_CTRL
725 789
726 move.w #$8174, (a1) ;enable display, vertical interrupts, DMA 790 move.w #$8174, (a1) ;enable display, vertical interrupts, DMA
779 bra .loop 843 bra .loop
780 .end 844 .end
781 move.w d2, x_pos.w 845 move.w d2, x_pos.w
782 move.l d3, base_cmd.w 846 move.l d3, base_cmd.w
783 rts 847 rts
848
849 ;Prints a null-terminated string with a fixed width font
850 ;a6 - pointer to string
851 ;a0 - VDP data port
852 ;d0 - base tile attribute
853 ;
854 print_string_fixed:
855 .loop
856 moveq #0, d1
857 move.b (a6)+, d1
858 beq .end
859 add.w d0, d1
860 move.w d1, (a0)
861 bra .loop
862 .end
863 rts
864
865 ;Returns string length in d0
866 ;a6 - pointer to string
867 strlen:
868 moveq #-1, d0
869 .loop
870 addq #1, d0
871 tst.b (a6)+
872 bne .loop
873 rts
784 874
785 align 1 875 align 1
786 font: 876 font:
787 incbin font_interlace_variable.tiles 877 incbin font_interlace_variable.tiles
788 fontend 878 fontend
793 incbin cursor.tiles 883 incbin cursor.tiles
794 cursorend: 884 cursorend:
795 button: 885 button:
796 incbin button.tiles 886 incbin button.tiles
797 buttonend: 887 buttonend:
888 fontfixed:
889 incbin font.tiles
890 fontfixedend:
798 891
799 widths: 892 widths:
800 dc.b 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1 893 dc.b 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1
801 dc.b 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0 894 dc.b 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0
802 dc.b 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 895 dc.b 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1
803 dc.b 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 896 dc.b 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
804 dc.b 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1 897 dc.b 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1
898
899 main_menu:
900 dc.b "Load ROM", 0
901 dc.b "Exit", 0
902 dc.b 0
903
904 pause_menu:
905 dc.b "Resume", 0
906 dc.b "Load ROM", 0
907 dc.b "Save State", 0
908 dc.b "Load State", 0
909 dc.b 0
805 910
806 rom_end: 911 rom_end: