# HG changeset patch # User Robert McIntyre # Date 1340496746 18000 # Node ID 5596cd4a3fc69dd49ac1c1a42aa0d519639dd204 # Parent bad7b74302458ff79c5f1ab637f9cfd5a8a03f8a added RAM display. diff -r bad7b7430245 -r 5596cd4a3fc6 clojure/com/aurellem/gb/gb_driver.clj --- a/clojure/com/aurellem/gb/gb_driver.clj Sat Jun 23 17:45:38 2012 -0500 +++ b/clojure/com/aurellem/gb/gb_driver.clj Sat Jun 23 19:12:26 2012 -0500 @@ -154,6 +154,13 @@ (set-state! state) (dorun (map (fn [move] (step @current-state move)) moves)) [(concat prev moves) @current-state])) + +(defn accurate-memory + ([^SaveState state address] + (set-state! state) + (Gb/readMemory address)) + ([address] + (accurate-memory @current-state address))) ;;;;;;;;;;; @@ -166,9 +173,6 @@ ([^File target] (write-png! @current-state target))) - - - ;;;;;;;;;;;;;;; CPU data (defn cpu-data [size arr-fn] @@ -294,6 +298,4 @@ (defn rgb->gb-rb [[r g b :as color]] (let [store (int-array 3)] (Gb/translateRGB (int-array color) store) - (vec store))) - - + (vec store))) \ No newline at end of file diff -r bad7b7430245 -r 5596cd4a3fc6 clojure/com/aurellem/run/image.clj --- a/clojure/com/aurellem/run/image.clj Sat Jun 23 17:45:38 2012 -0500 +++ b/clojure/com/aurellem/run/image.clj Sat Jun 23 19:12:26 2012 -0500 @@ -6,6 +6,7 @@ bootstrap-0 bootstrap-1)) (:require clojure.string) (:import [com.aurellem.gb.gb_driver SaveState]) + (:import java.awt.image.BufferedImage) (:import java.io.File)) ;; want to display an image onto the screen. @@ -149,7 +150,7 @@ (display-one-color @current-state [r g b]))) ;;(require 'cortex.sense) -(import java.awt.image.BufferedImage) + ;; (defn show-screenshot [] ;; (let [im (BufferedImage. 160 144 BufferedImage/TYPE_INT_RGB) @@ -203,6 +204,15 @@ (import '(javax.imageio ImageWriteParam IIOImage ImageIO)) +(defn write-image! [^BufferedImage image ^File target] + (doto + (.next (ImageIO/getImageWritersByFormatName "png")) + (.setOutput (FileImageOutputStream. target)) + (.write (IIOImage. image nil nil)) + (.dispose)) + image) + + (defn gen-gb-color-image! [] (let [im (BufferedImage. 68 69 BufferedImage/TYPE_INT_RGB) pix (vec @@ -242,13 +252,9 @@ b)] (.setRGB im x y rgb)))) ;;(view im) - (doto - (.next (ImageIO/getImageWritersByFormatName "png")) - (.setOutput (FileImageOutputStream. target)) - (.write (IIOImage. im nil nil)) - (.dispose)) - im)) - + (write-image! im target))) + + (defn gen-gb-color-image*! [] (let [im (BufferedImage. 213 213 BufferedImage/TYPE_INT_RGB) squares @@ -274,12 +280,7 @@ (+ 3 (* 35 (int (/ s-index 6))) y) rgb)))))) ;;(view im) - (doto - (.next (ImageIO/getImageWritersByFormatName "png")) - (.setOutput (FileImageOutputStream. target)) - (.write (IIOImage. im nil nil)) - (.dispose)) - im)) + (write-image! im target))) (defn gen-gimp-palette! [] (let [target @@ -670,9 +671,10 @@ (concat A B C D))) (defn display-image [#^BufferedImage image] - (let [kernel-address 0xB000] + (let [kernel-address 0xB500] (-> (tick (tick (tick (mid-game)))) (set-memory-range kernel-address (display-image-kernel kernel-address image)) (PC! kernel-address)))) + diff -r bad7b7430245 -r 5596cd4a3fc6 clojure/com/aurellem/run/ram_display.clj --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clojure/com/aurellem/run/ram_display.clj Sat Jun 23 19:12:26 2012 -0500 @@ -0,0 +1,53 @@ +(ns com.aurellem.run.ram-display + (:use (com.aurellem.gb saves gb-driver util constants + items vbm characters money + rlm-assembly)) + (:use (com.aurellem.run image util music title save-corruption + bootstrap-0 bootstrap-1)) + (:require clojure.string) + (:import [com.aurellem.gb.gb_driver SaveState]) + + (:import java.awt.image.BufferedImage) + (:import java.io.File)) + +(defn accurate-memory-range + ([^SaveState state start end] + (map accurate-memory (range start end))) + ([start end] + (accurate-memory-range @current-state start end))) + +(def video-ram-start 0x8000) + +(def GB-memory-end 0x10000) + +(defn ram-image + ([^SaveState state] + (let [width 128 + height 256 + image (BufferedImage. width height + BufferedImage/TYPE_INT_RGB) + data (vec + (accurate-memory-range + state video-ram-start GB-memory-end))] + (dorun + (map + (fn [index] + (let [gray (data index)] + (.setRGB image (rem index width) + (int (/ index width)) + (+ + (bit-shift-left gray 16) + (bit-shift-left gray 8) + gray)))) + (range (count data)))) + image)) + ([] (ram-image @current-state))) + +(defn write-ram-image! + ([^SaveState state ^File target] + (write-image! (ram-image state) target)) + ([^File target] + (write-ram-image! @current-state target))) + +(def test-ram-image + (File. "/home/r/proj/vba-clojure/images/RAM-test.png")) diff -r bad7b7430245 -r 5596cd4a3fc6 images/RAM-test.png Binary file images/RAM-test.png has changed diff -r bad7b7430245 -r 5596cd4a3fc6 java/src/com/aurellem/gb/Gb.java --- a/java/src/com/aurellem/gb/Gb.java Sat Jun 23 17:45:38 2012 -0500 +++ b/java/src/com/aurellem/gb/Gb.java Sat Jun 23 19:12:26 2012 -0500 @@ -129,4 +129,5 @@ public static native void nwritePNG(String filename); + public static native int readMemory(int address); } diff -r bad7b7430245 -r 5596cd4a3fc6 src/clojure/clojure.cpp --- a/src/clojure/clojure.cpp Sat Jun 23 17:45:38 2012 -0500 +++ b/src/clojure/clojure.cpp Sat Jun 23 19:12:26 2012 -0500 @@ -2,6 +2,7 @@ #include "../sdl/Drive.h" #include "../gb/GB.h" + #include #define UNUSED(x) (void)(x) @@ -336,3 +337,13 @@ } + +/* + * Class: com_aurellem_gb_Gb + * Method: readMemory + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_com_aurellem_gb_Gb_readMemory +(JNIEnv *env, jclass clazz, jint address){ + return (jint) gbReadMemory((u16) address); +} diff -r bad7b7430245 -r 5596cd4a3fc6 src/gb/GB.h --- a/src/gb/GB.h Sat Jun 23 17:45:38 2012 -0500 +++ b/src/gb/GB.h Sat Jun 23 19:12:26 2012 -0500 @@ -63,6 +63,8 @@ extern long gbWriteMemSaveStatePos(char *, int); +extern u8 gbReadMemory(u16 address); + extern struct EmulatedSystem GBSystem; extern struct EmulatedSystemCounters &GBSystemCounters; diff -r bad7b7430245 -r 5596cd4a3fc6 todo.org --- a/todo.org Sat Jun 23 17:45:38 2012 -0500 +++ b/todo.org Sat Jun 23 19:12:26 2012 -0500 @@ -1,5 +1,5 @@ -* vba-clojure [0/7] - - [ ] create ram display +* vba-clojure [1/7] + - [X] create ram display - [ ] derpy hack - [ ] sound recording - [ ] fix unnecessary pauses before take-over