Skip to content

Commit ab52a08

Browse files
committed
Fix m3_scx_high_5_bits on DMG
1 parent 6a8cdf4 commit ab52a08

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

Core/sm83_cpu.c

+5-11
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ typedef enum {
2525
GB_CONFLICT_LCDC_CGB_DOUBLE,
2626
GB_CONFLICT_STAT_CGB_DOUBLE,
2727
GB_CONFLICT_NR10_CGB_DOUBLE,
28-
GB_CONFLICT_SCX_CGB_DOUBLE,
28+
GB_CONFLICT_SCX_DMG_AND_CGB_DOUBLE,
2929
} conflict_t;
3030

3131
static const conflict_t cgb_conflict_map[0x80] = {
@@ -48,7 +48,7 @@ static const conflict_t cgb_double_conflict_map[0x80] = {
4848
[GB_IO_WY] = GB_CONFLICT_READ_OLD,
4949
[GB_IO_STAT] = GB_CONFLICT_STAT_CGB_DOUBLE,
5050
[GB_IO_NR10] = GB_CONFLICT_NR10_CGB_DOUBLE,
51-
[GB_IO_SCX] = GB_CONFLICT_SCX_CGB_DOUBLE,
51+
[GB_IO_SCX] = GB_CONFLICT_SCX_DMG_AND_CGB_DOUBLE,
5252
[GB_IO_WX] = GB_CONFLICT_READ_OLD,
5353
};
5454

@@ -59,15 +59,12 @@ static const conflict_t dmg_conflict_map[0x80] = {
5959
[GB_IO_LCDC] = GB_CONFLICT_DMG_LCDC,
6060
[GB_IO_SCY] = GB_CONFLICT_READ_NEW,
6161
[GB_IO_STAT] = GB_CONFLICT_STAT_DMG,
62-
6362
[GB_IO_BGP] = GB_CONFLICT_PALETTE_DMG,
6463
[GB_IO_OBP0] = GB_CONFLICT_PALETTE_DMG,
6564
[GB_IO_OBP1] = GB_CONFLICT_PALETTE_DMG,
6665
[GB_IO_WY] = GB_CONFLICT_READ_OLD,
6766
[GB_IO_WX] = GB_CONFLICT_WX_DMG,
68-
69-
/* Todo: these were not verified at all */
70-
[GB_IO_SCX] = GB_CONFLICT_READ_NEW,
67+
[GB_IO_SCX] = GB_CONFLICT_SCX_DMG_AND_CGB_DOUBLE,
7168
};
7269

7370
/* Todo: Verify on an SGB1 */
@@ -77,15 +74,12 @@ static const conflict_t sgb_conflict_map[0x80] = {
7774
[GB_IO_LCDC] = GB_CONFLICT_SGB_LCDC,
7875
[GB_IO_SCY] = GB_CONFLICT_READ_NEW,
7976
[GB_IO_STAT] = GB_CONFLICT_STAT_DMG,
80-
8177
[GB_IO_BGP] = GB_CONFLICT_READ_NEW,
8278
[GB_IO_OBP0] = GB_CONFLICT_READ_NEW,
8379
[GB_IO_OBP1] = GB_CONFLICT_READ_NEW,
8480
[GB_IO_WY] = GB_CONFLICT_READ_OLD,
8581
[GB_IO_WX] = GB_CONFLICT_WX_DMG,
86-
87-
/* Todo: these were not verified at all */
88-
[GB_IO_SCX] = GB_CONFLICT_READ_NEW,
82+
[GB_IO_SCX] = GB_CONFLICT_SCX_DMG_AND_CGB_DOUBLE,
8983
};
9084

9185
static uint8_t cycle_read(GB_gameboy_t *gb, uint16_t addr)
@@ -302,7 +296,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value)
302296
break;
303297
}
304298

305-
case GB_CONFLICT_SCX_CGB_DOUBLE:
299+
case GB_CONFLICT_SCX_DMG_AND_CGB_DOUBLE:
306300
GB_advance_cycles(gb, gb->pending_cycles - 2);
307301
GB_write_memory(gb, addr, value);
308302
gb->pending_cycles = 6;

0 commit comments

Comments
 (0)