# HG changeset patch # User Michael Pavone # Date 1457407583 28800 # Node ID c96647630320f7405d79f71b9295e603c30cd5b5 # Parent 4f4f8385da8d490cc3c8b469bd6d04ab8b570b4e WIP buttons in menu ROM diff -r 4f4f8385da8d -r c96647630320 Makefile --- a/Makefile Thu Feb 25 23:39:14 2016 -0800 +++ b/Makefile Mon Mar 07 19:26:23 2016 -0800 @@ -210,7 +210,8 @@ cursor.tiles : cursor.png font_interlace_variable.tiles : font_interlace_variable.png button.tiles : button.png -menu.bin : font_interlace_variable.tiles arrow.tiles cursor.tiles button.tiles + +menu.bin : font_interlace_variable.tiles arrow.tiles cursor.tiles button.tiles font.tiles clean : rm -rf $(ALL) trans ztestrun ztestgen *.o diff -r 4f4f8385da8d -r c96647630320 font.spec --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/font.spec Mon Mar 07 19:26:23 2016 -0800 @@ -0,0 +1,1 @@ +font.png,16,0,raw,nopal diff -r 4f4f8385da8d -r c96647630320 font.xcf Binary file font.xcf has changed diff -r 4f4f8385da8d -r c96647630320 menu.s68 --- a/menu.s68 Thu Feb 25 23:39:14 2016 -0800 +++ b/menu.s68 Mon Mar 07 19:26:23 2016 -0800 @@ -572,6 +572,55 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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: