From de1281715b300a92dc7bf5261d9f98e62f11bb55 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Wed, 17 Jun 2020 21:12:35 +0200 Subject: [PATCH] first commit with fxSDK template --- .gitignore | 1 + Makefile | 194 ++++++++++++++++++++++++++++++++++++++++++ MystNB.g1a | Bin 0 -> 17464 bytes assets-fx/icon-fx.png | Bin 0 -> 7429 bytes project.cfg | 85 ++++++++++++++++++ src/main.c | 12 +++ 6 files changed, 292 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 MystNB.g1a create mode 100644 assets-fx/icon-fx.png create mode 100644 project.cfg create mode 100644 src/main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fb550e5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/build-fx diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1106c98 --- /dev/null +++ b/Makefile @@ -0,0 +1,194 @@ +#! /usr/bin/make -f +# Default Makefile for fxSDK add-ins. This file was probably copied there by +# the [fxsdk] program. +#--- + +# +# Configuration +# + +include project.cfg + +# Compiler flags +CFLAGSFX := $(CFLAGS) $(CFLAGS_FX) $(INCLUDE) +CFLAGSCG := $(CFLAGS) $(CFLAGS_CG) $(INCLUDE) + +# Linker flags +LDFLAGSFX := $(LDFLAGS) $(LDFLAGS_FX) +LDFLAGSCG := $(LDFLAGS) $(LDFLAGS_CG) + +# Dependency list generation flags +depflags = -MMD -MT $@ -MF $(@:.o=.d) -MP +# ELF to binary flags +BINFLAGS := -R .bss -R .gint_bss + +# G1A and G3A generation flags +NAME_G1A ?= $(NAME) +NAME_G3A ?= $(NAME) +G1AF := -i "$(ICON_FX)" -n "$(NAME_G1A)" --internal="$(INTERNAL)" +G3AF := -n basic:"$(NAME_G3A)" -i uns:"$(ICON_CG_UNS)" -i sel:"$(ICON_CG_SEL)" + +ifeq "$(TOOLCHAIN_FX)" "" +TOOLCHAIN_FX := sh3eb-elf +endif + +ifeq "$(TOOLCHAIN_CG)" "" +TOOLCHAIN_CG := sh4eb-elf +endif + +# fxconv flags +FXCONVFX := --fx --toolchain=$(TOOLCHAIN_FX) +FXCONVCG := --cg --toolchain=$(TOOLCHAIN_CG) + +# +# File listings +# + +NULL := +TARGET := $(subst $(NULL) $(NULL),-,$(NAME)) + +ifeq "$(TARGET_FX)" "" +TARGET_FX := $(TARGET).g1a +endif + +ifeq "$(TARGET_CG)" "" +TARGET_CG := $(TARGET).g3a +endif + +ELF_FX := build-fx/$(shell basename -s .g1a $(TARGET_FX)).elf +BIN_FX := $(ELF_FX:.elf=.bin) + +ELF_CG := build-cg/$(shell basename -s .g3a $(TARGET_CG)).elf +BIN_CG := $(ELF_CG:.elf=.bin) + +# Source files +src := $(wildcard src/*.[csS] \ + src/*/*.[csS] \ + src/*/*/*.[csS] \ + src/*/*/*/*.[csS]) +assets-fx := $(wildcard assets-fx/*/*) +assets-cg := $(wildcard assets-cg/*/*) + +# Object files +obj-fx := $(src:%=build-fx/%.o) \ + $(assets-fx:assets-fx/%=build-fx/assets/%.o) +obj-cg := $(src:%=build-cg/%.o) \ + $(assets-cg:assets-cg/%=build-cg/assets/%.o) + +# Additional dependencies +deps-fx := $(ICON_FX) +deps-cg := $(ICON_CG_UNS) $(ICON_CG_SEL) + +# All targets +all := +ifneq "$(wildcard build-fx)" "" +all += all-fx +endif +ifneq "$(wildcard build-cg)" "" +all += all-cg +endif + +# +# Build rules +# + +all: $(all) + +all-fx: $(TARGET_FX) +all-cg: $(TARGET_CG) + +$(TARGET_FX): $(obj-fx) $(deps-fx) + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -o $(ELF_FX) $(obj-fx) $(CFLAGSFX) $(LDFLAGSFX) + $(TOOLCHAIN_FX)-objcopy -O binary $(BINFLAGS) $(ELF_FX) $(BIN_FX) + fxg1a $(BIN_FX) -o $@ $(G1AF) + +$(TARGET_CG): $(obj-cg) $(deps-cg) + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -o $(ELF_CG) $(obj-cg) $(CFLAGSCG) $(LDFLAGSCG) + $(TOOLCHAIN_CG)-objcopy -O binary $(BINFLAGS) $(ELF_CG) $(BIN_CG) + mkg3a $(G3AF) $(BIN_CG) $@ + +# C sources +build-fx/%.c.o: %.c + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -c $< -o $@ $(CFLAGSFX) $(depflags) +build-cg/%.c.o: %.c + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -c $< -o $@ $(CFLAGSCG) $(depflags) + +# Assembler sources +build-fx/%.s.o: %.s + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -c $< -o $@ +build-cg/%.s.o: %.s + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -c $< -o $@ + +# Preprocessed assembler sources +build-fx/%.S.o: %.S + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -c $< -o $@ $(INCLUDE) +build-cg/%.S.o: %.S + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -c $< -o $@ $(INCLUDE) + +# Images +build-fx/assets/img/%.o: assets-fx/img/% + @ mkdir -p $(dir $@) + fxconv --bopti-image $< -o $@ $(FXCONVFX) name:img_$(basename $*) $(IMG.$*) +build-cg/assets/img/%.o: assets-cg/img/% + @ mkdir -p $(dir $@) + fxconv --bopti-image $< -o $@ $(FXCONVCG) name:img_$(basename $*) $(IMG.$*) + +# Fonts +build-fx/assets/fonts/%.o: assets-fx/fonts/% + @ mkdir -p $(dir $@) + fxconv -f $< -o $@ $(FXCONVFX) name:font_$(basename $*) $(FONT.$*) +build-cg/assets/fonts/%.o: assets-cg/fonts/% + @ mkdir -p $(dir $@) + fxconv -f $< -o $@ $(FXCONVCG) name:font_$(basename $*) $(FONT.$*) + +# Binaries +build-fx/assets/bin/%.o: assets-fx/bin/% + @ mkdir -p $(dir $@) + fxconv -b $< -o $@ $(FXCONVFX) name:bin_$(basename $*) $(BIN.$*) +build-cg/assets/bin/%.o: assets-cg/bin/% + @ mkdir -p $(dir $@) + fxconv -b $< -o $@ $(FXCONVCG) name:bin_$(basename $*) $(BIN.$*) + +# +# Cleaning and utilities +# + +# Dependency information +-include $(shell find build* -name *.d 2> /dev/null) +build-fx/%.d: ; +build-cg/%.d: ; +.PRECIOUS: build-fx build-cg build-fx/%.d build-cg/%.d %/ + +clean-fx: + @ rm -rf build-fx/ +clean-cg: + @ rm -rf build-cg/ + +distclean-fx: clean-fx + @ rm -f $(TARGET_FX) +distclean-cg: clean-cg + @ rm -f $(TARGET_CG) + +clean: clean-fx clean-cg + +distclean: distclean-fx distclean-cg + +install-fx: $(TARGET_FX) + p7 send -f $< +install-cg: $(TARGET_CG) + @ while [[ ! -h /dev/Prizm1 ]]; do sleep 0.25; done + @ while ! mount /dev/Prizm1; do sleep 0.25; done + @ rm -f /mnt/prizm/$< + @ cp $< /mnt/prizm + @ umount /dev/Prizm1 + @- eject /dev/Prizm1 + +.PHONY: all all-fx all-cg clean distclean install-fx install-cg diff --git a/MystNB.g1a b/MystNB.g1a new file mode 100644 index 0000000000000000000000000000000000000000..40d76aa6b41bb597f35696c18dc51267175e0374 GIT binary patch literal 17464 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, replace spaces with dashes, +# and add .g1a (or .g3a). You can specify a different folder if you want. +TARGET_FX := +TARGET_CG := + +# fx-9860G icon location +ICON_FX = assets-fx/icon-fx.png +# fx-CG 50 icon locations +ICON_CG_UNS = assets-cg/icon-cg-uns.png +ICON_CG_SEL = assets-cg/icon-cg-sel.png + +#--- +# Toolchain selection +#--- + +# Toolchain for fx9860g. Please see also CFLAGS_FX below. +TOOLCHAIN_FX := sh-elf + +# Toolchain for fxcg50. Please see also CFLAGS_CG below. +TOOLCHAIN_CG := sh-elf + +#--- +# Compiler flags +#--- + +# Base compiler flags for the fxSDK, you usually want to keep these. +CFLAGS := -mb -ffreestanding -nostdlib -fstrict-volatile-bitfields + +# Platform-specific compiler flags. +# <> If you are using sh3eb-elf, use -m3. (You can do this on both FX and CG.) +# <> If you are using sh4eb-elf, use -m4-nofpu. (Not ideal on FX but works.) +# <> If you are using sh4eb-nofpu-elf, then your compiler will likely use the +# FPU and cause problems on the calculator. Consider another configuration. +# <> If you are using an sh-elf with several targets, specify whichever you +# support. I recommend -m3 on FX and -m4-nofpu on CG. +# Please see also TOOLCHAIN_FX and TOOLCHAIN_CG above. +CFLAGS_FX := -D FX9860G -m3 +CFLAGS_CG := -D FXCG50 -m4-nofpu + +# Additional compiler flags, change to your own taste! +CFLAGS += -Wall -Wextra -Os + +# Include paths. Add one -I option for each folder from which you want to +# be able to include files with #include<>. +INCLUDE := -I include + +# Libraries. Add one -l option for each library you are using, and also +# suitable -L options if you have library files in custom folders. To use +# fxlib, add libfx.a to the project directory and use "-L . -lfx". +LIBS_FX := +LIBS_CG := + +# Base linker flags for the fxSDK, you usually want to keep these. +LDFLAGS_FX := -T fx9860g.ld -lgint-fx $(LIBS_FX) -lgint-fx -lgcc +LDFLAGS_CG := -T fxcg50.ld -lgint-cg $(LIBS_CG) -lgint-cg -lgcc + +# Additional linker flags, if you need any. +LDFLAGS := + +# Additional platform-specific linker flags. +LDFLAGS_FX += -Wl,-Map=build-fx/map +LDFLAGS_CG += -Wl,-Map=build-cg/map + +#--- +# File conversion parameters +#--- + +# Here you can add fxconv options for each converted file, individually. +# The syntax is ".". For example, to specify the parameters for a +# font named "hexa.png", you might write: +# +# FONT.hexa.png = charset:print grid.size:3x5 grid.padding:1 diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..1a9e9b4 --- /dev/null +++ b/src/main.c @@ -0,0 +1,12 @@ +#include +#include + +int main(void) +{ + dclear(C_WHITE); + dtext(1, 1, C_BLACK, "Sample fxSDK add-in."); + dupdate(); + + getkey(); + return 1; +}