# HG changeset patch # User Robert McIntyre # Date 1331170191 21600 # Node ID ef59aee6d71503729a7dfc07b400cb0d344f642e # Parent 3ce48d803e740cd4f62d3930199e70afb916b2a4 added function to retrieve main RAM diff -r 3ce48d803e74 -r ef59aee6d715 clojure/com/aurellem/gb_driver.clj --- a/clojure/com/aurellem/gb_driver.clj Wed Mar 07 17:40:00 2012 -0600 +++ b/clojure/com/aurellem/gb_driver.clj Wed Mar 07 19:29:51 2012 -0600 @@ -1,3 +1,16 @@ -(ns com.aurellem.gb-driver) +(ns com.aurellem.gb-driver + (:import com.aurellem.gb.Gb) + (:import (java.nio IntBuffer ByteOrder))) +(defn init-vba [] + (Gb/loadVBA) + (future + (Gb/startEmulator "/home/r/proj/pokemon-escape/roms/yellow.gbc"))) + + +(defn get-ram [] + (let [ram-store (int-array (Gb/getRAMSize))] + (Gb/getRAM ram-store) + ram-store)) + diff -r 3ce48d803e74 -r ef59aee6d715 java/src/com/aurellem/gb/Gb.java --- a/java/src/com/aurellem/gb/Gb.java Wed Mar 07 17:40:00 2012 -0600 +++ b/java/src/com/aurellem/gb/Gb.java Wed Mar 07 19:29:51 2012 -0600 @@ -1,6 +1,7 @@ package com.aurellem.gb; import java.nio.ByteBuffer; +import java.nio.IntBuffer; import java.nio.ByteOrder; public class Gb { @@ -59,7 +60,12 @@ public static final int VRAM_SIZE = 0x4000; + public static native void getRAM(int[] store); + public static native void getROM(int[] store); + public static native void getWRAM(int[] store); + + public static native void getVRAM(int[] store); } diff -r 3ce48d803e74 -r ef59aee6d715 src/clojure/clojure.cpp --- a/src/clojure/clojure.cpp Wed Mar 07 17:40:00 2012 -0600 +++ b/src/clojure/clojure.cpp Wed Mar 07 19:29:51 2012 -0600 @@ -123,7 +123,17 @@ +/* + * Class: com_aurellem_gb_Gb + * Method: getRAM + * Signature: ([I)V + */ +JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_getRAM +(JNIEnv *env, jclass clazz, jintArray arr){ + jint *ram_store = env->GetIntArrayElements(arr, 0); + storeRam(ram_store); + env->ReleaseIntArrayElements(arr, ram_store, 0); +} - diff -r 3ce48d803e74 -r ef59aee6d715 src/gb/GB.cpp --- a/src/gb/GB.cpp Wed Mar 07 17:40:00 2012 -0600 +++ b/src/gb/GB.cpp Wed Mar 07 19:29:51 2012 -0600 @@ -3871,6 +3871,15 @@ return gbRomSize; } +void storeRam(int32* store){ + int i; + for (i = 0; i < gbRamSize; i++){ + store[i] = (int32) gbRam[i]; + } +} + + + struct EmulatedSystem GBSystem = { diff -r 3ce48d803e74 -r ef59aee6d715 src/gb/GB.h --- a/src/gb/GB.h Wed Mar 07 17:40:00 2012 -0600 +++ b/src/gb/GB.h Wed Mar 07 19:29:51 2012 -0600 @@ -46,6 +46,7 @@ extern int getRamSize(); extern int getRomSize(); +extern void storeRam(int32 *); extern struct EmulatedSystem GBSystem; extern struct EmulatedSystemCounters &GBSystemCounters;