From a0a5ed828b3f4de71ead131baf277ee381e7d811 Mon Sep 17 00:00:00 2001 From: Alice Date: Mon, 16 Mar 2020 22:04:55 +0100 Subject: [PATCH] First commit Let's make a gamu~ --- .gitignore | 1 + Makefile | 194 ++++++++++++++++++++++++++++++++++++++ assets-cg/icon-cg-sel.png | Bin 0 -> 8388 bytes assets-cg/icon-cg-uns.png | Bin 0 -> 4629 bytes assets-fx/icon-fx.png | Bin 0 -> 7429 bytes assets-fx/img/case.png | Bin 0 -> 475 bytes assets-fx/img/grid.png | Bin 0 -> 504 bytes cpc26.g1a | Bin 0 -> 18808 bytes project.cfg | 85 +++++++++++++++++ src/main.c | 13 +++ 10 files changed, 293 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 assets-cg/icon-cg-sel.png create mode 100644 assets-cg/icon-cg-uns.png create mode 100644 assets-fx/icon-fx.png create mode 100644 assets-fx/img/case.png create mode 100644 assets-fx/img/grid.png create mode 100644 cpc26.g1a create mode 100644 project.cfg create mode 100644 src/main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bbd56c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build*/** 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/icon-cg-sel.png b/assets-cg/icon-cg-sel.png new file mode 100644 index 0000000000000000000000000000000000000000..7137b504cfd44f62f3105ce7a203b9100a557d0f GIT binary patch literal 8388 zcmV;#AUofQP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3*tk|Vd0g#Y6da|G@v64l$yCcuJ9tgkoOi)8y<5h0 zcieW1_vt2UjDGvVyZ6(Fd##4zo1ei37ouM7_!3%Jp#~qO-ywu(g8!_=-Fe%cZ@S9N z%WnEW4;_4 z@L;-Tu57T|@eDDN`-!b^10Zl;;{EZlD@$JUH%cONCl=!ZF0k2!2klNHL|9 zQ%NZiciMTEU3c64 z5Nju#c+$zIoO;^nAFsW<`j^*#;5GO1n!ldXedXgdu9l*K?hsBmljJiz=A*;oMIIoa zy?kb?i_yz-@|kU(tVo_kCi!ML+l|Y(FmC75aUb9PcMI=#CHL1uG9-4B!X9bvapo>Qw^UmWW1KpM1rm2W zBb9L?J7WWrNkTtqr_|G2-nfu!&&}<2>WU8Itb8C9mf_>7qcUo4Vdmmi?~RDSIX&%i z*vshUEVAt!Yx*e3+kv6y4zYL4Q)e0n=cO7>TRsO{+Fq%xBPeMWj{uNEky`UQ+eOAV zua6qP%Oc$R{&cL7!r3{UQV+&U<+OCxoXhRQ$g!NznSFb^{4{RXU&mhK^o%8s(t@{U zxiWn_1J9m02V7HDVr1^{;S9WQV>WST_+b+?#ihHVXC(bbl>AJ=KWj5}iQf}5@4Cx2 zr?kMT`{J{+cg}Ugtb3Q%n<8WuxNm=)I%`BQ{-TQf~cqaHG-5gOM-+4lR&oAoPgdT296j zLk|S4xbDE5$?N)V)8fN26_^!cnaA+{iI?ue44)yn2xs58Ck@XeNqZ%k8&}eg(Vr!o zW;dUdyllYu5Dg*snEa&L(-Sz6*%CQ$p11)`61qS}Uu%$FYjx9Wl}!$Sc5ro>0rY;C}w-tpnfLfZkn6T}I*ky3*x9OzTAJnQ=!IuY~LtT0}A`2nttnu-%96T69D5D|Xu&bAlIy*sSwc4`h04{;oO!p@c8-a9}u zE2IepE1yCNNNYD+CW!s6kC|8l= z7^EFfqzY;w2Bw63p-_C4wx3uKNSdcx@Eba94iq0DE3*o`hTuM=)hqF`6gUG-pqMe& z>FFAoC%vzI9DD$>?aY(o^(6UqpM|9f2tAk!iN%vfkH(k_iR+-Q&My|0W8rvxD#6|ymKw?N-8Mw5GP9cJjBo4k95X5I6DlR_jaf^?}NZ;E4myCA8 z5)xkdEca5t=N4S_9(6C27|tPSHUGh}0niq?n$k5+yyNUrQ4qM`W&ikPjrH5`BO-PH ztJrNS_|5$Nt&v1Z4PS?!ZO9dsh|UC2w|?IhESMJ<30iPiNFk!-@X^H3XJEFHI@%72 zv6H?21lpej-(B)+iMQB!O|v(H3r@ak2&e_U9|Vpd%)LK)KDgewA0*@j(xy%j4q2Gw zkY)b!VOsaqj&?(I&+&4CQe@c|hTJxULKM2$sxlY~*&Z>8w-wtFKosXHMLGA7$ttOpUAo7yAH z42TS<%Z&n8qjL<92jn9o;|ADB+*wwsy&|jtmWQlE=r}P8w^6_(4$%z`O-nh7c4DZ2 z*IGn(=8jP>gj$qo1@e8pj?P@BKo%^-8ahZ%nL$b-(MfEqj(VRZQ`EqTlCTgMQ^BD} z`5A4Efr*=>GxUd>8}aXAQaulPhe^^Qc%>sF5}{{5y_uIenM%$M*_8v)vdB zep1pl6brQqW+o%B$&@StJsZD-fbJQvQOx9i4fe!@>IDd@HiyswcZs7I3vvTb&RP@_ zRIb!PlLTAE>K->?c@zWD4h$niEuxBAYI(aUeKM*mY$FZVuU)|B6=Fj^_T&*%xl1oe?FV`FZ3o*6)0^Z3kHQ|iQS&GH(tsZ9}aIZB^dx>G$mI?@!5o!+&O#-I#^{}Pzy2yBN> zsRmDxyxq=FQx+^}BUBBwoMMl|&f^Lw2p^)PK1Ga;)udd|lH^!a#3PQ|T8(J-(Hg}| z>{NJ>|JddO9D5@Ba67nGK{ORJ)R1c(N}r19urKbT=B9$ciN$q8Sd;uDS{ri-Wc^gr z3;FLYLIxi=2rTuc=SZ;NKN0+SZzPSm>8;GeJ)P~8$~=Wl5Xme#R3w*c$={0hm2K${ z*#`KNZ3)>#q3s)K%c>h7v$qOsNpgaaf&q2A9TH`RR*1Ld34;l>QXE~}Gk*tsp=!x> zPckp`Hn7VUYRyWtQ+_X12FoYuduj%%BWmDQ2~>1B(r|#k`(SK~H3Auff>_A4)MjoT zaf~dDuQgh!xji8QCSq%jYQRw*s2Z8K+)(`z2Z}wXzNDA`a0?qxi>dw_JiD|}wa>bR+M)bFPM|cKUkJU#GN2P8K|LLKh$@T}84-bgdn@nJ|8ekC z$IjF>_>?tA@_U(er6Tt%+;_T^lcP){k`9=P`1KN1xoqAMrv=%fT1Dz@5HG&8yc(%v zP!kDzPimT!k;hd8kn%N5_%RIQ#P){~aIdj2kciWJNLyZ}3 z?yxo%3BIoCvfm&JxhSlS%c`Z6^4i?hp;EHTEGht@%ZPwmRk6(u;Aj*bb;rPN5}8&7 z6Q2O}ic)S`r?O6J97!Y!ZCE5*3T9}&BlSQRbO}PaClqJPwGL1CVZd9JuL&n2HUPGH zi9YvMR1o@X&P8WR8FJBve2X36YzoHI&GOQUz`0bJKdef!ANk=n(X)oa#H*`k;6>mP z{dj~vSwxc|Jwae%Vpw6iPI(6X7uD{bFe~bzpgoov8U#nC;4;+H#5Iz~Q?89Gok8pj zP&iQPHk$zJ%@RRb_mZGRDsz;A-$$NgR&fT%r_@PBjkVpWNeNR*PRdXWgp|PV6$0jS z7svrIFaClvGa*}F+6!toU$Fa)y2?&+4N!A~V&lT+@eX{%(nufSTOtr%=xeR{BLH9g z)w#z$0$cS1K#1EzA)k?(CrbWl`zTwrjl4M&eO>(vtWHh;l0416%hGnDe+x7ZBB6WK z-pOcKst8H8ijLgNNO$frxAbOIe<@SlJA?(IGfKE$0LMKl%vMl`D9xh*;7YLns;4Cz z;ort){gs5R*$ItZV{JYm#VsF%+q@+Z0y9)O7=p2-NQb`Usrf~p${Wa-rp7tJC|&ZS zivRMCE>hq6@sqI*@|zCk!53I}OxvNDpkbzZ?T9{A2U0JN`J8}e0+`xZxb4!m><)&s zK)h(lLx)&sPBM6J(gP3T8)}Pt?Yd{%FLsPS?1&}I7dzS)I}#zv0#)u#RRso|4J&H3Vx{{vw#v`Cbs0;P0PjFNezreu^`=a(Y#ar|Hg{NrqB2jfK8Qg>a zeZXhiNu#(malTd^aX1>!YJsm76vKCAj9L0rV4ljTwUkqR(|s?u3JrJ4yrjr&R}TFC&3AMV8+_dkAr!6SQY^PY z-C*@=)N9V{5JNTN3$q>;W#n*W8T8ulD&Vrw=z^N4Hny7mN1Ya`Q}`*OaqprcaMj8P z2=<-f4s>r&FBc;_AcDn(&*B`_egmoEYoMa0(Ec_WrkWJTUq+B1g0Be0F}-+NZS;2C%mEo#E2+j7?_w6@Jd<8Q_!`wJwGk4xstd^g}ql=^&M zk;R;Qdi}R(@po#7<*+3CV76ClG%+*Or6b@V^8|Fymkr3fcq;N(h#oa`E>2KE#(C;1 z)@tCS&tmQGLt2Hsx)ZaFp<+P8k{FCTwBU(jUtTxKQL3T_1(P~bYTR+blW?BMiVJ&}-L&kxXq{CIqRhMl0#U=ZFjx_cUSGMtT*;5OXOQO}KIXsdS@NJK z@(kI+!dfs?0pqd8P^ZCC23$V&E0I+N)=}S$2U42wqWV*L-E$i>G?X3cb2Z5g=`wrXzhcLjL z6@j}?@*@)nY7^Ci%+yH@dhY1p)ai>Q)F|L=Ts2sVQhcq{# zE5n6a4J=kfiCIPFh%4PMX{Zu`A|6?UT+U1#MMczTqIAl^q9_V!gr)->N(i7VRrN>0 zfQd=YZdK_u>IQuc1-Xye8* z4hD_quVfhq*uY$E|0E!mmarK6}x$Od&o7rF?Y zN!^TbCt&Lck)o4W9YX5pH|XS-{LeK?lqqhYRsJR)4cb%z@qAS%RF6y5QA;{xMWNkz z@N6&Nq9{C(H09P=bbch6p^kz91rjF8Q`$!rvKm@C`<33T@pcRr0+s8keo)5Zk~9QJ z^K>?roX1IK#;gXubRtg32m;a?M^wZSu{h`33j(pa%faiAzpH_u5s1S6qHcqQ!35VB@R*>|0#t*o}i6i&^V z>rRExD^@4q!>jAhQcNnX#hs~Tx0(ftT>e9Z)ePi9JIZLwuK*U_>|g;mQ}A6A9M$zy zK)vFAeZ2(%iXo*B_iZjp|Ke4NZLOG%cOqJaHkb3Ja2BFb5<;qwMzC35(t+W%8A{j( zwZR7+G@xB|8Y3uTX7_YS(V-c~Hn`@Vw=aFyM!uyKRl%(&Yo*rx1n1nxz`y* z7L`iT*A%E3Z_6xrDU=9^fw6$MIcQ`sFBNJm_D=FN74G-&N3EDDN8Uy%r4zBC&R|rg z2&%T zzFZ5p#_ z*ys}gGmZ~%ehn`l#hEp9?%C;Y?&GsfFo8IJj|OwIY5=IbiU1VO&YhGq8aO|_#66T3 z6@bD=#KwLTGekBRY2F@S{yjN*$U2s@6Lnw=YjOihemJurX?Us!Z5eLN*?^NdM9 zx4(b)!H2ikip>Vy9Z!mG){}$rq(I|qGMQvqCI^$rr1|rCG4A)ea*!8eEcEra?&1E) zb6-F6f~C~}A4V?{*YRZY&?kQ=_{$%@bfG`VcN{t|@_w(M7kSI66ytHP+bzaz?{I6B z?_2F}jdCpdWjm|)KE1d7&v*ZHx{%{$fEf)6t1%zI}MS`TgzBOEdRO$((HqE{BT;M-Cs#rcK?%yHee%uSPbTRqn;lZ)(`%Y0n-*!Qy!ytQd+d?R^oJOoD;rZ? zOgZ!Ajg@}CJxwCM{PF$w0X%!|oIB9R{`sv@e)rDrN}~Pp z7mG#5fuc>N=lpYJM32f5IY`>Y>+jr1{_6T$Z@+Tk#psOYh(iQ`99+J7Z7UZB3dUg8l6*T zpW7`{_FpUo1pv^w^6^x!Je=R1rZkw64%@U3nq^8`qx{bwZU`7(apZ%Wzl}^r`yj`W zyLaw5+Yuwu_L6i!AKbjDHD%$iBG0cMx)^B6m5r&yDRY_6<6g~=&Brfw5s+y_=Bm6c zRXs(OR2awtM0Q=HeSGUFL6)o$X<1}i!g>maS+Yi?W$?Cy^%PY$sjB&pkR>l!J%v>H zIty09p745#&v-K31M$SxQ#4uFnNQ_<<}9f!&$^GOEjjNqztApUoWfis%Dfx%S*AEe zuWuyQk~yQI(|dB_l)SU@Fx#g?m1-?naQT-xRAjwLCwmg&lrgdqR{qjEsza4>Eg8yi z?q^5;-F=F?lxO|rj#F%B^*`DEfAkK1vhp2Wd}Bt>>8qH}L0UU<;2Zl#TdNoy9DTL3 zd`^m9)+;7O%c->N0+iQiyI5W6jkb%0)8wzcZ++b%bPpVTu<~gESt%t#kHS`ruYkX! zNBk56pd-4E90bcSu4U9y%hswiLGQHWQ@R23Yu~4Af4y{bW1v_Mr-LW zo>e_+?niekr9Pq!TQOKiw_N&d>2fW5QyCWJKaa6;UjsF)Ni&n`vRA-8x8ifte zLY8RWg1az92m)IIAxt6FXze~zUf+O{9oM>DM(=R}#WzaWmUW4XUhC#?igz zatY={8+ycTg4&6o0Wv{Dbp^QJ*AdK8+R!bywk<-lyF|xDw3-L37l3qttF|iakP67| z79^M=gA>wi=;_j*QxLgF3nOY`Jv$;bv1#+6hE8}wmd%oSnu4>Q}Npw%IlbD<3%j&Do%;a$3JaQa0Bv3 zrrG)X&kP6vhKzwXWp`!}+L3;gl=3|kiLNc(ko#wC$O{dPKX!5hzriCRTNM0Xb}|J{ ztERZ5=52RE#DvdzKp1j~$k4x|-VW0u>9RJUj5z6GeNLerX{n;xc9DQ4p3Aj9TCO(! zlun^FO#~4!F$Y0_2vu=GxenJTQgY9g1(}L3L#?%0D{+Z!IO;o`4b8yBMkLN?XfZ^MDJs}4CvJnF76|uuA?%|~$0<6ZtB23{_ z?!&cx$(S8CR%^*?sF=d6cAg^<@mLD<-X~?S@*{g6$ru7wIs0K$J*d}Hbds&!T@vWF zBU{N2eF#U!>!?Wx3aPB8?vg3x_>K>dom#6VS_-Y&c3+QE5bj_%sVrHCJYfk-tu9fJ zK%`e%Y*j8WD8K66z^E=USW+)_2n1 zb-=2C5ak(@)#U*@b%?o}{8~kVuKRJdo ag#Q8hHNm}t`+-sb0000 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 LNkvXXu0mjfMjhGA literal 0 HcmV?d00001 diff --git a/assets-fx/icon-fx.png b/assets-fx/icon-fx.png new file mode 100644 index 0000000000000000000000000000000000000000..c92f12afab0af9f7b3d8e2bec76a1dc5cc9c08a1 GIT binary patch literal 7429 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 literal 0 HcmV?d00001 diff --git a/assets-fx/img/grid.png b/assets-fx/img/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..80000f2338cb9b0dc275330428b236bae8b5d565 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^mLSZ*0wmQ0z4;gz7zHw&odZ0bofQg-^3yVNQW+Q| zrY0vO{FyL$PV||i0|zF|4i9=F_e4TcP;%*ke=UtO9UB^_J5D>OWw>+40YilY?TqR_ z%6c0GUE;5?&TNgA4LdMxQq&xtCFdCmor)X-IhmOk^G(PNiwj~%TF!7&>87INIfpXV z3Az&|&1M%#e#5XSG^i-p;f<-oHt#&YOrtA46S6CUK07r#K621G{NUV!lMhY{99VE* z!jXVe6HZPz9B^m>_ma;IN_sqLJj)zzv7hlz^+?fR`gEr;Mafy!+0fZ&!ns6`qlx=O zZv0_bu+q~Zbf&{q1>w(9vyxmaiAg( zPZ!6Kh{JC$D>5-C@Gx&Y^#8w&2$M|H$~mvU7zKH{l}-I~f9mFUx_htw+xXck?C`Uo kn4*(QcRWF%ate1ctett&_H=r>1JFzcPgg&ebxsLQ0J0g!AOHXW literal 0 HcmV?d00001 diff --git a/cpc26.g1a b/cpc26.g1a new file mode 100644 index 0000000000000000000000000000000000000000..c1f80621ccc522d0ab55b6d3024cb1782ef80175 GIT binary patch literal 18808 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 K9>?#{^S=P8p^Ys7 literal 0 HcmV?d00001 diff --git a/project.cfg b/project.cfg new file mode 100644 index 0000000..c616fb0 --- /dev/null +++ b/project.cfg @@ -0,0 +1,85 @@ +#--- +# fxSDK project configuration file for cpc26 +#--- + +# Project name, should be at most 8 bytes long. +# (You can also specify NAME_G1A or NAME_G3A to override individually.) +NAME := cpc26 + +# Internal name, should be '@' followed by at most 7 uppercase letters. +# WARNING: If this convention is not followed, the add-in might not appear in +# the main menu of the calculator! +INTERNAL := @TWOSIX + +# Output file name. The default is to take , 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..4c4e20d --- /dev/null +++ b/src/main.c @@ -0,0 +1,13 @@ +#include +#include + +int main(void) +{ + extern image_t img_grid; + dclear(C_WHITE); + dimage(0, 0, &img_grid); + dupdate(); + + getkey(); + return 1; +}