# HG changeset patch # User Robert McIntyre # Date 1336411876 18000 # Node ID 09b3bc0b71b53c9825e7c83deedcdc6eb27340b8 # Parent 09df21060be66e59fa80d9104292a27386b0409f added rgb->gbRGB translation code. diff -r 09df21060be6 -r 09b3bc0b71b5 clojure/com/aurellem/gb/gb_driver.clj --- a/clojure/com/aurellem/gb/gb_driver.clj Mon May 07 11:15:49 2012 -0500 +++ b/clojure/com/aurellem/gb/gb_driver.clj Mon May 07 12:31:16 2012 -0500 @@ -269,6 +269,9 @@ (defn ~@forms) (alter-var-root (var ~fun-name) memoize)))) +(def original-rom (rom (root))) - -(def original-rom (rom (root))) \ No newline at end of file +(defn rgb->gb-rb [[r g b :as color]] + (let [store (int-array 3)] + (Gb/translateRGB (int-array color) store) + (vec store))) \ No newline at end of file diff -r 09df21060be6 -r 09b3bc0b71b5 clojure/com/aurellem/run/image.clj --- a/clojure/com/aurellem/run/image.clj Mon May 07 11:15:49 2012 -0500 +++ b/clojure/com/aurellem/run/image.clj Mon May 07 12:31:16 2012 -0500 @@ -1,4 +1,4 @@ -(ns com.aurellem.run.music +(ns com.aurellem.run.image (:use (com.aurellem.gb saves gb-driver util constants items vbm characters money rlm-assembly)) @@ -8,10 +8,6 @@ (:import [com.aurellem.gb.gb_driver SaveState]) (:import java.io.File)) - - - - ;; want to display an image onto the screen. ;; probably will be the six ponies, possibly with scrolling. @@ -30,10 +26,86 @@ ;; the code snipped itself is by Brett Bibby and is translated here ;; from C into clojure. -;; TODO include original code +;; This section of code is used to convert an RGB (pc) triplet into +;; a RGB (gameboy) triplet. This section of code was kindly donated +;; by Brett Bibby (GameBrains). -(def intensity [ +;; BYTE intensity[32] = { +;; 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x5e, 0x6c, 0x7a, 0x88, 0x94, +;; 0xa0, 0xae, 0xb7, 0xbf, 0xc6, 0xce, 0xd3, 0xd9, 0xdf, 0xe3, 0xe7, +;; 0xeb, 0xef, 0xf3, 0xf6, 0xf9, 0xfb, 0xfd, 0xfe, 0xff, 0xff }; + +;; unsigned char influence[3][3] = +;; { +;; {16,4,4}, +;; {8,16,8}, +;; {0,8,16} +;; }; + +;; RGBQUAD translate(BYTE rgb[3]) +;; { +;; RGBQUAD color; +;; BYTE tmp[3]; +;; BYTE m[3][3]; +;; BYTE i,j; + +;; for (i=0;i<3;i++) +;; for (j=0;j<3;j++) +;; m[i][j] = (intensity[rgb[i]>>3]*influence[i][j]) >> 5; + +;; for (i=0;i<3;i++) +;; { +;; if (m[0][i]>m[1][i]) +;; { +;; j=m[0][i]; +;; m[0][i]=m[1][i]; +;; m[1][i]=j; +;; } + +;; if (m[1][i]>m[2][i]) +;; { +;; j=m[1][i]; +;; m[1][i]=m[2][i]; +;; m[2][i]=j; +;; } + +;; if (m[0][i]>m[1][i]) +;; { +;; j=m[0][i]; +;; m[0][i]=m[1][i]; +;; m[1][i]=j; +;; } + +;; tmp[i]=(((m[0][i]+m[1][i]*2+m[2][i]*4)*5) >> 4)+32; +;; } + +;; color.rgbRed = tmp[0]; +;; color.rgbGreen = tmp[1]; +;; color.rgbBlue = tmp[2]; + +;; return color; +;; } + + +(def intensity + [0x00 0x10 0x20 0x30 0x40 0x50 0x5e 0x6c 0x7a 0x88 0x94 + 0xa0 0xae 0xb7 0xbf 0xc6 0xce 0xd3 0xd9 0xdf 0xe3 0xe7 + 0xeb 0xef 0xf3 0xf6 0xf9 0xfb 0xfd 0xfe 0xff 0xff]) + +(def influence + [[16 4 4] + [8 16 8] + [0 8 16]]) (defn rgb->gb-rb [[r g b]] - \ No newline at end of file + (let [color-matrix + (map + (fn [color-row] + (map + (fn [color] + (bit-shift-right + (* (intensity (bit-shift-right r 3)) + color) 5)))))])) + + \ No newline at end of file diff -r 09df21060be6 -r 09b3bc0b71b5 java/build.xml --- a/java/build.xml Mon May 07 11:15:49 2012 -0500 +++ b/java/build.xml Mon May 07 12:31:16 2012 -0500 @@ -23,15 +23,14 @@ classpath="${build}"/> - + - - + diff -r 09df21060be6 -r 09b3bc0b71b5 java/src/com/aurellem/gb/Gb.java --- a/java/src/com/aurellem/gb/Gb.java Mon May 07 11:15:49 2012 -0500 +++ b/java/src/com/aurellem/gb/Gb.java Mon May 07 12:31:16 2012 -0500 @@ -119,4 +119,6 @@ public static native void writeRegisters(int[] newRegisters); + public static native void translateRGB(int[] rgb, int[] store); + } diff -r 09df21060be6 -r 09b3bc0b71b5 src/clojure/clojure.cpp --- a/src/clojure/clojure.cpp Mon May 07 11:15:49 2012 -0500 +++ b/src/clojure/clojure.cpp Mon May 07 12:31:16 2012 -0500 @@ -25,7 +25,7 @@ */ JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_startEmulator (JNIEnv *env, jclass clazz, jstring str){ - UNUSED(env);UNUSED(clazz);UNUSED(str); + UNUSED(clazz); const char *_romName = env->GetStringUTFChars(str, 0); size_t len = strlen(_romName); @@ -247,3 +247,66 @@ env->ReleaseIntArrayElements(arr, new_registers, 0); } + +int intensity[32] = { + 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x5e, 0x6c, 0x7a, 0x88, 0x94, + 0xa0, 0xae, 0xb7, 0xbf, 0xc6, 0xce, 0xd3, 0xd9, 0xdf, 0xe3, 0xe7, + 0xeb, 0xef, 0xf3, 0xf6, 0xf9, 0xfb, 0xfd, 0xfe, 0xff, 0xff }; + +int influence[3][3] = + { + {16,4,4}, + {8,16,8}, + {0,8,16} + }; + +int* translateRGB(int* rgb, int* store){ + + int m[3][3]; + int i,j; + + for (i=0;i<3;i++){ + for (j=0;j<3;j++){ + m[i][j] = (intensity[rgb[i]>>3]*influence[i][j]) >> 5;}} + + for (i=0;i<3;i++) + { + if (m[0][i]>m[1][i]) + { + j=m[0][i]; + m[0][i]=m[1][i]; + m[1][i]=j; + } + + if (m[1][i]>m[2][i]) + { + j=m[1][i]; + m[1][i]=m[2][i]; + m[2][i]=j; + } + + if (m[0][i]>m[1][i]) + { + j=m[0][i]; + m[0][i]=m[1][i]; + m[1][i]=j; + } + + store[i]=(((m[0][i]+m[1][i]*2+m[2][i]*4)*5) >> 4)+32; + } + return store; +} + +/* + * Class: com_aurellem_gb_Gb + * Method: translateRGB + * Signature: ([I[I)V + */ +JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_translateRGB +(JNIEnv *env, jclass clazz, jintArray rgb, jintArray store){ + jint *RGB_Arr = env->GetIntArrayElements(rgb, 0); + jint *store_Arr = env->GetIntArrayElements(store,0); + translateRGB(RGB_Arr, store_Arr); + env->ReleaseIntArrayElements(rgb, RGB_Arr, 0); + env->ReleaseIntArrayElements(store, store_Arr, 0); +} diff -r 09df21060be6 -r 09b3bc0b71b5 temp-c-stuff --- a/temp-c-stuff Mon May 07 11:15:49 2012 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - -// This section of code is used to convert an RGB (pc) triplet into a RGB (gameboy) -// triplet. This section of code was kindly donated by Brett Bibby (GameBrains). - -BYTE intensity[32] = - { - 0x00,0x10,0x20,0x30,0x40,0x50,0x5e,0x6c,0x7a,0x88,0x94,0xa0,0xae,0xb7,0xbf,0xc6, - 0xce,0xd3,0xd9,0xdf,0xe3,0xe7,0xeb,0xef,0xf3,0xf6,0xf9,0xfb,0xfd,0xfe,0xff,0xff - }; - -unsigned char influence[3][3] = - { - {16,4,4}, - {8,16,8}, - {0,8,16} - }; - -RGBQUAD translate(BYTE rgb[3]) -{ - RGBQUAD color; - BYTE tmp[3]; - BYTE m[3][3]; - BYTE i,j; - - for (i=0;i<3;i++) - for (j=0;j<3;j++) - m[i][j] = (intensity[rgb[i]>>3]*influence[i][j]) >> 5; - - for (i=0;i<3;i++) - { - if (m[0][i]>m[1][i]) - { - j=m[0][i]; - m[0][i]=m[1][i]; - m[1][i]=j; - } - - if (m[1][i]>m[2][i]) - { - j=m[1][i]; - m[1][i]=m[2][i]; - m[2][i]=j; - } - - if (m[0][i]>m[1][i]) - { - j=m[0][i]; - m[0][i]=m[1][i]; - m[1][i]=j; - } - - tmp[i]=(((m[0][i]+m[1][i]*2+m[2][i]*4)*5) >> 4)+32; - } - - color.rgbRed = tmp[0]; - color.rgbGreen = tmp[1]; - color.rgbBlue = tmp[2]; - - return color; -} - - - - - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -