Mercurial > vba-clojure
view src/clojure/clojure.cpp @ 500:0273c08cd2ff
discovered that the gb has far fewer unique colors than I initially thought.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 12 Jun 2012 08:05:24 -0500 |
parents | a6d060a64246 |
children | 5596cd4a3fc6 |
line wrap: on
line source
1 #include "com_aurellem_gb_Gb.h"2 #include "../sdl/Drive.h"3 #include "../gb/GB.h"5 #include <string.h>7 #define UNUSED(x) (void)(x)10 /*11 * Class: com_aurellem_gb_Gb12 * Method: sayHello13 * Signature: ()V14 */15 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_sayHello16 (JNIEnv *env, jclass clazz){17 UNUSED(env);UNUSED(clazz);18 printf("Hello from GB\n");19 }21 /*22 * Class: com_aurellem_gb_Gb23 * Method: startEmulator24 * Signature: (Ljava/lang/String;)V25 */26 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_startEmulator27 (JNIEnv *env, jclass clazz, jstring str){28 UNUSED(clazz);30 const char *_romName = env->GetStringUTFChars(str, 0);31 size_t len = strlen(_romName);33 char romName[len + 1];35 strcpy(romName, _romName);37 char* arguments[] = {"vba-rlm", romName};38 runVBA(2, arguments);39 }44 /*45 * Class: com_aurellem_gb_Gb46 * Method: step47 * Signature: ()V48 */49 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_step50 (JNIEnv *env, jclass clazz){51 step();52 }54 /*55 * Class: com_aurellem_gb_Gb56 * Method: step57 * Signature: (I)V58 */59 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_nstep60 (JNIEnv *env, jclass clazz, jint keymask){61 step(keymask);62 }64 /*65 * Class: com_aurellem_gb_Gb66 * Method: ntick67 * Signature: ()I68 */69 JNIEXPORT jint JNICALL Java_com_aurellem_gb_Gb_ntick70 (JNIEnv *env, jclass clazz){71 return tick();73 }76 /*77 * Class: com_aurellem_gb_Gb78 * Method: shutdown79 * Signature: ()V80 */81 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_shutdown82 (JNIEnv *env, jclass clazz){83 shutdown();85 }87 /*88 * Class: com_aurellem_gb_Gb89 * Method: saveState90 * Signature: (Ljava/nio/ByteBuffer;I)J91 */92 JNIEXPORT jlong JNICALL Java_com_aurellem_gb_Gb_saveState93 (JNIEnv *env, jclass clazz, jobject buffer, jint size){94 char* buffer_address =95 ((char*) env->GetDirectBufferAddress(buffer));96 long limit = gbWriteMemSaveStatePos(buffer_address, size);97 return limit;98 }100 /*101 * Class: com_aurellem_gb_Gb102 * Method: loadState103 * Signature: (Ljava/nio/ByteBuffer;)V104 */105 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_loadState106 (JNIEnv *env, jclass clazz, jobject buffer, jint size){107 char* buffer_address =108 ((char*) env->GetDirectBufferAddress(buffer));109 gbReadMemSaveState(buffer_address, size);110 }113 /*114 * Class: com_aurellem_gb_Gb115 * Method: getROMSize116 * Signature: ()I117 */118 JNIEXPORT jint JNICALL Java_com_aurellem_gb_Gb_getROMSize119 (JNIEnv *env, jclass clazz){120 return getRomSize();121 }123 /*124 * Class: com_aurellem_gb_Gb125 * Method: getRAMSize126 * Signature: ()I127 */128 JNIEXPORT jint JNICALL Java_com_aurellem_gb_Gb_getRAMSize129 (JNIEnv *env, jclass clazz){130 return getRamSize();131 }134 /*135 * Class: com_aurellem_gb_Gb136 * Method: getMemory137 * Signature: ([I)V138 */139 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_getMemory140 (JNIEnv *env, jclass clazz, jintArray arr){141 jint *mem_store = env->GetIntArrayElements(arr, 0);142 storeMemory(mem_store);143 env->ReleaseIntArrayElements(arr, mem_store, 0);144 }146 /*147 * Class: com_aurellem_gb_Gb148 * Method: writeMemory149 * Signature: ([I)V150 */151 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_writeMemory152 (JNIEnv *env, jclass clazz, jintArray arr){153 jint *new_memory = env->GetIntArrayElements(arr, 0);154 writeMemory(new_memory);155 env->ReleaseIntArrayElements(arr, new_memory, 0);156 }159 /*160 * Class: com_aurellem_gb_Gb161 * Method: getRAM162 * Signature: ([I)V163 */164 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_getRAM165 (JNIEnv *env, jclass clazz, jintArray arr){166 jint *ram_store = env->GetIntArrayElements(arr, 0);167 storeRam(ram_store);168 env->ReleaseIntArrayElements(arr, ram_store, 0);169 }172 /*173 * Class: com_aurellem_gb_Gb174 * Method: getROM175 * Signature: ([I)V176 */177 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_getROM178 (JNIEnv *env, jclass clazz, jintArray arr){179 jint *rom_store = env->GetIntArrayElements(arr, 0);180 storeRom(rom_store);181 env->ReleaseIntArrayElements(arr, rom_store, 0);182 }185 /*186 * Class: com_aurellem_gb_Gb187 * Method: writeROM188 * Signature: ([I)V189 */190 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_writeROM191 (JNIEnv *env, jclass clazz, jintArray arr){192 jint *new_rom = env->GetIntArrayElements(arr, 0);193 writeRom(new_rom);194 env->ReleaseIntArrayElements(arr, new_rom, 0);195 }199 /*200 * Class: com_aurellem_gb_Gb201 * Method: getWRAM202 * Signature: ([I)V203 */204 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_getWRAM205 (JNIEnv *env, jclass clazz, jintArray arr){206 jint *ram_store = env->GetIntArrayElements(arr, 0);207 storeWRam(ram_store);208 env->ReleaseIntArrayElements(arr, ram_store, 0);209 }212 /*213 * Class: com_aurellem_gb_Gb214 * Method: getVRAM215 * Signature: ([I)V216 */217 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_getVRAM218 (JNIEnv *env, jclass clazz, jintArray arr){219 jint *ram_store = env->GetIntArrayElements(arr, 0);220 storeVRam(ram_store);221 env->ReleaseIntArrayElements(arr, ram_store, 0);222 }225 /*226 * Class: com_aurellem_gb_Gb227 * Method: getRegisters228 * Signature: ([I)V229 */230 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_getRegisters231 (JNIEnv *env, jclass clazz, jintArray arr){232 jint *registers_store = env->GetIntArrayElements(arr, 0);233 storeRegisters(registers_store);234 env->ReleaseIntArrayElements(arr, registers_store, 0);235 }238 /*239 * Class: com_aurellem_gb_Gb240 * Method: writeRegisters241 * Signature: ([I)V242 */243 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_writeRegisters244 (JNIEnv *env, jclass clazz, jintArray arr){245 jint *new_registers = env->GetIntArrayElements(arr, 0);246 setRegisters(new_registers);247 env->ReleaseIntArrayElements(arr, new_registers, 0);248 }251 int intensity[32] = {252 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x5e, 0x6c, 0x7a, 0x88, 0x94,253 0xa0, 0xae, 0xb7, 0xbf, 0xc6, 0xce, 0xd3, 0xd9, 0xdf, 0xe3, 0xe7,254 0xeb, 0xef, 0xf3, 0xf6, 0xf9, 0xfb, 0xfd, 0xfe, 0xff, 0xff };256 int influence[3][3] =257 {258 {16,4,4},259 {8,16,8},260 {0,8,16}261 };263 int* translateRGB(int* rgb, int* store){265 int m[3][3];266 int i,j;268 for (i=0;i<3;i++){269 for (j=0;j<3;j++){270 m[i][j] = (intensity[rgb[i]>>3]*influence[i][j]) >> 5;}}272 for (i=0;i<3;i++)273 {274 if (m[0][i]>m[1][i])275 {276 j=m[0][i];277 m[0][i]=m[1][i];278 m[1][i]=j;279 }281 if (m[1][i]>m[2][i])282 {283 j=m[1][i];284 m[1][i]=m[2][i];285 m[2][i]=j;286 }288 if (m[0][i]>m[1][i])289 {290 j=m[0][i];291 m[0][i]=m[1][i];292 m[1][i]=j;293 }295 store[i]=(((m[0][i]+m[1][i]*2+m[2][i]*4)*5) >> 4)+32;296 }297 return store;298 }300 /*301 * Class: com_aurellem_gb_Gb302 * Method: translateRGB303 * Signature: ([I[I)V304 */305 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_translateRGB306 (JNIEnv *env, jclass clazz, jintArray rgb, jintArray store){307 jint *RGB_Arr = env->GetIntArrayElements(rgb, 0);308 jint *store_Arr = env->GetIntArrayElements(store,0);309 translateRGB(RGB_Arr, store_Arr);310 env->ReleaseIntArrayElements(rgb, RGB_Arr, 0);311 env->ReleaseIntArrayElements(store, store_Arr, 0);312 }315 /*316 * Class: com_aurellem_gb_Gb317 * Method: getPixels318 * Signature: ([I)V319 */320 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_getPixels321 (JNIEnv *env, jclass clazz, jintArray arr){322 jint *pixel_store = env->GetIntArrayElements(arr, 0);323 getPixels32(pixel_store);324 env->ReleaseIntArrayElements(arr, pixel_store, 0);325 }327 /*328 * Class: com_aurellem_gb_Gb329 * Method: nwritePNG330 * Signature: (Ljava/lang/String;)V331 */332 JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_nwritePNG333 (JNIEnv *env, jclass clazz, jstring filename){334 const char *_filename = env->GetStringUTFChars(filename, 0);335 gbWritePNGFile(_filename);336 }