summaryrefslogtreecommitdiff
path: root/menu.s68
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2016-03-07 19:26:23 -0800
committerMichael Pavone <pavone@retrodev.com>2016-03-07 19:26:23 -0800
commitb16de3232bf4766f479bb1fedcd7931a3bbcde33 (patch)
tree520610e2d4d315a31351a526d9388929d069c4dc /menu.s68
parente051f15cde4c874a6633cf0fce6333274a5eaa3d (diff)
WIP buttons in menu ROM
Diffstat (limited to 'menu.s68')
-rw-r--r--menu.s68105
1 files changed, 105 insertions, 0 deletions
diff --git a/menu.s68 b/menu.s68
index 94232a5..4df9c80 100644
--- a/menu.s68
+++ b/menu.s68
@@ -572,6 +572,55 @@ draw_button:
move.w #(botcorner | horiz_flip), (a0)
rts
+;a5 - menu pointer
+;d6 - initial Y position of menu
+draw_menu:
+ moveq #0, d7
+ ;save menu pointer for second pass
+ movea.l a5, a4
+.lenloop
+ tst.b (a5)
+ beq .lendone
+ movea.l a5, a6
+ bsr strlen
+ cmp.w d7, d0
+ blo .nochange
+ move.w d0, d7
+.nochange
+ lea (1, a5, d0.w), a5
+ bra .lenloop
+.lendone
+
+ addq #2, d7
+
+ ;calculate X position
+ move.w d7, d4
+ lsr.w #1, d4
+ moveq #20, d5
+ sub.w d4, d5
+ ;restore menu pointer
+ movea.l a4, a5
+.drawloop
+ tst.b (a5)
+ beq .done
+ ;x pos
+ move.w d5, d0
+ ;y pos
+ move.w d6, d1
+ ;width
+ move.w d7, d2
+ bsr draw_button
+ addq #4, d6
+
+ movea.l a5, a6
+ bsr strlen
+ movea.l a5, a6
+ lea (1, a5, d0.w), a5
+ ;TODO: draw string
+ bra .drawloop
+.done
+ rts
+
initial_regs:
vdpreg MODE_2, $4 ;Mode 5, everything turned off
vdpreg MODE_1, $4
@@ -622,6 +671,12 @@ start:
tloop:
move.l (a2)+, (a0)
dbra d0, tloop
+ move.w #((fontfixedend-fontfixed)/4 - 1), d0
+dtloop:
+ move.l (a2)+, d1
+ move.l d1, (a0)
+ move.l d1, (a0)
+ dbra d0, dtloop
;setup SAT
@@ -636,6 +691,8 @@ tloop:
move.l #$01080500, (a2)+
move.l #$887F01AA, (a2)+
move.b #2, num_sprites.w
+
+
menu_start:
lea page_pointers.w, a5
@@ -668,6 +725,12 @@ ploop:
move.l #$40860002, d3
move.l d3, (a1)
move.l d3, base_cmd.w
+
+ moveq #4, d6
+ lea main_menu(pc), a5
+ bsr draw_menu
+ bra gamepad_setup
+
move.b #0, more_pages.w
lea page_index.w, a3
@@ -719,6 +782,7 @@ done_files:
moveq #0, d0
move.l d0, (a3)
+gamepad_setup:
;setup gamepads
move.b #$40, PAD1_CTRL
move.b #$40, PAD2_CTRL
@@ -781,6 +845,32 @@ print_string:
move.w d2, x_pos.w
move.l d3, base_cmd.w
rts
+
+;Prints a null-terminated string with a fixed width font
+;a6 - pointer to string
+;a0 - VDP data port
+;d0 - base tile attribute
+;
+print_string_fixed:
+.loop
+ moveq #0, d1
+ move.b (a6)+, d1
+ beq .end
+ add.w d0, d1
+ move.w d1, (a0)
+ bra .loop
+.end
+ rts
+
+;Returns string length in d0
+;a6 - pointer to string
+strlen:
+ moveq #-1, d0
+.loop
+ addq #1, d0
+ tst.b (a6)+
+ bne .loop
+ rts
align 1
font:
@@ -795,6 +885,9 @@ cursorend:
button:
incbin button.tiles
buttonend:
+fontfixed:
+ incbin font.tiles
+fontfixedend:
widths:
dc.b 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1
@@ -802,5 +895,17 @@ widths:
dc.b 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1
dc.b 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
dc.b 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1
+
+main_menu:
+ dc.b "Load ROM", 0
+ dc.b "Exit", 0
+ dc.b 0
+
+pause_menu:
+ dc.b "Resume", 0
+ dc.b "Load ROM", 0
+ dc.b "Save State", 0
+ dc.b "Load State", 0
+ dc.b 0
rom_end: