From 218751e4b694278126d46ba454ead3daab78e352 Mon Sep 17 00:00:00 2001 From: caillou15 Date: Fri, 5 Feb 2021 15:56:45 +0100 Subject: [PATCH] Initial avec menu principal --- .gitignore | 13 ++ CMakeLists.txt | 43 +++++++ Makefile | 194 +++++++++++++++++++++++++++++ assets-cg/example.png | Bin 0 -> 3816 bytes assets-cg/fxconv-metadata.txt | 3 + assets-cg/icon-sel.png | Bin 0 -> 8388 bytes assets-cg/icon-uns.png | Bin 0 -> 4629 bytes assets-cg/img/bouton.png | Bin 0 -> 675 bytes assets-cg/img/bouton_selection.png | Bin 0 -> 682 bytes assets-cg/img/fxconv-metadata.txt | 3 + assets-cg/img/logo.png | Bin 0 -> 23483 bytes assets-fx/example.png | Bin 0 -> 3569 bytes assets-fx/fxconv-metadata.txt | 3 + assets-fx/icon.png | Bin 0 -> 7429 bytes project.cfg | 85 +++++++++++++ src/main.c | 50 ++++++++ 16 files changed, 394 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 Makefile create mode 100644 assets-cg/example.png create mode 100644 assets-cg/fxconv-metadata.txt create mode 100644 assets-cg/icon-sel.png create mode 100644 assets-cg/icon-uns.png create mode 100644 assets-cg/img/bouton.png create mode 100644 assets-cg/img/bouton_selection.png create mode 100644 assets-cg/img/fxconv-metadata.txt create mode 100644 assets-cg/img/logo.png create mode 100644 assets-fx/example.png create mode 100644 assets-fx/fxconv-metadata.txt create mode 100644 assets-fx/icon.png create mode 100644 project.cfg create mode 100644 src/main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2c4f84b --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Build files +/build-fx +/build-cg +/*.g1a +/*.g3a + +# Python bytecode + __pycache__/ + +# Common IDE files +*.sublime-project +*.sublime-workspace +.vscode diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..74b176c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,43 @@ +# Configure with [fxsdk build-fx] or [fxsdk build-cg], which provide the +# toolchain file and module path of the fxSDK + +cmake_minimum_required(VERSION 3.16) +project(MyAddin) + +include(GenerateG1A) +include(GenerateG3A) +include(Fxconv) +find_package(Gint 2.1 REQUIRED) + +set(SOURCES + src/main.c + # ... +) +# Shared assets, fx-9860G-only assets and fx-CG-50-only assets +set(ASSETS + # ... +) +set(ASSETS_fx + assets-fx/example.png + # ... +) +set(ASSETS_cg + assets-cg/example.png + assets-cg/img/logo.png + assets-cg/img/bouton.png + assets-cg/img/bouton_selection.png +) + +fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA) + +add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}}) +target_compile_options(myaddin PRIVATE -Wall -Wextra -Os) +target_link_libraries(myaddin Gint::Gint) + +if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G) + generate_g1a(TARGET myaddin OUTPUT "MyAddin.g1a" + NAME "MyAddin" ICON assets-fx/icon.png) +elseif("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50) + generate_g3a(TARGET myaddin OUTPUT "MyAddin.g3a" + NAME "MyAddin" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png) +endif() 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/assets-cg/example.png b/assets-cg/example.png new file mode 100644 index 0000000000000000000000000000000000000000..8826800383eeae92dade9545feaeb68faf0720f2 GIT binary patch literal 3816 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 eRZ5JQiUR=bBzf^!G-(0=0000 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 ag#Q8hHNm}t`+-sb0000 zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=Q1b|gEFMdw^aErBH1E{9-qPVFF%Ir$HAB8KVSRx`CJP=-Jc(? z@cJ3t*BcsNw2+OR*FP32?@t!`&5e-1O_2Bg@$1HQyf==&Sk%QI|Mk^A z|DUtkIr}-?NCh{P=TOfU?qeASDqfO1t?;h=&wQ`<-FY`Z{0zx2KfUsvp@$gQJfyH( z7~zB+7N0XrY)o;-%4du-%DvX4#vZ4536ks`POQ>pNs}luZV^dN;@g&R_w9GT85%pU zz|a_2EHLFy-|nvl{GInX)8nHM%$XXmudpjx5@3c!&VDkCfQ0jkTfPqdc)wrnOJIcv z=IiFh0f*OT3C-a%x8x>(FfQ}?uAza%dNE9TI+4}*oBhJz4Y2!?|lsR9LbG5m^~OV zhDH@lnzd-vrd`J*eP)_@mRV<;eU25EthDkftFE^C8ar%K$?dfBF1zlw`yPi}J95&= zr<{7)>1Vv7_KNBs-v1zK;T5%bBW2_2J8E35)fT!-1jCtZF(YCz1tMN80wi>_nE4h` ziWWJGneUOR$Ppv6#byORTquMv?GW<`@7R4t?r+D<;p@MOTl_nba~8V)K;)v^@-1$^ ziP|zGoHt@m6`D`IP<@OUvGEUQTRyRO8&cMotFeqwm@DlSQun3oRKuz1oR)pm5!a$X zho zweN3-nIp>7wvTz?+d%XR%ncoyLauQBfXAV?16eH?E;Pnh2$L@g1AZ{ytOK>2!} z-=4Tr%S_8G18_Yw@`p^OPc+b&j6Zo-iP#1$$fSyoVbQn_wYG4 zrk@KqxM)JCDJLtOfA+`2Dq_7u`W?}vYDF7aNuV5 zf+$FtAz`+qMb6yh%C3VQ)=8xu8TqNjc0F1V9VMeo2v1*Ne|P;li~~sOyQcNHFC5uj z+Y;XhBj7kY*kZz})_$0HR?$sKY)O@sZqd$@Z4F^One{sngDT+gt^@(xOLO}}5Rp%)|+m0PCOt?Tt>4=}@ z3m$28-D8D4j9(U#mv6lh{%2c@h{pO6q{otv3mq1TRBM~RnEG{&`@;Bu{l%`!kE&EFr=K?R%xr@y^5l0s&14r;d>~lw@r?WRniI_rYDyTB$lvz zI!gwOwIK44c50%Es$H!^+HfJ^x6D3%lQov~fLDGpcK~OYr5*OEkTkprP2y*ivtFWT z{>H7L;nG(3^X-e?qt&~n!uc4vP!Mlo9Q9ZmLE+9Gq7Y2 zs3tJd^Bql52%hG!_)#AP~`<>lYos# z1S$mF~QCPuqCQ=5D5y}u*9YTC55gaB==Jh{?i(CKNaCWtwHxw z5&pgg(L_L6szoRQ+L298p(H?Y=O=oTiaY~yHl2cli^ki7P>!0OjGH##RR7#C5ZLeN>)xCG+&Nm%y zY_kS3(-`A#E$;5>V`kJ1$DaU$^?+&P#SV5^}eLni^i-J8$m=U?^P0X1>vsX3WH#1QR+}$&F5v z)Ta_HhV2!~&O#X`o7$XdB?oRM)}Ek~uTrb|J@Ali!x!7ElM z&CV?J5RLk1V+Z&IpMfQXumcLl+od^@lu_Uo2@W9C$wmOpp*J`FrrRc$vSh*!n9?v& zQ7M5er+^mawk$jN>W~PPy{ST|f)_Q*|VNL+rT8#y6rs;4(V`M>XH)3ngMTg_yFkJ_Auf+li-k2F2K$JB8|tE z4R`^4Q3@Trb_4pYy`bGUT`QDJcs0-#(HwFa#6`JlYu1rlLh4Xj8rTx|YvKH0cmP@8 z=~*~M_L^yZM}TOjq=YjNgR|0z%;Gy009ZL>ss_&j9OWhF(uX!PS%zB5#>0Nu)8cU2 z)tDa$O9DU0(cBAV!_U}!O#6r9fz8|M-MVZZk;_2&==2=0@+Y?g_!Y6D&-4h@OM> zL5n0o7l%m^t$1D4yPwjK7B-GMRFJnW?LKEh*^`9mBiusr;};UMn_i!lE@sVYQU?xv zlxghtgpZI@w!f35?%$`zhZ)^JrpB6gBDW(dtI>Xl(&-}3TqE78@2oL5GS5O{e;Xj# z>`DC96JH|~peo7)T7 zm(>n6((%`2{eKvMu02poa5{@jy8=BRyX}EV&(r!{l%+k-z@`l19(QD-_mDaLwS*aT zr0Hq{xJjqkd{Vn|@H+3K1beb^LIy=)HfA$@JKJl4q7Z}jCU<&ncRFHQXsAD@d)g9Y z_9Dgm^E4%65y@^WGUPoSTSL6`-uE?tfXutmi}A6+9=PD!@5>Bv?`7(18Okzz^}>r1 z(t0maaKmef-98L)_Ncm2;`m|y>W8by?tFW8bIo`gfin6$N_w6{hS(pm@;c8i4uuKe zzz>JM{AuE(3iQMW^5l-H$YV$ZYHeHfZr8_xYV#Q@1f@}-4X940FDHv)6CS{&4 zHqd>Jyix~gM;g3SBH*RWEXr_K4@)bx5zK9*_I+ggI&yOL6_oEc9wYiSqE!K3JgRmv!fYs6+3b-{` zm+sY-QV>(Yn#CwaWjnP(X_!V?fEAQNzR@Ghk)Z(mS{nSmbj)OboWN)B(YC&ylt9q< z*PkW+x1a9cUEu#0`oFLch=>LS7XAnQTdXQe8tq&F000SaNLh0L01FcU01FcV0GgZ_ z00007bV*G`2jd106DSx@HxUjR55_;C2hJY6wFkX(BjJGm1n~lakQhQ*A;E~@;;$e?ASo?Y-Dan=TMuI< z<8HgVn%P>)d#Bmiwsb%FzVCZ|Or+6hAc#Lh0R#XApa2w!f!$j*LQX1YC=xk5EqlC^ z+7v68FQ`qu|B`LnilXp^ZQI_jH|tc7V!klzRPK}C7#xhC#0Sy)x6Wd(e_VUoD6877e~hlH*V^z|lUv5DcEmwS4= z(&xj`NvT>rsebn$!V!o>G^}}ma1+6*>H)${B(7_6q5L$>!_)F{rSk5}fsd!`mrAud zwLG=WpPvz7mmXr_&(DakOAoQ|=VwINWf)?iw*A8-?~jgrpp?H=2@RCJTp*lF5WR?8 zg6Ku$5{6#Pdc9ORlU9AWKtxaR)r-SZeD&h+lrZ!nxg-bll%_80p^>I8D_tXDK?&$7 zqF91>iYS&)Jw-m0rk>(06St>$%f#&|oerg`r+CZculkgxp3=Ecx}#5#45e%Ols0+F zx$9Hf;VICkbZwu4rSvI;5{4!_br&JDxVpv`jy2z*mgU$KV_|tk^pqzLA0UM0mR`0E zigR@EVr4C=X~AXU(97FG0U zJsO?Q=h$88bSNQDA3u@8*w3mD!nT$Bw8GMg$?m7uj4sBsw7~g(r>}W0?%Q#gd56Yev)Q-D1(5I|!lOVsSp7 zn_GJ6=xCY6h;&BACpsm4y!Fy5aojbiRVo=K`S@msbK!!L#X@rWwCYpbRYt5qj7ZZA z;tnEi#&vBpozCX+EKQ`d2rGRY8rj}>~PubkC>-!X}D8^Z3_-e`r%5W-`?Cm}N{OOY4&%*QGrzCW}e0Y%R@4t0@ z$Y*qb5ULTfyuMy26u-Jov$(^usj6Vh4th#2;3+@>y`^E5P)oW@h6a*%(wY1Bru+{A zLLfLt3s3+GKmjNK1)u;FfC5ke3P1rU00jb|02F`%Pyh-*`JeF%0p|(b4g|HY00000 LNkvXXu0mjfMjhGA literal 0 HcmV?d00001 diff --git a/assets-cg/img/bouton.png b/assets-cg/img/bouton.png new file mode 100644 index 0000000000000000000000000000000000000000..965e3a31844241dd882b1d682116c5121246567b GIT binary patch literal 675 zcmeAS@N?(olHy`uVBq!ia0vp^CxBRkgAGXTmf0%9z`)p=>FgZf>FlgfP?VpRnUe~X zo>)84*5j~)%+dJEUane7WdVgJ0*)SRTG6pMWFv=|SM_Hwl_t5e!spDh zuplCECMGGl{x;X|ByY9r zY!a5w0vowber*1K@O|FdLr+>}i*zx{>TmmN$iq_J=yrD7{{GzEg-k!@H)^kay8cSz zO#e&Sy1GRyUvikmuj~5WW7aEg_@^Fgq~iYRvIrOJgTFodG}*u0Wr|&$mw&c)jva&K ztE`u778WdST~qcx`}pqMw|oC=FTZ)uo{?R&m?v)DG+?~2C3(BMF#HFy{>!OOt^?AX z1s;*b3=G`DAk4@xYmNj^kiEpy*OmP#6N|7R&$^OLVnCt!o-U3d6}R5r-N?&iDByC@ zvhUE#!@4^dcZ-WZOcN6*t%~n)4Xpg+bx%?K1k`A fsC&=hus^@4un6B*wn9gsQyDy6{an^LB{Ts58E^%F literal 0 HcmV?d00001 diff --git a/assets-cg/img/bouton_selection.png b/assets-cg/img/bouton_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..95a0cefe602e8a1543b4ec59fe711b0d1ea7a5b4 GIT binary patch literal 682 zcmeAS@N?(olHy`uVBq!ia0vp^CxBRkgAGXTmf0%9z`)p=>FgZf>FlgfP?VpRnUe~X zo>)84*5j~)%+dJEUane7WdVgJ0*)SRTG6pMWFv=|SM_Hwl_t5e!spDh zuplCECMGGl{x;X|ByY9r zY!a5w0vowber*1K@O|FdLr+>}i*zx{>TmmN$iq_J=yrD7{{GzEg-k!@H)^kay8cSz zO#e&Sy1GRyUvikmuj~5WW7aEg_@^Fgq~iYRvIrOJgTFodG}*u0Wr|&$mw&c)jva&K ztE`u778WdST~qcx`}pqMw|oC=FTZ)uo{?R&m?v)DG+?~2C3(BMF#HFy{>!OOt^?AX z1s;*b3=G`DAk4@xYmNj^kiEpy*OmP#6N{*>+m5m3q`}l)@-quuz l7AQP$xM@jhDd&!jj2s(;e`o(KZ3McQ!PC{xWt~$(697~!2|xe< literal 0 HcmV?d00001 diff --git a/assets-cg/img/fxconv-metadata.txt b/assets-cg/img/fxconv-metadata.txt new file mode 100644 index 0000000..3aef193 --- /dev/null +++ b/assets-cg/img/fxconv-metadata.txt @@ -0,0 +1,3 @@ +*: + type: bopti-image + name_regex: (.*).png img_\1 \ No newline at end of file diff --git a/assets-cg/img/logo.png b/assets-cg/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6239fb56558c1859d0826c9b5ea30c65dc0e56 GIT binary patch literal 23483 zcmeFYbyS?owlCT=*0@`62@rxb?!nz9xI^RKxVr^UAh-q(7J|D6hXBFd9RdUh5N>C! zwfA28-Sf_UXN-6M+l_b>ah1m*y{xd3HJY2 z23tP>fFtdrspF<@>PhA7>SSqS5214Nc7{+vylgB10I$W$bQ?!He$4Qv!56!r0z!3x zctX@P($R}O^ACm^uU9a*zz)6RZk85dlCL_RKimfX^3M&tc&$;b;_%JAl)mGzlvX9@ z>gq1z%t`M0@iAcK@;c|?=g+r;bEN6-Q4@A9t>&t?I*s2`GTaI&=G5mZ&)m$B9?kJe zKMDjsok-qYs+vh%JlKU#+zO}-Bj}(w|`})3ma9>w@vb_v-5EtcRNuzo%v2pU~<+58euO z^~c4T8^Sd!vL;4vZ;@g@Qjxg59|2e$_wYWvEFv}~{Wq!9=?w;Dt`@@tfs~E*sXBF5 zTkLyEg`4$8%n5A@KKmM1rNd)d()?~L@0EPfs&^^vl5SeI+Lu$u!xNk>2$kvK!WjY{ z@zw&p3w+_f)2J!xu{j0OA%k?K-B<&l_!vp|afLq!Z}0DKs`u^kLr++sR-v4g6EC#h zve_fX4=?Ta1jh|de2mVn##5!KTG5Hc7f95U$4jx`&jh(2Us<^pMcB#(X-Km(7La@|hC7LPS^8YS2x z)Mhk^MKI6Z4;P1o?uL-o)$*t5i*$@4zx5oD(;U8TsNA+2-AnzXN3_@SmWGgow)ZXc zQ-@j$SL*sZ4Nl*j`mt{eb6;m<+b@~PkkY4Rd1f-ch=&zxD(pDd0hImSdu)Ra^o(wR4(6fWtN=i#k$9S zE-xyh8HtgOW^190woVx6g1rJ%5; zMPWSJ<@$nQVynZ$?xWgX$a9ZG&_@#+PDg2!w%DxqH~E#XQI76_p1i&_(z60r`Bn~# z0&a#cqc|&MB&mbx{aD!v^ec^P9($;(-CJv#p%>`(mB5WA+d}j<(vQ%kDf?D9(E6(zFXc#j}cSPDzcxRb&6(>~0 z-*1HX>XoxE5zo@E_b3AY9WNc4g!v|5n*==IC6)opyu69%@jQoAAI4mPeY z10JZ58Z9%tYf6>a-gOgWG4h=FaIejM)f_ox>8##~JWzVuU=-;ii+AKhME*W01uL1l zb;wSOUa7p}Ty+{N2#Yb8PD}qjfUe3f?E_Ezr}Heq-eeQqvC%?O)(YUMg|JuQlDlSb zx|oyqzgQsb8J^FiNf z^3Q$ri0SHexKE5w!woDwER0?74^b1c=KSgyD-RZsmA*XEZ>yy7M0A`hvTZWo?%}i% zGHbOo0I#xAg56Fi%Y%>fH4n=Yb%o%%_5?}+l+RbQPlSU$HINJOlO&`k48(pwyqU!x zOHwG?ov|7s)7R+-=o@)PNspfdbqB1+m8;Ti$snHkS=Zg==o3g_Mn?qqnJdJXZbDZk0yj5U&6pg#c6*lCJD1wSRv6eI#~P^@3-i( z1qtN~M0pCh@l15l3&JKWd%-&qc{}ZDEddD<<)qL^Dvj@NDKyDuBVUi~_}LW`njP$FxwZLJ+QLq8j32I{R#G49!=vQ}(`^4dr+yrSaXIIkjPQtRMZ$Yjr9NH)|V_ ztBQKXClC%l#gd;6=h~kpg#gh`U*MnZ1sA*s0}NH=8zBA=3&^eSZXbwJ79vCJty(mT z2Ukl1teQviv%<*9{SXkcq)+bZ44e};6}^8>*JL`YN5v$CvzseIBd;t3)zt)iD@<3A z%42Z&O(#Flju?*Q$5EAk)Su+emt!Eay7V=~ zVjwhf>KoXjMdRm*E#0Km$eGtwM8^(g#u56cfVli7AG89Y2F>u86j#=LDYFqA2r!|M zrSxAjc@s*{!K&9|W|gNUI&Hr}&vF&?j-U7S>L^%-vAr*PQm5t|+vAfMLVN?9@2vt3 z3txIaCn{28EV%%qGdFPffPIaE9%+ScK1=o~#=KX6mH@HXiVC&tL*Wye4043ya+3Jk zyZZYNpw9ypmJ@XO6t?geaRdRUFA$P8wu@gwuT4IQhZM@9PA97K<;&|3AerC689C4s7*Lu#`*d=Mh>o<*`eAkd*p1Q?e4p5 zOY8;UbGx<_7Bv={9v|gBaEvro!b}(oJyOY6T4yv1kmdO*BjcuQkR*jBK8092J4OL! zR~Z8eM>i4j(P)FJ!1n3-K+>V4#lb3#|PvS~c%6Y63Bl_lCU; zL=8vX+aKY6oY2vM#mI6$6jCS~KbW>)JWmnuVKdek*e#J#!s*N^R-d+Qz zA%rZW!Qb`C4_)k|VL}lXUrHiwG)SL=NKsjJc_uhm>FEVBInz*R!)}(7?59wOKS7l& z3&aGV2pfsk0J@K$As5tq6^k*6S?NIqedib7)OzYA-pvG%d#^i@ivrZIpBLJGM4&~& z*eCr}<9#o`jFzsmq)Yr}T(xlfuAK-0!u90@t~mP<7f9R;Ph>zGkVM3#<(2nlI(DHq zlKKR{CQ=YWhak;NCFqrls_Ifo!%NDU`YE z$uuXNjJ=4cpAQ`~UQ;q*+Q2~4HfhXxi-;5H@wylOt+O*Kt1pi2eE!y_mud3>EpNTm zKFHFU`q#;*Q$cL4cX8W9bdJ%nYCw%a2VaO=OT41f`_n<6`>c`zKHd)ZDWIHoGgH5e z2@kK(%`^)d?_OGMQX4LMjxOPQYx+i(>PJj%s|z$-CYOywJPQQK?3vVvQgu;SWUucE zokjn2W#QHKD%UJ841x1G+M#bRMjB z{Zv>x~eI3av#-GB*7^oQ8HEK z5Y98N-kOCC{WNEJe`4}0;GSoEI3Y%|*?uy7n!!Sptw*sn0o& zYxp=by+{O6AD`Rdyd|c%bc+f~Qxg*LzzP=qR8t^*e}S#@a4Yi_wGrDB3erzHOmbX* zvuUC%5^_p@qY_B@jTW&Qzox6fEY-_2FvL5s0;*$fj4WgGg}_c6o(fIp&aiLz# z1OnDNPLEsv*zc-}QV}#eU4-tqPlg~dd>fEtu|)!zZWtD#q0EB?XNapt=4Qo4-V}j= z$2Jf3J_eA-DWMM~r2W%z(;zyVp)^8nm~Q!o^F=vY1py3=Bgs-EQk&A;o`WL~@V+Vkb^V?8WIU+E+~O z(n}ciD*rx~tCzQzt`^hPCH!9NgG2ZM2%{f`cyIpNeQqW?kd70b zX_>Md#G+%3Jok;4}L>wh&%`f_~GKf;^S=pmdF!gHL2@0m+lX3001uBMnXbWPD0`z6%|+= zCCfiaShiP`tlxNAUW$pvL)GPrYJYb~X;h(REr?KFKmRrITLqCYdJMUkH-+nZ&gbT} zhwGakD?%%%KrqkP%>SZAHu^~cmBmbm?{u)$H=)%tNR^Fq7Cjce+>)fsOL25pt8e`! z0>b1QHFVk08N7pVbfLjHVL!k2H{Y4hpn>s@&z(5B7;q;zR%)W=qDy#LvM*n`q@~b> z-)4D@=Aq$=xEgxg#X+Y`gRLUs6m8@A6qyN^bR5mKI5an3Y(^E>zGJg6)Z%k;(HeRE zt&Jhjl(Cwnq*)mXa$%+krjz_qY6cI{iTYZeWJV)(&yMw!x22M-KtG2>%)hG^j5>4? z`qX{qIM%ZrmWdw&N6yyp$c~QS87w{4(3#-S>H@sY4Srds!wN^IG5@Sr0Fp!710+5^1nHP}?YkGJ z<3Cn^2~QuNAzRzI79zxHssR94SvIf|myVL6fVqJJh(J7F3fB~>a3Cszm+7b_Plm_^FV#)E_A z6)KgGtA(Y2x}@}95U?j<8f!N>Nv!5+9^`+*U#ae%>mEMN{64t}=3kB9XtDgAS_BlIsW!uZMNW$Mhv&I)F8aQL?o zP&X-$f6ez_j(}>yDvfOF5U7*8t2so<1LEjL`}awm?cJe&pVJ)*`Q7x#y6r72*PZuY-H$vHyZOdZW3zoB5@tTr$l zOMX6c3o|Z076^|e9}5?!DG!So*pi2Z$JC6Si-XUU-He_8ZxAZ3HZV;vwg3C7enVNn zpe(q!P0jfrW-OMx<~%I0`MFq3Eg(EB7UrCm=A2+K1kA z)!x+2(#h2Urd~FV7EYefe|2fvI6ySqOnB?hRt}CodMwNZq+yt*FmbbSFtviPIXhbY(ee9W1Yp~NvDWmrcEFJTXou}aK*AMb z>gMFC>EvWDO!IrSRKFqrP%0{+ztlxQ(aHRefqxJ~EPiX;UpgmlYQ^@)qY&GFNBqAb zX;?dXI{tsd`4{OwQN&!`Je^$aR9sceY$4`u|2@usMf^`Bb(pn-y19DG{U0{<|DY54 zQ($FbW1U>R|2Dq{#O2SYKTVRo%^$3yqWZ%O2$-7x$$qG*2gKr!BY^So&n|OoQ%5TZ z%-;T`Z2xGt`7Z?7l#9chiLJP;OcehUs>J~MuPKF&X-@1N*U zCrdX^Q&)(X6-)+T=L}P>KhBwo@h|y%@$akgw1)f^E-(lCZzBli(q!io;NlU0iQu27 zO(n$k+rs{1w?e;dkdl(X-}xc*+eQh<{T4(GcV}mN8;I+_^XVUQ^Z!EkxAA|;=>KW> z-^uHp&2U()w~aRwOle0uCz%QKb$nk*5O4Ns4KDE%vv2zO$I~ro6pBRY-wq?+N8Im?ox) z#+U%*rsxu^)8F}NDa0Jj%FA@OrhcSVi{z41;DG2I8KxI&eH~6#)Gc_PNz)Io)I+D@ z00WSS6%W&M4h#(W+r7?yxfr)s9adExb_ZEeD(8ltmie4@_@2EFSUbCC-2lHYuq`it z;J{gl>@^}w0AAS)IyNHvE6%yoi=H7C-T<)y7|pc+ghT9AqONy0KoGgBB+%d?6u^Sp zJ9@r{Frl|2{$MxJFbv4ESrk@%XAGZ5{(}PO72@Ke4&c0OOAlRz+;5{)C^n50n5`(JMf})!Z8HK3?kV4@~ah@^TgI zLZ>kCfiepr>IjGL^7Tj~E*XFTlI44aL6_U$n{TmToX5C)yR*@R?Jn!{M7cTk1K6%aVgYOT56%47PUsTYO#)GdVMJq^{4b-ovOdJtm& ziB(9;KQ?(Cymr$RId($+UC4=4lP#Nu3N{F_vc4?Uo!uPq;G=TYENmKU%K+c9(@mo}6sO`)XOsT_++Dr}DrDf$A znPilqRd#F#?P)!EFAjsBIy#!e)$7f0*Y{f}ax>E@Ztrr0=@Ax-qh)kbv zuIZy@67xwfIj2?AT=l0R3p~W;lbZEb2E5vHs!lw)o03>wsk#C)q&Vi)xFKw9CrVCz zkJar7NFwt+#!rnC8xP@c*hT$fL&xE~c1<9I(y|*?XU&(GKTDpr8S=}AgM>xBzAtm$ zZgt+Gzlh-=$BewVr1TT{PD=~VD^_MOK>4dgM5bAN43+x4s!=3}vi0m0`p;x+pz-Z+ z=6S*|Rf*2Z{1@o>Me$rG z=F@(qQ&Pjzb9p%P&lB@FL9^HHe&4ZPDHTKFuyNY&$(;r(PTP^i+uGDs5V8U{fWOXF zoS3 zL{fOStkA-XgTcjQ{P?Z$qM0q=IRe$YiJkM#jwh=`IdWw=-<-&ik+~W$FPh~)2=cH>fz^?f(pkIwx0f1$Umf z)e#a*LT%4+F(c3T{87!#?}G6D9gR|Ed_Pn+4F=-(p-E(qX7{6l-fDr(IkNjroN0g9l(W2;N0OC zFz%5_hFLT3z7&Ne{>VwPSCI2wlm&Z2MbmR3tW=gc@Uys%p3mDJ&Wa^D%DrN`vzkG3Mm!Qw?iJRpn z&R3nNQ(+|^Z2Yz1>oVxR_91dhr6!+kD~2wt>E=rh8U4V3XyW3hwS*pG$Eqq*sBg&# zXiA^NytCNm-rrP8jUZ^via6qxh#*>cE&SP7l!-nMj4n8eDy-{aIo7Qt3h9@<(^=PN zW`HOMg#>FRoawnI*`Szd30)xaKohnTV7dU9HVpY1B~>VqYnS2h*b9X*{I)Qj;38aVZ`UVz5@~7-Wx_$&U z+;@ha@~*Fu;7GgjOFqYXyP{wYd)|^D-O5H5lm3fuIjq{IROW6>SvEW zWB~-IR`Av|)VeG|2~Z+Umv{^YPwwtVXYdCGrPG7FGLd;XX1;RvWM{o8nr2X@N>N03 zJGt;>-x{BKy@j=^av88^bWQ?b!g)*v2;)W5|H?ellM{2xhysNi_4MiwT+(v!^B_qh zxCD970j@3KU-A}BLdR=i!YeWDG3XqW39}_QAW7CtDGus2^F*{I9;J6oDXftQB1L7x zZ?VmU-YQGXaWTeXaPeJB!^a;10bH-e=(B<5$Ihw0wA$ckymE+^-vdfxINbc&J*r+V zl7v)9(&8}200-TR5IyV}WBk~ZUgu$pIl~p#E`7cfWquZJN(^QpZ8*uBwMCp*?9bBN zZ^0~<-C3XKVKyFu2gVeL^P+>L;NYAMk+qhVd3g^sQ7^pEC$tC_dzs{@{E7XOfRTE3iYV3wp! zlJN2sAe)ma((AsR*Ezqjr;mF(m|(iId#F2ba4VWW_c=;_9cw=#LzW(IettO&yX%WJ zMY`g%jABHsMuV#L-NR>9%*JRxROaUKBsUukCjyLujFf;+MxZLuAcU|a<&r6D?qG7! zIXB{ncxS#DC^C(SRY}y?36PkUF$TBEJd~$li?7KA%AyJ|FQkncG^6^~3Tl89sxpW8 zl9d;mLG93HecJ8X_h%(Q*8k3&Cd7T(5m-VolR1NBL!#31#RA5pgcL z4W8z;LBU!T;iuZzLHN$n>p)d}#PVXf{!XiS;RFfi)f9a7mNMq-#s&$GVYXkq2sD}6Tt*2K`zzza%Tx2n|(h6n~>m(JSOEYZg^kA}Wzg+5D= zNgDf5TU(C-&{>)f8|24-O#L>toJoU>Ka9b6ii-;}^u9K(*S$p*b6^n>td+@p zFrtC;viA>6zdc_OS-pnGRO-}KC6r111U6PPN6UdVd@{js;BdeCL=SX4pAmKSa@=!0 z+sPMjl&SyQZi_eTouD5?VQ&@!YIV49eb+H=G`OB20wig0K04V4%Q_+qdYs3!o{4{W znS%?^;{67nPfR`}$D6G-(ZQpHHl~Fp4gyiDmTA>=G?P5sZ{PB{DJ?|?Rg|Mj%$a5o zHtkWT$Zise+`@Tf73#2Vy}=5IOHaM?piwukWwebGxJr)Dsz4lc&o4(!O-)T4fk0$y z>*KEDlt9!LqomPPW?@BLQK3ZDi>1GZlJ_Kx2!?>7I*{hwg}E}7mYZDgvfdbWm2aiS zbVprEV2MPGjEsQA2UOwkfi(_jg5hS^#?bK%K1=~jkr$}whLK0!CceA3_gEq^GPype z2;z(u>sG5bMi%O2!CjWj&tTt4+i^w21{{r|!JTNK1wMtdZN6N))mp#yTQ6CQOfQq` z!b0nOC_=uts}=&8p@*O?`|jyJTpHi3Vi;G+s!H!jKc;lb|} zsaJ2Fb^hdzjo-yV4PW=6a9lO$Z??+mAG>xRRaTLh{cOSmb0b<>j_c)4RB$E`cZ|Rv z#;@LN$s|zW#s!I<^9_FUfIG6YBc>#m@&T1vFA(PV?2_ep{{m|9@_>0VkZ~m1r@HF) zCVE{Af#>Fj*t0IlXfDU`8Vp5RLSdPlB7*QVJ#XH#ZjBh<|D<4ew+i1S_zA3X<~=8f z6BpJ>#*dSiH<1-ck+XNL!!z=!=F=zC0T8fj^MMSvw#mTnZ~%pv?`GZSYmXz52awlL zjX+UJQS|k!KWoD{@xb@HoKA8P56O;^{*l`r?GDr+E^36+z!f`}Geb`#)+TIV4nuBp zeFxm!<)m#x&1=Tv7J&=Cf~ozEi_=R*d!hu9Yp!p+jiPQZ9fpR zRlBr1?@od@#=&%YAUHGhK7Nqs7jW0jM`J6ESKn{n!c=#|nONjHCl|nem>F{Hp}S=m zWK(a1jDUP3?}UR-_ZFqh`r+KBL=(98)lMUiCPlu-UHBFUz|+_`$+IMk8qQ7t3%P`K zbA1Y&3=D=?F4QRJtwL4eezS#c&cOMS*CHQ#M;&nSUc+o3Ev2??4I9FTW9%sPA z3A_G4hre3}p@vhgD_{jw?$!Oebi_VCn}K^<>0HogQ~pf2)(yS9d>Qx958_RdqGx`V zqXA%4kV&8+#5h|>>?m6QDo+xD)8vdGUO3zHeOMlQf^B@F8+_%@YQaZ_imgqv{yhc4 z7av=JH^m4GEF}z&+us`5aZTDb<};zX8A=GGqZ>4h-@>9|L_cD2p=aTHCuXEm)(9~@ z>)vF^40I1V#wXq?tb7@jKU6CO_to){q|_cJWsYyoLtW~Ye3S?4>zUIjhmGdVQ+?-j>3Ddb8ls8n=@|kR?#dHQBEnwQ-vy6^0JqV1CxFtqXcUJ8fRmMs5l~ z30iFfbB4=N){7jkD~dV(3m)jP!KYmK*q8}I(#h#R)CZ;Y_ z=*7{}(z3`c4N%HMl`fg3JafC;Qt%}_Bt0}e`f-f~DQq?PrsUO-yLl?njm)Bqj)RQ2oq z{K5U8uf5E|l~LnO)Or&u;hv?>C#+&f_qEW>A;tΞjt^nZue#jPa;EM)dLo4ZiqL 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 tK#T@vN4n;z#ev@h@F%Wi9+)2c{{Y6V` literal 0 HcmV?d00001 diff --git a/assets-fx/example.png b/assets-fx/example.png new file mode 100644 index 0000000000000000000000000000000000000000..b26ba9ac37f37f0bbc06db263613c33184d47a12 GIT binary patch literal 3569 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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..1813211 --- /dev/null +++ b/src/main.c @@ -0,0 +1,50 @@ +#include +#include + +static void draw_menu(int selected) +{ + extern bopti_image_t img_logo; + extern bopti_image_t img_bouton; + extern bopti_image_t img_bouton_selection; + + dclear(C_RGB(17,9,2)); + dimage(72,20, &img_logo); + dimage(95,100, &img_bouton); + + for(int i = 1; i <= 2; i++) + { + int x = 95; + int y = 100 + 45*(i-1); + + if (i==selected) + dimage(x,y, &img_bouton_selection); + else + dimage(x,y, &img_bouton); + + if (i==1) + dtext(172, 115, C_WHITE, "Jouer"); + else + dtext(155, 160, C_WHITE, "Parametres"); + } +} + +int main(void) +{ + int selected = 1; + int key = 0; + + while (key != KEY_EXE) + { + draw_menu(selected); + dupdate(); + + key = getkey().key; + + if (key == KEY_UP && selected == 2) + selected--; + if (key == KEY_DOWN && selected == 1) + selected++; + } + + return 1; +}