Remove video vars serialization

This is not needed at all, since the variables are not updated between
reload and end-of-frame (where we take our savestates). Added a reload
call during gba_load_state() to initialize it from the I/O regs.
This commit is contained in:
David Guillen Fandos 2021-08-15 23:27:04 +02:00
parent 745b2ece2c
commit 7f7d066854
4 changed files with 18 additions and 12 deletions

View File

@ -3122,8 +3122,7 @@ void memory_term(void)
input_##type##_savestate(); \
main_##type##_savestate(); \
memory_##type##_savestate(); \
sound_##type##_savestate(); \
video_##type##_savestate()
sound_##type##_savestate();
const u8 *state_mem_read_ptr;
@ -3152,6 +3151,8 @@ void gba_load_state(const void* src)
convert_palette(current_color);
}
video_reload_counters();
// Oops, these contain raw pointers
for(i = 0; i < 4; i++)
gbc_sound_channel[i].sample_table_idx = 2;

9
main.c
View File

@ -195,14 +195,7 @@ u32 update_gba(void)
irq_raised |= IRQ_VBLANK;
}
affine_reference_x[0] =
(s32)(readaddress32(io_registers, 0x28) << 4) >> 4;
affine_reference_y[0] =
(s32)(readaddress32(io_registers, 0x2C) << 4) >> 4;
affine_reference_x[1] =
(s32)(readaddress32(io_registers, 0x38) << 4) >> 4;
affine_reference_y[1] =
(s32)(readaddress32(io_registers, 0x3C) << 4) >> 4;
video_reload_counters();
for(i = 0; i < 4; i++)
{

13
video.c
View File

@ -2336,6 +2336,19 @@ static void render_scanline_text_transparent_alpha(u32 layer,
s32 affine_reference_x[2];
s32 affine_reference_y[2];
void video_reload_counters()
{
/* This happens every Vblank */
affine_reference_x[0] = (s32)(read_ioreg(REG_BG2X_L) |
((read_ioreg(REG_BG2X_H) & 0xFFF) << 16));
affine_reference_y[0] = (s32)(read_ioreg(REG_BG2Y_L) |
((read_ioreg(REG_BG2Y_H) & 0xFFF) << 16));
affine_reference_x[1] = (s32)(read_ioreg(REG_BG3X_L) |
((read_ioreg(REG_BG3X_H) & 0xFFF) << 16));
affine_reference_y[1] = (s32)(read_ioreg(REG_BG3Y_L) |
((read_ioreg(REG_BG3Y_H) & 0xFFF) << 16));
}
#define affine_render_bg_pixel_normal() \
current_pixel = palette_ram_converted[0] \

View File

@ -21,8 +21,7 @@
#define VIDEO_H
void update_scanline(void);
void video_write_savestate(void);
void video_read_savestate(void);
void video_reload_counters(void);
extern s32 affine_reference_x[2];
extern s32 affine_reference_y[2];