# HG changeset patch # User Mike Pavone # Date 1368507153 25200 # Node ID fd5f6577db9bebd70d5b02f4139219d2b01a6da4 # Parent bf7ed23efa402cc74fca3417c8130c2ba129f167 Implement first line/last line weirdness in VDP diff -r bf7ed23efa40 -r fd5f6577db9b vdp.c --- a/vdp.c Mon May 13 21:36:33 2013 -0700 +++ b/vdp.c Mon May 13 21:52:33 2013 -0700 @@ -770,12 +770,14 @@ case 0: context->cur_slot = MAX_DRAWS-1; memset(context->linebuf, 0, LINEBUF_SIZE); - render_sprite_cells(context); - break; case 1: case 2: case 3: - render_sprite_cells(context); + if (line == 0xFF) { + external_slot(context); + } else { + render_sprite_cells(context); + } break; //sprite attribute table scan starts case 4: @@ -922,12 +924,14 @@ case 0: context->cur_slot = MAX_DRAWS_H32-1; memset(context->linebuf, 0, LINEBUF_SIZE); - render_sprite_cells(context); - break; case 1: case 2: case 3: - render_sprite_cells(context); + if (line == 0xFF) { + external_slot(context); + } else { + render_sprite_cells(context); + } break; //sprite attribute table scan starts case 4: @@ -1126,7 +1130,7 @@ context->flags2 |= FLAG2_VINT_PENDING; } } - if (line < active_lines && context->regs[REG_MODE_2] & DISPLAY_ENABLE) { + if ((line < active_lines || (line == active_lines && linecyc < (context->latched_mode & BIT_H40 ? 64 : 80))) && context->regs[REG_MODE_2] & DISPLAY_ENABLE) { //first sort-of active line is treated as 255 internally //it's used for gathering sprite info for line line = (line - 1) & 0xFF;