changeset 941:c96647630320

WIP buttons in menu ROM
author Michael Pavone <pavone@retrodev.com>
date Mon, 07 Mar 2016 19:26:23 -0800
parents 4f4f8385da8d
children 74bb286e6174
files Makefile font.spec font.xcf menu.s68
diffstat 4 files changed, 108 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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
--- /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
Binary file font.xcf has changed
--- 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: