Package org.javatari.atari.cartridge.formats

Source Code of org.javatari.atari.cartridge.formats.CartridgeSavestate

// Copyright 2011-2012 Paulo Augusto Peccin. See licence.txt distributed with this file.

package org.javatari.atari.cartridge.formats;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import org.javatari.atari.cartridge.Cartridge;
import org.javatari.atari.cartridge.CartridgeFormat;
import org.javatari.atari.cartridge.CartridgeFormatOption;
import org.javatari.atari.cartridge.ROM;
import org.javatari.atari.console.savestate.ConsoleState;

/**
* Special Cartridge that represents an entire Savestate
*/
public final class CartridgeSavestate extends Cartridge {

  private CartridgeSavestate(ROM rom) {
    super(rom, FORMAT);
  }

  public ConsoleState getConsoleState() {
    try{
      ByteArrayInputStream byteStream = new ByteArrayInputStream(rom.content);
      byteStream.skip(contentIdentifier.length);
      ObjectInputStream objStream = new ObjectInputStream(byteStream);
      return (ConsoleState) objStream.readObject();
    } catch (Exception ex) {
      // Cast or IO errors
      ex.printStackTrace();
      return null;
    }
  }
 
 
  public static CartridgeSavestate createFromConsoleState(ConsoleState state) {
    try{
      ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
      byteStream.write(contentIdentifier);
      byteStream.flush();
      ObjectOutputStream objStream = new ObjectOutputStream(byteStream);
      objStream.writeObject(state);
      objStream.flush();
      byte[] content = byteStream.toByteArray();
      ROM rom = new ROM("CreatedSavestate", content);
      return new CartridgeSavestate(rom);
    } catch (Exception ex) {
      // IO errors
      ex.printStackTrace();
      return null;
    }
  }

  public static boolean checkIdentifier(byte[] content) {
    if (content.length < contentIdentifier.length) return false;
    for (int i = 0; i < contentIdentifier.length; i++)
      if (content[i] != contentIdentifier[i]) return false;
    return true;
  }

  public static final CartridgeFormat FORMAT = new CartridgeFormat("JAT", "Javatari Savestate") {
    @Override
    public Cartridge createCartridge(ROM rom) {
      return new CartridgeSavestate(rom);
    }
    @Override
    public CartridgeFormatOption getOption(ROM rom) {
      if (!checkIdentifier(rom.content)) return null;
      return new CartridgeFormatOption(90, this, rom);
    }
    private static final long serialVersionUID = 1L;
  };

  public static final long serialVersionUID = 1L;

  // Defines the Savestate identifier/version bytes found at the beginning of the content. "JavatariSavestateV000"
  public static final byte[] contentIdentifier = {74, 97, 118, 97, 116, 97, 114, 105, 83, 97, 118, 101, 115, 116, 97, 116, 101, 86, 48, 48, 48};

}

TOP

Related Classes of org.javatari.atari.cartridge.formats.CartridgeSavestate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.