From dabd9dda174ff5c107a4ce58ada13573f79ad585 Mon Sep 17 00:00:00 2001 From: franchiopin Date: Mon, 20 May 2024 21:32:41 +0100 Subject: [PATCH] alot of stuff, mostly testing --- .vscode/c_cpp_properties.json | 17 ++++++++++ source/main.S | 4 +++ testing/.buildver | 1 + testing/Makefile | 61 ++++++++++++++++++++++++++++++++++ testing/arm_util.S | 3 ++ testing/arm_util.o | Bin 0 -> 596 bytes testing/main.S | 17 ++++++++++ testing/main.o | Bin 0 -> 680 bytes testing/nespire_mod_4.elf | Bin 0 -> 116312 bytes testing/nespire_mod_4.tns | Bin 0 -> 24112 bytes testing/util.c | 16 +++++++++ testing/util.o | Bin 0 -> 960 bytes 12 files changed, 119 insertions(+) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 testing/.buildver create mode 100644 testing/Makefile create mode 100644 testing/arm_util.S create mode 100644 testing/arm_util.o create mode 100644 testing/main.S create mode 100644 testing/main.o create mode 100755 testing/nespire_mod_4.elf create mode 100644 testing/nespire_mod_4.tns create mode 100644 testing/util.c create mode 100644 testing/util.o diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..8320b8b --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,17 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", + "/home/franchioping/NSpire/Ndless/ndless-sdk/include/*" + ], + "defines": [], + "compilerPath": "/usr/bin/clang", + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "linux-gcc-arm" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/source/main.S b/source/main.S index a78047b..af709f2 100644 --- a/source/main.S +++ b/source/main.S @@ -12,6 +12,7 @@ main: mov r9, sp sub sp, sp, #s_SIZE // Reserve space for state ADDED + mov r4, #0 mov r6, #s_SIZE 1: subs r6, r6, #4 @@ -19,6 +20,9 @@ main: bne 1b str r5, [r9, #s_saved_sp] + + + @ Get our folder path add r4, r9, #s_path mov r2, r4 diff --git a/testing/.buildver b/testing/.buildver new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/testing/.buildver @@ -0,0 +1 @@ +5 diff --git a/testing/Makefile b/testing/Makefile new file mode 100644 index 0000000..e0b1951 --- /dev/null +++ b/testing/Makefile @@ -0,0 +1,61 @@ +DEBUG = FALSE + +BLD_FILE ?= .buildver + +# Initiate BLD_FILE if not exists +buildver_create := $(shell if ! test -f $(BLD_FILE); then echo 0 > $(BLD_FILE); fi) + +# Prepare callable function. This function updates BLD_FILE +buildver = $(shell echo $$(($$(cat $(BLD_FILE)) + 1)) > $(BLD_FILE)) + +VER = buildver + +GCC = nspire-gcc +AS = nspire-as +GXX = nspire-g++ +LD = nspire-ld +GENZEHN = genzehn + +EXE = nespire_mod_$(shell cat $(BLD_FILE)) + + +GCCFLAGS = -Wall -W -marm +LDFLAGS = +ZEHNFLAGS = --name "$(EXE)" + +ifeq ($(DEBUG),FALSE) + GCCFLAGS += -Os +else + GCCFLAGS += -O0 -g +endif + +OBJS = $(patsubst %.c, %.o, $(shell find . -name \*.c)) +OBJS += $(patsubst %.cpp, %.o, $(shell find . -name \*.cpp)) +OBJS += $(patsubst %.S, %.o, $(shell find . -name \*.S)) +DISTDIR = . +vpath %.tns $(DISTDIR) +vpath %.elf $(DISTDIR) + +all: $(EXE).tns + +%.o: %.c + $(GCC) $(GCCFLAGS) -c $< -o $@ + +%.o: %.cpp + $(GXX) $(GCCFLAGS) -c $< -o $@ + +%.o: %.S + $(AS) -c $< -o $@ + +$(EXE).elf: $(OBJS) + mkdir -p $(DISTDIR) + $(LD) $^ -o $@ $(LDFLAGS) + +$(EXE).tns: $(EXE).elf + $(GENZEHN) --input $^ --output $@.zehn $(ZEHNFLAGS) + $(call buildver) + make-prg $@.zehn $@ + rm $@.zehn + +clean: + rm -f $(OBJS) $(DISTDIR)/$(EXE).tns $(DISTDIR)/$(EXE).elf $(DISTDIR)/$(EXE).zehn nespire_mod_*.elf nespire_mod_*.tns diff --git a/testing/arm_util.S b/testing/arm_util.S new file mode 100644 index 0000000..c46e942 --- /dev/null +++ b/testing/arm_util.S @@ -0,0 +1,3 @@ +.global arm_util_stuff +arm_util_stuff: + bx lr \ No newline at end of file diff --git a/testing/arm_util.o b/testing/arm_util.o new file mode 100644 index 0000000000000000000000000000000000000000..191a51f0389c13b0493177df93000073747870ba GIT binary patch literal 596 zcmah`!AiqG5PjP_OIxf(I`>)Pv}y^j*F|#kFPJ060Mozg-^GM4eD1RX=9Fo2yIww` zpQL8kZdcm_+KxM5(K|d7V)=9px|PKVpC(44zVPtnZc|b5wh2^iw}1e+dsvdAjRL*spn$qHn;eiX`%+OsL2MV*bhyNC+S5S}%rHV2`CHw#`A3gY5H@9Ci;q6p$$HZ;XRE0W!Sp7ag$5&9y&gRfBN zLGjX~C+mDBW42!O3zL~|`F8%;``*c+Qi=qMI#e^FxFq5Jx1d82HEDLX`?mTto_x;d z@6pS6GJAY}?QXEZq$bHot#KG0T=b5q5jIuir;{>2K3J$m6!7OGpygkR#dHCMtfJ}HGTAj1E*oB2R}2O`1yOs2f7;%SoJrWby!2NR<>^qn^wyE?8)rx-){^d? zpK9Y=o+X7#EwcX$o2)|TjY^Guu2(Uf%z!nb|CkN>M*lO%7?w=Fcnn@K$^s3dMXT5ZxCp CD>e)O literal 0 HcmV?d00001 diff --git a/testing/nespire_mod_4.elf b/testing/nespire_mod_4.elf new file mode 100755 index 0000000000000000000000000000000000000000..420d315b20b34f1b3d8d1dac5429d3e77fb79e12 GIT binary patch literal 116312 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 literal 0 HcmV?d00001 diff --git a/testing/util.c b/testing/util.c new file mode 100644 index 0000000..3bd0c4f --- /dev/null +++ b/testing/util.c @@ -0,0 +1,16 @@ +#include +#include +#include +#include +#include + +void util_stuff(); + +void util_stuff(){ + + printf("Hello World!\n"); + + + wait_key_pressed(); + return; +} \ No newline at end of file diff --git a/testing/util.o b/testing/util.o new file mode 100644 index 0000000000000000000000000000000000000000..0406eaf0cdb1df0932e912627e9aefb626818b1b GIT binary patch literal 960 zcmah|%}x|S5dNCk!3ESTKSmJ6HGyOe(6B@=UR**DV$g%ph^Ngg+k_3X>}IAn$jR5> z<}3IDzJo7e;?Kz!aQ$j#8X6B;lbWx-uCHpkYi2%d?>$pW!I?r0mkcP6WSQ_$1~p7z z9F@lE_cA_y{XHE1tTaA253BXM-q7pVT&5^8 zQL6(*0m8?xx1VD)EUPg!Rhm(^)a_ta&8a(Tp(Oo$^Y>K3uc4m{uIv~Hc=;CKYP$d- z%D#a06XY`&YyQ)u-{?g~f&kZWvsjrWPO*Nj-~tu;!e1N%+llo779%XSGtx}$;P4Rr zflYB5b!_w4oHhH2NmJA2+*yB@o04AluIGCj2}yK%*0oWKXpcYrO!TeXrD9#CA=rV(Gx}3LCaCZh$9I