# HG changeset patch # User Michael Pavone # Date 1482873067 28800 # Node ID d4bef26d0977013e065deddfc7f50341eb42e980 # Parent 1913f9c280033865cc28cfcf63c95b74af6ccfab Implemented Mode 4 sprite list termination diff -r 1913f9c28003 -r d4bef26d0977 vdp.c --- 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) {