EEPROM is not longer PBC
This commit is contained in:
Submodule NeoNucleus updated: 5f06a5659c...3b04fd45c7
@@ -13,7 +13,7 @@ Carbon is currently being organized in "milestones", below they are.
|
||||
#### Milestone 2
|
||||
- [ ] On-demand native structs
|
||||
- [ ] NativeComponent, and java-defined Component(s)
|
||||
- [ ] Make nn_EEPROM *not* PBC'd.
|
||||
- [x] Make nn_EEPROM *not* PBC'd.
|
||||
- [ ] JNIComponentHandler
|
||||
- [ ] JNI Environment handler
|
||||
- [ ] Java-side userdata fields
|
||||
@@ -31,4 +31,4 @@ Carbon is currently being organized in "milestones", below they are.
|
||||
- [ ] Fix/add missing javadoc comments
|
||||
- [ ] Point Makefile to the submodule's files instead of copying them over (for NeoNucleus)
|
||||
- [ ] Write a working emulator using Carbon *or* Hydrogen (NC-Telnet?)
|
||||
- [ ] Begin work on Hydrogen
|
||||
- [ ] Begin work on Hydrogen
|
||||
|
||||
@@ -19,9 +19,7 @@ public class NativeBindings {
|
||||
nn_Universe universe = nn_createUniverse(ctx);
|
||||
nn_Architecture arch = getLuaArch();
|
||||
nn_EEPROM eeprom = new nn_EEPROM(2048, 2048, 1, 1, 1, 1, 1, 1);
|
||||
eeprom.allocate();
|
||||
nn_Component eepromCard = ncl_createEEPROM(universe, UUID.randomUUID().toString(), eeprom, "error('amog us')", false);
|
||||
eeprom.free();
|
||||
nn_Computer computer = nn_createComputer(universe, UUID.randomUUID().toString(), 1048576, 100, 100);
|
||||
nn_setCallBudget(computer, 0);
|
||||
System.out.println("Arch: " + arch.name);
|
||||
|
||||
@@ -19,7 +19,7 @@ typedef struct nn_EEPROM {
|
||||
double writeDataDelay;
|
||||
} nn_EEPROM;
|
||||
*/
|
||||
public class nn_EEPROM extends PointerBackedClass implements ManuallyAllocated {
|
||||
public class nn_EEPROM {
|
||||
public final long size;
|
||||
public final long dataSize;
|
||||
public final double readEnergyCost;
|
||||
@@ -47,8 +47,4 @@ public class nn_EEPROM extends PointerBackedClass implements ManuallyAllocated {
|
||||
this.writeDelay = writeDelay;
|
||||
this.writeDataDelay = writeDataDelay;
|
||||
}
|
||||
@Override
|
||||
public native boolean allocate();
|
||||
@Override
|
||||
public native boolean free();
|
||||
}
|
||||
|
||||
@@ -120,6 +120,8 @@ JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setCom
|
||||
nn_Method nm = nMethods[i];
|
||||
env->ReleaseStringUTFChars(nameStr, nm.name);
|
||||
env->ReleaseStringUTFChars(docStr, nm.doc);
|
||||
env->DeleteLocalRef(nameStr);
|
||||
env->DeleteLocalRef(docStr);
|
||||
}
|
||||
|
||||
return Carbon::Map::To_nn_Exit(env, exitCode);
|
||||
@@ -144,15 +146,25 @@ JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1mountC
|
||||
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1createEEPROM
|
||||
(JNIEnv * env, jclass, jobject universe, jstring address, jobject eeprom, jstring code, jboolean isReadonly) {
|
||||
nn_Universe* nnUni = (nn_Universe*) Carbon::PointerBacked::GetPointer(env, universe);
|
||||
nn_EEPROM* nnEEPROM = (nn_EEPROM*) Carbon::PointerBacked::GetPointer(env, eeprom);
|
||||
NULLPTR_CHECK(nnUni, nn_Universe);
|
||||
NULLPTR_CHECK(nnEEPROM, nn_EEPROM);
|
||||
|
||||
jclass eeclazz = env->GetObjectClass(eeprom);
|
||||
|
||||
nn_EEPROM nnEEPROM;
|
||||
nnEEPROM.size = env->GetLongField(eeprom, env->GetFieldID(eeclazz, "size", "J"));
|
||||
nnEEPROM.dataSize = env->GetLongField(eeprom, env->GetFieldID(eeclazz, "dataSize", "J"));
|
||||
nnEEPROM.readEnergyCost = env->GetDoubleField(eeprom, env->GetFieldID(eeclazz, "readEnergyCost", "D"));
|
||||
nnEEPROM.readDataEnergyCost = env->GetDoubleField(eeprom, env->GetFieldID(eeclazz, "readDataEnergyCost", "D"));
|
||||
nnEEPROM.writeEnergyCost = env->GetDoubleField(eeprom, env->GetFieldID(eeclazz, "writeEnergyCost", "D"));
|
||||
nnEEPROM.writeDataEnergyCost = env->GetDoubleField(eeprom, env->GetFieldID(eeclazz, "writeDataEnergyCost", "D"));
|
||||
nnEEPROM.writeDelay = env->GetDoubleField(eeprom, env->GetFieldID(eeclazz, "writeDelay", "D"));
|
||||
nnEEPROM.writeDataDelay = env->GetDoubleField(eeprom, env->GetFieldID(eeclazz, "writeDataDelay", "D"));
|
||||
|
||||
const char * addr = env->GetStringUTFChars(address, NULL);
|
||||
const char * codeStr = env->GetStringUTFChars(code, NULL);
|
||||
jsize codeLen = env->GetStringUTFLength(code); // TODO: check if this is the byte count or character count
|
||||
|
||||
nn_Component* comp = ncl_createEEPROM(nnUni, addr, nnEEPROM, codeStr, codeLen, isReadonly);
|
||||
nn_Component* comp = ncl_createEEPROM(nnUni, addr, &nnEEPROM, codeStr, codeLen, isReadonly);
|
||||
env->ReleaseStringUTFChars(address, addr);
|
||||
env->ReleaseStringUTFChars(code, codeStr);
|
||||
|
||||
@@ -254,4 +266,4 @@ JNIEXPORT jstring JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1getErr
|
||||
const char* str = nn_getError(nnPC);
|
||||
jstring jstr = env->NewStringUTF(str);
|
||||
return jstr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
#include "org_neoflock_NeoNucleus_nn_EEPROM.h"
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include "carbon.hpp"
|
||||
// FIXME: doesn't check for null
|
||||
#define GET_LONG_FIELD(name) eepromNative->name = (uint64_t) env->GetLongField(eeprom, env->GetFieldID(clazz, #name, "J"));
|
||||
#define GET_DOUBLE_FIELD(name) eepromNative->name = (double) env->GetDoubleField(eeprom, env->GetFieldID(clazz, #name, "D"));
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1EEPROM_allocate
|
||||
(JNIEnv * env, jobject eeprom) {
|
||||
jclass clazz = env->GetObjectClass(eeprom);
|
||||
//jfieldID fid = env->GetFieldID(clazz, "ptr", "J");
|
||||
//jlong size = env->GetLongField(eeprom, fid);
|
||||
nn_EEPROM * eepromNative = (nn_EEPROM*)malloc(sizeof(nn_EEPROM));
|
||||
GET_LONG_FIELD(size);
|
||||
GET_LONG_FIELD(dataSize);
|
||||
GET_DOUBLE_FIELD(readEnergyCost);
|
||||
GET_DOUBLE_FIELD(readDataEnergyCost);
|
||||
GET_DOUBLE_FIELD(writeEnergyCost);
|
||||
GET_DOUBLE_FIELD(writeDataEnergyCost);
|
||||
GET_DOUBLE_FIELD(writeDelay);
|
||||
GET_DOUBLE_FIELD(writeDelay);
|
||||
//printf("double_size=%d, %d %d %lf %lf %lf\n", sizeof(double), eepromNative->size, eepromNative->dataSize, eepromNative->readEnergyCost, eepromNative->readDataEnergyCost, eepromNative->writeEnergyCost);
|
||||
return Carbon::PointerBacked::SetPointer(env, eeprom, eepromNative);
|
||||
}
|
||||
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1EEPROM_free
|
||||
(JNIEnv * env, jobject eeprom) {
|
||||
if (Carbon::PointerBacked::GetPointer(env, eeprom) == NULL) {
|
||||
NULLPTR_THROW(nn_EEPROM);
|
||||
return false;
|
||||
}
|
||||
// assuming free(NULL) does nothing, this should be fine
|
||||
free(Carbon::PointerBacked::GetPointer(env, eeprom));
|
||||
Carbon::PointerBacked::ResetPointer(env, eeprom);
|
||||
return true;
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class org_neoflock_NeoNucleus_nn_EEPROM */
|
||||
|
||||
#ifndef _Included_org_neoflock_NeoNucleus_nn_EEPROM
|
||||
#define _Included_org_neoflock_NeoNucleus_nn_EEPROM
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: org_neoflock_NeoNucleus_nn_EEPROM
|
||||
* Method: allocate
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1EEPROM_allocate
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: org_neoflock_NeoNucleus_nn_EEPROM
|
||||
* Method: free
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1EEPROM_free
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
Reference in New Issue
Block a user