diff options
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | font.spec | 1 | ||||
-rw-r--r-- | font.xcf | bin | 0 -> 3615 bytes | |||
-rw-r--r-- | menu.s68 | 105 |
4 files changed, 108 insertions, 1 deletions
@@ -210,7 +210,8 @@ arrow.tiles : arrow.png 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 --git a/font.spec b/font.spec new file mode 100644 index 0000000..a8fa384 --- /dev/null +++ b/font.spec @@ -0,0 +1 @@ +font.png,16,0,raw,nopal diff --git a/font.xcf b/font.xcf Binary files differnew file mode 100644 index 0000000..2356c35 --- /dev/null +++ b/font.xcf @@ -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: |