Mercurial > repos > blastem
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) {