changeset 1122:d4bef26d0977

Implemented Mode 4 sprite list termination
author Michael Pavone <pavone@retrodev.com>
date Tue, 27 Dec 2016 13:11:07 -0800
parents 1913f9c28003
children d5412f76accc
files vdp.c
diffstat 1 files changed, 19 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/vdp.c	Tue Dec 27 12:43:37 2016 -0800
+++ b/vdp.c	Tue Dec 27 13:11:07 2016 -0800
@@ -471,15 +471,11 @@
 		
 		uint32_t y = context->sat_cache[context->sprite_index];
 		uint32_t size = (context->regs[REG_MODE_2] & BIT_SPRITE_SZ) ? 16 : 8;
-		if (y <= line && line < (y + size)) {
-			context->sprite_info_list[--(context->slot_counter)].size = size;
-			context->sprite_info_list[context->slot_counter].index = context->sprite_index;
-			context->sprite_info_list[context->slot_counter].y = y;
-		}
-		context->sprite_index++;
 		
-		if (context->sprite_index < MAX_SPRITES_FRAME_H32 && context->slot_counter) {
-			y = context->sat_cache[context->sprite_index];
+		if (y >= 0xd0) {
+			context->sprite_index = MAX_SPRITES_FRAME_H32;
+			return;
+		} else {
 			if (y <= line && line < (y + size)) {
 				context->sprite_info_list[--(context->slot_counter)].size = size;
 				context->sprite_info_list[context->slot_counter].index = context->sprite_index;
@@ -488,6 +484,21 @@
 			context->sprite_index++;
 		}
 		
+		if (context->sprite_index < MAX_SPRITES_FRAME_H32 && context->slot_counter) {
+			y = context->sat_cache[context->sprite_index];
+			if (y >= 0xd0) {
+				context->sprite_index = MAX_SPRITES_FRAME_H32;
+				return;
+			} else {
+				if (y <= line && line < (y + size)) {
+					context->sprite_info_list[--(context->slot_counter)].size = size;
+					context->sprite_info_list[context->slot_counter].index = context->sprite_index;
+					context->sprite_info_list[context->slot_counter].y = y;
+				}
+				context->sprite_index++;
+			}
+		}
+		
 	}
 }
 
@@ -1256,7 +1267,6 @@
 					} else {
 						*(dst++) = context->colors[(*bg_src & 0x1F) + CRAM_SIZE*3];
 					}
-					
 				} else if (*sprite_src) {
 					//sprite layer is opaque
 					if (context->debug) {