From 117806bc3234905c0e613aa1ca72c63c38084778 Mon Sep 17 00:00:00 2001 From: Christophe Meneboeuf Date: Tue, 13 Dec 2016 01:45:27 +0100 Subject: [PATCH] Adding a Title Screen --- .gitignore | 1 + COPYING | 0 Makefile | 2 +- README.md | 7 ++ assets/gol.screen | Bin 0 -> 8192 bytes benchs.txt | 0 disk.dsk | Bin 143360 -> 143360 bytes scripts/add-to-disk.sh | 12 ++-- scripts/pyHiRes.py | 131 ----------------------------------- src/file_io.c | 0 src/file_io.h | 0 src/game-of-life.cfg | 49 +++++++++++++ src/gfx.asm | 0 src/gfx.h | 0 src/gol_apple2.c | 36 +++++++++- src/gol_apple2_optimized.asm | 0 src/gol_linux.c | 0 src/mli.asm | 7 -- src/rnd_colors.asm | 0 src/rnd_colors.h | 0 20 files changed, 98 insertions(+), 147 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 COPYING mode change 100644 => 100755 Makefile mode change 100644 => 100755 README.md create mode 100755 assets/gol.screen mode change 100644 => 100755 benchs.txt mode change 100644 => 100755 disk.dsk mode change 100644 => 100755 scripts/add-to-disk.sh delete mode 100755 scripts/pyHiRes.py mode change 100644 => 100755 src/file_io.c mode change 100644 => 100755 src/file_io.h create mode 100755 src/game-of-life.cfg mode change 100644 => 100755 src/gfx.asm mode change 100644 => 100755 src/gfx.h mode change 100644 => 100755 src/gol_apple2.c mode change 100644 => 100755 src/gol_apple2_optimized.asm mode change 100644 => 100755 src/gol_linux.c mode change 100644 => 100755 src/mli.asm mode change 100644 => 100755 src/rnd_colors.asm mode change 100644 => 100755 src/rnd_colors.h diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index e292e42..5193578 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ *.o *.map *.bak +*.s diff --git a/COPYING b/COPYING old mode 100644 new mode 100755 diff --git a/Makefile b/Makefile old mode 100644 new mode 100755 index 7c5558a..f594b97 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ linux: $(LINUX_SRC) $(LINUX_CC) -o $(LINUX_OUT) $? $(LINUX_CFLAGS) apple2: $(APPLE2_SRC) - $(APPLE2_CL) -m $(APPLE2_MAP) -o $(APPLE2_OUT) $? $(APPLE2_CFLAGS) + $(APPLE2_CL) -m $(APPLE2_MAP) -o $(APPLE2_OUT) $? $(APPLE2_CFLAGS) -C src/game-of-life.cfg apple2-asm: $(APPLE2_SRC) $(APPLE2_CC) $(APPLE2_CFLAGS) -r -T $? diff --git a/README.md b/README.md old mode 100644 new mode 100755 index b864ffa..75cc547 --- a/README.md +++ b/README.md @@ -22,6 +22,13 @@ Two binaries will be produced. Run the *add-to-disk.sh* script. +**Title screen** + +The title screen art is located in the *assets* folder. It has to be +manually loaded on the disk image using the *AppleCommander's GUI*, for the +command line loads a corrupted file! +This screen was converted from a PNG using [*Rgb2Hires*](https://github.com/Pixinn/Rgb2Hires). + --- For more information, you can refer to these posts on [my blog](https://www.xtof/info/blog/). diff --git a/assets/gol.screen b/assets/gol.screen new file mode 100755 index 0000000000000000000000000000000000000000..4fe72dbb5c6b65f474f10cffa4e4d1d454e658f5 GIT binary patch literal 8192 zcmc(kL2u(k6o4mV^ zo&)>=4&0IW7aTYtapkgbf)gji4?yC=dv9j!nXw(G>899fGq%U`=Dm5}yf{^A+brvWGyb9IeLaH_EjpTv*LbbO6F)_r>WqJezeh!{%X{R1>apYh((l65|70zG z+lSK!+0Bg?HU7A{(JW=5T&#W)W|~u}w5J*W*h|YxLyG|9A9x4;MNRS_x2pJuIi-^S zw5JpF2CnCcq^DI;zr_F4xA`xfe+>SUUJ?JupW>fmQRx~g`Qh5Br9IFNvrjDgJNyXw zhxrC(1mr&!h4T+1{zrar?1?h|OZ?AKe924Xzr*%YKTxbCKg#x^>k%KVkU!M_IeL^j zHGjYUAms!9oGl~2j9SM`3-BM7*dO_a){5yP{x?~d^t!Zt#O#8@zge@FU`6yg^99ZS z0dRkR{g9Cm$iu{ zs)^Q&@k-A*eE$QyG>*eD#DCy_V8;Ja`7F|&*GPH;C~N=IEfW8E|LdyfVaMTr3^O0- zf7arOKV5|XebDKu<_9N2e1d&(WJUGJkBZ}u?&AG^iGT7^X$dKx|EBl@`Q25Wemuz@VF}{@Ps{Kx^VCj2mTK+C_A~S9<~8tNduRNL;{RdQ`WN#gGylt3D%3j$U!eR> zFePm@5#cju{mpFtK|ZekQ~u%FK4e~#>;=a%{%ZfzwTOQ$P2bFZ!+obk;(s6p6#pgv zu>VoTKji-^|H#Mx;dc+Y{?`2e{;%|^iuo_I#IhyuD_T*?(RCwBC|JaCzvZq6l1Fi~ zVjUp)r>qusp>q85T>R&wYdGI$UEu%PgKWH|*MepjCI8birB!S`v&z-{yV@)Mn~$22 zS{OtA&HV3))fil)<42ZK zdnrTOgM+8xd2G*qu-b+dc-z>2v-baT@@f1}L_4@@(fa$2{Ig^U-?UW3_Lh=&51$_xJ z@Tna??dpnu26GTY{*AgJcscO@OX`92rsf~=?;Tiw-!?b81v>!gY85OB=cF`)GWc&p zO>_O-zqPx%imR0W?RKyR@?~~iBq_@ir?9VAVs&^C_=goR@$b!W|9d`vv`<1dl9tNx zF9fuP2aS~S&mA_D77eFg7VzJ@1OMp%$D&@k|6a!xxa`47{v-b<$bXHI1sqR_W*1$( z7rzquCH%knE9Ku`<@z5-bt~I_%=6!4OY@I&c?9jpa}1~XXM5`||MI(*_-3XvP-=#c z`fygQza9SFSv~6z@lW5?Xb;xpzgIl7W$zZ2IBwD{e5Czc-wPUZ_usO8q9bhmQJIJd z@DIFT{9lBBmDR&2N&k2GAHo7q&B-(a(OAwrEk7*!{s!M3%=kYy|G@pH`QP70Vx{YE z$$uSoL2&-p@i(<@)I6VEtaART;Qt}Mzimm)QTrnPn2}*ll@DI|h@9Orxe_qA>o&Nwf+^L`d literal 0 HcmV?d00001 diff --git a/benchs.txt b/benchs.txt old mode 100644 new mode 100755 diff --git a/disk.dsk b/disk.dsk old mode 100644 new mode 100755 index 29b6ae2683c403dec3aec2ffe398458e7da67a6d..57ae836005874b77a3c68a00c9df4b31acf04f86 GIT binary patch delta 11588 zcmb7J3wRsVm7b9-$yRJj4t6X#v2-mv*qS^rp==(QSOG#q7|4Sd!a^H`0&$=Lqa=$b z#2)1#S5_<`MImv3Y}IM(X8a*HskggLw*d!8uv`d&7HGe|($eM&-NLFZAFyc3-}DSUN>IQNblS1(<9JBJ_R zLtGih5w5$Yi08O>Ia-OoZC){J3TNbOd@YQ>{nph>m)vyQQaWDX%DK69T)0Mn*LU@W zSQ%P5<>*p*D%oOII8_(!bc^4aO71KopIQ|zDZ5ik$@3(w7aONSH;>%`sA0!y*74|6 zl~cSVTLIN6J-$(g5=kI~yE}3>W-)`-1)5AgnLc zzXyw+{xB5DVPE)VU-G0ce9C7_zU;(N0Lk>acC$+NEOG+FB%;(vBRfpwgF0!OhJ*Ql$$w3{7rH~k5{1a9Uc!c`-spQWU zuyqtE@r|++2kX68mg1o(n3~c-Q8rZ!YMVuONvI($g&>j-%ed{{fnHpvK;e%0$+gwg zENUmzMx9Joy?BR}wlN!d=(?_!OrHk0Bnn_!wkW6&AI}}f(Qy>o{9(9%q`)Do=PB0A z?0=t@Koz#Q6c0=RFbNdDsys{5I?&=rNXN8Q{Z9%DdBsMR2D;Em&)AePbqp}l-q5_2 z!_>;vtY~4yUBj>$otRmE2zK1v_Ey6MBRl)_Okv%$geh z`S^)7Un!olrJwDxiC&6o((rA8sJO{#xGni;UZ#nSeX=k5XzZ zoTVI8e^p6Q6)PAL&`Bv{1dIwQ;#2N)f`tHezgcr1Idj3MFb|U}@I69mfk8mK4a8WN z$kU*wB%vEQ{wcFU55|hm(3YYGgiOU2H1pY9GncqjuyevpfGGgX%s~mP*2Vk`@YHn1 z#>&#{dn0)}{^vX0S5uDOR-7vbrB znb!ed!?WP9#GG|4I%WnI;9Az00ToyzuQkCboK58)^T*=%+y=b7sLzgt@ySp$B{|8a`RA3o4k8rVe`O*LVLD&$q^T-TQm*HRyn&rhA?8+sM&t zip14LbhcWrDN|4}p@m;0Mbx_#IHPTt947tMitfbsghPMRk6J%g>?gv)Q~puwCoo!^BjAAdKb!3z_F`@A z|7x{5S_4Op@e20_fZtjUweOZI51>byu(^TR94HhI7c%f6aN`UPwl>#rABLt&%zU9x z{B8csdUPJIea%@;(fpr6(U#p9)a1Loj$d`kw~-6K0^$Be4EH0x`%ynHcnnyI12cqJ;@z+<){>F`0 z*kJlbK785-60$2mLcwExL6^h~V+0#u$rM}i@ZJ%z`Ui4q!= z;k+%u164q&TZ{*a9<3=b3eMaewTU9EQAt0&l%$QCBpTl7(ZoZ5eom&M)YtN-k#ZWy zv~#QtW@BHycq}-mKe)x$ZJ2u}&$awRXLD%GqkHbRD6{Q#Dg?UV*_bAi_Mo7 zo9*5wS5ojm??e#=7L!QvKxLv>gT5Z2*HP$A7SlTc{@1i!?_$tcK@ z`R|k^^IwNv^_@SEDq6E!M(^L~9>{*VcqBI>_ z3&z7e1@_`7)=V@#z(EN;01PefCJZz$Gh)C+-DTh!?coze&~m%FJYmL$Vlb;1H)S|~ zQ$TRSszLJ=2LtcY%KQ;k7(-aayp#|FGm z3}lLk(FINT4&HD7x&8O2b>|LvlhdW}G>J4+snZk*WRr(oA}{pqTkxJPu zkwN^uvYS_wTfihachD*Ytsl1r_H{jl4sL(f0W5mE4yxSL zBeC8Q_&e4c)(QC33-RjcH7j8^4Sfe={$O7(KDzM{#K#_dgkpZe3uL=}AU#DfoUoGl zg(HAi_h|Z0r}tQY4`({#QcdE0cJZ5bl>?{kjVJb2n?}e_$y;PJ{_@_Yy|MZ7sW;zz z{mt3rrITmQy#90Y=Bbk}lUH7Ub?(nzdh^t&GbPY_=JiEn=Gu}Hu7n7JKz=@w`WboW z=7F4l6!=|bb)huEg(cq$$&7}CD=A~ z3xQy0Q%DGOtK5-TkTuJq5l-9egsHW)mw>7cC(K>&egMWML6YhHE*O8*i26ei?glXd z0Z(@_By8#uMgW2fj%C;w4hSJ=33mytf9y`{P6eX{c)=InBg;a|NW!I#DKd4<;^{i_ z6W7rP29D1Y+&VFHPpGjDtDa0n#3QM1C_1u1IJ#Ut!zxRTUo9klD!%6G5B2SdES17H zONLOUhQ?=eTBnv2`BP`3I`{9y+p6O`_LUnNT%@ip{`9_^Wd*qkr&)0&cL;+!1#&+P zXol{z2~J^$kS^&9+BS6vPz`PB6vCYXn7>Tr;2r9iz=n4SYDdgJ0=1ojD#ZMVaI!-f z>=e9U77PW$yXa8Z-vAxixE=t8p@-$}{$QF9jz;zfJv{65w@B zbuW0)U?{fJ+p}7Nj5xVkvONF+x_<{8fUa)H|B-Ii|DivX9GdyuYDv7kdfDzMoG5>w z8-7g*1P@1BV?o?R2uUN$fRn9W8nrJt;=g^$wRc}Re<5D6uUWUWA%5q+2DvZdRp$L> zxjR!dI-34ig_ zTyTiDJHj3br-qkEksBn;;=(sdk(;Dmr2vQ!El7!JGx(?EQfcsJ$qQ$R&TPQUQ8~b0 z+uxHZ1e8J}qv=mX5SvZ0m}>rku03c)$cya?mnmfZ@u7pa6~o|2C^NU~Nz&ko7xxO& z&eR;<*&pfJ+5hD3NTN{uWlbQ0U1IONrT$;ywxeoSKE1503V!|Q+l3BqCp<#2hPeFfo$}Q}MrZS?rUl;c^->@hSu8OwxcPLE zYK1T|0B7k~&|Q%JD;`zId@!GYqe#yq3zFZefk<5ndYb9sNSMJ2^8J}-$I`acSh_rk zf|HA-03}&bK`fZ=Ln(NW?j{v=umFTJ+XJq^Omb@><_C3Numy+-NP%&H6&#a+YAJNf zSa^n%td!DvGOvnUUj@|+Rz;<%zoxHt!Jk}5yy5F4IL=K{Jb9?;o&sUeAi!ElqcCW~ z3IP6tvSg{0F{oa0zBUCX$ys)*A~#EP}(WRHYtG z*OPy$sCRN@2~Y9p~$wI&L)GTPGc^F)M5=Oa~;+McdYZB7@1 z(C~aIvOvN`wx;DNM76`B_t8b$GX<%&Y4@@uNHROP9L#!~QHPxOj%0}E&EeHU8 zvadt6;e}FUk(6YbR17+#zburJPU*<|i=?B*$U>=Sk+dK=LwbLqG?1*8uvM>e12Sxg z^wd7MxO!7F(?!Sj;}dcL60(DENQ|c(s+2~ppF+o+v>^h!Wlzn5icQK`Qv@n@DPv02 zri;Ktm?qXwS4gTcZ5)7?WBVi1rIf(rK_b#NoxEv>?T=JTJr1eIDS=SO-1KxhG-uoa zI?f?QoKoEOuhq8@D*4d#9+#xlM&?Tj!UvO5-$<7toV7@oItu9h0N}>-9LTakFP%b? zpr=lm6{(S6&ko1$h$Z)a`+5Tn=tJ|rUCs}+{-9SkWHog2@kh%XajVWesZ=JtPwvlq z2SMj}Mb(3xE5DH_00PcYW+MR=`w#tx!UFz0pgZw5{h{wc_2cKb7ly@jW%AJ%;96-_ zFDTXFxkBVB0YHBtUC_6=e@npMwL`I}_=^K^&ziks82;3&6SD))?0y!@_#4SOxl!;A zHVPU2pkJqQhj!>bC=e9x1gFcaJ)inP`lAHb(=ZEO4-N?DM}|A2A1YizcVa-uENq;A zK1DJgrd%2Qs7eCSkZt3@!BxVD3JEEE!qbFEr4X(bA`T&Vd~7US&x$LB9=AZo#u8)c z^IkC>-!izcW~&fsmXe@_3G>-zNFMnGUXHu3j!NRhnef9Sg=g;$P}xf=yk2rNQ{%g&#QrauB3RUug*q|DJ5)m4fRHVP4w z;2oOv?O8C*$k)wo5%Rw9-$L;5yz^tWRJ*>tsr|rXHr@@pbWPo?7GYJ+_^oUZ_uJ=b z#Usn|8Z#X&L&Np0dScmT*|xHNooSt^L)N$ITknu9-1Xd+8rcc&+1c5mT@!5XY+ea< zO}I9y9i&g51AR@|{x)Gv4nTK9YpaDcb6ezfPEV(0+a0I?k>!;pj_Z)O)L7s-NdfLE zK*GmcT9(T)wQ^EFU}0&uz~0syu4|iY>B*$Tc#* zT~p$+D0pyYMZ*%5B&>mdCX{Ta&Dhj|*0yC0^;~r=^j7M(%cxb|mAHNdhr`%+5`t}V z^X@h}w4$(>^PmtT%&RE96UUcwO?1{n2g*L;tCp_CHe3uopvOZw*fw`!BW^a9+Q%cU zfUkvXG!`3g!)R zjwcwy9{+L-qc%}&I-3z&O}J(PWf*%w>*TD>Z9p0PwCN@@j93WrXobVGctz)zVHljB z7T?t#raaU|lnj`8H%7 z*WrZs%bYz%FU}(@1*sFP8`ohg>gmbCz;!l*E{nem+ZZt!+kkI5Y}0d|yU+qO>msrV z+Dfo0BUu~Zf@WzSjcgu1pKLSHotZnyIBZ#fy%sjJoqN!;9s#}wU0Loo%LUIKi$fF`dKHOEZsfh z5N{y7{;HNv^iZ0&!$`q`Qgx0tPz7)I@+G`oxs?&G)QjF8zUW}>pXcu64ODQaO!s4a zkq0gKo$T%weNkutKiDB`g*B@@TL7{S+0yzYBLkin1BHkwUX5E~XV!p&re~%&t6m#K z9{{O&GRw0b!}Hdk8I{1}Su~dG=FuZvKH;e+J4k?(TR|hBtrbbxJ`M&}kd3h6Ic&su ze|a`~k&QRV`pdFWj{z5qyoa9Z<-l8kXVGo4+uXjP$xGel)N#&KkQN=te~89UYj&@p zVH>zZt{tJ1w>-fCJ-OD$Yh=@QJUySUFO8CvGFkldtcMpF;GrMtrL*4I!FidsZQCBp zKfVW?AMu4H=oFB-K*w#U>+}tDHnf0?;E>&PW0~MKprA)?PJ>@%4fN?*zZt&QAQc@D zd8J}wlQE||Tb*>GX?9|-&I$AAG#BN}TY*mQ{>w4wmA{NLNS3wm4Ge-!EzbdIQiz2E z>HPu*S^ggk!iAR0q{Zi?;dIhs9F6D5iz;0w7R{7MHz1Li2hIziV0yb}1NTQtq?}_6 z%!XxXT4XPsh#C)>nw%&aX#^gh(g+eftYNmPMFDuv{~(QWb73k4nV+uQx1tZgepftEuiJD1oDh}`YpBX`uSJz*TY`^)(CCGNo zOxO&JquO`U_P5EfpB(Pytd^Xsh;yBG)W_4Ii}r{fL33vVxF>oOm?U|ESoRHVS52Bt zZyhV;mGsuJlBQk|`+yIZyLDj7f;nOK+H(;n_1;7_D33e0ti^epgzOC{a24(d<75Y4 zg078m^79h|1f~lV;UK$u^qp0zT2yY`CKLA9|t84Oh(=)W4$hn4y?Gb$q&^ zp~Z|&g5?1dzjjcsYJ;&hc`M`ruw`F156B(?kjb)<$%h5g_$=EfojTB{?IzB~jBCqF zC6;zpZ6m9VZEX8rq!C};PVGQq$GtTw~9lzHN zreYIPO@~G$NU&(rO;<>T4iK=Bj0w;&6|$6B)Cg$CkqjVUu?Z^L?|-X0EIQxs`#Pzr zyPSLO+3vaL+$wips=F^Wl3_B%@P(vn|JdA3vYffkI>&`J28+a4P@2? z>#%Gx!H_y@f@zrl1Ixl`7LrVChDraikbU63hvwaN&;9c#eDYK>jQsZ`^2-UCBMAAY zDU}v>JeVGt=VHeXWljzg?+;92QYQ*VX4ixO5lwtk4mtuvYRZvK%x#QnV*g_ZV;X`! z!sZQSULWV=XXSfu%@+){ZhmII2lpBI%!Ud0cLqJ7RX`Rj39Y7&(h!e_G$Wt?Nxn2Q zpT8~NCjBITnVp}VFWvTF{xZVnp=B0rxjkRHl{Wkoc%|9-oJY#b=T-rlE0J!?=T=L% z=X0gfPxCpxXl=t3^~HdpZ;JY};xcWjJ;OL3`=tNpPfT|;4z)?Mnbl({X9nh1<1xQz zq|d)iWbR58Zx7svmH}o7lbOmCjdO~B2u!7bwSin_&QPW>Yd`|*!XYwIOzg8mWCI>6 zhsZ`e)(l~jhbG1ZlEt}9m|-4Hg@6paOOqb+XA5dZU6jltY0TfO5a@e3@;qh^0|Yfx zng-f!qLN0(Lwd)lAp@kG3ET#XH0;kZ8eyRCx<;lx?aJ_<>%&b$T|i7#IJIg$< zwQgp|7=bYFPZSKyFUF%(FkU7){4cCp8=VOBpes6&DbHfgP7ur(mUyfj&i?gUIHJLc zWT5{F7&Q$S6C6uf*HIGwy&Mft%wnA5#2r_K&z`d~j|>$pK%(_&bZ|w*9P_(z8nMBm z5C z8eJEt6*8@3oL~pGCzz<%sgV6|ESg}LmW_WIZV<7+p<6SzgslZrCGwQZI1bV;C7Gnr(_XytH!`Xl4P zp=x47mI3R%W-Lrvx8-XQKFd(OQL}oMDVii)M?qJ@M z7EvhFwY8-g)U|c=`|tT>?pSb<1W9-^+3XBWkC+Hc;i(MGEXsa4eDN=+RiPJdN^hlj zyI)SVCg84s`)4n{Y19uJ6D-^a zlK*G%gddODw)iI3kH+X?z!*xdMH7o|)Zvn439q9WuYYe)txyzDpEk>OU`haU$ zWPwyL$#ty)2@soT_=CI5zvR(jH^4(P>&HS)u(5`~WV$jT8h_EFH%-GxD&~|d!36nc z4#+1#^~&M8f6#pFj>C`MX7C$~r`P^E$p{Ng`Sp0$B5I+t(%6U6w6Wrp0a8{DzeTa=K0yO&}=9w=pNC9q0& zOR5=&{oF8=CJYZOrT*wD&pA5JTq;|cs*4^G0Ubf0*lQX8Bi$SS&B%9C*-x$?Ifc58 zw#UW~*QEJ%Dr-w9hEnpD!Dx6qf0=a!KI{4!4TYRlK_A8Hp|=v;N;sbdza$^$lYW+u zSR!3)<~(8!x60;A6))+<5=*$&!<97Swpt)TUs*|WLymIsSl@8vb0FnP=*>fKK4$?a z9-vd7N)Nn}w8+ap?spUKPD~J7yWm>9DYfo!ZOLR`QdwEa70SnPp5j#+VtOm1x3#zh zp3KO?1KeC;L?_$-`tNdF0J=g^Nq{&t#?(}4QG;l(`I4lE8xR5gEZ?b#Li`)&3xFpz z$)cKl#`)7YpFLCkQqEMrsL0Ph)<;y6&DTdK_Bm_v@2E$cH~$V`rHg$K-3~ISGkieX zmZ@LtyN6)!PQ)=EWWm5p{8T%8^9?AaXkJ~5c1(zS(DF|qN!w17sh`x0F-7YL{C=nl zexnVtgq>rrXtMzevsT-N2G$|9czsXCiWFOa3=8*ysqeQ@Vx=5=jor@7m=w_5n(iI$ z67if0f4SU7Cue1w?lvfME;D6p#w7U50O9YrL%bt!2ZErhsD@6u+N9F~P&!f@sP_UR zC7M5C^L}E36#2t8hP+D%pyB%V@%85snn#L4OKohNFLA=)gn!*_SX^MJL z8U*h&h?3PnanbNXHw2iIV5JnfD0AD#Y7AU!gygCXK1D4rPHix21WKmsZBTRt?gS1z zVARYXCJ9M&y5{Sr)9gsT2m2+qk_O;|S;_a(>VtY+B(R|abRq)^>J6G`nGmd>LM9f2 zdc(iRo9G@of^rckN`LZor&Q|TUvV&@k>V=>2W9d21a`hXxGwLwky{rrHofYU${flN z=AMyk?-*K4rp3N7xN|FuUuH&+L=w2J%2T@z)>PyvT2=d6-tk=DblDQgVZOKd|G8$G z%kMbtca*PlIK_1VhwVAP!)G|gA~#$gD#wFK8hM&`D3?xq9m+W;D3QXB8j;c>RXJ+5 z(gG+d@-V+2&#WIA^ssM@zozod_yQp*x{j2uaCod23%Pa0uTr1(TJh`jvA(!mBtyex z>znakyPjWQr}z8p{x^NIjN8ZhyM2snzMc8TR;8o|lImADUR{Un(J4<>(rRC$cd)>u zj%1lpSib2M9!HDy8+6>HBzZj!b)-BEg;fsKDl;gQIMft*l9J|K?Z7ZLI4Z!%xk_>s zDz&e9OC9o59UtU(dKB~ENS=3iy^hS%HI7oB16XfXMpKEcESo)snL2eU)7>n0F&{Q| zF|Be_jM>-AeE8vqH-FT<_D#uUFL|!r&bQkOKVPL7V;-NGX5H+wOhHKjGj5_754g0| z#@>_7{B&YuX;t(^yWOZRDap;IrMYUBx7H!PA22f8?2!dxyI!~}`hs0J$lfrFG2zqSK#q4|xJT=+* zCOf-vT!BbXN14WiylfX^W$tE_TI`~|%w5Qw8Y#u>HBELW_yuSi6$J&w%xxNE?vo$@ zpp~ma9>w5k@pjouyX{zUzZlQIZ})cEr+3?PlQKH(F7;=HRTN`^k2@Vrpx% z`%mhN{TAeZ(#Y@o{%T7e~9yb9@ur_AlKeytq> zjhV1?C(ZD88q&O?xYDyC}$}+dJX+_f*cbS_cm)yAe#?l-4sWG3=eAL%p;!#e9 zqyIU@|3*1`vyTb!>M)3g26nh9=c%?^lvANnHC1bAQ7*AySqmloS?k9eUh@BB{r&0j zWrTZ~9Xy`dI?m5;7-ki*W-90_%Z|?T!|Yb=qUs#oR4}u(69Mr6t##{L+WH+ z86V;+eGL|6VX!o5byA5kq|dEn2LLX5EBaXIc>q)RcG|Wwt`{IgCjw{2Z8V44^HV3E4G0j}&QGyf;U3-jw z5|#>r6Wh{>++^myR2uDNJ8jDh5WTbC4KD*#QB75?-7x%y)-i$^$c1EjOQE+^-278F zjBygAkGs#gtr>ulB^V9Lcm#ve;o1mhS{t_Tv9b7p-j%m1+!I$T|9BPv2 zWPUSNA`RAWt5HoZC_%Mwy0yWM(=*tOnj$s@a@YsqVVK9p70Mav2-%|At~fx$GybNH zw;PM6_ziD7;(EcZ8f{K7CC|xI=Dph-x)Iq8N}6aztW^cBYdv* z$Vld$ktnLPhzUXyf|K%&P7FKwY6sk^z)ug~G%uxYHTOxpoRk1q8)0_(hCN5J95j{dz(ep(rf$bnx+@xSVzf_Mgk zSf<>B_yzl?F~CUJPmO_T-n9;9=E%yIbJMHWLP4eLXbb`Ab!pQ3osvZZ5V}}N?RxAg z^ac*(-z!rvjID-LM-&wMl6*-klU~lyC6%m+xll+=AbDQFv5dFOaSR)_xLlbc|4A7{ zi3?L=DQSOE(xDH(^k)8!3vUiK_)Rr+yA2bJ*=GOmhm7-Ejg}ug13#$$u>ZRH4(sNA zLqIgSL{hQBc$&2bNIfyCi;v0Mm9GR+`utQ>%g@@6H8=c^?|gs=#`?2%_4eG^$7Du5 zFHclWEh5ADN^Hx{mY3U`MY7CJpFl+6h8&Cel&^sLj9p^wvcF(MJ08ud2>YUv78S zEVrws8n@B^cFkntk}3XAYer6;X201!!_Mji@sHcRPuTgTcJFWOo@hMI|6YIm&R+Tl zyMLnOm{4!`MjR6Gq|gi}g1FL<=Omn05~kq%_?6yQY!{+7RyqbW$6esMRL`f z`I+T`c%>mq($vXqGt1SnzFGAo4JBV{FG-7-z9(rd@V#G1Gt0|K8t^81X@{$&&%k*_ zYz?BBThrvT4r%h{2AO||tSQ{ICig7!bU36kTSAe~B{4AX>`gTR<>TsbAQ}necG}i2 zy%1*3h9b>q5#!~NfRK56B;c`r6ISbNP9akyXhYSBu@>g#%HUZ`0ka~^lvLI)H}hx0 zg%!(@*p`NEf@wW-G>oXg$)63koe8TCVDX;|OJ~CT`EcH;vtjl2NXq>9=`&$p(z5T{ z&xG5~g?%RJTv$$xm@SrY9`ji^YI=*g5SGq|Z9o;BL@TGyg_U>kv;mRbG&M=Bs&_Yp zR2Tvwfgvr*cc)WFiHhlTS}C8mg};9b|MV9Ag)O{yi@ud#vvQ(9sJgz@@K$;CLUd@YLN!qQ{d)n>#<$AJgIXgx z?U&IWF61A6FvQiDVkY?$WpD%bO}$cObEzhAN}iKh9HuI2^5veb%_~xp5QW@fa3RHTOFM>rU9wl01O(>+dMya$;grlUA zsR)UmP#hYfFJgq<5Gq)ZRt2~tASA8og#L>Wy~Rm{%SFY_in+g7y`#R=MP<^Xs3#Hv zQO+hxuPMg_>{wip)-jcPMSD(urF=_ZUXjQ8uQ0oLOP;f|bW7=`EuPZ*wv_&PO9|_& za@K=tZ-Ygg7C8?O+8Hcz2hZ~F2O*g?R5AsHASXsZFoeLEf-cZ6RR!*UKX`vrXfKS=ML^j?VTT7CfpERZIZ{E^ZIKv|Yqn6HDUJA)|8))OZR3J25@ zNvRG6POwvgpb+dxp+KJNxH$|28V-+gfiA>UDI7pvzjq5Y3_|jBj&g5Es8Z(xT!@=7 zjZH`8Co;)3>v)ZD+S`XLoOBw}jZQ zYuKi(thJgwU&W5!%8Gm0$F{P6u4Wh1un*R-eG>bR8n#nnm({ZKBJ9hR1gpPdxfy4Z z>Vl**3l{umRiTrZVxQG#TTn1bwTtFW;;xgbe;UXr~aT#!#aAAIoH(~LEbzBBq zCW8wNCN$tO;4^MGUCpGT<`dBKS_gh|7S>gsUso8r$DZ zn3Hr*S`|n-@()2x!d9Mpst;$bEiDKa=5T{64Ye6^Ty>>$h63gpfywn2h65x@?&e;} zJGwez6iJLz4J{lOC5UJ9j;Cr(#k8rIjlBu?eMkrz_`^crPOQ=->98P}EjK24ly5k5 zFv+&;9xkcY9IiE2G#GKLdvlA&dQQBhqS07=ScsB27>7imNg%HJ24i`HvH4ivT;F+5 zX@gNZBq(Xl_CrFGfn6prX-k=;SHubIjwhM(&#+0a5VCNJ$>4c)bxGsLjlII|NL{q4 zqo@6VK#TjdVnn!H$j+}UsQhbl^oYQfMn4s})xmd|g|9KsRA#5-4iS>1n6YfRK%@qv zt895*BrSMReh3lpOO=JGoB`})aIYY1=eXjUXMf#?LpG*I$Pr0oNzgstpx&xA0=x$T zh`D`ck*H%KLWH5q?XI>4qjI{rc6l$J{jCi~-?^ZHy;gvf|+^&+;0_oXb%Ld>D&x_UJcJbxnENAdGe*UK5Y<|Heh~Ty$No(L{!vRSPHgU71`J1@g*j3+) z0_&(OSb!f>xT(;dnHG`v_>9Yv(JC}d7u?fv0{EgcTeO<^!43K|vjN-FWuTnMEcq5Z zGV?2$#haw`S8`3vd{-sXt9vWET06Q0QdnSrUPFy2>E22~IM6A75JR&?G%O=58b8~F z!PxCS+r-{mS%5cih{>j)2_FwE`L@tmpvg%zaoNm9&g3j9SYOj#QSpeeuwt&U>U4Vr zqG`Ea9V1t(IanGwy>6rGnw{6)UIDQBxyHSZ7^|Ge7*mDsWYld0#6!)>88M!VwZOMk zXidtUQd>ptFq^OCSTg`wdqs4%udTI0%|1qv^XhmYKMx}tEu{9Yc|yf{xTJm_Eq($p z%3+(&kcT0{Sitr^g0~%vE~C-Uw`o^XNahCAU7Vr106!IMa<-%-YA;*XEstf-3@a} znZ9%**trKHJN?W?2_3Gir-GK4K}kVy8l21-ncr+gv{1PbkuBr>uHS-AtD4dN^hTwF zjx~w*Oc(Di5QhOHU1T5&ip>sL5OLyUbMYqpvx_&$-}{DA@Y9Ga9F^kVaYHLN6tKgX zsZX&RpDNH{3ta^v3)AssXE^&cKe}fKm8TVTr3uG;pJA&Y*!aiFT%YlbFqoW-xFP^T|t*ao)l=5(pv|sqhVE zi3XlPb)2FSZ(+MP5o8#hvG&F`SSuyx&?#kelcXj^eChd^(JA>BgW{{Tp7S zS!JtlbkHED`m%!7qj*MA^McmnnN>9Q@m2_#UWU)T`2M;HS6)=?qvf;-EwXYzmCP}5)(Z#mLnRLyYT$Ec@{jIYgr zUvK^62A}F}Foqru8Y=$F*#9sNfxjpxVzyIcoZ4_zR+Kcsik&9YrXoRu1I!bNlRCb% z`BVrt*N-J{8<2QPLQ)BFpG;_ustWRswRgulg(kUGmwULQJ*L$}{@rVZ9#_=+6m7gXTsD@kxa+IY@G`)C%6o8I5!v{TV>c)Syht6Jj8uc zT{)8Kht;#flq)K!ZZKl+kZ-|pw*I_CcT51KG(8-8xcbhAyd@j9tX3lgmJJsx(nKwCm^DnQmN z#{v)6lYsrs3KD3sUT_9gj^jh2*d?Ux77?{eE@p~Y#D~=SRSm&2v9Hx+?rZEIylp8` zxm67su|Zx*#o6P9Fk*|~S?0H4G|w5s!Ib&m^Hl-m*5CztlFx-Wj|+Rf*@lpv8;qmDB*uwDPb4>G8OVgn z%+1O<9Mgt^A=#>Y98y_x5ZhCvazW(X1wI;~)BEKu@E%{ub8*h+)F|N2G9_ZFn3JR4 zjX6AYuHaYdOxfs5SCg3qRqQ)emt5ioSd8V`^UJLT>e;S=0-Cj0~rcHTSEF>t&S`^Y7C zlYziV(j#YGRMeSMup`vX@B?nBDKdp>ejjecvXEk&FV^sr%Q>&4v-HTTYF+%#MKROatp8hkstch>JFv5Mnl%! ztHiqCS_PtqYE&Rs>7)#6VBqb*5#%4;|5kST!JDL;jV?-8HLstvQP!>^?CyB)z1D;v zJE_3_UuyW#(8ez44Yqi7u+Y@g-r504Q`)OwnDzJ2EHQM<CW!mAMHN7`;*-dz5U0xkG>tO+gZ2w?Tc@xMtAHuxZ`77CwF|c zBWdTfopN|7aS@O=_ce3`*+54-#f8Oiet2@;$LGx)6ET9{vghi}0b~j(68r@Q~hK}}D zxgADBy|JeBE3y@g@-|hKrfrvN)Tr!=_{_-QYUORpk>F_TVjs33IXMQ9c5$1sfnKcAnq)?aqw4 z;dME6x7Piv?%ukEbx+s*v97r8^*TZ}Lg!oSB6Tfw@7Mh!QKb5 zB>zZ!4q~r(MSKpsETTP&X^>#xiGxOR`8X}f>Msfv6_>ETti>4y>f@Sa9LP0ZF`<-usP*MU$T5Cg7=MbwPJzR zvXyMHT2bZtMC}H#Uil13Xfjehi}DfP)h0usN}dyE85#Vv?Govq%uKu-oGjnq!WRmg z%W{-23%SWnlhI=K^`NUZN0!tBTF-GDXbqb@8^&u$8#-)s&}>^~<#3SHpX3w=aTi1! z^a$}HcXQFpMTVk1rR1(6b1AvIsHnNQC|XM9LV_!q-h-UTppFV=*p^Mz?Apvvi!|4o)7$`Rofh$(E1edhCn?$-)becA(;^zWV0NrDVrgy|;!}}V1MBUP z)6*k>JFqHZV$Iv|3Dc}dSj@t^bxn<%)j_&mBVV>yKX*3Q=6Ga584;XZU~@_xCKoB!B}Wl`3{q8Rd2>S%n`CHSGiHN zYBNP{lqdz#HIqk%Nn|K(8U}g@cZfT}9mZRBD=@(3J}LT?W|`bsI@dYe$~PIC8z%U^ z631a81lV5%FBDKV`ai+@|4$hbgu(U}au=MM(UPLWple%!inwA6?@tY;hn5IdaB~Txbz`OucZXQDa z)q5%r2alAmum%rlm``t(@XvHgI7Qej0dXsc&_=qXW=S1Uc{u8}!u?@H)IB6YPX7fu zWAGjRJxs;7NWne)K`D5Fm!;r&z8Mp~>u!>`ixHa>=iK-)|EP%!ax#6AF9`;N93O;2 z!w|JYR#Zp-5p`JTNIjM3STc+%8A2tl^ultIemb+dCbL?p$8;(4KCs>mHQre*7#plU zqmUVe0%bwH)LbeUQI;dVLD(@Y@Iq$!kk2UA*j-e|%0H#eMts1QB;LhuHX{FT25_1i zU9E!AceYs+P;40I`^s5)SRDj@c{iAK4dLBGpxVRS=a|&Q=1H2~7I7DXy-Eh8&z+Tw zL%DNIs}$;`#Gf5&7^*%|j}Bzg{49yTRSKktFY+^`;3s^p6#SH*Aw4it@(q(_Nw(*5 zC4fM~&&{BKgL9>uXGks9PlLUA#|JI2JvU2oRrV+s^&F{3y;x9)qTHjV(C>4GDQAm@ zI>oWv4)~un^yLm-9*OaSLcBM_v0l>-0Uqbv`;2mqYIDI&4-cM6&X+K1#hK5XS*xS{w9vu{yKbQ-Bi> zoK!%~Y4yZ{8a+8g4M%qA1yL7{5cRj9_D&evxQJMuE0HXw=dG7ftqhI`_x4NG;Kb479QHJw(YgeBo&( zsU59dO(p}tyIpur0Z21(RqGJPR(qHE%82(iD!Yi&j({6n5 zp@sVo#F`?t+j+i=kMaBYZoY%>B#`L!%GV{M2)bCb%tfGV@-#`kHZh`rdcH(^HL_)y zrevCp2;i(&6GD3jOrjC_k(OT!^e4J#&p^I$P1nEndi(ccB{U!18)2jqd-;=ld6hQE zU(kEYmwO`?x==3eWeJ0A>fNQE>@{mX6EFV=8Km9Ozz`pz92c%U?4>gsyEQ>w`8tFW zer-x3Bn%D29cn#7GfSjHhkA}^Stc@NfG4!n2wQDzKd8xEI~<`R&|Yq6$+*zf+|ko| zK-h;|GS=<-FotXm=OQ%`p{=Wir|)*QN46(w*NsEoqyH!zAHJGN<4bly(9abT5O~yH fEo!ChFbDxE*4`4o9c|pFtK4$6VP!lNH_Z57ebeC2 diff --git a/scripts/add-to-disk.sh b/scripts/add-to-disk.sh old mode 100644 new mode 100755 index 9bdc0d5..9affb3b --- a/scripts/add-to-disk.sh +++ b/scripts/add-to-disk.sh @@ -1,19 +1,19 @@ #!/bin/bash -# Adds the gol.a2 Apple2 binary exceutable to the provided disk.dsk +# Adds the required files to the provided disk.dsk # usage: add_to_disk PATH_TO_APPLECOMMANDER.jar set -e - -if (( $# != 1 )); then + +if (( $# != 3 )); then echo "Bad number of arguments" - echo "usage: add_to_disk.sh PATH_TO_APPLECOMMANDER.jar" + echo "usage: add_to_disk.sh PATH_TO_APPLECOMMANDER.jar PATH_TO_BINARY.a2 PATH_TO_DISK" exit fi echo " . revoving previous instance of GOL form the disk" -java -jar ${1} -d disk.dsk GOL +java -jar ${1} -d ${3} GOL echo " .. adding GOL to the disk" -java -jar ${1} -cc65 disk.dsk GOL BIN < gol.a2 +java -jar ${1} -cc65 ${3} GOL BIN < ${2} echo "DONE." diff --git a/scripts/pyHiRes.py b/scripts/pyHiRes.py deleted file mode 100755 index 0a5b464..0000000 --- a/scripts/pyHiRes.py +++ /dev/null @@ -1,131 +0,0 @@ -#! /usr/bin/env python3 - -import os.path -import argparse -from PIL import Image - -# HiRes colors -BLACK = [0x00, 0x00, 0x00] -WHITE = [0xFF, 0xFF, 0xFF] -GREEN = [0x00, 0xFF, 0x00] -BLUE = [0x00, 0x00, 0xFF] -ORANGE = [0xFF, 0x77, 0x00] -VIOLET = [0xFF, 0x00, 0xFF] - -Msg_Warning = "" -Color_Last = BLACK - -def error(msg, err_code): - print(msg) - exit(err_code) - - -# Compute the Euclidean distance between 2 colors -def distance(color1, color2): - return (color1[0] - color2[0])**2 + (color1[1] - color2[1])**2 + (color1[2] - color2[2])**2 - - -# Returns the nearest color -def nearest_color(color): - dist_black = distance(BLACK, color) - dist_white = distance(WHITE, color) - dist_green = distance(GREEN, color) - dist_blue = distance(BLUE, color) - dist_orange = distance(ORANGE, color) - dist_violet = distance(VIOLET, color) - dist_min = min([dist_black, dist_white, dist_green, dist_blue, dist_violet, dist_orange]) - if dist_min == dist_black: - return BLACK - elif dist_min == dist_white: - return WHITE - elif dist_min == dist_green: - return GREEN - elif dist_min == dist_blue: - return BLUE - elif dist_min == dist_orange: - return ORANGE - else: - return VIOLET - -# Returns True if the 7 pixel block can be converted into hires with no artifact -# Returns False otherwise -def compliant_hires(block): - global Msg_Warning - global Color_Last - # Test if colors from the two groups are in the block, aka "clashing" - group_one = False - group_two = False - nb_pixels = len(block)//3 - for i in range(0, nb_pixels): - color = block[3*i:3*(i+1)] - if color == ORANGE or color == BLUE: - group_one = True - if color == GREEN or color == VIOLET: - group_two = True - if group_one and group_two: - Msg_Warning = "Colors from two groups, some clashing will occur!" - return False - # Test if there are two consecutive different colors in the group - Msg_Warning = "Two consecutive different colors may lead to an artifact" - color = block[0:3] - if Color_Last != BLACK and Color_Last != WHITE \ - and color != BLACK and color != WHITE \ - and color != Color_Last: - return False - for i in range(0, nb_pixels-1): - color = block[3*i:3*(i+1)] - if color != BLACK and color != WHITE: - color_next = block[3*(i+1):3*(i+2)] - if color_next != BLACK and color_next != WHITE \ - and color != BLACK and color != WHITE \ - and color != color_next: - return False - Color_Last = block[3*(nb_pixels-1):3*nb_pixels] - return True - - -# PARSING COMMAND LINE ARGUMENTS -parser = argparse.ArgumentParser(description="This script converts a 24bit RGB image file into an Apple II HiRes image.") -parser.add_argument("file", help="file to convert") -parser.add_argument("-o", "--output", help="output filename", required=False) -args = parser.parse_args() - - -# SANITIZE PARAMETERS -if not os.path.exists(args.file): - error("File " + args.file + " does not exist!", -1) - - -# MAIN -try: - # Open source image - image_rgb = Image.open(args.file).convert('RGB') - w = image_rgb.size[0] - h = image_rgb.size[1] - - if w != 140 or h != 192: - error("Source image must be 140x192 pixels", -1) - - # Quantize image to the HiRes's 6 colors - image_quantized = [] - for y in range(0, h): - for x in range(0, w): - color = nearest_color(image_rgb.getpixel((x, y))) - for i in range(0, 3): - image_quantized.append(color[i]) - if len(image_quantized) != 3*140*192: - error("Bad quantized size", -1) - - # image_test = Image.frombytes('RGB', (140, 192), bytes(image_quantized)) - # image_test.show() - - # Test image conpliance to HiRes limitations - nb_pixels = 7 # nb pixels per line block - for i in range(0, 140 * 192 // nb_pixels): - block = image_quantized[3*i*nb_pixels: - 3*(i+1)*nb_pixels] - if not compliant_hires(block): - print("Warning @block #" + str(i+1) + ": " + Msg_Warning) - -except ValueError: - error(ValueError, -1) diff --git a/src/file_io.c b/src/file_io.c old mode 100644 new mode 100755 diff --git a/src/file_io.h b/src/file_io.h old mode 100644 new mode 100755 diff --git a/src/game-of-life.cfg b/src/game-of-life.cfg new file mode 100755 index 0000000..5db7b01 --- /dev/null +++ b/src/game-of-life.cfg @@ -0,0 +1,49 @@ +# Default configuration (allowing for 3KB in LC) + +FEATURES { + STARTADDRESS: default = $0803; +} +SYMBOLS { + __EXEHDR__: type = import; + __STACKSIZE__: type = weak, value = $0800; # 2k stack + __HIRESP2__: type = weak, value = $4000; # Start of HIRES PAGE2 + __BSS__: type = weak, value = $6000; # Start of BSS after HIRES PAGE2 + __HIMEM__: type = weak, value = $9600; # Presumed RAM end + __LCADDR__: type = weak, value = $D400; # Behind quit code + __LCSIZE__: type = weak, value = $0C00; # Rest of bank two +} +MEMORY { + ZP: file = "", define = yes, start = $0080, size = $001A; + HEADER: file = %O, start = %S - 4, size = $0004; + MAIN: file = %O, define = yes, start = %S, size = __HIRESP2__ - %S; + BSS: file = "", start = __BSS__, size = __HIMEM__ - __BSS__; + LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + EXEHDR: load = HEADER, type = ro; + STARTUP: load = MAIN, type = ro; + LOWCODE: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + INIT: load = MAIN, type = rw; + ONCE: load = MAIN, type = ro, define = yes; + LC: load = MAIN, run = LC, type = ro, optional = yes; + BSS: load = BSS, type = bss, define = yes; +} +FEATURES { + CONDES: type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__, + segment = ONCE; + CONDES: type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__, + segment = RODATA; + CONDES: type = interruptor, + label = __INTERRUPTOR_TABLE__, + count = __INTERRUPTOR_COUNT__, + segment = RODATA, + import = __CALLIRQ__; +} diff --git a/src/gfx.asm b/src/gfx.asm old mode 100644 new mode 100755 diff --git a/src/gfx.h b/src/gfx.h old mode 100644 new mode 100755 diff --git a/src/gol_apple2.c b/src/gol_apple2.c old mode 100644 new mode 100755 index b66739c..b8f5216 --- a/src/gol_apple2.c +++ b/src/gol_apple2.c @@ -40,7 +40,7 @@ void editor( void ); /* lets the user draw some starting cell int8_t editor_load_save( const uint8_t load_or_save ); void toggle_cell( const uint8_t x, const uint8_t y ); /* toggles the cell at the given coordinates. \ Returns the cursor X position */ - +void title_screen( void ); /* Loads and display the title screen */ void run( void ); /* runs the simulation */ void __fastcall__ update( void ); /* updates the simulation */ uint8_t __fastcall__ count_neighbours( uint8_t* cell ); /* counts nb neighbours of the cell */ @@ -85,6 +85,7 @@ enum { static uint8_t Cells[ NB_COLUMNS ][ NB_LINES ]; static uint8_t Cells_Future[ NB_COLUMNS ][ NB_LINES ]; static uint8_t Cells_Initial[ NB_COLUMNS ][ NB_LINES ]; +//static uint8_t Title_Screen[ 0x2000 ]; /******************** CODE ************************/ @@ -94,6 +95,9 @@ int main( int argc, char** argv ) (void)argc; (void)argv; + /* Displaying the Title Screen */ + title_screen(); + init_asm( (uint8_t*)Cells, (uint8_t*)Cells_Future ); init_rnd_color(); @@ -211,7 +215,7 @@ void editor( void ) uint8_t color_pixel; uint8_t update_color = 1; - const char* const text = "J L I K: Move the cursor\nSPACE : Toggle a cell\n\n(L)oad - (S)ave - (D)one"; + const char* const text = "H K U J: Move the cursor\nSPACE : Toggle a cell\n\n(L)oad - (S)ave - (D)one"; set_text( text ); //Place the cursor middle screen @@ -376,3 +380,31 @@ void run( void ) } } } + +/****** HIRES SCREEN DEFINITIONS ***********/ +#define HIRES_PAGE2 (char*)0x4000 +#define HIRES_PAGE_SIZE 0x2000 +#define SWITCH_GRAPHICS *((uint8_t*)0xC050)=1 +#define SWITCH_FULLSCREEN *((uint8_t*)0xC052)=1 +#define SWITCH_PAGE2 *((uint8_t*)0xC055)=1 +#define SWITCH_HIRES *((uint8_t*)0xC057)=1 + +//The Title Screen asset is located in the "assets" folder +void title_screen( void ) +{ + uint8_t handle; + file_open("GOL.SCREEN", &handle); + if(file_read( handle, HIRES_PAGE2, HIRES_PAGE_SIZE ) != HIRES_PAGE_SIZE ) { + printf("\nERROR, CANNOT READ GOL.SCREEN\nERRNO: %x\n\n", file_error()); + file_close(handle); + exit(-1); + } + file_close(handle); + + SWITCH_GRAPHICS; + SWITCH_FULLSCREEN; + SWITCH_PAGE2; + SWITCH_HIRES; + + cgetc(); +} diff --git a/src/gol_apple2_optimized.asm b/src/gol_apple2_optimized.asm old mode 100644 new mode 100755 diff --git a/src/gol_linux.c b/src/gol_linux.c old mode 100644 new mode 100755 diff --git a/src/mli.asm b/src/mli.asm old mode 100644 new mode 100755 index 9c41296..17096ca --- a/src/mli.asm +++ b/src/mli.asm @@ -32,13 +32,6 @@ _call_to_mli: JSR popa STA Mli_Call - ;+ DEBUG -; CMP #$CE -; BNE continue -;debug: JMP debug -;continue: - ;- DEBUG - ; Call MLI and return JSR $BF00 ; MLI call entry point Mli_Call: diff --git a/src/rnd_colors.asm b/src/rnd_colors.asm old mode 100644 new mode 100755 diff --git a/src/rnd_colors.h b/src/rnd_colors.h old mode 100644 new mode 100755