示例#1
0
void retro_reset( void )
{
  eo_init( &state.cfg );
  
  if ( state.size )
  {
    load_snap( "zx81_16k.z81" );
    
    zx81.TZXin = 1;
    TZXFile.LoadFile( state.data, state.size, false );
    TZXFile.Start();
    
    //eo_loadp( state.data, state.size );
  }
}
示例#2
0
SPWAW_ERROR
snapload (int fd, SPWAW_SNAPSHOT *dst, STRTAB *stabptr)
{
	SPWAW_ERROR	rc = SPWERR_OK;
	STRTAB		*stab = stabptr;
	long		pos;
	SNAP_HEADER	mhdr;
	SNAP_SOURCE	shdr;
	SNAP_INFO	ihdr;
	SNAP		snap;
	CBIO		cbio;

	CNULLARG (dst);
	if (!stabptr) stab = (STRTAB *)dst->stab;

	pos = bseekget (fd);

	memset (&snap, 0, sizeof (snap));

	rc = snaploadhdrs (fd, &mhdr, &shdr, &ihdr);
	ERRORGOTO ("snaploadhdrs()", handle_error);

	if (mhdr.oobdat) {
		rc = SPWOOB_new (&(dst->oobdat));
		ERRORGOTO ("SPWOOB_new()", handle_error);
		dst->freeoobdat = true;

		bseekset (fd, pos + mhdr.oobdat);
		rc = SPWOOB_load (dst->oobdat, fd);
		ERRORGOTO ("SPWOOB_load()", handle_error);
	}

	if (!stabptr) {
		bseekset (fd, pos + mhdr.stab);
		rc = STRTAB_fdload (stab, fd);
		ERRORGOTO ("STRTAB_fdload()", handle_error);
	}

	dst->src.path = STRTAB_getstr (stab, shdr.path);
	dst->src.file = STRTAB_getstr (stab, shdr.file);
	dst->src.date = *((FILETIME *)&(shdr.date));

	bseekset (fd, mhdr.snap.data + pos);
	/* We are now backwards compatible with version 11 and older */
	if (mhdr.version <= SNAP_VERSION_V11) {
		rc = snapshot_load_v11_snap (fd, &mhdr, &snap);
		ROE ("snapshot_load_v11_snap(snapshot game data)");
	} else {
		cbio.data = (char *)&snap; cbio.size = mhdr.snap.size; cbio.comp = &(mhdr.snap.comp);
		if (!cbread (fd, cbio, "snapshot game data"))
			FAILGOTO (SPWERR_FRFAILED, "cbread(snapshot game data) failed", handle_error);
	}
	load_snap (&snap, stab, dst);

	bseekset (fd, pos + mhdr.map);
	rc = load_map (fd, &(dst->raw.game.map));
	ERRORGOTO ("load_map(map)", handle_error);

	bseekset (fd, pos + mhdr.oobp1);
	rc = load_oob (fd, &(dst->raw.OOBp1), stab, mhdr.version);
	ERRORGOTO ("load_oob(oobP1)", handle_error);

	bseekset (fd, pos + mhdr.oobp2);
	rc = load_oob (fd, &(dst->raw.OOBp2), stab, mhdr.version);
	ERRORGOTO ("load_oob(OOBp2)", handle_error);

	dst->type = (SPWAW_BATTLE_TYPE)ihdr.type;

	return (SPWERR_OK);

handle_error:
	snapclean (dst, stabptr);
	return (rc);
}
示例#3
0
int load_sna(char *filename)
{
//printf("load_sna('%s')\n",filename);
	int len;
  	gzFile fichero=gzopen(filename,"rb");
	if (!fichero)
		return -1;
	gzseek (fichero, 0, SEEK_END);
	len=gztell(fichero);
//printf("LEN=%i\n",len);
	gzseek (fichero, 0, SEEK_SET);
	gzread (fichero,tempo, 27);
	snap.I=tempo[0];
	snap.L=tempo[9];
	snap.H=tempo[10];
	snap.E=tempo[11];
	snap.D=tempo[12];
	snap.C=tempo[13];
	snap.B=tempo[14];
	snap.F=tempo[15];
	snap.A=tempo[16];
	snap.SP=((unsigned short)tempo[23])+256*((unsigned short)tempo[24]);
	snap.IY=((unsigned short)tempo[15])+256*((unsigned short)tempo[16]);
	snap.IX=((unsigned short)tempo[17])+256*((unsigned short)tempo[18]);
	snap.IFF1=snap.IFF2=(tempo[19] & 0x04) >> 2;
	snap.Imode=tempo[25];
	snap.R=(tempo[20]&0x7F);
	gzread (fichero,memo, 0x4000 * 3);
	if (len <= 49179)
	{
		snap.type=0;
		snap.PC=((unsigned short)memo[snap.SP-16384])+256*((unsigned short)memo[snap.SP-16384+1]);
		snap.SP+=2;
		memcpy(snap.page[0],memo,0x4000);
		memcpy(snap.page[1],memo+0x4000,0x4000);
		memcpy(snap.page[2],memo+0x8000,0x4000);
	}
	else
	{
		snap.type=1;
		gzread(fichero,tempo2,4);
		snap.PC=((unsigned short)tempo2[0])+256*((unsigned short)tempo2[1]);
//printf("PC=%X, SP=%X\n",snap.PC,snap.SP);
		snap.pager=tempo2[3]&0x7;
//printf("PAGER=%i\n",snap.pager);
		memcpy(snap.page[5],memo,0x4000);
		memcpy(snap.page[2],memo+0x4000,0x4000);
		memcpy(snap.page[snap.pager],memo+0x8000,0x4000);

		if (snap.pager!=0)
			gzread (fichero,snap.page[0], 0x4000);
		if (snap.pager!=1)
			gzread (fichero,snap.page[1], 0x4000);
		if (snap.pager!=3)
			gzread (fichero,snap.page[3], 0x4000);
		if (snap.pager!=4)
			gzread (fichero,snap.page[4], 0x4000);
		if (snap.pager!=6)
			gzread (fichero,snap.page[6], 0x4000);
		if (snap.pager!=7)
			gzread (fichero,snap.page[7], 0x4000);
	}

	load_snap(&snap);
	gzclose(fichero);
	return 0;
}
示例#4
0
static int __load_z80(char *filename) {
  unsigned char type,compressed,page;
  gzFile fichero;
  int readed;
  int longitud=0,longitud2,bucle;

  for(bucle=0;bucle<16;bucle++)
    snap.ay_regs[bucle]=0;

  fichero=gzopen(filename,"rb");
  if(!fichero)
    return -1; // error


  gzread(fichero,tempo,30);

  if((tempo[6]==0)&&(tempo[7]==0)) { // extended Z80

    gzread(fichero,tempo2,2); // read the length of the extension
 
    longitud=((int)tempo2[0])+256*((int)tempo2[1]);
    if(longitud>54) {
      gzclose(fichero);
      return -3; // not a supported Z80 file
    }

    gzread(fichero,tempo2+2,longitud);

    type=1; // new type

    if(longitud==23) // z80 ver 2.01
      switch(tempo2[4]) {
      case 0:
      case 1:
	snap.type=0; // 48K
	break;
      case 3:
      case 4:
	snap.type=1; // 128K
	break;
      default:
	gzclose(fichero);
	return -3; // not a supported Z80 file
	break;
      }
    else // z80 ver 3.0x
      switch(tempo2[4]) {
      case 0:
      case 1:
      case 3:
	snap.type=0; // 48K
	break;
      case 4:
      case 5:
      case 6:
	snap.type=1; // 128K
	break;
      default:
	gzclose(fichero);
	return -3; // not a supported Z80 file
	break;
      }      
  } else {
    type=0; // old type
    snap.type=0; // 48k
  }

  if(tempo[29]&0x04)
    snap.issue=2;
  else
    snap.issue=3;

  snap.A=tempo[0];
  snap.F=tempo[1];
  snap.C=tempo[2];
  snap.B=tempo[3];
  snap.L=tempo[4];
  snap.H=tempo[5];
  if(type) {
    snap.PC=((unsigned short)tempo2[2])+256*((unsigned short)tempo2[3]);
    for(bucle=0;bucle<16;bucle++)
      snap.ay_regs[bucle]=tempo2[9+bucle];
    snap.ay_latch=tempo2[8];
  } else
    snap.PC=((unsigned short)tempo[6])+256*((unsigned short)tempo[7]);
  snap.SP=((unsigned short)tempo[8])+256*((unsigned short)tempo[9]);
  snap.I=tempo[10];
  snap.R=(tempo[11]&0x7F);

  if(tempo[12]==255)
    tempo[12]=1;

  if(tempo[12]&0x01)
    snap.R|=0x80;

  snap.border=(tempo[12]>>1)&0x07;

//  if(tempo[12]&30)
  if(tempo[12]&0x20)
    compressed=1;
  else
    compressed=0;

  snap.E=tempo[13];
  snap.D=tempo[14];
  snap.CC=tempo[15];
  snap.BB=tempo[16];
  snap.EE=tempo[17];
  snap.DD=tempo[18];
  snap.LL=tempo[19];
  snap.HH=tempo[20];
  snap.AA=tempo[21];
  snap.FF=tempo[22];
  snap.IY=((unsigned short)tempo[23])+256*((unsigned short)tempo[24]);
  snap.IX=((unsigned short)tempo[25])+256*((unsigned short)tempo[26]);
  if(tempo[27])
    snap.IFF1=1;
  else
    snap.IFF1=0;
  if(tempo[28])
    snap.IFF2=1;
  else
    snap.IFF2=0;
  switch(tempo[29]&0x03) {
  case 0:
    snap.Imode=0;
    break;
  case 1:
    snap.Imode=1;
    break;
  case 2:
    snap.Imode=2;
    break;
  }
  if(tempo[29]&0x04)
    snap.issue=2;
  else
    snap.issue=3;

  if(type)
    snap.pager=tempo2[5];

  if(type) { // extended z80
    if(snap.type==1) { // 128K snapshot

      /*       gzclose(fichero);
	       return -3;*/  // z80 file not yet supported

      while(!gzeof(fichero)) {
	
	readed=gzread(fichero,byte_read,3);
	if(readed!=3)
	  break;
	longitud2=((int)byte_read[0])+256*((int)byte_read[1]);
	switch(byte_read[2]) {
	case 3:
	  page=0;
	  break;
	case 4:
	  page=1;
	  break;
	case 5:
	  page=2;
	  break;
	case 6:
	  page=3;
	  break;
	case 7:
	  page=4;
	  break;
	case 8:
	  page=5;
	  break;
	case 9:
	  page=6;
	  break;
	case 10:
	  page=7;
	  break;
	default:
	  page=11;
	  break;
	}
	if(longitud2==0xFFFF) // uncompressed raw data
	  gzread(fichero,snap.page[page],16384);
	else
	  uncompress_z80(fichero,16384,snap.page[page]);
      }

    } else {

      while(!gzeof(fichero)) {
	
	readed=gzread(fichero,byte_read,3);
	if(readed!=3)
	  break;
	longitud2=((int)byte_read[0])+256*((int)byte_read[1]);
	switch(byte_read[2]) {
	case 8:
	  page=0;
	  break;
	case 4:
	  page=1;
	  break;
	case 5:
	  page=2;
	  break;
	default:
	  page=11;
	  break;
	}
	if(longitud2==0xFFFF) // uncompressed raw data
	  gzread(fichero,snap.page[page],16384);
	else
	  uncompress_z80(fichero,16384,snap.page[page]);

      }
    }
  } else {
    if(compressed) {
      // 48k compressed z80 loader
      
      // we uncompress first the data
      
      uncompress_z80(fichero,49152,memo);
      
      
      memcpy(snap.page[0],memo,16384);
      memcpy(snap.page[1],memo+16384,16384);
      memcpy(snap.page[2],memo+32768,16384);
      
    } else {
      // 48k uncompressed z80 loader
     
      memset(snap.page[0],0,16384);
      gzread(fichero,snap.page[0],16384);
      memset(snap.page[1],0,16384);
      gzread(fichero,snap.page[1],16384);
      memset(snap.page[2],0,16384);
      gzread(fichero,snap.page[2],16384);
    }
  }

  load_snap(&snap);
  gzclose(fichero);
  return 0; // all right
}