summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rw-r--r--font.spec1
-rw-r--r--font.xcfbin0 -> 3615 bytes
-rw-r--r--menu.s68105
4 files changed, 108 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 7ee697d..00bc65b 100644
--- a/Makefile
+++ b/Makefile
@@ -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
new file mode 100644
index 0000000..2356c35
--- /dev/null
+++ b/font.xcf
Binary files differ
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: