Пример #1
0
void sound_restore()
{
    int size;
    uint8 *ptr, *temp;

    /* save YM context */
    if ((system_hw & SYSTEM_PBC) == SYSTEM_MD)
    {
        size = YM2612GetContextSize();
        ptr = YM2612GetContextPtr();
    }
    else
    {
        size = YM2413GetContextSize();
        ptr = YM2413GetContextPtr();
    }
    temp = malloc(size);
    if (temp)
    {
        memcpy(temp, ptr, size);
    }

    /* reinitialize sound chips */
    sound_init();

    /* restore YM context */
    if (temp)
    {
        if ((system_hw & SYSTEM_PBC) == SYSTEM_MD)
        {
            YM2612Restore(temp);
        }
        else
        {
            YM2413Restore(temp);
        }
        free(temp);
    }
}
Пример #2
0
int state_load(unsigned char *buffer)
{
  /* buffer size */
  int bufferptr = 0;

  /* uncompress savestate */
  unsigned long inbytes, outbytes;
  memcpy(&inbytes, buffer, 4);
  outbytes = STATE_SIZE;
  uncompress ((Bytef *)state, &outbytes, (Bytef *)(buffer + 4), inbytes);

  /* version check */
  char version[16];
  load_param(version,16);
  if (strncmp(version,STATE_VERSION,16))
  {
    return 0;
  }

  /* reset system */
  system_reset();
  m68k_memory_map[0].base = default_rom;

  // GENESIS
  load_param(work_ram, sizeof(work_ram));
  load_param(zram, sizeof(zram));
  load_param(&zbusreq, sizeof(zbusreq));
  load_param(&zreset, sizeof(zreset));
  load_param(&zbank, sizeof(zbank));
  zbusack = 1 ^(zbusreq & zreset);

  // IO
  load_param(io_reg, sizeof(io_reg));

  // VDP
  uint8 temp_reg[0x20];
  load_param(sat, sizeof(sat));
  load_param(vram, sizeof(vram));
  load_param(cram, sizeof(cram));
  load_param(vsram, sizeof(vsram));
  load_param(temp_reg, sizeof(temp_reg));
  load_param(&addr, sizeof(addr));
  load_param(&addr_latch, sizeof(addr_latch));
  load_param(&code, sizeof(code));
  load_param(&pending, sizeof(pending));
  load_param(&status, sizeof(status));
  load_param(&dmafill, sizeof(dmafill));
  load_param(&hint_pending, sizeof(hint_pending));
  load_param(&vint_pending, sizeof(vint_pending));
  load_param(&irq_status, sizeof(irq_status));
  vdp_restore(temp_reg);

  // FM 
  YM2612Restore(&state[bufferptr]);
  bufferptr+= YM2612GetContextSize();

  // PSG
  load_param(SN76489_GetContextPtr(),SN76489_GetContextSize());

  // 68000 
  uint16 tmp16;
  uint32 tmp32;
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D0, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D1, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D2, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D3, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D4, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D5, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D6, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D7, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A0, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A1, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A2, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A3, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A4, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A5, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A6, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A7, tmp32);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_PC, tmp32);  
  load_param(&tmp16, 2); m68k_set_reg(M68K_REG_SR, tmp16);
  load_param(&tmp32, 4); m68k_set_reg(M68K_REG_USP,tmp32);

  // Z80 
  load_param(&Z80, sizeof(Z80_Regs));

  return 1;
}