From b44c163d047f272e4061cb851c4c014124921c8a Mon Sep 17 00:00:00 2001 From: Christophe Meneboeuf Date: Sat, 5 Nov 2016 21:38:25 +0100 Subject: [PATCH] Spatial reorganisation --- .gitignore | 0 COPYING | 0 Makefile | 15 +++++++++------ README.md | 0 benchs.txt | 0 disk.dsk | Bin 143360 -> 143360 bytes add-to-disk.sh => scripts/add-to-disk.sh | 0 file_io.c => src/file_io.c | 0 file_io.h => src/file_io.h | 0 gfx.asm => src/gfx.asm | 0 gfx.h => src/gfx.h | 0 gol_apple2.c => src/gol_apple2.c | 0 .../gol_apple2_optimized.asm | 0 gol_linux.c => src/gol_linux.c | 0 mli.asm => src/mli.asm | 0 rnd_colors.asm => src/rnd_colors.asm | 0 rnd_colors.h => src/rnd_colors.h | 0 17 files changed, 9 insertions(+), 6 deletions(-) mode change 100755 => 100644 .gitignore mode change 100755 => 100644 COPYING mode change 100755 => 100644 Makefile mode change 100755 => 100644 README.md mode change 100755 => 100644 benchs.txt mode change 100755 => 100644 disk.dsk rename add-to-disk.sh => scripts/add-to-disk.sh (100%) mode change 100755 => 100644 rename file_io.c => src/file_io.c (100%) mode change 100755 => 100644 rename file_io.h => src/file_io.h (100%) mode change 100755 => 100644 rename gfx.asm => src/gfx.asm (100%) mode change 100755 => 100644 rename gfx.h => src/gfx.h (100%) mode change 100755 => 100644 rename gol_apple2.c => src/gol_apple2.c (100%) mode change 100755 => 100644 rename gol_apple2_optimized.asm => src/gol_apple2_optimized.asm (100%) mode change 100755 => 100644 rename gol_linux.c => src/gol_linux.c (100%) mode change 100755 => 100644 rename mli.asm => src/mli.asm (100%) mode change 100755 => 100644 rename rnd_colors.asm => src/rnd_colors.asm (100%) mode change 100755 => 100644 rename rnd_colors.h => src/rnd_colors.h (100%) mode change 100755 => 100644 diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 diff --git a/COPYING b/COPYING old mode 100755 new mode 100644 diff --git a/Makefile b/Makefile old mode 100755 new mode 100644 index e5ef638..7c5558a --- a/Makefile +++ b/Makefile @@ -1,16 +1,19 @@ LINUX_CC := cc -LINUX_SRC := gol_linux.c +LINUX_SRC := src/gol_linux.c LINUX_CFLAGS := -Wall -Wextra -pedantic-errors -ansi -std=gnu99 -lncurses -lm -O3 -LINUX_OUT := gol.out +LINUX_OUT := bin/gol.out APPLE2_CL := $(CC65_HOME)/bin/cl65 APPLE2_CC := $(CC65_HOME)/bin/cc65 -APPLE2_SRC := gol_apple2.c gol_apple2_optimized.asm gfx.asm rnd_colors.asm file_io.c mli.asm +APPLE2_SRC := src/gol_apple2.c src/gol_apple2_optimized.asm src/gfx.asm src/rnd_colors.asm src/file_io.c src/mli.asm APPLE2_MAP := gol_apple2.map APPLE2_CFLAGS := -Oirs -v -t apple2 -APPLE2_OUT := gol.a2 +APPLE2_OUT := bin/gol.a2 -all: linux apple2 +all: directories linux apple2 + +directories: + mkdir -p bin linux: $(LINUX_SRC) $(LINUX_CC) -o $(LINUX_OUT) $? $(LINUX_CFLAGS) @@ -22,4 +25,4 @@ apple2-asm: $(APPLE2_SRC) $(APPLE2_CC) $(APPLE2_CFLAGS) -r -T $? clean: $(SRC) - rm -f $(LINUX_OUT) $(APPLE2_OUT) $(APPLE2_MAP) *.o *.s gmon.out + rm -f $(APPLE2_MAP) src/*.o src/*.s gmon.out & rm -r bin/ diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/benchs.txt b/benchs.txt old mode 100755 new mode 100644 diff --git a/disk.dsk b/disk.dsk old mode 100755 new mode 100644 index fa877ea8c9a0a4e153a89d7965e76b99f8bf949a..29b6ae2683c403dec3aec2ffe398458e7da67a6d GIT binary patch delta 7560 zcmai33wRV&mcCV;?sRwFfk3z9ar1zr0>&f=1f-Ezi3BJTAb>n{Y?VjY{Q%h=XYjGp zO-RR1C)ISP0t5vuOFEkhbWCK`FT0Z=sKIm;EMR8#;p%3`6>&$fQ5Rn`X3wqa&I6g< zd`;cgx#ynqpL5SSRX9hC&JkmeS*Jq?olekwZE)z(QUh91jpFmr$1n+hG%8$H!xhz* zZ>TIPQD+Q~q1%z&F-A5|BYPB4q;m^5D_g_WtS!2)yjG<`f7$_LuW9`}Bl?&!lD^80WU*w_(vXiDG^s&we9ib+!aOSw2#e@zSYHuT_ z@IoB3aGY|kM!E4eloJ&%)yN+Ddn%izr9{@jWu@ZJr^u_Md~D1SY5aP&gk&9mt^gJ! z6g*cD(&70ytmBrYU|kBVA+9VHAIY@yb8X(cZ6ej{sBqMIfw99*?LPFRp730OJxGpUU0aud} zLW+*tkrJYysZR;f&>T$R45^Vll0jaIJ275w1cWHwp~8oMZiW%9VTm`G@YBhF=sN|W zO1u~YgKh#RMV560YFJpSEnG{9igH7m4-%=|cVJa8kZ;l??l+BXU!!f;r8<}SR($N0+mos!}d)1^f>t3SIKxos%!=(>Y6HttD(__cW0`? z1{ykCz(kJGYzREfIFw0rBA$xx&FTUifeD=fXK$5F8_jY=ACMHIxQ%Q${6L54UFFNylf~cJ_L-UBGiJBfs;^v{g zky(DH@~uW7ZuL6}J8_%eDQ}6uQb*dmr-|mFzPx-wD?6fyJw%rNZ5*cv_5kaJL_#00 z(MQSkw~*fgYm&HQ3>jeYL!yc@_|60?Zz5K9T+HFpG#kLG>ca*wPyJL?cG~ac@)9O= zMZ*|dfTzP8y=W8I!tK+p-NdtYVB%ur2JFBMxf6tQfOIW@=}_N&nu0n|j3X!y^{pA7 zAqae-qC4hdlMn#M{}*t%3HSjZApMxJ=94foJuxya#_LF+PD~UXnl%?ieaa$Jd!4G* zqCTRkx^-22WSkFMffbC^SfO5!iDR-3tT)6H)L>yV>5$vuR6D9rD(5Q8PD<1}{LVT8 ziylDtCQSev!oZ^ms_(w@u6C1dg4Rtp*a-CS&1KL0*uj4U>bpkR)K^a55#FRWuH+| zC%WBchbB@4%vl<^t#M>LZi@f=V9gF=2fwdw?sfh@2S?7`s#!U5uvxY8SU`v*1=U5g zqyVXa(k_0vITHD44O-Gbk7!vWHhW`)(8G8~XLaeD?>4DQ*0G?N6zh><|OsiIyD z7gNQUNZ0_IfPo1g0Q0O_b&!ak#HNWl2r5ZYi;fvq3+`%yOBYsM# z3fhdg&R=Q)DPgi42kalf;s-BZaDcHhh**l9dpPzoct}2b5AgY;@Y3*I0x*c zxA9NWUY^<;GrY6|qSwfH$MPk{!6%gCKDYL=r^zX96GnEnmaMTL_vjBGt) z4J zC}O)yZGbtHtKD~#j=WSdV8{c{WV%`!dD3_qo1qa_oZP(1x0T^`u)a+8P8UIpSt#nBi}tg?l9 zUD=A&{D&6r zM;5@2|91;UXAlC^I@5V4E01>Bq3H^na6>jskukXI;VXv~`U-ig5g~#0LR^BHolBbz zIFmXPf{s>ytDz%SrJ($GI-zET(x284MIHI-&(a2hc=D!{85ATFH$7d-7z;$Nf0)6%9xPdC}qWQTMw=noBeF5a6f>dA3K zlaEu~CR70#GpyqVfFF2K=>G8`R7lHo+}q?JQX++?iE+eNI>5&XWyIyf({9fC7I#?XXC;=H=d)~XITL6r`;2zA_0Z=I*@J#oNx>CX?qAbM*Fd@> z>F{*bHy*$^?hyV=zi9n{7s#! zt?>|viH94Hkfy!ysEkrO{p~~W>uu*(Fyy(C5uWaxOTU^S^mJm!at42I=~Ch(egA&; zP#YvGduXO&>OD-J_(zByRu10*_cHFdn;lO69v1FY^jv!PQR-R|QUUpf_LAJ%m0@osC29OrK z&D2y^qO;Ywa_!ohwYY|5*RQRtScGS8Oh{1HR@T}p#x>+-ttWtEtGaH`1u%hW=D+bkijZFU{w*>!>8FEDlg)uhmaZeI-fkizZ2Rh}xG znIn%%4)yMG6?u43PS3WkzNZ+54sY=k=aJshaGJN5l`l#(eue2-Az#os<$X^w;=A0+ zoDNT*+50-nzrhMwzbTlxJ4cS?Ml9TaTjafvatd8dGU}A9VYA;or2KHDX;`^AP%Aut zXr)6*2)He~1{r=31U$#^=NRr-W|fR!41H3|@gYVY^gD;3H_XTkDgLingM&=>ImQmc z1L=997a@hC&a0HgkHCpQdZMYrtx)b^?`5Xtw+!63+ARJe#a|xjnlsF{%!Jw>Hf+WQs|1#MrvJb_{wR z%Y?0E*UkfJ5E#W?y8z@p1{t~B@P+9ja5>MAh#0)YfE9-PPH@;NGFi-@_k>MD$~RY< zt~4t*0$8SkdIFCQ)2=5#sXmhQJp$mMN3h&!^e zlq=YJ?#Gy1Wr(3TCm3S7hZ+2b48mOBq{Kpu8f1iJuPk=JNhFCslgYi8!S}MnDfm}e z?`f8N_2U15^}fcoOEF+{UktqCm?2#RUuV1DVC`UAbtjznVtPB|0=LIsZ*O^vg^E4+ z7Ha{y+#UPj_BS@ci;~;#bSHnOe!H77^VC}`_g;EcgHNP{!J|p@0ZXX*hN?VZ+ll(S zS^)u1ICe<+4#4@JcFQ)8%L5s?Sp|kvYtj)a9yIWJ!bPg;Liuxr)41#t^&Q^E`i_GQ zUeU-sknQpUD#HHf%92|P!lvP2n1DY%cCXl)SEuh~#S={JOpe=! zh*L=rp&FXt9tB*8!>x%eEZXOuW)aincsE zytxCS_A5?7KAt)4y>u}KSc(Snh$RmrJcJLAr{j0i0SZ-*#c;l+gQ1Tv@Oy|3i?W2- zFQ->J*sxx<seoGzK>|ONSrH z7LzkH;-i`Wz*{qfr(P(d8}o$^1G&OKzrZ*^Vfe~#Hg`f$3)2?699w4RiKgCHSj`a_ zN-@dFP$_kRioI?oM!5mC!-$o;H$Aj392458Fjc{3Hf)xQvDYeZga^*ILiI3Wtqbi_ zOp$E2EEhIFo{0=ga``USd-5?hc#uu-vEj7tgY4&BY|zJcUOUP57`$C<%SpB@$g|hF z*sh?LC9^sibuAy|y{reGJR5YgiVpW!@jqFi8zx;ipd&kwTlPs#r=35=LYxe;LR?_+ zT^!TBig%HmS%i37!Pr&_^WEp4Pw z0Q4@a=SX58E840M+SLjXu3kU#~xqpaEr2VXhO65hjl- z@V&+BXRkt5miH<7p}$q)iEy1nSR&dJN*ve&*K#%MaP|6C_f@VXnf1O(jNU4*u7=5) z)s@xw{^eX{bp9;MLKa>=w|dzkjNWnKs|jO1F$}U7s{Q zovgn?#jIVoegok-laB5^l6;dYIFdvji8rZ-9Wpw;pT5p966!~Ec;nU3tIACgwLD%3 z!=qm^SBD0E<@;JfBHjNb6JA)n;A#kmzYgVub;B}t`8<}LUmiWm49RFGLt0=&=u)l@ z`jnf%`UVr^n2_1`rhHUl_-e*m!`Oc){In3>FSI|wOnH(jf%g{9**^e3`AKoM z>-mObq!qTjm>0K?v3Kud!n$rJEj;$?naj82BSayJLbUq-X;CRiJDVwDN*GR?;(x|? zA7=P%jCVWZ?i(HD_h`*-re!aKM@Pk0|GnA$jJJmk0{d9<#?%AlELCPlXe3wTF`Rdr z(w9;(4{X}Jh1j5&*uZckHSUJlQuK4Z=};*9{{pMnv9JID delta 16823 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

moQAk9c24Kxj;;DGo^tgxBFTeh_E@k1P z(Vy+df8tWTrEzUkxsYC@IX+9oSchZj@C%5Yc+Yy82uO^?a@pb}Ws>Ask7TS_Zcq|i z4eHSTIs*bOq-4#qSBWLedc1`aj@Pf({rsK7@qXj}{XWn7a2mYu$35=#iPb@Pxa+GK zE|o6H*R7}G@!WdCt@radC`<^?Tr6W@_!lPi?b-MG8(Z7YtS?-0?*>Qn6V1Mj=8dTv z*KRCa^3ulNZhUE@{+|B=eV_Ki*n741erUWu5#wLlsJ$1Vk^UQR&?eL_X_UB;+;Hxu ORig)A8$D<+xc&!DSxY