Mercurial > vba-clojure
view java/src/com/aurellem/gb/Gb.java @ 78:4a1b17917fc8
speed up emulation
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Thu, 08 Mar 2012 21:50:46 -0600 |
parents | d7c38ce83421 |
children | ad6ebe886a21 |
line wrap: on
line source
1 package com.aurellem.gb;3 import java.nio.ByteBuffer;4 import java.nio.IntBuffer;5 import java.nio.ByteOrder;7 public class Gb {10 public Gb(){}13 /**14 * Hello World! This is just to test the native interface.15 */16 public static native void sayHello();18 /**19 * Run the emulator on a given rom20 * @param rom - the name of the rom.21 */22 public static native void startEmulator(String rom);25 public static void loadVBA(){26 System.loadLibrary("vba");27 }29 public static native void step();31 public static native void step(int keymask);33 public static native void shutdown();35 public static native long saveState(ByteBuffer buffer, int size);37 public static native void loadState(ByteBuffer buffer, int size);39 public static final int MAX_SAVE_SIZE = 90000;41 public static ByteBuffer createDirectByteBuffer(int capacity){42 byte[] zeros = new byte[capacity];43 ByteBuffer buf =44 ByteBuffer.allocateDirect(capacity)45 .order(ByteOrder.nativeOrder());46 buf.put(zeros);47 buf.clear();48 return buf;49 }51 public static ByteBuffer saveBuffer(){52 return createDirectByteBuffer(MAX_SAVE_SIZE);53 }55 public static ByteBuffer saveState(){56 ByteBuffer buf = saveBuffer();58 saveState(buf, buf.capacity());60 // determine the extent of the saved data61 int position = buf.capacity() - 1;62 for (int i = position; i > 0; i--){63 if (0 != buf.get(i)){64 position = i;65 break;66 }}67 System.out.println("Position: " + position);68 byte[] saveArray = new byte[position];69 ByteBuffer save = createDirectByteBuffer(position);70 buf.get(saveArray, 0 , position);71 save.put(saveArray);72 save.rewind();73 return save;74 }76 public static void loadState(ByteBuffer saveState){77 loadState(saveState, MAX_SAVE_SIZE);78 }80 public static native int getROMSize();81 public static native int getRAMSize();84 public static final int WRAM_SIZE = 0x8000;86 public static final int VRAM_SIZE = 0x4000;88 public static final int NUM_REGISTERS = 27;90 public static native void getRAM(int[] store);92 public static native void getROM(int[] store);94 public static native void getWRAM(int[] store);96 public static native void getVRAM(int[] store);98 public static native void getRegisters(int[] store);99 }