From fbc51cc98bd471ef2ae3eab154479fa5ec57fda2 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Mon, 6 Jul 2026 17:24:09 +0200 Subject: [PATCH] EEPROM is not longer PBC --- NeoNucleus | 2 +- README.md | 4 +-- .../neoflock/NeoNucleus/NativeBindings.java | 2 -- .../org/neoflock/NeoNucleus/nn_EEPROM.java | 6 +--- src/native/main.cpp | 20 ++++++++--- src/native/nn_EEPROM.cpp | 36 ------------------- .../org_neoflock_NeoNucleus_nn_EEPROM.h | 29 --------------- 7 files changed, 20 insertions(+), 79 deletions(-) delete mode 100644 src/native/nn_EEPROM.cpp delete mode 100644 src/native/org_neoflock_NeoNucleus_nn_EEPROM.h diff --git a/NeoNucleus b/NeoNucleus index 5f06a56..3b04fd4 160000 --- a/NeoNucleus +++ b/NeoNucleus @@ -1 +1 @@ -Subproject commit 5f06a5659ca8bf2ece025cf27f195d1044ee405a +Subproject commit 3b04fd45c7695ae007d6aed4dfda1f0063a32952 diff --git a/README.md b/README.md index 8d07b5d..70fb55f 100644 --- a/README.md +++ b/README.md @@ -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 \ No newline at end of file +- [ ] Begin work on Hydrogen diff --git a/src/main/org/neoflock/NeoNucleus/NativeBindings.java b/src/main/org/neoflock/NeoNucleus/NativeBindings.java index 692e0a3..f514a37 100644 --- a/src/main/org/neoflock/NeoNucleus/NativeBindings.java +++ b/src/main/org/neoflock/NeoNucleus/NativeBindings.java @@ -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); diff --git a/src/main/org/neoflock/NeoNucleus/nn_EEPROM.java b/src/main/org/neoflock/NeoNucleus/nn_EEPROM.java index 02e4c86..0c88b63 100644 --- a/src/main/org/neoflock/NeoNucleus/nn_EEPROM.java +++ b/src/main/org/neoflock/NeoNucleus/nn_EEPROM.java @@ -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(); } diff --git a/src/native/main.cpp b/src/native/main.cpp index ddc06f6..2e78515 100644 --- a/src/native/main.cpp +++ b/src/native/main.cpp @@ -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; -} \ No newline at end of file +} diff --git a/src/native/nn_EEPROM.cpp b/src/native/nn_EEPROM.cpp deleted file mode 100644 index 81a00c5..0000000 --- a/src/native/nn_EEPROM.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "org_neoflock_NeoNucleus_nn_EEPROM.h" -#include -#include -#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; -} \ No newline at end of file diff --git a/src/native/org_neoflock_NeoNucleus_nn_EEPROM.h b/src/native/org_neoflock_NeoNucleus_nn_EEPROM.h deleted file mode 100644 index bfa6bf6..0000000 --- a/src/native/org_neoflock_NeoNucleus_nn_EEPROM.h +++ /dev/null @@ -1,29 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* 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