changeset 1133:28363cb568c4

Make Mode 4 sprite rendering a little less broken
author Michael Pavone <pavone@retrodev.com>
date Sun, 01 Jan 2017 01:23:26 -0800
parents fd3b8ac57aca
children 15a32da89d23
files vdp.c
diffstat 1 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/vdp.c	Sun Jan 01 01:16:43 2017 -0800
+++ b/vdp.c	Sun Jan 01 01:23:26 2017 -0800
@@ -589,9 +589,12 @@
 			uint32_t address = (context->regs[REG_SAT] << 7 & 0x3F00) + 0x80 + context->sprite_info_list[context->cur_slot].index * 2;
 			address = mode4_address_map[address];
 			--context->sprite_draws;
-			uint32_t tile_address = context->vdpmem[address + 1] * 32 + (context->regs[REG_STILE_BASE] << 11 & 0x2000);
+			uint32_t tile_address = context->vdpmem[address] * 32 + (context->regs[REG_STILE_BASE] << 11 & 0x2000);
+			if (context->regs[REG_MODE_2] & BIT_SPRITE_SZ) {
+				tile_address &= ~32;
+			}
 			tile_address += (line - context->sprite_info_list[context->cur_slot].y)* 4;
-			context->sprite_draw_list[context->sprite_draws].x_pos = context->vdpmem[address];
+			context->sprite_draw_list[context->sprite_draws].x_pos = context->vdpmem[address + 1];
 			context->sprite_draw_list[context->sprite_draws].address = tile_address;
 			context->cur_slot--;
 		} else {