Update comments
This commit is contained in:
parent
9ce028056a
commit
097b768127
@ -84,19 +84,19 @@ static void fifo_overlay_object_row(GB_fifo_t *fifo, uint8_t lower, uint8_t uppe
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Each line is 456 cycles, approximately:
|
Each line is 456 cycles. Without scrolling, sprites or a window::
|
||||||
Mode 2 - 80 cycles / OAM Transfer
|
Mode 2 - 80 cycles / OAM Transfer
|
||||||
Mode 3 - 172 cycles / Rendering
|
Mode 3 - 172 cycles / Rendering
|
||||||
Mode 0 - 204 cycles / HBlank
|
Mode 0 - 204 cycles / HBlank
|
||||||
|
|
||||||
Mode 1 is VBlank
|
Mode 1 is VBlank
|
||||||
|
|
||||||
Todo: Mode lengths are not constants, see http://blog.kevtris.org/blogfiles/Nitty%20Gritty%20Gameboy%20VRAM%20Timing.txt
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Todo: Clean up the glitched line 0 and get rid of these defines */
|
||||||
#define MODE2_LENGTH (80)
|
#define MODE2_LENGTH (80)
|
||||||
#define MODE3_LENGTH (172)
|
#define MODE3_LENGTH (172)
|
||||||
#define MODE0_LENGTH (204)
|
#define MODE0_LENGTH (204)
|
||||||
|
|
||||||
#define LINE_LENGTH (MODE2_LENGTH + MODE3_LENGTH + MODE0_LENGTH) // = 456
|
#define LINE_LENGTH (MODE2_LENGTH + MODE3_LENGTH + MODE0_LENGTH) // = 456
|
||||||
#define LINES (144)
|
#define LINES (144)
|
||||||
#define WIDTH (160)
|
#define WIDTH (160)
|
||||||
@ -238,7 +238,7 @@ static void trigger_oam_interrupt(GB_gameboy_t *gb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Todo: A proper test ROM of cases where both the PPU and the CPU write to IF in the same M-cycle is needed. */
|
/* Todo: When the CPU and PPU write to IF at the same T-cycle, the PPU write is ignored. */
|
||||||
void GB_STAT_update(GB_gameboy_t *gb)
|
void GB_STAT_update(GB_gameboy_t *gb)
|
||||||
{
|
{
|
||||||
if (!(gb->io_registers[GB_IO_LCDC] & 0x80)) return;
|
if (!(gb->io_registers[GB_IO_LCDC] & 0x80)) return;
|
||||||
@ -438,7 +438,7 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb)
|
|||||||
/* This value is cached on the CGB, so it cannot be used to mix tiles together */
|
/* This value is cached on the CGB, so it cannot be used to mix tiles together */
|
||||||
/* Todo: This is NOT true on CGB-B! This is likely the case for all CGBs prior to D.
|
/* Todo: This is NOT true on CGB-B! This is likely the case for all CGBs prior to D.
|
||||||
Currently, SameBoy is emulating CGB-E, but if other revisions are added in the future
|
Currently, SameBoy is emulating CGB-E, but if other revisions are added in the future
|
||||||
this should be taken care of*/
|
this should be taken care of */
|
||||||
gb->fetcher_y = y;
|
gb->fetcher_y = y;
|
||||||
}
|
}
|
||||||
gb->current_tile = gb->vram[map + gb->fetcher_x + y / 8 * 32];
|
gb->current_tile = gb->vram[map + gb->fetcher_x + y / 8 * 32];
|
||||||
@ -479,8 +479,8 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb)
|
|||||||
|
|
||||||
case GB_FETCHER_GET_TILE_DATA_HIGH: {
|
case GB_FETCHER_GET_TILE_DATA_HIGH: {
|
||||||
/* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong.
|
/* Todo: Verified for DMG (Tested: SGB2), CGB timing is wrong.
|
||||||
Additionally, on the CGB mixing two tiles by changing the tileset bit
|
Additionally, on CGB-D and newer mixing two tiles by changing the tileset
|
||||||
mid-fetching causes a glitched mixing of the two, in comparison to the
|
bit mid-fetching causes a glitched mixing of the two, in comparison to the
|
||||||
more logical DMG version. */
|
more logical DMG version. */
|
||||||
uint16_t tile_address = 0;
|
uint16_t tile_address = 0;
|
||||||
uint8_t y = gb->is_cgb? gb->fetcher_y : fetcher_y(gb);
|
uint8_t y = gb->is_cgb? gb->fetcher_y : fetcher_y(gb);
|
||||||
@ -736,6 +736,7 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles)
|
|||||||
if (object->flags & 0x40) { /* Flip Y */
|
if (object->flags & 0x40) { /* Flip Y */
|
||||||
tile_y ^= height_16? 0xF : 7;
|
tile_y ^= height_16? 0xF : 7;
|
||||||
}
|
}
|
||||||
|
/* Todo: I'm not 100% sure an access to OAM can't trigger the OAM bug while we're accessing this */
|
||||||
uint16_t line_address = (height_16? object->tile & 0xFE : object->tile) * 0x10 + tile_y * 2;
|
uint16_t line_address = (height_16? object->tile & 0xFE : object->tile) * 0x10 + tile_y * 2;
|
||||||
|
|
||||||
if (gb->cgb_mode && (object->flags & 0x8)) { /* Use VRAM bank 2 */
|
if (gb->cgb_mode && (object->flags & 0x8)) { /* Use VRAM bank 2 */
|
||||||
|
Loading…
Reference in New Issue
Block a user