jqioajerifjiorwji

This commit is contained in:
2026-06-04 11:50:16 -03:00
parent cfc8abe05c
commit f7b7605408
4 changed files with 38 additions and 6 deletions

View File

@@ -19,7 +19,7 @@ all: java $(TARGET)
$(TARGET): $(OBJS) $(TARGET): $(OBJS)
$(CXX) -shared -o ${BASE_NPATH}/$(TARGET) \ $(CXX) -shared -o ${BASE_NPATH}/$(TARGET) \
$(OBJS) ${BASE_NPATH}/libneonucleus.a $(TLA_PATH)/libtla.a -lc $(LD_FLAGS) $(OBJS) ${BASE_NPATH}/libneonucleus.a $(TLA_PATH)/libtla.a $(TLA_PATH)/foreign/lua54/liblua.a -lc $(LD_FLAGS)
%.o: %.cpp %.o: %.cpp
$(CXX) -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux $(CFLAGS) \ $(CXX) -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux $(CFLAGS) \
$< -o $@ $< -o $@

View File

@@ -24,19 +24,26 @@ public class NativeBindings {
eeprom.free(); eeprom.free();
nn_Computer computer = nn_createComputer(universe, UUID.randomUUID().toString(), 4096, 100, 100); nn_Computer computer = nn_createComputer(universe, UUID.randomUUID().toString(), 4096, 100, 100);
nn_setCallBudget(computer, 0); nn_setCallBudget(computer, 0);
System.out.println("Arch: " + arch.name);
nn_setArchitecture(computer, arch); nn_setArchitecture(computer, arch);
System.out.println("past setArch");
nn_addSupportedArchitecture(computer, arch); nn_addSupportedArchitecture(computer, arch);
System.out.println("past addSupported");
nn_mountComponent(computer, eepromCard, 0, false); nn_mountComponent(computer, eepromCard, 0, false);
System.out.println("past mountComponent");
nn_Exit e = nn_tick(computer); nn_Exit e = nn_tick(computer);
System.out.println("ticked");
if (e != nn_Exit.NN_OK) { if (e != nn_Exit.NN_OK) {
System.out.println("NN tick error: " + nn_getError(computer)); System.out.println("NN tick error: " + nn_getError(computer));
return; return;
} }
System.out.println("sync ticked");
e = nn_tickSynchronized(computer); e = nn_tickSynchronized(computer);
if (e != nn_Exit.NN_OK) { if (e != nn_Exit.NN_OK) {
System.out.println("NN synchronized tick error: " + nn_getError(computer)); System.out.println("NN synchronized tick error: " + nn_getError(computer));
return; return;
} }
System.out.println("getting state");
nn_ComputerState state = nn_getComputerState(computer); nn_ComputerState state = nn_getComputerState(computer);
if(state == nn_ComputerState.NN_POWEROFF) return; if(state == nn_ComputerState.NN_POWEROFF) return;
if(state == nn_ComputerState.NN_CRASHED) { if(state == nn_ComputerState.NN_CRASHED) {

View File

@@ -1,13 +1,20 @@
#include "carbon.hpp" #include "carbon.hpp"
#include <cstdlib>
#include <cstring>
// redefine it here with the impl // redefine it here with the impl
// theres probably a better way to do this // theres probably a better way to do this
#define CARBON_JNI_EXCEPTION_CHECK() if (env->ExceptionCheck()) return NULL;
#define CARBON_EXCEPTION_FUNC(fname, classpath) jint fname(JNIEnv* env, const char* message) { return THROW_EXCEPTION(classpath, message); } #define CARBON_EXCEPTION_FUNC(fname, classpath) jint fname(JNIEnv* env, const char* message) { return THROW_EXCEPTION(classpath, message); }
#define CARBON_MAP_TO_NN_EXIT(enumcase) case enumcase: {\ #define CARBON_MAP_TO_NN_EXIT(enumcase) case enumcase: {\
jfieldID id = env->GetFieldID(clazz, #enumcase, "Lorg.neoflock.NeoNucleus.nn_Exit;");\ jfieldID id = env->GetStaticFieldID(clazz, #enumcase, "Lorg/neoflock/NeoNucleus/nn_Exit;");\
return env->GetStaticObjectField(clazz, id);\ CARBON_JNI_EXCEPTION_CHECK();\
jobject obj = env->GetStaticObjectField(clazz, id);\
CARBON_JNI_EXCEPTION_CHECK();\
return obj;\
} }
#define CARBON_MAP_TO_NN_COMPUTERSTATE(enumcase) case enumcase: {\ #define CARBON_MAP_TO_NN_COMPUTERSTATE(enumcase) case enumcase: {\
jfieldID id = env->GetFieldID(clazz, #enumcase, "Lorg.neoflock.NeoNucleus.nn_ComputerState;");\ jfieldID id = env->GetFieldID(clazz, #enumcase, "Lorg/neoflock/NeoNucleus/nn_ComputerState;");\
CARBON_JNI_EXCEPTION_CHECK()\
return env->GetStaticObjectField(clazz, id);\ return env->GetStaticObjectField(clazz, id);\
} }
@@ -66,6 +73,7 @@ nn_Exit Carbon::JNIComponentHandler(nn_ComponentRequest* request) {
} }
jobject Carbon::Map::To_nn_Exit(JNIEnv* env, nn_Exit a) { jobject Carbon::Map::To_nn_Exit(JNIEnv* env, nn_Exit a) {
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Exit"); jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Exit");
CARBON_JNI_EXCEPTION_CHECK();
switch (a) { switch (a) {
CARBON_MAP_TO_NN_EXIT(NN_OK) CARBON_MAP_TO_NN_EXIT(NN_OK)
CARBON_MAP_TO_NN_EXIT(NN_ENOMEM) CARBON_MAP_TO_NN_EXIT(NN_ENOMEM)
@@ -105,7 +113,22 @@ jobject Carbon::Map::To_nn_Architecture(JNIEnv* env, nn_Architecture a) {
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Architecture"); jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Architecture");
jmethodID consMID = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;)V"); jmethodID consMID = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;)V");
jstring str = env->NewStringUTF(a.name); jstring str = env->NewStringUTF(a.name);
return env->NewObject(clazz, consMID, str); jobject obj = env->NewObject(clazz, consMID, str);
printf("malloc\n");
nn_Architecture* data = (nn_Architecture*) malloc(sizeof(nn_Architecture));
if (data == NULL) {
printf("null data\n");
return NULL;
}
printf("memcpy\n");
memcpy(data, &a, sizeof(nn_Architecture));
printf("setptr\n");
if (!Carbon::PointerBacked::SetPointer(env, obj, data)) {
printf("SetPointer is false");
return NULL;
}
printf("return\n");
return obj;
} }
namespace Carbon::Exceptions { namespace Carbon::Exceptions {
CARBON_EXCEPTION_FUNC(ThrowNullPtr, "java/lang/NullPointerException"); CARBON_EXCEPTION_FUNC(ThrowNullPtr, "java/lang/NullPointerException");

View File

@@ -212,7 +212,9 @@ JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1addSup
NULLPTR_CHECK(nnPC, nn_Computer); NULLPTR_CHECK(nnPC, nn_Computer);
NULLPTR_CHECK(nnArch, nn_Architecture); NULLPTR_CHECK(nnArch, nn_Architecture);
nn_addSupportedArchitecture(nnPC, nnArch); return Carbon::Map::To_nn_Exit(env, nn_addSupportedArchitecture(nnPC, nnArch));
//nn_addSupportedArchitecture(nnPC, nnArch);
//return NULL;
} }
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setTmpAddress JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setTmpAddress