rlm@522: (ns com.aurellem.run.ram-display rlm@522: (:use (com.aurellem.gb saves gb-driver util constants rlm@522: items vbm characters money rlm@522: rlm-assembly)) rlm@522: (:use (com.aurellem.run image util music title save-corruption rlm@522: bootstrap-0 bootstrap-1)) rlm@522: (:require clojure.string) rlm@522: (:import [com.aurellem.gb.gb_driver SaveState]) rlm@522: rlm@522: (:import java.awt.image.BufferedImage) rlm@522: (:import java.io.File)) rlm@522: rlm@522: (defn accurate-memory-range rlm@522: ([^SaveState state start end] rlm@522: (map accurate-memory (range start end))) rlm@522: ([start end] rlm@522: (accurate-memory-range @current-state start end))) rlm@522: rlm@522: (def video-ram-start 0x8000) rlm@522: rlm@522: (def GB-memory-end 0x10000) rlm@522: rlm@522: (defn ram-image rlm@522: ([^SaveState state] rlm@522: (let [width 128 rlm@522: height 256 rlm@522: image (BufferedImage. width height rlm@522: BufferedImage/TYPE_INT_RGB) rlm@522: data (vec rlm@522: (accurate-memory-range rlm@522: state video-ram-start GB-memory-end))] rlm@522: (dorun rlm@522: (map rlm@522: (fn [index] rlm@522: (let [gray (data index)] rlm@522: (.setRGB image (rem index width) rlm@522: (int (/ index width)) rlm@522: (+ rlm@522: (bit-shift-left gray 16) rlm@522: (bit-shift-left gray 8) rlm@522: gray)))) rlm@522: (range (count data)))) rlm@522: image)) rlm@522: ([] (ram-image @current-state))) rlm@522: rlm@522: (defn write-ram-image! rlm@522: ([^SaveState state ^File target] rlm@522: (write-image! (ram-image state) target)) rlm@522: ([^File target] rlm@522: (write-ram-image! @current-state target))) rlm@522: rlm@522: (def test-ram-image rlm@522: (File. "/home/r/proj/vba-clojure/images/RAM-test.png"))