changeset 322:8e2fa485c0f2

Remove z80_ram reference in SDL renderer to get stateview compiling again. Print out the sprite list in stateview.
author Mike Pavone <pavone@retrodev.com>
date Sat, 11 May 2013 22:45:05 -0700
parents 146c87616b05
children 8c01b4154480
files render_sdl.c stateview.c vdp.c vdp.h
diffstat 4 files changed, 20 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/render_sdl.c	Sat May 11 21:19:31 2013 -0700
+++ b/render_sdl.c	Sat May 11 22:45:05 2013 -0700
@@ -232,7 +232,6 @@
 #define MIN_DELAY 5
 uint32_t frame_counter = 0;
 uint32_t start = 0;
-extern uint8_t z80_ram[];
 int wait_render_frame(vdp_context * context)
 {
 	FILE * outfile;
@@ -352,12 +351,6 @@
 			case SDLK_f:
 				gamepad_1.input[GAMEPAD_EXTRA] &= ~BUTTON_MODE;
 				break;
-			case SDLK_z:{
-				FILE * f = fopen("zram.bin", "wb");
-				fwrite(z80_ram, 1, 8 * 1024, f);
-				fclose(f);
-				break;
-				}
 			}
 			break;
 		case SDL_QUIT:
--- a/stateview.c	Sat May 11 21:19:31 2013 -0700
+++ b/stateview.c	Sat May 11 22:45:05 2013 -0700
@@ -38,6 +38,7 @@
 	init_vdp_context(&context);
 	vdp_load_savestate(&context, state_file);
 	vdp_run_to_vblank(&context);
+	vdp_print_sprite_table(&context);
 	printf("Display %s\n", (context.regs[REG_MODE_2] & DISPLAY_ENABLE) ? "enabled" : "disabled");
     render_init(width, height);
     render_context(&context);
--- a/vdp.c	Sat May 11 21:19:31 2013 -0700
+++ b/vdp.c	Sat May 11 22:45:05 2013 -0700
@@ -66,6 +66,24 @@
 	}
 }
 
+void vdp_print_sprite_table(vdp_context * context)
+{
+	uint16_t sat_address = (context->regs[REG_SAT] & 0x7F) << 9;
+	uint16_t current_index = 0;
+	uint8_t count = 0;
+	do {
+		uint16_t address = current_index * 8 + sat_address;
+		uint8_t height = ((context->vdpmem[address+2] & 0x3) + 1) * 8;
+		uint8_t width = (((context->vdpmem[address+2]  >> 2) & 0x3) + 1) * 8;
+		int16_t y = ((context->vdpmem[address] & 0x3) << 8 | context->vdpmem[address+1]) & 0x1FF;
+		int16_t x = ((context->vdpmem[address+ 2] & 0x3) << 8 | context->vdpmem[address + 3]) & 0x1FF;
+		uint16_t link = context->vdpmem[address+3] & 0x7F;
+		printf("Sprite %d: X=%d, Y=%d, Width=%u, Height=%u, Link=%u\n", current_index, x, y, width, height, link);
+		current_index = link;
+		count++;
+	} while (current_index != 0 && count < 80);
+}
+
 void scan_sprite_table(uint32_t line, vdp_context * context)
 {
 	if (context->sprite_index && context->slot_counter) {
--- a/vdp.h	Sat May 11 21:19:31 2013 -0700
+++ b/vdp.h	Sat May 11 22:45:05 2013 -0700
@@ -141,5 +141,6 @@
 uint32_t vdp_next_hint(vdp_context * context);
 uint32_t vdp_next_vint(vdp_context * context);
 void vdp_int_ack(vdp_context * context, uint16_t int_num);
+void vdp_print_sprite_table(vdp_context * context);
 
 #endif //VDP_H_