' +JJJJ ?\>m0M='+l> /+l   d]@ŵLҦ]]LF L}BBL] X  ` 鷎귭෍ᷩ췩緈JJJJx Lȿ L8ᷭ緍췩 緍i 8 `巬 췌`x (`(8`I`B` ``>J>J>VU)?`8'x0|&HhHh VY)'&Y)xꪽ)' `Hh`V0^*^*>&` aI꽌ɪVɭ&Y&&Y& 꽌ɪ\8`&&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`+*xS&x'8*3Ixix&& 8  '  & x)*++`FG8`0($ p,&"ųųೳŪŪųųij  !"#$%&'()*+,-./0123456789:;<=>?   1 '" *"( (9"1 ( ,.(0# 2  /#0/#0 *?'#07#00/0/'#07#0:"4<*55/**5/*%5/)1/)1/)1/)'#0/#0*5/*75/**5/*:5//#0/#0'#07#0:::*::'#07#0"):$(%"%:$(%"%$$2%4%$$2%4%$(2()!)E(!8b $!H(+ "@H !D)"E` @ $ C ` DQ &J80^݌Hh ü ü݌ ռ ռ ռA ļD ļ? ļAEDE?HJ>h Լ ռ ռ ռ`HJ>݌h Hh݌`葠葠ȔЖȔЖȠHIHHHHhHH݌hHhHh݌H6 ˆʎõĵL õ ĵµ aµ`` L̦µ_bJLuLz`  ȟ QlXJ̥KlV  ȟ QlV eօ3L e3L &RL &QL d L4 Ne)n `@-eff L f`L . tQLѤ LҦL` OPu d L Ne)noon 8ɍ` ^f\õL ^NR  RΩLҦ)\Z ʽ LHv 3h`0h8` [L NС õ`A@` ŵL^Lõ`  \ 濭0 \  ȟ Q ^\lZl^?cqH şch`fhjõĵ@OAP`u@`@&`QR`E Ls  @DAE@u`8` %@ @A@`@`@A`Mµ ) LЦ`8@AWc@8@-@HAȑ@hHȑ@ȑ@hHȑ@Ȋ@ch8&ȑ@Hȑ@Ah@LHȑ@ȑ@ htphso`hMhL`9V8U897T6S67`INILOASAVRUCHAIDELETLOCUNLOCCLOSREAEXEWRITPOSITIOOPEAPPENRENAMCATALOMONOMOPRINMAXFILEFINBSAVBLOABRUVERIF!pppp p p p p`" t""#x"p0p@p@@@p@!y q q p@  LANGUAGE NOT AVAILABLRANGE ERROWRITE PROTECTEEND OF DATFILE NOT FOUNVOLUME MISMATCI/O ERRODISK FULFILE LOCKESYNTAX ERRONO BUFFERS AVAILABLFILE TYPE MISMATCPROGRAM TOO LARGNOT DIRECT COMMANč$3>L[dmx- ( >  Ϡ-@跻~!Wo*9~~~~ɬƬ~_ j ʪHɪH`Lc (L ܫ㵮赎 ɱ^_ J QL_Ls贩紎 DǴҵԵƴѵӵµȴ 7 ַ :ŵƴѵǴҵȴµ納贍﵎ٵ്ᵭⳍڵL^ѵ-I `  4 ò-յ!  8صٵ紭ﵝ 7L (0+BC  7L HH`LgL{0 HH` õL H hBL BH [ h`Lo õ ڬL B ڬ LʬH hB@ յյ [L (ȴ) ȴ 7L L ( L (ȴL{ƴѵ洩ƴǴҵ 7 ^* B0 HȱBh ӵԵ 8 L8 ݲ` ܫ  / / ED B / / ]ƴS0Jȴ ȴ)  紅D贅E B ƴ  / 0L Ν `HD٤DEEhiHLGh ` ŵBѵ-` ѵB-` ܫI볩쳢8 DH E𳈈췍Ȍ X0 · JLǵBȵC`,յp` 䯩 R-յյ`յ0` K R-յյ`ɵʵӵԵ` 4 K ( ѵҵLBȱBL8` DBHBH : ַ޵BȭߵBhhӵԵ RBܵmڵ޵ȱBݵm۵ߵ` 䯩LR˵̵ֵ׵`êĪLR E( 8` R` ELRŪƪ`췌 յյI뷭鷭귭ⵍ㵍跬ª 뷰` Lf ݵܵߵ޵ ^`8ܵ i B8` 4L ֵȱB׵ ܯ䵍൭嵍 ` DȑB׵Bֵ  ַ յյ`굎뵎쵬 뵎쵌``õĵBCõĵ`µµ`L õBĵCصص Qƴ0"Bƴ 󮜳` 0۰ϬBƴ8`i#`ЗLw!0>ﵭ` m ﳐ 7i볍 8 ЉLw`H h ݲL~ `浍국䵍뵩嵠Jm赍嵊mjnnn浈ۭm浍浭m䵍䵩m嵍`"L ŵ8ŵH ~(` d ֠z#e original. If they are not identical, then Diversi-COPY beeps and gives a 'Compare Error'. Comparison mode works with 1-drive, 2-drives, formatting and mass production. At the end of a mass production session, we recommend that you compare your originaer 'C' will appear in the lower right corner of the screen. To leave comparison mode, hit 'C' again (the letter 'C' will disappear). While in comparison mode, Diversi-COPY does not write duplicates. Instead it compares an already written duplicate to th12 - Verify error / compressed data NOTE: To copy 40-track disks, hit '*' from the main menu (requires 40-track drives). *** Comparing Disks *** Diversi-Copy can compare 2 disks to see if they are identical. To enter comparison mode, hit 'C'. The lettdrive or motor speed error 2 - Write protected 3 - No address mark (D5 AA 96) 4 - Volume mismatch 5 - Wrong track 6 - Bad address data 7 - No data mark (D5 AA AD) 8 - Data checksum error 9 - No DE trailer 10 - No AA trailer 11 - Verify error / wrong byte 64K Apple II+ with an extra 128K card is just a little short of the 200K needed, but will work for almost all originals if a few sectors are unused. *** Error Numbers *** For the technically oriented, here is a list of possible disk errors: 1 - Empty already have a //e with a 64K extended 80-column card, then buy a 128K card from Titan, Legend, Omega, Prometheus or Abacus. The Abacus 128K card is the most versatile for the hobbyist (313 524-2444), but the other companies are larger and better known. A 192K 'Neptune' extended 80-column card may also be used. If you're buying a new computer for mass production, we suggest that you get a //e without an 80-column card. Then buy the 192K 'Neptune' extended 80-column card from Titan (313 662-8542). If you y full disks, however, you'll need to add extra memory to your computer. You need a total of about 200K to copy any disk. Diversi-COPY automatically recognizes the 64K extended 80-column card in the Apple //e, and all 16K and 128K cards in any slot. Thehe keyboard. While Diversi-COPY is writing to drive #2, put a new disk in drive #1, and vice-versa. *** Extra Memory *** You can mass-produce newly formatted disks on any computer, since Diversi-COPY will compress the unused sectors. To handle completel? @0@4@|@@@@˜ @@@@Ʃ@@z'@7@}Ɯ0LZα˜̜Μ Lz@P`p#ˠ͠ōL?@ALH0L HL,HȽ8HG }FH>ȱH?,+$8}`LIF}>թ}>}F𷍋1˜}@?>>??>Ȋ> m6n:o>:d);0h#i'j+k/l3m7n;o?h#i'j+k/l3m7n;o?:T`Lud0i(i(iji(:;i( i(܃݃i(i(~i(OPi(m5n9o=h!i%j)k-l1m5n9o=:d);0hQ#iQ'jQ+kQ/lQ3mQ7nQ;oQ?hP#iP'jP+kP/lP3mP7nP;oP?h"i&j*k.l2m6n:o>h"i&j*k.l2P5nP9oP=h i$j(k,l0m4n8o<h i$j(k,l0m4n8o<:d);0hQ"iQ&jQ*kQ.lQ2mQ6nQ:oQ>hP"iP&jP*kP.lP2mP6nP:oP>h!i%j)k-l1Q4nQ8oQ<hP iP$jP(kP,lP0mP4nP8oP<h#i'j+k/l3m7n;o?h#i'j+k/l3m7n;o?:d);0hQ!iQ%jQ)kQ-lQ1mQ5nQ9oQ=hP!iP%jP)kP-lP1md);0h)#i)'j)+k)/l)3m)7n);o)?h(#i('j(+k(/l(3m(7n(;o(?h"i&j*k.l2m6n:o>h"i&j*k.l2m6n:o>:d);0hQ iQ$jQ(kQ,lQ0m i$j(k,l0m4n8o<:d);0h)"i)&j)*k).l)2m)6n):o)>h("i(&j(*k(.l(2m(6n(:o(>h!i%j)k-l1m5n9o=h!i%j)k-l1m5n9o=:i'j+k/l3m7n;o?h#i'j+k/l3m7n;o?:d);0h)!i)%j))k)-l)1m)5n)9o)=h(!i(%j()k(-l(1m(5n(9o(=h i$j(k,l0m4n8o<hi'j+k/l3m7n;o?h"i&j*k.l2m6n:o>h"i&j*k.l2m6n:o>:d);0h) i)$j)(k),l)0m)4n)8o)<h( i($j((k(,l(0m(4n(8o(<h#i&j*k.l2m6n:o>h"i&j*k.l2m6n:o>h!i%j)k-l1m5n9o=h!i%j)k-l1m5n9o=:d);0h#i'j+k/l3m7n;o?h#l0m4n8o<:d)0;h!i%j)k-l1m5n9o=h!i%j)k-l1m5n9o=h i$j(k,l0m4n8o<h i$j(k,l0m4n8o<:d);0h"i)Ld0i(vvi(vvi(wwi(xxi(]y^yi(.z/zi(z{i({{i(||i(r}s}i(C~D~i(:c ;h i$j(k,l0m4n8o<h i$j(k,Fp DȩpDL> ȱDpFp DpDL> L> F)p DFpL> ɔ030%3Fi(Gip DL> pDL> ɄHHLɀHHLDL> DiDL> pDL> DL> L> 80L> )DL> rr00ょ膆ょょ|||Dggg"|||gggD|||Dggg"|||gggD|||www}}}ggg"|||www}}}ggg"}}}ooo~~~"www}}}ooo~~~"www~~~"gggD|||Dooo~~~"gggD|||Dooo`Lø{{ttmnghab\\WWRRMNIIEEAA=>::673401..+,))&'$%"# !"&).$')0*,.1,7-5".$ 0$ ".$*:.* ,"(8,(-.''3'"" 23"2323 01.:.8.7.5,8,8,3,823"2323 012.)&0,' 2.)&0,' c 28Ω18Ȅ1&i yt i&$$i$2( i(1``o8 O i`LĎ0`LL0`LLŽ JF 8ȹ e8ЛLqe` ތee8`jj)j)jj)eiee`ũF ތ)id ތ` `hihjikjlkmlnmonod uLed`hLuņĤ&,00 tl&Fp lȱDlpDl pL> 6 ތ%5 JHKILJRcvBl?t;BL> ȱDltDL> FltFL> DltDL> )DL> 9Dͥ.L> DL> DL> DL> DL> iiаЅ8аpШ)ТDȩDȩpDВȱDpɘɜ8G/l̩DpDȅХɌ L8Ɉ!ȱDp)DDpDȅL> $BlWpSɘɜ8/CɌ LًFlpɘɜ8/Ɍй l̅˩FppDL> l̅˩BpDL> 7D466Bp*_:U`L+. [>0LLXDlBɌ LyɈf)`ȱDpTDpDȅHDp?DȩpD2pD*BlɌ 鍩pBFlɌ 鍩pF̤L> LzXDpɘɜ8Յ/l̩DȩpDL> Ɍ LɈЯDɹhPCiPGjPKkPOlPSmPWnP[oP_hBiFjJkNlRmVnZo^hBiFjJkNlRmVnZo^:d);0hCiGjKkOlSmWn[o_hCiGjKkOlSmWn[ohQBiQFjQJkQNlQRmQVnQZoQ^hPBiPFjPJkPNlPRmPVnPZoP^hAiEjIkMlQmUnYo]hAiEjIkMlQmUnYo]:d);0hQCiQGjQKkQOlQSmQWnQ[oQ_kOlSmWn[o_:d);0hQAiQEjQIkQMlQQmQUnQYoQ]hPAiPEjPIkPMlPQmPUnPYoP]h@iDjHkLlPmTnXo\h@iDjHkLlPmTnXo\:d);0kNlRmVnZo^hBiFjJkNlRmVnZo^:d);0hQ@iQDjQHkQLlQPmQTnQXoQ\hP@iPDjPHkPLlPPmPTnPXoP\hCiGjKkOlSmWn[o_hCiGjK(Nl(Rm(Vn(Zo(^hAiEjIkMlQmUnYo]hAiEjIkMlQmUnYo]:d);0h)Ci)Gj)Kk)Ol)Sm)Wn)[o)_h(Ci(Gj(Kk(Ol(Sm(Wn([o(_hBiFjJ)Ml)Qm)Un)Yo)]h(Ai(Ej(Ik(Ml(Qm(Un(Yo(]h@iDjHkLlPmTnXo\h@iDjHkLlPmTnXo\:d);0h)Bi)Fj)Jk)Nl)Rm)Vn)Zo)^h(Bi(Fj(JkZo^:d);0h)@i)Dj)Hk)Ll)Pm)Tn)Xo)\h(@i(Dj(Hk(Ll(Pm(Tn(Xo(\hCiGjKkOlSmWn[o_hCiGjKkOlSmWn[o_:d);0h)Ai)Ej)IkYo]hAiEjIkMlQmUnYo]:d);0hCiGjKkOlSmWn[o_hCiGjKkOlSmWn[o_hBiFjJkNlRmVnZo^hBiFjJkNlRmVno]h@iDjHkLlPmTnXo\h@iDjHkLlPmTnXo\:d);0hBiFjJkNlRmVnZo^hBiFjJkNlRmVnZo^hAiEjIkMlQmUn !i(i(ˆÈi(:c ;h@iDjHkLlPmTnXo\h@iDjHkLlPmTnXo\:d);0hAiEjIkMlQmUnYo]hAiEjIkMlQmUnYtttttttttt:@0t2*D68tttt ( T  % (   C C P% 0\[Z*h–,plhd>Htttttt*>*Htttttt0.t2*D6x~{  2%'  C  C  "    ( 2   %   ( P HTPP TP% B     %' 2700ɍ$Ɉ۰ iӑBΈȩNBLtttt0<*6t8"tttt0<*6tt8"68tt.:6tD0<6t$.$:$*8Jtt06t2688t<::0.Htt Ñc tcc Ȑ2 c ȐF #c ȐZ -c Ȑn 7c( ȐLtcXc& ic בc 둝cL D DLD&&&`E&iDBҪҪժҪժҪժժժժժҪժҪժҪժժժժ3 33>3 ժժժҪժժҪժժҪժժժժҪժҪժҪժժժժժժҪժҪժҪժժժժҪҪժժҪժժժժժժժҪժҪժҪժժժժժҪҪժҪժժժժժժժժժժժժժժժժժժժժժժժժժҪժꪭժҪժ׻תժ ??33>? ҪժҪժҪժժҪժժժժժҪҪժҪժժժժ3 6 ?36ЪժժժҪժժҪժժҪժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժҪժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժҪҪժҪժҪժժժժժҪժҪժҪժժժժ60336336 ժժժҪժժҪժժҪժժժժҪժҪժҪժժժժժ֪ҪժҪժҪժժժժҪҪժժҪժժժժժժժҪժҪժҪ֪ժժժժҪҪժҪժժժժժժժժժժժժժժժժժժժժժժժժժҪժڪժҪժ׻תժ66 ? 363 03ҪժҪժҪժժҪժժժժժҪҪժҪժժժժ3 0 363336 3ժժժժժժժժժժժժժժժժժժժժժ֪ժҪժժҪ֪ժҪժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժҪժժժժժժժժժժժժժՂҪҪժҪժҪժժժժժҪժҪժҪժժժժ  ? ժժժҪժժҪժժҪժժժժҪժҪժҪժժժժժڪҪժҪժҪժժժժҪҪժժҪժժժժժժժҪժҪժҪڪժժժժҪҪժҪժժժժժժժժժժժժժժժժժժժժժժժժժҪժ֪ժҪժתժ6?? ?6? 33 ;ҪժҪժҪժժҪժժժժժҪҪժҪժժժժ?66 ?? 363336? 3ժڪժҪժժҪڪժҪժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժҪժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժҪҪժҪժҪժժժժժҪժҪժҪժժժժժժժҪժժҪժժҪժժժժҪժҪժҪժժժժժꪭҪժҪժҪժժժժҪҪժժҪժժժժժժժҪժҪժҪꪕժժժժҪҪժҪժժժժժժժժժժժժժժժժժժժժժժժժժҪժժժҪ߫תժ6337 363 777 76ҪժҪժҪժժҪժժժժժҪҪժҪժժժժ366 3337 36363363 3ժժժժժժժժժժժժժժժժժժժժժꪭժҪժժҪꪭժҪժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժժҪժժժժժժժժժժժժժՊMNNNXHYHMHMACĒ7 XA,YBXC,YD# * 36 T1PT? A,BM M0AA[ N0BBh XA,YBn   -1,-2,-1,2,1,-2,2,-2,-2,-2,-2,-1,2,-2,2,-1,-3,1,-3,3,3,1,3,3,1,-2,1,2  -2,3,2,37,-1,6,2,7,2,7,1XHYHMXPYP*cLN7:PT2(d"TUMBLER 3:-3,3:-2"Ln"INPUT CO-ORDINATES X,Y";:X,Yyx"INPUT +1,-1 FOR REFLECTIONS X,Y";:M,NT1LNA,B,C,DM0AA:CCN0BB:DD((XA)2)(AX)2(CA)Ē2((AX)2)(AX)2(CA)Ē1  230,64:0&49232,0:49237,04I98181DI,48I,111J(Q23d<135,75136,75wF135,76136,76P138,76139,76Z134,77:138,77139,77d135,78136,78:140,78n135,79136,79:138,79139,79x138,80139,80I1,6,2,7,2,7,1XHYHMXPYPMNNNXHYHMHMLĒ7 XA,YBXC,YD % 31 T1PT: A,BH M0AAV N0BBc XA,YBi   9,1,10,1,1,4,2,4,5,4,6,4,1,5,2,5,9,7, 10,7,21,4,22,4,21,5,22,5  7,2,11,2,6,3,12,3,8,4 ,12,4,6,5,12,5,7,6,11,67,-ZcLN7:PT10#d"SCHICK SHIP"Gn"INPUT CO-ORDINATES X,Y";:X,Ytx"INPUT +1,-1 FOR REFLECTIONS X,Y";:M,NT1LNA,B,C,DM0AA:CCN0BB:DD((XA)2)(AX)2(CA)Ē2((AX)2)(AX)2(CA)Ē1 ACYHMHMĒ1 ACĒ7% XA,YBXC,YD+ 2 3> T1PTG A,BU M0AAc N0BBp XA,YBv   0,0,1,0,3,0,6,0,8,0,9,0  2,-1,2,1,7,-1,7,17,-1,6,2,7,2,7,1XHYHMXPYPMNNNXH cLN3:PT40d"PENTADECATHLON 9:0,-1:1 "Tn"INPUT CO-ORDINATES X,Y";:X,Yx"INPUT +1,-1 FOR REFLECTIONS X,Y";:M,NT1LNA,B,C,DM0AA:CCN0BB:DD((XA)2)(AX)2(CA)Ē2 ((AX)2)(AX)2(CA)     0 4P0  ,0&` @0(   `@J @0H P  @` *  ؟ T! (А `@"Q @Ёp: B0Q @H   0P` џ@L0   SIJ ࡂ 0# A0ĿQ X0P ĺW 0   <ĺW@Ѓ@;A@0P 0Q@ Ŀ A AIJ &P! ʪ $џ 0P@  ܠ( 윇B@!(  $"Q@@@P@@؟ T  *  ǃ% P @( *J @@  @                ACĒ7 XA,YBXC,YD& - 39 T1PTB A,BP M0AA^ N0BBk XA,YBq   1,1,5,1,5,1,5,-1  0,0,4,-2 7,-1,6,2,7,2,7,1XHYHMXPYPMNNNXHYHMHMLcLN2:PT2+d"MEDIUM-SHIP 5:0,-2:1"On"INPUT CO-ORDINATES X,Y";:X,Y|x"INPUT +1,-1 FOR REFLECTIONS X,Y";:M,NT1LNA,B,C,DM0AA:CCN0BB:DD((XA)2)(AX)2(CA)Ē2((AX)2)(AX)2(CA)Ē1  l  :30,0:62454)I019130#0L(I,0I,191:0,I279,I:j2I1922793:I,0I,191: I  :7! "LINE LENGTH:";LL6"SEPARATION ";A^"TOP LEFT POSN (ACROSS,DOWN) ";X,YpdX,YXLL1,YxX,YAXLL1,YA" FOR MORE, Q TO RUN ";A$A$"Q"Č4096:20cL ACĒ7 XA,YBXC,YD% , 38 T1PTA A,BO M0AA] N0BBj XA,YBp   1,1,4,1,4,1,4,-1  0,0,3,-27,-1,6,2,7,2,7,1XHYHMXPYPMNNNXHYHMHMLcLN2:PT2*d"LIGHT-SHIP 4:0,-2:1"Nn"INPUT CO-ORDINATES X,Y";:X,Y{x"INPUT +1,-1 FOR REFLECTIONS X,Y";:M,NT1LNA,B,C,DM0AA:CCN0BB:DD((XA)2)(AX)2(CA)Ē2((AX)2)(AX)2(CA)Ē1  2,-6,2,-6,1,6,-2,7,-2,7,-1,6,2,7,2,7,1,-1,07,-1,6,2,7,2,7,1XHYHMXPYPMNNNXHYHMHMA)Ē1 ACĒ7( XA,YBXC,YD. 5 3A T1PTJ A,BX M0AAf N0BBs XA,YBy   -1,-2,2,-2,-1,2,2,2,-2,-1,-2,1,3,-1,3,1,5,-1,5,1,-4,-1,-4,1,0,-4,-1,-4,0,-5,-1,-5,0,4,-1,4,0,5,-1,5+  -5,-2,-6,-2,-6,-1,-5,cLN10:PT133d"HERTZ OSCILLATOR 7:-6,5:-5"Wn"INPUT CO-ORDINATES X,Y";:X,Yx"INPUT +1,-1 FOR REFLECTIONS X,Y";:M,NT1LNA,B,C,DM0AA:CCN0BB:DD((XA)2)(AX)2(CA)Ē2 ((AX)2)(AX)2(C ACĒ7 XA,YBXC,YD% , 38 T1PTA A,BO M0AA] N0BBj XA,YBp   1,1,6,1,6,1,6,-1  0,0,5,-2 7,-1,6,2,7,2,7,1XHYHMXPYPMNNNXHYHMHMLcLN2:PT2*d"HEAVY-SHIP 6:0,-2:1"Nn"INPUT CO-ORDINATES X,Y";:X,Y{x"INPUT +1,-1 FOR REFLECTIONS X,Y";:M,NT1LNA,B,C,DM0AA:CCN0BB:DD((XA)2)(AX)2(CA)Ē2((AX)2)(AX)2(CA)Ē1  0,-1,1,-4,1,-1,2,-2,2  -4,27,-1,6,2,7,2,7,1XHYHMXPYPMNNNXHYHMHMYHMHML(CA)Ē2* ((AX)2)(AX)2(CA)Ē17 ACĒ7L XA,YBXC,YDR Y 3e T1PTn A,B XX1AA:CC YY1BB:DD XA,YB  RRY "X,Y:XXM:YYN:CNCN1:CNLL290 ,X,YN:X,Y2N  -1,0,-4,T"% "4) TOP RIGHT TO BOTTOM LEFT"0 ">";NL N1M1:N1:XX0:YY0j N2M1:N1:XX1:YY1 N3M1:N1:XX1:YY1 N4M1:N1:XX1:YY1 T1LN A,B,C,D XX1AA:CC YY1BB:DD ((XA)2)(AX)2̀cLN3:PT1!d"HARVESTER "Zn"INPUT CO-ORDINATES X,Y":"FOR STARTING POINT":X,Ytx"LENGTH OF CROP ";LLz:"SELECT ONE OF THE FOLLOWING"|"1) BOTTOM LEFT TO TOP RIGHT"}"2) BOTTOM RIGHT TO TOP LEFT" ~"3) TOP LEFT TO BOTTOM RIGH    -2,34,-1,35,- 2,35,-1 c 25,-4,25,2,24,-1,12,-1,13,-2 ,14,-1,12,3,13,4,14,3 7,-1,6,2,7,2,7,1XHYHMXPYPMNNNXHYHMHMP ACĒ7!XA,YBXC,YD'.3:T1PTCA,BQM0AA_N0BBlXA,YBr& 0,0,1,0,0,1,1,1,11,0,11, 2, 15,0,15, 2,16,0,16,2,21,-2,21,0,22 ,-3,25,-3,21,-2,24,-2,21,0,24,0,22 ,1,25,1,30,0,30,1,34,cLN13:PT9,d"GLIDER GUN 35:0,4:-3"Pn"INPUT CO-ORDINATES X,Y";:X,Y}x"INPUT +1,-1 FOR REFLECTIONS X,Y";:M,NT1LNA,B,C,DM0AA:CCN0BB:DD((XA)2)(AX)2(CA)Ē2((AX)2)(AX)2(CA)Ē1   NXHYHMHMMACĒ7 XA,YBXC,YD" ) 35 T1PT> A,BL M0AAZ N0BBg XA,YBm   0,-2,0,-1,1,-3,3,-3,-1,1,-1,2,-2,3,-4,3  1,-1,3,-4,-2,1,-4,47,-1,6,2,7,2,7,1XHYHMXPYPMNNcLN4:PT4'd"EATERS 3:-4,4:-4"Kn"INPUT CO-ORDINATES X,Y";:X,Yxx"INPUT +1,-1 FOR REFLECTIONS X,Y";:M,NT1LNA,B,C,DM0AA:CCN0BB:DD((XA)2)(AX)2(CA)Ē2((AX)2)(AX)2(CA)Ē1 (NEWBOT),Y (MID),Y  (NEWBOT),Y  <2 NEWBOT+1 MID+1 <2 $C082TURN OFF BANK RAM DOG ; ; CNTLO 00 CNTHI 00 ; MSG1 "GEN: $"  03END OF MESSAGE ; ; ;  1 DOG+2 #$A5 !RSTVCTR+2FIX UP POWER-UP BYTE #DOSINPRECONNECT DOS CSWL /DOSINP CSWL+1 $C083TURN ON BANK RAM $C083 #$00SET UP PTRS MID NEWBOT AND OFFSET #$D0 MID+1 #$90 NEWBOT+1 ^2 (MID),Y  PRESS <5 KBDSTRBTURN IT OFF $C052SHOW ALL GRAPHICS STARTSCNAND LOOP ; ; $MEMOVE2 RSTVCTRSWAP DOS BACK IN? #DOSWRM >1YES! NO, RETURN ^1 #DOSWRM RSTVCTRMODIFY RESET VECTOR DOG+1AND DOS PTR /DOSWRM RSTVCTR+3A CTRL-S? LOOPNO, LOOP $C053SHOW BOT 4 LINES HOMECLEAR SCREEN #$00 CHHTAB1 #$16 TABVVTAB22 ^3 MSG1,YPRINT MESG >4 COUT  <3 ^4 CNTHIPRINT THE COUNT CNTLO PRNTAXDONE! ^5 KYBDGET A KEYIDTMP SIXBITAND DO SCAN ; ; DONESCRNCNTLOINC GEN COUNT >1 CNTHI ^1 KYBDANY KEYPRESS? GETKEYYES LOOP STARTSCNNO, LOOP GETKEY KBDSTRBTURN OFF KYBD #$83A CTRL-C? >2NO RESETYES, EXIT VIA RESET ^2 #$9N3+2 N4+2 N6+2 N7+2 #$00 N1+2 N5+2 MIDLINNOW MID BASE MIDLIN YLOW,X MID M1+1  #$01 M2+1 M3+1 YHIGH,X MID+1 M1+2 #$00 M2+2 M3+2 #$27START ON RIGHT %(MID),YUPDATE MIDTMP FOR NEXT ROW MMID),YAND SAVE ON SCREEN ; NEXTROW NBLININC NEWBOT BASE NBLIN #$C1FINISHED SCREEN? DONESCRNYES, EXIT YLOW,XGET LSB NEWBOT N2+1 N3+1 N4+1 N6+1 N7+1  #$01 N1+1 N5+1 YHIGH,XGET MSB NEWBOT+1 N2+2 HAS BEEN DECREMENTED  #N6 DUMMY,YNEWBOT+1 ADDRESS <2 TRANSFER A 1 TO B7 #$7F !N7 DUMMY,YNEWBOT ADDRESS SIXBITAND LOOP ! ; ; ; ENDROW (MID),YUPDATE BUFFERS TOP,Y (NEWBOT),Y BOT,Y TEMPGET 6 NEW BITS (BOT SELF-MOD SIXBITAND LOOP ; ^2 #$80BIT ON ,LIVE "N4 DUMMY,YNEWBOT SELF-MOD SIXBITAND LOOP ; ; CELLO CELLON,XAS ABOVE TEMP M3 DUMMY,YMID+1 ADDRESS #N5 DUMMY,YNEWBOT+1 ADDRESS .BOT+1,Y+1 SINCE Y-REG CELLOFF,XGET OFFCELL NEW STATE TEMPGET BACK 6 NEW BITS %M2 DUMMY,YSTORE MID SELF-MOD "N1 DUMMY,YNEWBOT SELF-MOD BOT+1,Y SHIFT BIT0 INTO CARRY "N2 DUMMY,YNEWBOT SELF-MOD >2 #$7FBIT OFF, KILL "N3 DUMMY,YNEWKIP TOP,YGET 1 TOP NBR BIT6,XINTO A-REG #M1 DUMMY,YSELF MOD MIDBYTE MIDTMPSAVE IT MIDBIT,XADD IT TO REST SHIFT OLD CELL INTO CARRY BOT,YGET LAST NBR! BIT6,XADD IT TO A-REG USE AS OFFSET CELLOOLD CELL ON ,SKIP "RE ; ; ; "ONEBIT MIDTMPGET CELL & 1 NBR TOP,YUSE TOP NBRS AS INDEX "TOP,YBUT FIRST UPDATE TOP BUFR #$03REMOVE EXTRA BITS TOPBIT,XADD TOP NBRS BOT,YSAME WITH BOT NBRS BOTBIT,X NOW GET 3 MORE NBRS ENDROWFELL OFF SCREEN, STO STATODD,XGET FINAL ODD STATE OKILMSKKILL SOME BITS TEMPSAVE RESULT MIDTMPGET MID AGAIN CONVERT SO HI-BIT ON  FOR EVEN RESULTS )STATE STATEVN,XGET FINAL EVEN STATE EKILMSKKILL BITS TEMPADD ODD BITS TEMPAND STO TABLE &PC2O PC2ODD,XGET 2ND PC AS ADDR STATO+2FOR FINAL STATE TABLE BOT,YCONVERT BOT AGAIN TO GET EVEN 2ND PARTIAL COUNT PC2E PC2EVN,X STATE+2 ; ; ; MIDTMPGET MID BYTE #$7FTURN BIT7 OFF FOR ODD RESULTS (STAON TO GET EVEN KILL MASK KILEVN KILE,X SHIFT TO CORRECT MASK EKILMSK &BOT,YGET BOT BYTE & TURN HI-BIT ON #$80  #KILODD KILO,XGET ODD KILL MASK OKILMSK ; GET BOT BYTE WITH HI-BIT OFF !#$7FTO USE AS OFFSET INTO PC2 D DO ONEBIT ; ; ; "ALLON PC1ODD,XINTO PC1 LISTS KILODD+2THESE HAVE 64 VALUES %PC2O+2USED AS ADDRS INTO BOTH THE &PC1EVN,XKILL MASK TABLE & THEN PC2 &KILEVN+2TABLE, BOTH AT $4000-$7FFF PC2E+2 ; BOT,YUSE BOT BYTE WITH HI-BIT USE LATER PC1EVN,XGET EVEN PC1 #$C0CONVERT TO PC2 NSTATE+2 ; MIDTMPGET MID BYTE #$7FGET ODD RESULT  NSTATO STATODD,XFINAL ODD TEMPSAVE MIDTMP GET EVEN RESULT   NSTATE STATEVN,X TEMP TEMP ONEBITAN MIDONLY,XNOW GET MID BYTE TEMPSAVE FOR LATER ONEBITAND JUMP TO ONEBIT ; ; TOPON BOT,YCHECK BOT OFF ALLONNO, BOTH ON, OLD WAY ; X HOLDS ONLY BYTE THAT WAS ON BOTON PC1ODD,XGET PART CNT #$C0CONVT TO PC2 ADDRESS NSTATO+2T BIT0 ON (NEWBOT),Y (MID),YUPDATE MIDTMP SIXBIT MIDTMP TOP,Y BOT,Y #$40 SIXBITNOT 3, LOOP  #$01SET UP CELL0 ON (MID),Y  SIXBIT ; ; ; NENDROW UPDATE BUFFERS (NEWBOT),Y BOT,Y NEXTROW ; ; ; %MIDON ID),Y RESET Y-REG SIXBITAND LOOP BACK ; ; NBOTOFF CHECK IF NEXT NBOT &NENDROWSTILL GOTTA CHECK THIS #$@! (NEWBOT),YHAS BIT7=0 CONTYES, NO CHANGE OOPS, NO, MOVE BACK UP CONT1AND DO AS BEFORE ; ; $^4 #$80AS ABOVE BUND OF ROW (NEWBOT),Y >4 #$7F (NEWBOT),YDONE ; !CONT (MID),YSET UP NEW MID SIXBITNOT 3 NBRS, LOOP MIDTMP TOP,YNOW CHECK IF 3 NEXT BOT,YNBRS ARE ON #$40YES? SIXBITNO, DO NEXT STUFF ELSE SET BIT0 ON #$01 (MIS ON, SKIP BOT,YNOW IS BOTTOM OFF? BOTONBOTTOM IS ON, SKIP MIDTMPNOW GET MID BYTE MIDONMID IS ON ONLY %MIDOFF (NEWBOT),YCOPY BIT 0 OVER NBOTOFFNEW BOTTOM OFF !CONT1 BOT,YADD IT TO BUFFER  INTO THE NEXT BYTE NENDROWELINE01,YAS THIS NEVER >2GETS UPDATED BY NEWBOT #$7F  CDSKIP ORA ^2 #$80 LINE01,Y SHIFT BOT0 INTO CARRY  <1 #$27RESTORE Y $2027GET FIRST MIDTMP MIDTMP ; ; ; 'SIXBIT TOP,YUSE TOP BYTE AS OFFSET TOPONTOP +2AND MSB = MID+1 #$02 NBLIN YLOW,X NEWBOT N2+1 N3+1 N4+1 N6+1 N7+1  #$01 N1+1 N5+1 YHIGH,X NEWBOT+1 N2+2 N3+2 N4+2 N6+2 N7+2 #$00 N1+2 N5+2 ;  #$27SET UP LINE1'S BIT7 !^1 CN#$00CLEAR TOP BUFFER #$27 ^1 TOP,Y BOT,YAND BOTTOM BUFR  <1 !#$00SET UP MID & NEWBOT BASES MIDLIN YLOW,X MID M1+1  #$01 M2+1 M3+1MID+1 ABSOLUTE ADDRESS YHIGH,X MID+1 M1+2 #$00 M2+2 M3HT ^1 YLOW,X MID YHIGH,X MID+1 (MID),YGET LEFT BYTE #$FECLEAR BIT 0 (MID),YRESTORE #$27NOW RIGHT (MID),YGET RIGHT BYTE #$7FCLEAR BIT 7 (MID),YRESTORE #$00RESTORE Y! MOVE DOWN <1AND LOOP ; ; STARTSE CAT $C054PAGE 1 $C052ALL GRAPHICS $C057APPLE HI-RES $C02FSET CAT INTENSITY ; ; CLRBOT #$27 #$00CLEAR BOTTOM LINE ^1 LINEBF,Y LINE00,YAND TOP LINE TOO  <1 ; CLRBDR #$00TURN OFF BITS ON #$BELEFT AND RIGPY BOT TO MID (MID),Y COPY MID TO BOT (NEWBOT),Y  <1 NEWBOT+1 MID+1MOVE BASES UP <1IF NOT 0, LOOP $C082TURN OFF BANK RAM ; LIFE11 #$00SET GEN CNT CNTLOTO 0 CNTHI $C050SET HGR FOR APPLE $C04CSET HGR FOR THONNECT DOS CSWL /COUT1 CSWL+1 $C083TURN ON BANK RAM $C083 #$00SET UP PTRS MID NEWBOT SET UP OFFSET #$D0COPY $D000-$FFFF MID+1 #$90TO $9000-$BFFF NEWBOT+1 ^1 (MID),YGET A BYTE SAVE IT (NEWBOT),YCO ; $MEMOVE RSTVCTRHAVE WE BEEN HERE #MONALREADY? LIFE11YES, SKIP #MONNO, MODIFY RESET RSTVCTRVECTOR /MON RSTVCTR+1 #$A5 RSTVCTR+2AND POWER-UP BYTE #MEMOVE2NOW MODIFY DOS PTR DOG+1 /MEMOVE2 DOG+2 #COUT1DISCKBDSTRB $C010KBD STROBE PRNTAX $F941PRINT A & X RESET $FA62RESET ROUTINE TABV $FB5BDO A VTAB HOME $FC58CLEAR SCRN COUT $FDEDPRINT CHAR COUT1 $FDF0SCREEN ROUTINE MON $FF69MONITOR ; ; ;  $1000  $1000 ;LF-MOD LATER ; ; ; ;DOS & ROM STUFF ; CSWL $36OUTPUT POINTER CH $24CURSOR HORZ POSN DOG $3D0DOS WARM PTR RSTVCTR $3F2RESET VECTOR DOSWRM $9DBFDOS WARMSTART "DOSINP $9EBDDOS INPUT ROUTINE KYBD $C000KEYBOARD XXXXXX -> #0000000 $PC1ODD $1E001ST PART CNT TABLES PC1EVN $1F00 ; PC2ODD $40002ND PC TABLES PC2EVN $4000 KILE $4000KILL MASK TALES KILO $4000 #STATODD $8000FINAL STATE TABLES STATEVN $8000 )DUMMY $0000 USED FOR SE00000#0 !MIDONLY $1600MID ON ONLY TABL %TOPBIT $1700XXXXXX## -> 0000##00 %BOTBIT $1800XXXXXX## -> 00##0000 CELLOFF $1900NEW CELL STATE CELLON $1A00 TABLES YLOW $1B00ROW BASE LSB YHIGH $1BC0ROW BASE MSB %BIT6 $1D00X#T BASE ; ; ;ABSOLUTE (BUFFERS ETC) ; TOP $1C80TOP ROW BUFFER BOT $1CA8BOT ROW BUFFER #LINE00 $2000FIRST LINE ADDRESS LINE01 $2400LINE 01 ADDRESS "LINEBF $3FD0LAST LINE ADDRESS ; ; ;TABLES ; $MIDBIT $1500 XXXXX#X -> MID TMP STORAGE ; MIDLIN $ECMIDDLE ROW LINE NBLIN $EDNEWBOT ROW LINE EKILMSK $EEEVEN KILL MASK OKILMSK $EF ODD KILL MASK "TEMP $FATEMP SIXBIT STORAGE TEMP2 $FBONEBIT COUNT MID $FCMIDDLE ROW BASE NEWBOT $FENEWBO$********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * * AND A.WESLEY * * * ********************* ; ; ; ;ZERO PAGE VARIABLES MIDTMP $EA                      RAM DOG ; ; CNTLO 00 CNTHI 00 ; MSG1 "GEN: $"  03END OF MESSAGE ; ; ;  SWL+1 $C083TURN ON BANK RAM $C083 #$00SET UP PTRS MID NEWBOT AND OFFSET #$D0 MID+1 #$90 NEWBOT+1 ^2 (MID),Y  (NEWBOT),Y (MID),Y  (NEWBOT),Y  <2 NEWBOT+1 MID+1 <2 $C082TURN OFF BANK STVCTRSWAP DOS BACK IN? #DOSWRM >1YES! NO, RETURN ^1 #DOSWRM RSTVCTRMODIFY RESET VECTOR DOG+1AND DOS PTR /DOSWRM RSTVCTR+1 DOG+2 #$A5 !RSTVCTR+2FIX UP POWER-UP BYTE #DOSINPRECONNECT DOS CSWL /DOSINP C16 TABVVTAB22 ^3 MSG1,YPRINT MESG >4 COUT  <3 ^4 CNTHIPRINT THE COUNT CNTLO PRNTAXDONE! ^5 KYBDGET A KEYPRESS <5 KBDSTRBTURN IT OFF $C052SHOW ALL GRAPHICS STARTSCNAND LOOP ; ; $MEMOVE2 REYPRESS? GETKEYYES LOOP STARTSCNNO, LOOP GETKEY KBDSTRBTURN OFF KYBD #$83A CTRL-C? >2NO RESETYES, EXIT VIA RESET ^2 #$93A CTRL-S? LOOPNO, LOOP $C053SHOW BOT 4 LINES HOMECLEAR SCREEN #$00 CHHTAB1 #$GET MSB NEWBOT+1 MIDLINNOW MID BASE MIDLIN YLOW,X MID YHIGH,X MID+1 #$27START ON RIGHT %(MID),YUPDATE MIDTMP FOR NEXT ROW MIDTMP SIXBITAND DO SCAN ; ; DONESCRNCNTLOINC GEN COUNT >1 CNTHI ^1 KYBDANY K; ENDROW (MID),YUPDATE BUFFERS TOP,Y (NEWBOT),Y BOT,Y TEMPGET 6 NEW BITS (MID),YAND SAVE ON SCREEN ; NEXTROW NBLININC NEWBOT BASE NBLIN #$C1FINISHED SCREEN? DONESCRNYES, EXIT YLOW,XGET LSB NEWBOT YHIGH,XLL (NEWBOT),Y SIXBITAND LOOP ; ^2 #$80BIT ON ,LIVE (NEWBOT),Y SIXBITAND LOOP ; ; CELLO CELLON,XAS ABOVE TEMP (MID),Y (NEWBOT),Y BOT,Y   (NEWBOT),Y <2 #$7F (NEWBOT),Y SIXBITAND LOOP ! ; ;  CELLOOLD CELL ON ,SKIP "CELLOFF,XGET OFFCELL NEW STATE TEMPGET BACK 6 NEW BITS (MID),YAND STORE ON SCRN ; !(NEWBOT),YNOW UPDATE BOT LIST BOT,Y SHIFT BIT0 INTO CARRY AND PUT IT INTO BIT7 (NEWBOT),Y >2 #$7FBIT OFF, KIE THIS FOR A WHILE (MID),YGET 1 MID NBR !MIDTMPUPDATE MIDTMP FOR LATER #$40KILL EXTRA BITS THING #$00RETRIEVE NBRS SHIFT OLD CELL INTO CARRY BOT,YGET LAST NBR! BIT6,XADD IT TO A-REG USE AS OFFSET MOVE BACK UP TO CURRENTP NBRS AS INDEX "TOP,YBUT FIRST UPDATE TOP BUFR #$03REMOVE EXTRA BITS TOPBIT,XADD TOP NBRS BOT,YSAME WITH BOT NBRS BOTBIT,X NOW GET 3 MORE NBRS ENDROWFELL OFF SCREEN, SKIP TOP,YGET 1 TOP NBR BIT6,XINTO A-REG THING+1SAV TEMPSAVE RESULT MIDTMPGET MID AGAIN CONVERT SO HI-BIT ON  FOR EVEN RESULTS )STATE STATEVN,XGET FINAL EVEN STATE EKILMSKKILL BITS TEMPADD ODD BITS TEMPAND STORE ; ; ; "ONEBIT MIDTMPGET CELL & 1 NBR TOP,YUSE TOR FINAL STATE TABLE BOT,YCONVERT BOT AGAIN TO GET EVEN 2ND PARTIAL COUNT PC2E PC2EVN,X STATE+2 ; ; ; MIDTMPGET MID BYTE #$7FTURN BIT7 OFF FOR ODD RESULTS (STATO STATODD,XGET FINAL ODD STATE OKILMSKKILL SOME BITSO CORRECT MASK EKILMSK &BOT,YGET BOT BYTE & TURN HI-BIT ON #$80  #KILODD KILO,XGET ODD KILL MASK OKILMSK ; GET BOT BYTE WITH HI-BIT OFF !#$7FTO USE AS OFFSET INTO PC2 TABLE &PC2O PC2ODD,XGET 2ND PC AS ADDR STATO+2FOODD+2THESE HAVE 64 VALUES %PC2O+2USED AS ADDRS INTO BOTH THE &PC1EVN,XKILL MASK TABLE & THEN PC2 &KILEVN+2TABLE, BOTH AT $4000-$7FFF PC2E+2 ; BOT,YUSE BOT BYTE WITH HI-BIT ON TO GET EVEN KILL MASK KILEVN KILE,X SHIFT TNSTATE+2 ; MIDTMPGET MID BYTE #$7FGET ODD RESULT  NSTATO STATODD,XFINAL ODD TEMPSAVE MIDTMP GET EVEN RESULT   NSTATE STATEVN,X TEMP TEMP ONEBITAND DO ONEBIT ; ; ; "ALLON PC1ODD,XINTO PC1 LISTS KILTAND JUMP TO ONEBIT ; ; TOPON BOT,YCHECK BOT OFF ALLONNO, BOTH ON, OLD WAY ; X HOLDS ONLY BYTE THAT WAS ON BOTON PC1ODD,XGET PART CNT #$C0CONVT TO PC2 ADDRESS NSTATO+2USE LATER PC1EVN,XGET EVEN PC1 #$C0CONVERT TO PC2 MIDTMP TOP,Y BOT,Y #$40 SIXBITNOT 3, LOOP  #$01SET UP CELL0 ON (MID),Y  SIXBIT ; ; ; NENDROW UPDATE BUFFERS (NEWBOT),Y BOT,Y NEXTROW ; ; ; %MIDON MIDONLY,XNOW GET MID BYTE TEMPSAVE FOR LATER ONEBICHECK IF NEXT NBOT &NENDROWSTILL GOTTA CHECK THIS #$@! (NEWBOT),YHAS BIT7=0 CONTYES, NO CHANGE OOPS, NO, MOVE BACK UP CONT1AND DO AS BEFORE ; ; $^4 #$80AS ABOVE BUT BIT0 ON (NEWBOT),Y (MID),YUPDATE MIDTMP SIXBIT ONT (MID),YSET UP NEW MID SIXBITNOT 3 NBRS, LOOP MIDTMP TOP,YNOW CHECK IF 3 NEXT BOT,YNBRS ARE ON #$40YES? SIXBITNO, DO NEXT STUFF ELSE SET BIT0 ON #$01 (MID),Y RESET Y-REG SIXBITAND LOOP BACK ; ; NBOTOFF SKIP MIDTMPNOW GET MID BYTE MIDONMID IS ON ONLY %MIDOFF (NEWBOT),YCOPY BIT 0 OVER NBOTOFFNEW BOTTOM OFF !CONT1 BOT,YADD IT TO BUFFER  INTO THE NEXT BYTE NENDROWEND OF ROW (NEWBOT),Y >4 #$7F (NEWBOT),YDONE ; !C CDSKIP ORA ^2 #$80 LINE01,Y SHIFT BOT0 INTO CARRY  <1 #$27RESTORE Y $2027GET FIRST MIDTMP MIDTMP ; ; ; 'SIXBIT TOP,YUSE TOP BYTE AS OFFSET TOPONTOP IS ON, SKIP BOT,YNOW IS BOTTOM OFF? BOTONBOTTOM IS ON, <1 !#$00SET UP MID & NEWBOT BASES MIDLIN YLOW,X MID YHIGH,X MID+1 #$02 NBLIN YLOW,X NEWBOT YHIGH,X NEWBOT+1 ;  #$27SET UP LINE1'S BIT7 !^1 LINE01,YAS THIS NEVER >2GETS UPDATED BY NEWBOT #$7F ECLEAR BIT 0 (MID),YRESTORE #$27NOW RIGHT (MID),YGET RIGHT BYTE #$7FCLEAR BIT 7 (MID),YRESTORE #$00RESTORE Y! MOVE DOWN <1AND LOOP ; ; STARTSCN#$00CLEAR TOP BUFFER #$27 ^1 TOP,Y BOT,YAND BOTTOM BUFR CAT INTENSITY ; ; CLRBOT #$27 #$00CLEAR BOTTOM LINE ^1 LINEBF,Y LINE00,YAND TOP LINE TOO  <1 ; CLRBDR #$00TURN OFF BITS ON #$BELEFT AND RIGHT ^1 YLOW,X MID YHIGH,X MID+1 (MID),YGET LEFT BYTE #$F1 MID+1MOVE BASES UP <1IF NOT 0, LOOP $C082TURN OFF BANK RAM ; LIFE11 #$00SET GEN CNT CNTLOTO 0 CNTHI $C050SET HGR FOR APPLE $C04CSET HGR FOR THE CAT $C054PAGE 1 $C052ALL GRAPHICS $C057APPLE HI-RES $C02FSET 00SET UP PTRS MID NEWBOT SET UP OFFSET #$D0COPY $D000-$FFFF MID+1 #$90TO $9000-$BFFF NEWBOT+1 ^1 (MID),YGET A BYTE SAVE IT (NEWBOT),YCOPY BOT TO MID (MID),Y COPY MID TO BOT (NEWBOT),Y  <1 NEWBOT+#MONNO, MODIFY RESET RSTVCTRVECTOR /MON RSTVCTR+1 #$A5 RSTVCTR+2AND POWER-UP BYTE #MEMOVE2NOW MODIFY DOS PTR DOG+1 /MEMOVE2 DOG+2 #COUT1DISCONNECT DOS CSWL /COUT1 CSWL+1 $C083TURN ON BANK RAM $C083 #$ROUTINE TABV $FB5BDO A VTAB HOME $FC58CLEAR SCRN COUT $FDEDPRINT CHAR COUT1 $FDF0SCREEN ROUTINE MON $FF69MONITOR ; ; ;  $1000  $1000 ; ; $MEMOVE RSTVCTRHAVE WE BEEN HERE #MONALREADY? LIFE11YES, SKIP  $24CURSOR HORZ POSN DOG $3D0DOS WARM PTR RSTVCTR $3F2RESET VECTOR DOSWRM $9DBFDOS WARMSTART "DOSINP $9EBDDOS INPUT ROUTINE KYBD $C000KEYBOARD KBDSTRB $C010KBD STROBE PRNTAX $F941PRINT A & X RESET $FA62RESET ST PART CNT TABLES PC1EVN $1F00 ; PC2ODD $40002ND PC TABLES PC2EVN $4000 KILE $4000KILL MASK TALES KILO $4000 #STATODD $8000FINAL STATE TABLES STATEVN $8000 ; ; ; ;DOS & ROM STUFF ; CSWL $36OUTPUT POINTER CH TABL %TOPBIT $1700XXXXXX## -> 0000##00 %BOTBIT $1800XXXXXX## -> 00##0000 CELLOFF $1900NEW CELL STATE CELLON $1A00 TABLES YLOW $1B00ROW BASE LSB YHIGH $1BC0ROW BASE MSB %BIT6 $1D00X#XXXXXX -> #0000000 $PC1ODD $1E001T BASE ; ; ;ABSOLUTE (BUFFERS ETC) ; TOP $1C80TOP ROW BUFFER BOT $1CA8BOT ROW BUFFER #LINE00 $2000FIRST LINE ADDRESS LINE01 $2400LINE 01 ADDRESS "LINEBF $3FD0LAST LINE ADDRESS ; ; ;TABLES ; !MIDONLY $1600MID ON ONLY MID TMP STORAGE ; MIDLIN $ECMIDDLE ROW LINE NBLIN $EDNEWBOT ROW LINE EKILMSK $EEEVEN KILL MASK OKILMSK $EF ODD KILL MASK "TEMP $FATEMP SIXBIT STORAGE TEMP2 $FBONEBIT COUNT MID $FCMIDDLE ROW BASE NEWBOT $FENEWBOd"********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * * AND A.WESLEY * * * ********************* ; ; ; ;ZERO PAGE VARIABLES MIDTMP $EA          RAM DOG ; ; CNTLO 00 CNTHI 00 ; MSG1 "GEN: $"  03END OF MESSAGE ; ; ;  SWL+1 $C083TURN ON BANK RAM $C083 #$00SET UP PTRS MID NEWBOT AND OFFSET #$D0 MID+1 #$90 NEWBOT+1 ^2 (MID),Y  (NEWBOT),Y (MID),Y  (NEWBOT),Y  <2 NEWBOT+1 MID+1 <2 $C082TURN OFF BANK STVCTRSWAP DOS BACK IN? #DOSWRM >1YES! NO, RETURN ^1 #DOSWRM RSTVCTRMODIFY RESET VECTOR DOG+1AND DOS PTR /DOSWRM RSTVCTR+1 DOG+2 #$A5 !RSTVCTR+2FIX UP POWER-UP BYTE #DOSINPRECONNECT DOS CSWL /DOSINP C16 TABVVTAB22 ^3 MSG1,YPRINT MESG >4 COUT  <3 ^4 CNTHIPRINT THE COUNT CNTLO PRNTAXDONE! ^5 KYBDGET A KEYPRESS <5 KBDSTRBTURN IT OFF $C052SHOW ALL GRAPHICS STARTSCNAND LOOP ; ; $MEMOVE2 REYPRESS? GETKEYYES LOOP STARTSCNNO, LOOP GETKEY KBDSTRBTURN OFF KYBD #$83A CTRL-C? >2NO RESETYES, EXIT VIA RESET ^2 #$93A CTRL-S? LOOPNO, LOOP $C053SHOW BOT 4 LINES HOMECLEAR SCREEN #$00 CHHTAB1 #$GET MSB NEWBOT+1 MIDLINNOW MID BASE MIDLIN YLOW,X MID YHIGH,X MID+1 #$27START ON RIGHT %(MID),YUPDATE MIDTMP FOR NEXT ROW MIDTMP SIXBITAND DO SCAN ; ; DONESCRNCNTLOINC GEN COUNT >1 CNTHI ^1 KYBDANY K; ENDROW (MID),YUPDATE BUFFERS TOP,Y (NEWBOT),Y BOT,Y TEMPGET 6 NEW BITS (MID),YAND SAVE ON SCREEN ; NEXTROW NBLININC NEWBOT BASE NBLIN #$C1FINISHED SCREEN? DONESCRNYES, EXIT YLOW,XGET LSB NEWBOT YHIGH,XLL (NEWBOT),Y SIXBITAND LOOP ; ^2 #$80BIT ON ,LIVE (NEWBOT),Y SIXBITAND LOOP ; ; CELLO CELLON,XAS ABOVE TEMP (MID),Y (NEWBOT),Y BOT,Y   (NEWBOT),Y <2 #$7F (NEWBOT),Y SIXBITAND LOOP ! ; ; z#  Ҡ Π ˠ Р Š" Π Ҡ̠ űà& Ӡ Π Ҡ Р ڠ Р  ŷàŸàŹàűà űà ! űà#űà$Ϡ Ůà Ųà ųà ŴàŵàŶà ********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * ********************* ; ; ; ADDR $26ADDRESS OF BYTE MSBADDR $27MSB OF ADDRESS MASK $30BIT MA     T PIXEL ; ; HSCRN REGYGET OFFSET MASKGET BIT MASK (ADDR),YTEST BIT ON AND RETURN ; ;  ;  F YCOORD LOOPNOT EOPAGE, LOOP SWAPPAG PAGEWHAT PAGE #$20 PG2 PG1 #$20 PAGE $C055LOOK AT PG2 STARTPAGAND RESTART PG2 #$40 PAGESTORE #$40 IN PAGE $C054LOOK AT PG1 STARTPAGAND RESTART LOOP CNTDO NEXNCRXMOVE TO NEXT PIXEL IPOSNAND RECALCULATE CURSOR ENDROW #$01 MSBXCORDEND OF ROW? LOOPNO, DO NEXT PIXEL #$17END OF ROW? LSBXCORD LOOP &DOWNROW INCRXYES, MOVE TO NEXT ROW INCRX INCRY IPOSNRECALC CURSOR ENDPAG #$BLOTAND PLOT IT CARRYONCARRY ON WORK LIVE #$FF COLORSET COLOR=WHITE REGY PLOT CARRYONCARRY ON WORK IGNORE CELLIS CELL DEAD? KILLYES, KILL IT LIVEELSE ENLIVEN IT "CARRYON MSBADDRSWAP PAGES BACK #$60 MSBADDR ICELL MSBADDRGET MSB OF ADDRESS #$60TURN IT TO OTHER PAGE MSBADDRAND RESTORE COUNT #$02LESS THAN 2? KILLYES, KILL IT IGNORE=2, IGNORE IT COUNT #$03 LIVE=3, ENLIVEN IT KILL #$00 COLORSET COLOR=BLACK REGY P INCRY HSCRN CNT6 COUNT CNT6 DECRX HSCRN CNT7 COUNT CNT7 DECRX HSCRN CNT8 COUNT CNT8 DECRY HSCRN SUM COUNT 'SUM INCRXRETURN CURSOR TO START HSCRNTEST IF CELL ALIVE CELLSTORE RESULT IN TO PIXEL 1 DECRY HSCRNPIXEL ON? CNT2 COUNTYES, INCREMENT COUNT CNT2 INCRXPIXEL 2 HSCRNPIXEL ON? CNT3 COUNTYES,INC CNT3 INCRXPIXEL 3 HSCRNPIXEL ON CNT4 COUNT CNT4 INCRY HSCRN CNT5 COUNT CNT5 IXEL "IPOSN $F5CBSET UP EXT CURSOR ; ;  $900 ; #LIFE HGR2CLEAR PG2 & DISPLAY #$20READ FROM PAGE 1 PAGE "STARTPAG#$00SET UP (X,Y)=(1,1) #$01 #$01 HPOSNAND MODIFY CURSOR CNT #$00SET COUNT TO 0 COUNT DECRXGO CELLS ; HGR2 $F3D8CLR HGR2 PAGE DECRX $F467DECR IN X AXIS "HPOSN $F411SET UP INT CURSOR DECRY $F4D5DECR IN Y AXIS INCRX $F48AINCR IN X AXIS INCRY $F504INCR IN X AXIS HCOLOR $F6F0SET HCOLOR PLOT $F45APLOT A PSK "COLOR $1CCOLOR MASK FOR PLOT LSBXCORD $E0LSB OF X-COORD MSBXCORD $E1MSB OF X-COORD YCOORD $E2Y-COORD $REGY $E5Y OFFSET FROM ADDRESS "PAGE $E6WHICH PAGE NOW USED CELL $FETEMP CELL HOLDER $COUNT $FFSTORES COUNT OF m ********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * ********************* ; ; ; ADDR $26ADDRESS OF BYTE MSBADDR $27MSB OF ADDRESS MASK $30BIT MA     4"MASTER DISKETTE CREATED ON 48K SYSTEM"a"BY W.TOOMEY 17/07/87"y(4:"Life Routines"234,7:8<(4);"CATALOG"F34,0: $F48AINCR IN X AXIS INCRY $F504INCR IN X AXIS HCOLOR $F6F0SET HCOLOR PLOT $F45APLOT A PIXEL "IPOSN $F5CBSET UP EXT CURSOR MOVE $FE2CMOVE SUBROUTINE ; ;  $900 ; #$40SET PAGE 2 PAGE SWAPPAGAND SWAP PAGES "SFROM ADDRESS "PAGE $E6WHICH PAGE NOW USED CELL $FETEMP CELL HOLDER $COUNT $FFSTORES COUNT OF CELLS ; HGR2 $F3D8CLR HGR2 PAGE DECRX $F467DECR IN X AXIS "HPOSN $F411SET UP INT CURSOR DECRY $F4D5DECR IN Y AXIS INCRXSK A1L $3CMOVE REGISTERS A1H A1L+1 A2L $3E A2H A2L+1 A4L $42 A4H A4L+1 "COLOR $1CCOLOR MASK FOR PLOT LSBXCORD $E0LSB OF X-COORD MSBXCORD $E1MSB OF X-COORD YCOORD $E2Y-COORD $REGY $E5Y OFFSET  ********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * ********************* ; ; ; ADDR $26ADDRESS OF BYTE MSBADDR $27MSB OF ADDRESS MASK $30BIT MA     E $C054LOOK AT PG1 STARTPAGAND RESTART LOOP CNTDO NEXT PIXEL ; ; HSCRN REGYGET OFFSET MASKGET BIT MASK (ADDR),YTEST BIT ON #$7FIGNORE COLOR BIT AND RETURN ; ;  PG1 #$20 PAGE A1H #$3F A2H #$40 A4H #$00SET Y=0 MOVEMOVE THE PAGE $C055LOOK AT PG2 STARTPAGAND RESTART PG2 #$40 PAGESTORE #$40 IN PAGE A1H #$5F A2H #$20 A4H #$00SET Y=0 MOVEMOVE PAGEXT PIXEL #$17END OF ROW? LSBXCORD LOOP &DOWNROW INCRXYES, MOVE TO NEXT ROW INCRX INCRY IPOSNRECALC CURSOR ENDPAG #$BF YCOORD LOOPNOT EOPAGE, LOOP SWAPPAG #$FF A2L  A1L A4L PAGEWHAT PAGE? #$20 PG2 RY ON WORK IGNORE CELLIS CELL DEAD? KILLYES, KILL IT LIVEELSE ENLIVEN IT "CARRYON MSBADDRSWAP PAGES BACK #$60 MSBADDR INCRXMOVE TO NEXT PIXEL IPOSNAND RECALCULATE CURSOR ENDROW #$01 MSBXCORDEND OF ROW? LOOPNO, DO NAN 2? KILLYES, KILL IT IGNORE=2, IGNORE IT COUNT #$03 LIVE=3, ENLIVEN IT KILL #$00 COLORSET COLOR=BLACK REGY PLOTAND PLOT IT CARRYONCARRY ON WORK LIVE #$FF COLORSET COLOR=WHITE REGY PLOT CARRYONCAR COUNT CNT8 DECRY HSCRN SUM COUNT 'SUM INCRXRETURN CURSOR TO START HSCRNTEST IF CELL ALIVE CELLSTORE RESULT IN CELL MSBADDRGET MSB OF ADDRESS #$60TURN IT TO OTHER PAGE MSBADDRAND RESTORE COUNT #$02LESS THIXEL ON? CNT3 COUNTYES,INC CNT3 INCRXPIXEL 3 HSCRNPIXEL ON CNT4 COUNT CNT4 INCRY HSCRN CNT5 COUNT CNT5 INCRY HSCRN CNT6 COUNT CNT6 DECRX HSCRN CNT7 COUNT CNT7 DECRX HSCRN CNT8AGE 1 PAGE "STARTPAG#$00SET UP (X,Y)=(1,1) #$01 #$01 HPOSNAND MODIFY CURSOR CNT #$00SET COUNT TO 0 COUNT DECRXGO TO PIXEL 1 DECRY HSCRNPIXEL ON? CNT2 COUNTYES, INCREMENT COUNT CNT2 INCRXPIXEL 2 HSCRNP $F48AINCR IN X AXIS INCRY $F504INCR IN X AXIS HCOLOR $F6F0SET HCOLOR PLOT $F45APLOT A PIXEL "IPOSN $F5CBSET UP EXT CURSOR MOVE $FE2CMOVE SUBROUTINE ; ;  $900 ; #LIFE HGR2CLEAR PG2 & DISPLAY #$20READ FROM PFROM ADDRESS "PAGE $E6WHICH PAGE NOW USED CELL $FETEMP CELL HOLDER $COUNT $FFSTORES COUNT OF CELLS ; HGR2 $F3D8CLR HGR2 PAGE DECRX $F467DECR IN X AXIS "HPOSN $F411SET UP INT CURSOR DECRY $F4D5DECR IN Y AXIS INCRXSK A1L $3CMOVE REGISTERS A1H A1L+1 A2L $3E A2H A2L+1 A4L $42 A4H A4L+1 "COLOR $1CCOLOR MASK FOR PLOT LSBXCORD $E0LSB OF X-COORD MSBXCORD $E1MSB OF X-COORD YCOORD $E2Y-COORD $REGY $E5Y OFFSET BITSAND SAVE B INCRYGO TO B HSCRNIS PIXEL ON? C #$80YES, SET BIT IN CENT ON CENTAND SAVE C INCRYMOVE TO C HSCRNIS PIXEL ON? F BITSYES, SET BIT 0 ON #$01 BITSAND SAVE F INCRXMOVE TO F HS THE MOVE "STARTPAG#$00SET UP (X,Y)=(1,1) #$01  HPOSNMODIFY CURSOR #$03SET '4 STATE' TO 3 SCANSTRT#$00SET BITS TO 0 BITS CENTCLEAR CENTRE TOO DECRY DECRXGO TO A HSCRNIS PIXEL ON? B BITS #$08YES, SET BIT 3 ONTHE APPLE $C04CSET HGR FOR THE CAT $C055PAGE 2 $C052ALL GRAPHICS #$20 PAGESET READ FROM PAGE 1 SWAPPAG A4H #$FF A2L  A1LSET UP MOVE VALUES A4LFOR PG1 -> PG2 #$5F A2H #$40 A1H #$00SET Y=0 MOVEAND DO CURSOR DECRY $F4D5DECR IN Y AXIS INCRY $F504INCR IN X AXIS HCOLOR $F6F0SET HCOLOR PLOT $F45APLOT A PIXEL "IPOSN $F5CBSET UP EXT CURSOR MOVE $FE2CMOVE SUBROUTINE ; ;  $1800  $800 ; ; &LIFE4 $C050SET HGR FOR FROM ADDRESS "PAGE $E6WHICH PAGE NOW USED 'TEMP $FDUSED AS TEMP X-REG STORE $CENT $FEHOLDS STATE OF CENTRE %BITS $FFHOLDS NEIGHBBOURS BITS ; TABLE $1C00TABLE OF RULES HGR2 $F3D8CLR HGR2 PAGE "HPOSN $F411SET UP INTSK A1L $3CMOVE REGISTERS A1H A1L+1 A2L $3E A2H A2L+1 A4L $42 A4H A4L+1 "COLOR $1CCOLOR MASK FOR PLOT LSBXCORD $E0LSB OF X-COORD MSBXCORD $E1MSB OF X-COORD YCOORD $E2Y-COORD $REGY $E5Y OFFSET ********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * ********************* ; ; ; ADDR $26ADDRESS OF BYTE MSBADDR $27MSB OF ADDRESS MASK $30BIT MA     E PAGE $C054LOOK AT PG1 STARTPAGAND RESTART LOOP CNTDO NEXT PIXEL ; ; HSCRN REGYGET OFFSET MASKGET BIT MASK (ADDR),YTEST BIT ON #$7FIGNORE COLOR BIT AND RETURN ; BASE 010100000101010101 ; ;  PG2 PG1 #$20 PAGE A1H #$3F A2H #$40 A4H #$00SET Y=0 MOVEMOVE THE PAGE $C055LOOK AT PG2 STARTPAGAND RESTART PG2 #$40 PAGESTORE #$40 IN PAGE A1H #$5F A2H #$20 A4H #$00SET Y=0 MOVEMOV DO NEXT PIXEL #$17END OF ROW? LSBXCORD LOOP &DOWNROW INCRXYES, MOVE TO NEXT ROW INCRX INCRY IPOSNRECALC CURSOR ENDPAG #$BF YCOORD LOOPNOT EOPAGE, LOOP SWAPPAG #$FF A2L  A1L A4L PAGEWHAT PAGE? #$20 LORSET COLOR=0 MSBADDRSWAP TO WRITING PAGE #$60 MSBADDR REGY PLOT "SWAPBACKMSBADDRSWAP PAGES BACK #$60 MSBADDR #CARRYON INCRXMOVE TO NEXT PIXEL IPOSNAND RECALCULATE CURSOR ENDROW #$01 MSBXCORDEND OF ROW? LOOPNO,ORSET COLOR=WHITE MSBADDRSWAP TO WRITING PAGE #$60 MSBADDR REGY PLOTAND PLOT IT SWAPBACKAND SWAP PAGES BACK $CELL1 COUNTGET COUNT AS OFFSET BASE,XGET TEST ELEMENT CARRYONGOTO CARRYON IF OFF KILL #$00ELSE KILL CO DECRY HSCRN SUM COUNT 'SUM INCRXRETURN CURSOR TO START HSCRNTEST IF CELL ALIVE CELLSTORE RESULT IN CELL TESTCELLCELLCELL=0? CELL1NO, GOTO CELL1 COUNTIS COUNT 3? #$03 CARRYONNO, CARRY ON LIVE #$FF COL COUNTYES,INC CNT3 INCRXPIXEL 3 HSCRNPIXEL ON CNT4 COUNT CNT4 INCRY HSCRN CNT5 COUNT CNT5 INCRY HSCRN CNT6 COUNT CNT6 DECRX HSCRN CNT7 COUNT CNT7 DECRX HSCRN CNT8 COUNT CNT8 TARTPAG#$00SET UP (X,Y)=(1,1) #$01 #$01 HPOSNAND MODIFY CURSOR CNT #$00SET COUNT TO 0 COUNT DECRXGO TO PIXEL 1 DECRY HSCRNPIXEL ON? CNT2 COUNTYES, INCREMENT COUNT CNT2 INCRXPIXEL 2 HSCRNPIXEL ON? CNT320120 ; ; ;  ;  REGYGET INTEGER PART  DECRX2END OF ROW REGYAND STORE IT AND RETURN DECRX2 #$27SET BACK TO #$27 REGYAND STORE AND RETURN ; ; .LFTOFF 00BFF7FBBIT MASKS FOR REPLACEMENTS LFTON 00400804 RGTOFF 00FDFEDF RGTON 000YSTORE IT AND RETURN ; DECRX MASKGET BIT MASK #$7FTURN OFF COLOR BIT  SET CLEAR FOR COLOR BIT ROLL CLR TO COLOR BIT DECRX1YES, END OF BYTE MASKELSE STORE MASK AND RETURN DECRX1 #$40SET BIT 6 ON MASKAND STORE N MASKAND STORE IT! ELSE FINISHED INCRX1 #$01SET BIT 0 ON MASKAND STORE REGYADD ONE TO INTEGER PART  #$28END OF ROW? INCRX2YES, WRAPAROUND REGYELSE STORE IT BACK AND RETURN $INCRX2 #$00BACK TO START OF ROW REG2 SCANSTRTSTART A NEW ROW ; ; HSCRN REGYGET OFFSET MASKGET BIT MASK (ADDR),YTEST BIT ON #$7FIGNORE COLOR BIT AND RETURN ; INCRX MASKGET BIT MASK SHIFT IT LEFT !INCRX1IF EOF BYTE THEN INCRX1 #$80SET COLOR BIT OINCRXYES, MOVE TO NEXT ROW INCRX INCRY $FDSTORE X TEMPORARILY IPOSNRECALC CURSOR $FDGET X-REG BACK ENDPAG #$BF YCOORD !LOOP2NOT EOPAGE,START NEW ROW $FINISH LIFE4DO IT AGAIN FOR NOW #LOOP SCANNEWDO THE NEXT SCAN #LOOPE TO NEXT PIXEL IPOSNAND RECALCULATE CURSOR TEMPGET X-REG BACK SET X-REG TO NEW '4 STATE' ENDROW #$03IF 0 THEN SET TO 3 ENDROW #$01 MSBXCORDEND OF ROW? LOOPNO, DO NEXT PIXEL #$17END OF ROW? LSBXCORD LOOP &DOWNROW LL1 TABLE,XGET 'RULES' CONDITION &CARRYONIF NOT0,COUNT=2OR3 ->IGNORE #$00 COLORSET COLOR=BLACK MSBADDR #$60SWAP TO PAGE2 MSBADDR REGY PLOTAND PLOT SWAPBACKMSBADDR #$60SWAP BACK TO PAGE1 MSBADDR #CARRYON INCRXMOVCELL CENTIS CENTRE ALIVE? CELL1YES, GOTO CELL1 TABLE,XGET 'RULES' CONDITION (CARRYONIF <>0 THEN COUNT<>3 ->IGNORE LIVE #$FF COLORSET COLOR=WHITE MSBADDR #$60SWAP TO PAGE2 MSBADDR REGY PLOTAND PLOT SWAPBACK (CE ON ';AT THIS POINT THE A-REG HOLDS THE BIT (;PATTERN OF ITS NEIGHBOURS, AND TO LIVE !;OR KILL CAN BE FOUND BY A TABLE OUT BITSSTORE NEIGHBOURS TEMPSTORE X-REG TEMPORARILY DECRXGO BACK TO CENTRE DECRY "BITSBET BITS BACK AS AN OFFSET ON CENTGET TEMP BITS BACK #$80SET BIT 7 ON BITSSTORE IT DOWN IN BITS RIGHT INCRYMOVE TO 'RIGHT' HSCRNIS PIXEL ON? RON ROFF BITSGET BIT PATTERN RGTOFF,XSET BIT OFF OUT RON BITSGET BIT PATTERN RGTON,XSET BIT#$10SET BIT 4 ON CENTRE2 CENTSTORE OLD CENTRE ; FLAG AND TEMP BITS HOLDER INCRYMOVE TO 'CENTRE' HSCRNIS PIXEL ON? BIT7ONYES, TURN BIT7 ON "BIT7OFF CENTGET TEMP BITS BACK #$7FTURN BIT 7 OFF BITSSTORE DOWN IN BITS RIGHT "BIT7APPROPRIATE BIT ON "LOFF BITSNO,GET BIT PATTERN LFTOFF,XSET BIT OFF CENTRE1 LON BITSGET BIT PATTERN LFTON,XSET BIT ON !CENTRE1 CENTIS OLD CENTRE ON? CNONYES,SET BIT 4 ON CNOFF #$EFNO,SET BIT 4 OFF CENTRE2 CNON EG #; HOLDS INDEX FOR BIT REPLACEMENT: ; 3=7542 2=7430 1=7641 0; CENT HOLDS STATE OF OLD CENTRE CELL IN BIT7 -; BITS HOLDS BIT PATTERN OF OLD NEIGHBOURS ; ; &SCANNEW INCRXMOVE CURSOR TO 'LEFT' DECRY HSCRNIS PIXEL ON? "LONYES, SET N #$02 BITSAND SAVE $E2 INCRYMOVE BACK TO CENTRE ,; SCANNEW: NEW ALGORITHM TO SCAN NEIGHBOURS ,; AROUND CENTRE.GENERAL ENTRY POINT BELOW. ); CENT & BITS MUST BE SET UP PROPERLY AT ; BEGINNING OF ROWS ); TO START,A&Y-REGS HOLD NOTHING,X-RCRNIS PIXEL ON? E BITSYES, SET BIT 6 ON #$40 BITSAND STORE E DECRYGO TO E HSCRNIS PIXEL ON? D BITSYES, SET BIT 7 ON #$80 BITSAND STORE D DECRYGO TO D HSCRNIS PIXEL ON? E2 BITSYES, SET PIXEL1 OS POINT THE A-REG HOLDS THE BIT (;PATTERN OF ITS NEIGHBOURS, AND TO LIVE !;OR KILL CAN BE FOUND BY A TABLE OUT BITSSTORE NEIGHBOURS TEMPSTORE X-REG TEMPORARILY MASKDECRX TO CENTRE >1 #$40 MASK REGY ^1 INCRY TO CENTRE LEFT "BIT7ON CENTGET TEMP BITS BACK #$80SET BIT 7 ON BITS LEFT DECRYMOVE TO 'LEFT' REGYPIXEL ON? MASK (ADDR),Y LON LOFF BITSGET BIT PATTERN LFTOFF,XSET BIT OFF OUT LON BITS LFTON,XSET BIT ON ';AT THIO, SET BIT 4 OFF CENTRE2 CNON #$10SET BIT 4 ON -CENTRE2 CENTSTORE OLD CENTRE & TEMP A-REG DECRYMOVE TO 'CENTRE' REGYPIXEL ON? MASK (ADDR),Y BIT7ONYES BIT7OFF CENTGET A-REG BACK #$7FTURN BIT 7 OFF BITSSTORE DOWN MASK REGY ^1 REGYPIXEL ON? MASK (ADDR),Y RON "ROFF BITSNO,GET BIT PATTERN RGTOFF,XSET BIT OFF CENTRE1 RON BITSGET BIT PATTERN RGTON,XSET BIT ON !CENTRE1 CENTIS OLD CENTRE ON? CNONYES !CNOFF #$EFN>2 #$E0 OHFOUR >5 ADDR #$4F #$F0 >1 #$F0 ^1 ADDR PAGE >3 ^2 #$E0 ^3 ADDR ^4 MSBADDR SCANNEW2 ONESEE 1C OHFOUR 04 ^5 ADDR MSBADDR SCANNEW2MASKINCRX >1 #$01 EGS HOLD NOTHING,X-REG #; HOLDS INDEX FOR BIT REPLACEMENT: ; 3=7542 2=7430 1=7641 0; CENT HOLDS STATE OF OLD CENTRE CELL IN BIT7 -; BITS HOLDS BIT PATTERN OF OLD NEIGHBOURS ; ; SCANNEW DO A INCRY MSBADDR #$04 ONESEE >4 ADDR EW2 BITSYES, SET BIT 6 ON #$40 BITS %E2 SCANNEW2GO ON TO SCANNEW2 ,; SCANNEW: NEW ALGORITHM TO SCAN NEIGHBOURS ,; AROUND CENTRE.GENERAL ENTRY POINT BELOW. ); CENT & BITS MUST BE SET UP PROPERLY AT ; BEGINNING OF ROWS ); TO START,A&Y-RGYPIXEL ON? MASK (ADDR),Y C #$80YES, SET BIT IN CENT ON CENT C INCRYGO TO C REGYPIXEL ON? MASK (ADDR),Y F BITSYES,SET BIT 0 ON #$01 BITS F MASK INCRX REGYPIXEL ON? MASK (ADDR),Y SCANNBITSAND SAVE D MASK INCRX REGYPIXEL ON? MASK (ADDR),Y E BITSYES,SET BIT 1 ON #$02 BITS E INCRYMOVE TO E REGYPIXEL ON? MASK (ADDR),Y B BITS #$80YES, SET BIT 7 ON BITS B MASK REARTPAG#$20SET (0,0) FOR START OF SCAN MSBADDR #$01 MASK  ADDR REGY #$03SET '4 STATE' TO 3 SCANSTRT#$00SET BITS TO 0 BITS CENTCLEAR CENTRE TOO REGYPIXEL ON? MASK (ADDR),Y D BITSYES, SET BIT 3 ON #$08 CAT $C055PAGE 2 $C052ALL GRAPHICS #$20 PAGESET READ FROM PAGE 1 SWAPPAG #$40SET UP THE MOVE A1H #$20 A2H #$00 A1L A2L ^1 (A1L),Y #$7FCLEAR COLOR BIT (A2L),Y  <1 A1H A2H  <1FINISHED? +STAXIS INCRY $F504INCR IN X AXIS HCOLOR $F6F0SET HCOLOR PLOT $F45APLOT A PIXEL "IPOSN $F5CBSET UP EXT CURSOR MOVE $FE2CMOVE SUBROUTINE ; ;  $1800  $800 ; ; &LIFE5 $C050SET HGR FOR THE APPLE $C04CSET HGR FOR THE FROM ADDRESS "PAGE $E6WHICH PAGE NOW USED 'TEMP $FDUSED AS TEMP X-REG STORE $CENT $FEHOLDS STATE OF CENTRE %BITS $FFHOLDS NEIGHBBOURS BITS ; TABLE $1C00TABLE OF RULES HGR2 $F3D8CLR HGR2 PAGE DECRY $F4D5DECR IN Y SK A1L $3CMOVE REGISTERS A1H A1L+1 A2L $3E A2H A2L+1 A4L $42 A4H A4L+1 "COLOR $1CCOLOR MASK FOR PLOT LSBXCORD $E0LSB OF X-COORD MSBXCORD $E1MSB OF X-COORD YCOORD $E2Y-COORD $REGY $E5Y OFFSET ********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * ********************* ; ; ; ADDR $26ADDRESS OF BYTE MSBADDR $27MSB OF ADDRESS MASK $30BIT MA          DR),Y D BITSYES, SET BIT 3 ON #$08 BITSAND SAVE D MASK INCRX REGYPIXEL ON? MASK (ADDR),Y E BITSYES,SET BIT 1 ON #$02 BITS E DECRY MSBADDR #$04 ONESEE >4 ADDR >2 #$E0 OHFOUR  <1 A1H A2H  <1FINISHED? +STARTPAG#$20SET (0,0) FOR START OF SCAN MSBADDR #$01 MASK  ADDR REGY "SCANSTRT#$03SET '4 STATE' TO 3 #$00SET BITS TO 0 BITS CENTCLEAR CENTRE TOO REGYPIXEL ON? MASK (ADET HGR FOR THE APPLE $C04CSET HGR FOR THE CAT $C055PAGE 2 $C052ALL GRAPHICS #$20 PAGESET READ FROM PAGE 1 SWAPPAG #$40SET UP THE MOVE A1H #$20 A2H #$00 A1L A2L ^1 (A1L),Y #$7FCLEAR COLOR BIT (A2L),Y F3D8CLR HGR2 PAGE DECRY $F4D5DECR IN Y AXIS INCRY $F504INCR IN X AXIS HCOLOR $F6F0SET HCOLOR PLOT $F45APLOT A PIXEL "IPOSN $F5CBSET UP EXT CURSOR MOVE $FE2CMOVE SUBROUTINE ; ;  $1800  $800 ; ; &LIFE5 $C050SYCOORD $E2Y-COORD $REGY $E5Y OFFSET FROM ADDRESS "PAGE $E6WHICH PAGE NOW USED 'TEMP $FDUSED AS TEMP X-REG STORE $CENT $FEHOLDS STATE OF CENTRE %BITS $FFHOLDS NEIGHBBOURS BITS ; TABLE $1C00TABLE OF RULES HGR2 $DDR $27MSB OF ADDRESS MASK $30BIT MASK A1L $3CMOVE REGISTERS A1H A1L+1 A2L $3E A2H A2L+1 A4L $42 A4H A4L+1 "COLOR $1CCOLOR MASK FOR PLOT LSBXCORD $E0LSB OF X-COORD MSBXCORD $E1MSB OF X-COORD <********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * * AND A.WESLEY * * * ********************* ; ; ; ADDR $26ADDRESS OF BYTE MSBA     EMENTS LFTON 00400804 RGTOFF 00FDFEDF RGTON 00020120 ; ; ;  00020120 ; ; ;  AND RETURN DECRX1 #$40SET BIT 6 ON MASKAND STORE REGYGET INTEGER PART  DECRX2END OF ROW REGYAND STORE IT AND RETURN DECRX2 #$27SET BACK TO #$27 REGYAND STORE AND RETURN ; ; .LFTOFF 00BFF7FBBIT MASKS FOR REPLACN #LOOP2 SCANSTRTSTART A NEW ROW ; ; ; ; .LFTOFF 00BFF7FBBIT MASKS FOR REPLACEMENTS LFTON 00400804 RGTOFF 00FDFEDF RGTON 00020120 ; ; ;  T ROLL CLR TO COLOR BIT DECRX1YES, END OF BYTE MASKELSE STORE MASK N BYTE #$40 LOOP !DOWNROW #$01WRAPAROUND TO X=0 MASK  REGY ENDPAG ADDREND OF PAGE? #$D0NO, EXIT LOOP2 MSBADDR #$3F !LOOP2NOT EOPAGE,START NEW ROW $FINISH LIFE5DO IT AGAIN FOR NOW #LOOP SCANNEWDO THE NEXT SCARX TO NEXT PIXEL >1 #$01 MASK REGY ^1 TEMPGET X-REG BACK SET X-REG TO NEW '4 STATE' ENDROW #$03IF 0 THEN SET TO 3 ,ENDROW REGY ARE WE AT THE END OF A ROW? #$27 LOOPIF NOT, CONTINUE ON ROW MASK GET PIXEL POSN I TABLE,XGET 'RULES' CONDITION &CARRYONIF NOT0,COUNT=2OR3 ->IGNORE KILL MSBADDR #$60SWAP TO PAGE2 MSBADDR REGY (ADDR),YSET PIXEL OFF MASK (ADDR),Y SWAPBACKMSBADDR #$60SWAP BACK TO PAGE1 MSBADDR #CARRYON MASKINC CELL CENTIS CENTRE ALIVE? CELL1YES, GOTO CELL1 TABLE,XGET 'RULES' CONDITION (CARRYONIF <>0 THEN COUNT<>3 ->IGNORE LIVE MSBADDR #$60SWAP TO PAGE2 MSBADDR REGY (ADDR),YTURN PIXEL ON MASK (ADDR),Y SWAPBACK (CELL1MSBADDR #$04 ONESEE >4 ADDR >2 #$E0 OHFOUR >5 ADDR #$4F #$F0 ^1 ADDR PAGE >3 ^2 #$E0 ^3 ADDR ^4 MSBADDR >6 ^5 ADDR MSBADDR *^6 BITSGET BITS BACK AS AN OFFSET SET X-REG TO NEW '4 STATE' ENDROW #$03IF 0 THEN SET TO 3 ,ENDROW REGY ARE WE AT THE END OF A ROW? #$27 LOOPIF NOT, CONTINUE ON ROW MASK GET PIXEL POSN IN BYTE #$40 LOOP DOWNROW MASK  REGY ENDPAG ADDREND OF PAGE? =2OR3 ->IGNORE KILL MSBADDR #$60SWAP TO PAGE2 MSBADDR REGY (ADDR),YSET PIXEL OFF MASK (ADDR),Y SWAPBACKMSBADDR #$60SWAP BACK TO PAGE1 MSBADDR #CARRYON MASKINCRX TO NEXT PIXEL >1 #$01 MASK REGY &^1 TABLE,YGET 'RULES' CONDITION (CARRYONIF <>0 THEN COUNT<>3 ->IGNORE LIVE MSBADDR #$60SWAP TO PAGE2 MSBADDR REGY (ADDR),YTURN PIXEL ON MASK (ADDR),Y SWAPBACK (CELL1 TABLE,YGET 'RULES' CONDITION &CARRYONIF NOT0,COUNTADDR #$4F #$F0 >1 #$F0 ^1 ADDR PAGE >3 ^2 #$E0 ^3 ADDR ^4 MSBADDR >6 ^5 ADDR MSBADDR *^6 BITSGET BITS BACK AS AN OFFSET CELL CENTIS CENTRE ALIVE? CELL1YES, GOTO CELL1 OF ITS NEIGHBOURS, AND TO LIVE !;OR KILL CAN BE FOUND BY A TABLE OUT BITSSTORE NEIGHBOURS MASKDECRX TO CENTRE >1 #$40 MASK REGY ^1 INCRY TO CENTRE MSBADDR #$04 ONESEE >4 ADDR >2 #$E0 OHFOUR >5 #$FC MSBADDR >6 ^5 #$FC MSBADDR ^6 REGYPIXEL? MASK (ADDR),Y LON LOFF BITSGET BIT PATTERN LFTOFF,XSET BIT OFF OUT LON BITS LFTON,XSET BIT ON ';AT THIS POINT THE A-REG HOLDS THE BIT (;PATTERNN CENTGET TEMP BITS BACK #$80SET BIT 7 ON BITS LEFT MSBADDRDECRY ONESEE >5 ADDR >3 OHTHREE >1 #$1F  >4 ^1 #$23  ADDR #$B0 >2 #$F0 ^2 ADDR  >4 ^3 #$1F ^4 ADDR >4 ^3 #$1F ^4 ADDR #$FC MSBADDR >6 OHTHREE 03 ^5 #$FC MSBADDR ^6 REGYPIXEL ON? MASK (ADDR),Y BIT7ONYES BIT7OFF CENTGET A-REG BACK #$7FTURN BIT 7 OFF BITSSTORE DOWN LEFT "BIT7OIT 4 OFF CENTRE2 CNON #$10SET BIT 4 ON -CENTRE2 CENTSTORE OLD CENTRE & TEMP A-REG MSBADDRDECRY TO CENTRE ONESEE >5 ADDR >3 OHTHREE >1 #$1F  >4 ^1 #$23  ADDR #$B0 >2 #$F0 ^2 ADDR REGY ^1 REGYPIXEL ON? MASK (ADDR),Y RON "ROFF BITSNO,GET BIT PATTERN RGTOFF,XSET BIT OFF CENTRE1 RON BITSGET BIT PATTERN RGTON,XSET BIT ON !CENTRE1 CENTIS OLD CENTRE ON? CNONYES !CNOFF #$EFNO, SET B#$E0 OHFOUR >5 ADDR #$4F #$F0 >1 #$F0 ^1 ADDR PAGE >3 ^2 #$E0 ^3 ADDR ^4 MSBADDR SCANNEW2 ONESEE 1C OHFOUR 04 ^5 ADDR MSBADDR SCANNEW2MASKINCRX >1 #$01 MASK NOTHING,X-REG #; HOLDS INDEX FOR BIT REPLACEMENT: ; 3=7542 2=7430 1=7641 0; CENT HOLDS STATE OF OLD CENTRE CELL IN BIT7 -; BITS HOLDS BIT PATTERN OF OLD NEIGHBOURS ; ; SCANNEW DO A INCRY MSBADDR #$04 ONESEE >4 ADDR >2 ITSYES, SET BIT 6 ON #$40 BITS %E2 SCANNEW2GO ON TO SCANNEW2 ,; SCANNEW: NEW ALGORITHM TO SCAN NEIGHBOURS ,; AROUND CENTRE.GENERAL ENTRY POINT BELOW. ); CENT & BITS MUST BE SET UP PROPERLY AT ; BEGINNING OF ROWS ); TO START,A&Y-REGS HOLD^2 #$E0 ^3 ADDR ^4 MSBADDR >6 ^5 ADDR MSBADDR ^6 REGYPIXEL ON? MASK (ADDR),Y F BITSYES,SET BIT 0 ON #$01 BITS F MASK INCRX REGYPIXEL ON? MASK (ADDR),Y SCANNEW2 B MASK REGYPIXEL ON? MASK (ADDR),Y C #$80YES, SET BIT IN CENT ON CENT C INCRY MSBADDR #$04 ONESEE >4 ADDR >2 #$E0 OHFOUR >5 ADDR #$4F #$F0 >1 #$F0 ^1 ADDR PAGE >3 >5 ADDR #$4F #$F0 >1 #$F0 ^1 ADDR PAGE >3 ^2 #$E0 ^3 ADDR ^4 MSBADDR >6 ^5 ADDR MSBADDR ^6 REGYPIXEL ON? MASK (ADDR),Y B BITS #$80YES, SET BIT 7 ON BITS B ACK3 (LSBPLOT),YGET BIT PATTERN MASK1SET ON APPROPRIATE BIT (LSBPLOT),YSAVE IT BACK NEXT2 BACK3 (LSBPLOT),Y #$40 (LSBPLOT),Y  NEXT2 CELLON3 TABLE,XGET RULES NEXT2 KILL3 MASK3  ON3  (LSBPLOT),YGET ROW ISET3IF ON THEN BRANCH ^1 #$DFSET OFF  CENT CELLON3 TABLE,X NEXT2 LIVE3 ISET3 BIT IS SET #$20  CENTIS CENTRE ON? CELLON3IFON, BRANCH LOGIC3 TABLE,XGET RULES NEXT2 LIVE3 MASK3  BBIT 4 ON ^1 H3 CENT MASK3 (LSBM),YMIDDLE ROW HON3 GET PATTERN #$7FSET MSB OFF STORE IT BACK MASK3 (LSBB),Y ISET3 >1 HON3 GET PATTERN #$80SET MSB SAVE BACK I3 MASK3 (LSBB),YBOTTOM (LSBT),YTOP ROW, RIGHT HAND SIDE GSET3 G IS OFF #$FBSET BIT OFF CENT CON3 #$EF >1 GSET3 HERE IF G IS ON #$04SET BIT ON CENTRE3 CENT CON3 #$EFNO, SET BIT 4 OFF >1STORE IT BACK DOWN CON3 #$10SET PIXEL (LSBM),Y F  #$80  #F #$02BOTTOM MIDDLE PIXEL (LSBB),Y >1  #$40  0^1 #$5DSET FOR 279 PIXELS ACROSS (3x93) PIXCOUNT ; NEXT3 MASK1 INCREMENT TO NEXT COL'M >1 #$01  ^1 MASK3 ,G3Y #$FE (LSBPLOT),Y ; -; THE ROWSTART SCAN BEGINS ON THE SECOND ROW 2; SINCE THE FIRST IS EXPLICITLY SET EQUAL TO ZERO D #$02TOP MIDDLE PIXEL 'MASK1WHILE WE'RE HERE, SET UP MASKS (LSBT),Y E #$02 &E #$02CURRENT 'CENTRE' OWS = 190 ROWCOUNT *ROWSTARTMSBMSET OFFSET TO PLOT TO HGR2 #$60 MSBPLOT LSBM LSBPLOTSET OFFSET #$27 (LSBM),Y #$3F (LSBM),Y (LSBB),Y #$3F (LSBB),Y #$00 CENT (#$00INIT NEIGHBOURS TO 0 AT ROWSTART (LSBPLOT), PAGESTRT ONESEE 1CBIT TEST DATA OHFOUR 04BIT TEST DATA PAGESTRT#$20 MSBT #$242ND ROW BASE MSBMMIDDLE ROW #$283RD ROW BASE MSBBBOTTOM ROW #$00NOW FOR LSB'S & MISC LSBT LSBM LSBB LSBPLOT #$BESET NO. OF R#$D0 LSBB #$00 LSBT #$27 ^1 (LSBT),Y (LSBB),Y  <1 ; SWAPPAG #$40SET UP THE MOVE A1H #$20 A2H #$00 A1L A2L ^1 (A1L),Y #$7FCLEAR COLOR BIT (A2L),Y  <1 A1H A2H  <1FINISHED? 00TABLE OF RULES ; ;  $1800  $800 ; ; &LIFE7 $C050SET HGR FOR THE APPLE $C04CSET HGR FOR THE CAT $C054PAGE 1 $C052ALL GRAPHICS #$20 PAGESET READ FROM PAGE 1 ; ;CLEAR TOP AND BOTTOM ROWS #$40 MSBT #$5F MSBB 1 A2L $1B A2H A2L+1 "PAGE $E6WHICH PAGE NOW USED MASK1 $08 MASK2 $09 MASK3 $ED ; $CENT $FEHOLDS STATE OF CENTRE #PIXCOUNT $FFNO. OF PIXELS IN ROW 0ROWCOUNT $D6USE TO TEST END-OF-PAGE CONDITION ; TABLE $1CING LSBPLOT $EB MSBT $FAMSB OF TOP ROW LSBT $F9LSB OF TOP ROW MSBM $FCMSB OF MIDDLE ROW LSBM $FBLSB OF MIDDLE ROW LSBB $06LSB OF BOTTOM ROW MSBB $07MSB OF BOTTOM ROW A1L $19MOVE REGISTERS A1H A1L+b********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * * AND A.WESLEY * * * ********************* ; ; ; 'MSBPLOT $ECPAGE OFFSET FOR PLOTT         00400804 RGTOFF 00FDFEDF RGTON 00020120 ; ; ;  #$D0NO, EXIT LOOP2 MSBADDR #$3F !LOOP2NOT EOPAGE,START NEW ROW $FINISH LIFE5DO IT AGAIN FOR NOW #LOOP SCANNEWDO THE NEXT SCAN #LOOP2 SCANSTRTSTART A NEW ROW ; ; ; ; .LFTOFF 00BFF7FBBIT MASKS FOR REPLACEMENTS LFTON $5F MSBB #$D0 LSBB #$00 LSBT #$27 ^1 (LSBT),Y (LSBB),Y  <1 ; SWAPPAG #$40SET UP THE MOVE A1H #$20 A2H #$00 A1L A2L ^1 (A1L),Y #$7FCLEAR COLOR BIT (A2L),Y  <1 A1H A2H   TABLE $1C00TABLE OF RULES ; ;  $1800  $800 ; ; &LIFE7 $C050SET HGR FOR THE APPLE $C04CSET HGR FOR THE CAT $C054PAGE 1 $C052ALL GRAPHICS #$20 PAGESET READ FROM PAGE 1 ; ;CLEAR TOP AND BOTTOM ROWS #$40 MSBT #1 A2L $1B A2H A2L+1 "PAGE $E6WHICH PAGE NOW USED MASK $08 TOP $1D MID $1E BOT $1F ; $CENT $FEHOLDS STATE OF CENTRE #PIXCOUNT $FFNO. OF PIXELS IN ROW 0ROWCOUNT $D6USE TO TEST END-OF-PAGE CONDITION ;ING LSBPLOT $EB MSBT $FAMSB OF TOP ROW LSBT $F9LSB OF TOP ROW MSBM $FCMSB OF MIDDLE ROW LSBM $FBLSB OF MIDDLE ROW LSBB $06LSB OF BOTTOM ROW MSBB $07MSB OF BOTTOM ROW A1L $19MOVE REGISTERS A1H A1L+********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * * AND A.WESLEY * * * ********************* ; ; ; 'MSBPLOT $ECPAGE OFFSET FOR PLOTT     ANOTHER ROW FINISHED! ROWLOOPNOT DONE YET? JUMP BACK TO BASIC ; ROWLOOP ROWSTART ;  ; INCRY ;  MSBB #$04 ONESEE >4 LSBB >2 #$E0 OHFOUR >5 LSBB #$4F #$F0 >1 #$F0 ^1 LSBB PAGE >3 ^2 #$E0 ^3 LSBB ^4 MSBB >6 ^5 LSBB MSBB *^6 ROWCOUNT PIXCOUNT DOWNROW NEXT3 ON1 (LSBPLOT),Y MASK2 (LSBPLOT),Y ENDROW PIXCOUNT DOWNROW NEXT3 ; DOWNROW #$27 (LSBPLOT),Y #$3F (LSBPLOT),Y MSBM MSBTSHIFT UP BASES LSBM LSBT MSBB MSBM LSBB LSBM ; PLOT),Y MASK2 (LSBPLOT),Y PIXCOUNT DOWNROW NEXT3 BACK1 (LSBPLOT),Y #$40 (LSBPLOT),Y  PIXCOUNT DOWNROW NEXT3 CELLON1 TABLE,X ENDROW KILL1 MASK1  ON1  (LSBPLOT),Y #$40 (LSBPLOT),Y   (LSBB),Y ISET1 ^1 #$FD  CENT CELLON1 TABLE,X LIVE1 PIXCOUNT DOWNROW NEXT3 ISET1 #$02  CENT CELLON1 LOGIC1 TABLE,X LIVE1 PIXCOUNT DOWNROW NEXT3 LIVE1 MASK1  BACK1 (LSBF CENT CON1 #$EF >1 GSET1 #$40 CENTRE1 CENT CON1 #$EF >1 CON1 #$10 ^1 H1 CENT MASK1 (LSBM),Y HON1  #$7F  MASK1 (LSBB),Y ISET1 >1 HON1 #$80  I1 MASK1 CELLON2 TABLE,X NEXT1 KILL2 MASK2  ON2  (LSBPLOT),Y #$40 (LSBPLOT),Y  NEXT1 ON2 (LSBPLOT),Y MASK3 (LSBPLOT),Y ; NEXT1 MASK2  >1 #$01  ^1 MASK1 G1 (LSBT),Y GSET1  #$BENT CELLON2 TABLE,X NEXT1 LIVE2 ISET2 #$01  CENT CELLON2 LOGIC2 TABLE,X NEXT1 LIVE2 MASK2  BACK2 (LSBPLOT),Y MASK3 (LSBPLOT),Y NEXT1 BACK2 (LSBPLOT),Y #$40 (LSBPLOT),Y  NEXT1 #$08 CENT CON2 #$EF >1 CON2 #$10 ^1 H2 CENT MASK2 (LSBM),Y HON2  #$7F  MASK2 (LSBB),Y ISET2 >1 HON2 #$80  I2 MASK2 (LSBB),Y ISET2 ^1 #$FE  C BIT PATTERN #$40SET OFF (LSBPLOT),YSAVE BACK  NEXT2 ON3 (LSBPLOT),Y MASK1 (LSBPLOT),Y ; ; NEXT2 MASK3  >1 #$01  ^1 MASK2 G2 (LSBT),Y GSET2  #$F7 CENT CON2 #$EF >1 GSET2 MSBB MSBM LSBB LSBM ; ; INCRY ;  MSBB #$04 ONESEE >4 LSBB >2 #$E0 OHFOUR >5 LSBB #$4F #$F0 >1 #$F0 ^1 LSBB PAGE >3 ^2 #$E0 ^3 LSBB ^4 MSBB >6 ^5 (LSBPLOT),Y #$40 (LSBPLOT),Y  PIXCOUNT DOWNROW NEXT3 ON1 (LSBPLOT),Y (LSBPLOT),Y ENDROW PIXCOUNT DOWNROW NEXT3 ; DOWNROW #$27 (LSBPLOT),Y #$3F (LSBPLOT),Y MSBM MSBTSHIFT UP BASES LSBM LSBT DOWNROW NEXT3 LIVE1 MASK  BACK1 (LSBPLOT),Y (LSBPLOT),Y PIXCOUNT DOWNROW NEXT3 BACK1 (LSBPLOT),Y #$40 (LSBPLOT),Y  PIXCOUNT DOWNROW NEXT3 CELLON1 TABLE,X ENDROW KILL1 MASK  ON1  H1  H1 MID HON1 #$7F BOT ISET1 >1 HON1 #$80 I1 BOT ISET1 ^1 #$FD  CELLON1 TABLE,X LIVE1 PIXCOUNT DOWNROW NEXT3 ISET1 #$02  CELLON1 LOGIC1 TABLE,X LIVE1 PIXCOUNT LOT),Y ; NEXT1 MASK G1  (LSBT),Y TOP (LSBM),Y MID (LSBB),Y BOT #$01 MASK G1 TOP GSET1  #$BF CON1 #$EF H1 CENT H1 GSET1 #$40 CON1 #$EF H1 CENT H1 CON1 #$10  BACK2 (LSBPLOT),Y (LSBPLOT),Y NEXT1 BACK2 (LSBPLOT),Y #$40 (LSBPLOT),Y  NEXT1 CELLON2 TABLE,X NEXT1 KILL2 MASK  ON2  (LSBPLOT),Y #$40 (LSBPLOT),Y  NEXT1 ON2 (LSBPLOT),Y (LSBPENT H2 CON2 #$10 H2  H2 MID HON2 #$7F BOT ISET2 >1 HON2 #$80 BOT ISET2 ^1 #$FE  CELLON2 TABLE,X NEXT1 LIVE2 ISET2 #$01  CELLON2 LOGIC2 TABLE,X NEXT1 LIVE2 MASK (LSBPLOT),Y (LSBPLOT),Y ; ; NEXT2 MASK G2  (LSBT),Y TOP (LSBM),Y MID (LSBB),Y BOT #$01 MASK G2 TOP GSET2  #$F7 CON2 #$EF H2 CENT H2 GSET2 #$08 CON2 #$EF H2 C(LSBPLOT),YSAVE IT BACK NEXT2 BACK3 (LSBPLOT),Y #$40 (LSBPLOT),Y  NEXT2 CELLON3 TABLE,XGET RULES NEXT2 KILL3 MASK  ON3  (LSBPLOT),YGET BIT PATTERN #$40SET OFF (LSBPLOT),YSAVE BACK  NEXT2 ON3 FF BOT ISET3 >1 HON3 #$80 BOT ISET3 ^1 #$DF  CELLON3 TABLE,X NEXT2 LIVE3 ISET3 #$20  CELLON3 LOGIC3 TABLE,XGET RULES NEXT2 LIVE3 MASK  BACK3 %(LSBPLOT),YSET ON APPROPRIATE BIT  IS ON #$EF H3 CENT H3AND LEAVE GSET3 HERE IF G IS ON #$04SET BIT ON CON3 #$EFNO, SET BIT 4 OFF H3 CENT H3 CON3 #$10SET BIT 4 ON H3 "SET OVERFLOW OFF -> CENTRE OFF H3 MID HON3 #$7FSET MSB O>1  #$40  0^1 #$5DSET FOR 279 PIXELS ACROSS (3x93) PIXCOUNT ; NEXT3 MASK G3  (LSBT),Y TOP (LSBM),Y MID (LSBB),Y BOT #$01 MASK G3 TOP GSET3 G IS OFF #$FBSET BIT OFF CON3CENTREE FIRST IS EXPLICITLY SET EQUAL TO ZERO D #$02TOP MIDDLE PIXEL %MASKWHILE WE'RE HERE, SET UP MASK (LSBT),Y E #$02 &E #$02CURRENT 'CENTRE' PIXEL (LSBM),Y F  #$80  #F #$02BOTTOM MIDDLE PIXEL (LSBB),Y #$00 INIT OLD CENTRE TO OFF (#$00INIT NEIGHBOURS TO 0 AT ROWSTART (LSBPLOT),Y #$FE (LSBPLOT),Y (LSBT),Y   TOP (LSBM),Y   MID (LSBB),Y   BOT ; -; THE ROWSTART SCAN BEGINS ON THE SECOND ROW 2; SINCE TH#$40SET 01000000 FOR OVERFLOW VIA BIT TEST CENT ; #$BESET FOR 190 ROWS ROWCOUNT *ROWSTARTMSBMSET OFFSET TO PLOT TO HGR2 #$60 MSBPLOT LSBM LSBPLOTSET OFFSET #$27 (LSBM),Y #$3F (LSBM),Y (LSBB),Y #$3F (LSBB),Y<1FINISHED? PAGESTRT ONESEE 1CBIT TEST DATA OHFOUR 04BIT TEST DATA PAGESTRT#$20 MSBT #$242ND ROW BASE MSBMMIDDLE ROW #$283RD ROW BASE MSBBBOTTOM ROW #$00NOW FOR LSB'S & MISC LSBT LSBM LSBB LSBPLOT ; . PATTERN #$40SET OFF (LSBPLOT),YSAVE BACK  NEXT2 ON3 (LSBPLOT),Y (LSBPLOT),Y ; ; NEXT2 MASK G2  (LSBT),Y TOP (LSBM),Y MID (LSBB),Y BOT #$01 MASK G2 TOP GSET2  #$F7 CON2 #$EIVE3 MASK  BACK3 %(LSBPLOT),YSET ON APPROPRIATE BIT (LSBPLOT),YSAVE IT BACK NEXT2 BACK3 (LSBPLOT),Y #$40 (LSBPLOT),Y  NEXT2 CELLON3 TABLE,XGET RULES NEXT2 KILL3 MASK  ON3  (LSBPLOT),YGET BIT OVERFLOW OFF -> CENTRE OFF H3 MID HON3 #$7FSET MSB OFF BOT ISET3 >1 HON3 #$80 BOT ISET3 ^1 #$DF  CELLON3 TABLE,X NEXT2 LIVE3 ISET3 #$20  CELLON3 LOGIC3 TABLE,XGET RULES NEXT2 L IS ON #$EF H3 CENT MID HON3 #$7F BOT ISET3 >1 GSET3 HERE IF G IS ON #$04SET BIT ON CON3 #$EFNO, SET BIT 4 OFF H3 CENT MID HON3 #$7F BOT ISET3 >1 CON3 #$10SET BIT 4 ON H3 "SET>1  #$40  0^1 #$5DSET FOR 279 PIXELS ACROSS (3x93) PIXCOUNT ; NEXT3 MASK G3  (LSBT),Y TOP (LSBM),Y MID (LSBB),Y BOT #$01 MASK G3 TOP GSET3 G IS OFF #$FBSET BIT OFF CON3CENTREE FIRST IS EXPLICITLY SET EQUAL TO ZERO D #$02TOP MIDDLE PIXEL %MASKWHILE WE'RE HERE, SET UP MASK (LSBT),Y E #$02 &E #$02CURRENT 'CENTRE' PIXEL (LSBM),Y F  #$80  #F #$02BOTTOM MIDDLE PIXEL (LSBB),Y #$00 INIT OLD CENTRE TO OFF (#$00INIT NEIGHBOURS TO 0 AT ROWSTART (LSBPLOT),Y #$FE (LSBPLOT),Y (LSBT),Y   TOP (LSBM),Y   MID (LSBB),Y   BOT ; -; THE ROWSTART SCAN BEGINS ON THE SECOND ROW 2; SINCE TH#$40SET 01000000 FOR OVERFLOW VIA BIT TEST CENT ; #$BESET FOR 190 ROWS ROWCOUNT *ROWSTARTMSBMSET OFFSET TO PLOT TO HGR2 #$60 MSBPLOT LSBM LSBPLOTSET OFFSET #$27 (LSBM),Y #$3F (LSBM),Y (LSBB),Y #$3F (LSBB),Y<1FINISHED? PAGESTRT ONESEE 1CBIT TEST DATA OHFOUR 04BIT TEST DATA PAGESTRT#$20 MSBT #$242ND ROW BASE MSBMMIDDLE ROW #$283RD ROW BASE MSBBBOTTOM ROW #$00NOW FOR LSB'S & MISC LSBT LSBM LSBB LSBPLOT ; .$5F MSBB #$D0 LSBB #$00 LSBT #$27 ^1 (LSBT),Y (LSBB),Y  <1 ; SWAPPAG #$40SET UP THE MOVE A1H #$20 A2H #$00 A1L A2L ^1 (A1L),Y #$7FCLEAR COLOR BIT (A2L),Y  <1 A1H A2H   TABLE $1C00TABLE OF RULES ; ;  $1800  $800 ; ; &LIFE7 $C050SET HGR FOR THE APPLE $C04CSET HGR FOR THE CAT $C054PAGE 1 $C052ALL GRAPHICS #$20 PAGESET READ FROM PAGE 1 ; ;CLEAR TOP AND BOTTOM ROWS #$40 MSBT #1 A2L $1B A2H A2L+1 "PAGE $E6WHICH PAGE NOW USED MASK $08 TOP $1D MID $1E BOT $1F ; $CENT $FEHOLDS STATE OF CENTRE #PIXCOUNT $FFNO. OF PIXELS IN ROW 0ROWCOUNT $D6USE TO TEST END-OF-PAGE CONDITION ;ING LSBPLOT $EB MSBT $FAMSB OF TOP ROW LSBT $F9LSB OF TOP ROW MSBM $FCMSB OF MIDDLE ROW LSBM $FBLSB OF MIDDLE ROW LSBB $06LSB OF BOTTOM ROW MSBB $07MSB OF BOTTOM ROW A1L $19MOVE REGISTERS A1H A1L+********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * * AND A.WESLEY * * * ********************* ; ; ; 'MSBPLOT $ECPAGE OFFSET FOR PLOTT          LSBB MSBB *^6 ROWCOUNT ANOTHER ROW FINISHED! ROWLOOPNOT DONE YET? JUMP BACK TO BASIC ; ROWLOOP ROWSTART ;  RT ;  YES, SKIP #MONNO, MODIFY RESET RSTVCTRVECTOR /MON RSTVCTR+1 #$A5 RSTVCTR+2AND POWER-UP BYTE #MEMOVE2NOW MODIFY DOS PTR DOG+1 /MEMOVE2 DOG+2 #COUT1DISCONNECT DOS CSWL /COUT1 CSWL+1 $C083TURN ON BANK RAM $FA62RESET ROUTINE TABV $FB5BDO A VTAB HOME $FC58CLEAR SCRN COUT $FDEDPRINT CHAR COUT1 $FDF0SCREEN ROUTINE MON $FF69MONITOR ; ; ;  $1000  $1000 ; ; $MEMOVE RSTVCTRHAVE WE BEEN HERE #MONALREADY? LIFE10INTER CH $24CURSOR HORZ POSN DOG $3D0DOS WARM PTR RSTVCTR $3F2RESET VECTOR DOSWRM $9DBFDOS WARMSTART "DOSINP $9EBDDOS INPUT ROUTINE KYBD $C000KEYBOARD KBDSTRB $C010KBD STROBE PRNTAX $F941PRINT A & X RESET D $1E001ST PART CNT TABLES PC1EVN $1F00 ; PC2ODD $40002ND PC TABLES PC2EVN $4000 KILE $4000KILL MASK TALES KILO $4000 #STATODD $8000FINAL STATE TABLES STATEVN $8000 ; ; ; ;DOS & ROM STUFF ; CSWL $36OUTPUT POS ETC) ; TOP $1C80TOP ROW BUFFER BOT $1CA8BOT ROW BUFFER LINE1 $2400LINE1 ADDRESS "LINEBF $3FD0LAST LINE ADDRESS ; ; ;TABLES ; YLOW $1B00ROW BASE LSB YHIGH $1BC0ROW BASE MSB CELL $1D001-CELL RESULTS $PC1OD$ECMIDDLE ROW LINE NBLIN $EDNEWBOT ROW LINE EKILMSK $EEEVEN KILL MASK OKILMSK $EF ODD KILL MASK "TEMP $FATEMP SIXBIT STORAGE TEMP2 $FBONEBIT COUNT MID $FCMIDDLE ROW BASE NEWBOT $FENEWBOT BASE ; ; ;ABSOLUTE (BUFFER********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * * AND A.WESLEY * * * ********************* ; ; ; ;ZERO PAGE VARIABLES ; MIDLIN         ^2 #$E0 ^3 LSBB ^4 MSBB >6 ^5 LSBB MSBB *^6 ROWCOUNT ANOTHER ROW FINISHED! ROWLOOPNOT DONE YET? JUMP BACK TO BASIC ; ROWLOOP ROWSTART ;  #$3F (LSBPLOT),Y MSBM MSBTSHIFT UP BASES LSBM LSBT MSBB MSBM LSBB LSBM ; ; INCRY ;  MSBB #$04 ONESEE >4 LSBB >2 #$E0 OHFOUR >5 LSBB #$4F #$F0 >1 #$F0 ^1 LSBB PAGE >3 NEXT3 CELLON1 TABLE,X ENDROW KILL1 MASK  ON1  (LSBPLOT),Y #$40 (LSBPLOT),Y  PIXCOUNT DOWNROW NEXT3 ON1 (LSBPLOT),Y (LSBPLOT),Y ENDROW PIXCOUNT DOWNROW NEXT3 ; DOWNROW #$27 (LSBPLOT),Y 1 #$02  CELLON1 LOGIC1 TABLE,X LIVE1 PIXCOUNT DOWNROW NEXT3 LIVE1 MASK  BACK1 (LSBPLOT),Y (LSBPLOT),Y PIXCOUNT DOWNROW NEXT3 BACK1 (LSBPLOT),Y #$40 (LSBPLOT),Y  PIXCOUNT DOWNROW  #$40 CON1 #$EF H1 CENT H1 CON1 #$10 H1  H1 MID HON1 #$7F BOT ISET1 >1 HON1 #$80 I1 BOT ISET1 ^1 #$FD  CELLON1 TABLE,X LIVE1 PIXCOUNT DOWNROW NEXT3 ISET #$40 (LSBPLOT),Y  NEXT1 ON2 (LSBPLOT),Y (LSBPLOT),Y ; NEXT1 MASK G1  (LSBT),Y TOP (LSBM),Y MID (LSBB),Y BOT #$01 MASK G1 TOP GSET1  #$BF CON1 #$EF H1 CENT H1 GSET1 #$01  CELLON2 LOGIC2 TABLE,X NEXT1 LIVE2 MASK  BACK2 (LSBPLOT),Y (LSBPLOT),Y NEXT1 BACK2 (LSBPLOT),Y #$40 (LSBPLOT),Y  NEXT1 CELLON2 TABLE,X NEXT1 KILL2 MASK  ON2  (LSBPLOT),YF H2 CENT H2 GSET2 #$08 CON2 #$EF H2 CENT H2 CON2 #$10 H2  H2 MID HON2 #$7F BOT ISET2 >1 HON2 #$80 BOT ISET2 ^1 #$FE  CELLON2 TABLE,X NEXT1 LIVE2 ISET2 START ON RIGHT SIXBITAND DO SCAN ; ; DONESCRNCNTLOINC GEN COUNT >1 CNTHI ^1 KYBDANY KEYPRESS? GETKEYYES LOOP STARTSCNNO, LOOP GETKEY KBDSTRBTURN OFF KYBD #$83A CTRL-C? >2NO RESETYES, EXIT VIA RESET ^2 (MID),YAND SAVE ON SCREEN ; NEXTROW NBLININC NEWBOT BASE NBLIN #$C1FINISHED SCREEN? DONESCRNYES, EXIT YLOW,XGET LSB NEWBOT YHIGH,XGET MSB NEWBOT+1 MIDLINNOW MID BASE MIDLIN YLOW,X MID YHIGH,X MID+1 #$27T LIST BOT,Y SHIFT BIT0 INTO CARRY ADD IT TO NEXT BYTE (NEWBOT),Y >1 #$7F  CD ^1 #$80 (NEWBOT),YDONE SIXBITLOOP BACK ; ; ; !ENDROW (MID),YUPDATE BUFFERS TOP,Y (NEWBOT),Y BOT,Y TEMPGET 6 NEW BITS CELL,XTO GET END STATE >2IGNOREIT >1KILL IT ELSE SET CELL ALIVE  A9SKIP CLC (imm LDA) ^1 SET CELL DEAD "^2 #$00GET NEW STATE INTO BIT 0 TEMPADD OTHER 6 BITS (MID),YADD TO SCREEN ; !(NEWBOT),YNOW UPDATE BOND OF ROW, SKIP BOT,YNOW SHIFT BOT BITS  TEMP2  TEMP2(E1E0B6A6C6G0G1) TEMP2CLEAR BIT 0 (MID),YGET CURRENT STATE TOP,YREPLACE TOP BYTE CARRY = F0 #$01CLEAR BITS (A=00..0F1) TEMP2(E1E0B6A6C6G0G1F1) USE AS OFFSET ATER GO TO NEXT BYTES ^1 (MID),YGET NEXT BYTE SHIFT BIT 6 INTO CARRY  TEMP2& INTO TEMP2 (E1E0B6) TOP,YSAME WITH TOP   TEMP2(E1E0B6A6) BOT,YAND BOT   TEMP2(E1E0B6A6C6) BACK TO CURRENT BYTES ENDROWE RESULT (MID),YGET MID AGAIN CONVERT SO HI-BIT ON  FOR EVEN RESULTS )STATE STATEVN,XGET FINAL EVEN STATE EKILMSKKILL BITS TEMPADD ODD BITS TEMPAND STORE ; ; ; "ONEBIT TOP,YGET TOP BYTE IN X TEMP2SAVE (2BITS) FOR LTABLE BOT,YCONVERT BOT AGAIN TO GET EVEN 2ND PARTIAL COUNT PC2E PC2EVN,X STATE+2 ; ; ; (MID),YGET MID BYTE #$7FTURN BIT7 OFF FOR ODD RESULTS (STATO STATODD,XGET FINAL ODD STATE OKILMSKKILL SOME BITS TEMPSAVE EKILMSK &BOT,YGET BOT BYTE & TURN HI-BIT ON #$80  #KILODD KILO,XGET ODD KILL MASK OKILMSK ; GET BOT BYTE WITH HI-BIT OFF !#$7FTO USE AS OFFSET INTO PC2 TABLE &PC2O PC2ODD,XGET 2ND PC AS ADDR STATO+2FOR FINAL STATE VE 64 VALUES %PC2O+2USED AS ADDRS INTO BOTH THE &PC1EVN,XKILL MASK TABLE & THEN PC2 &KILEVN+2TABLE, BOTH AT $4000-$7FFF PC2E+2 ; BOT,YUSE BOT BYTE WITH HI-BIT ON TO GET EVEN KILL MASK KILEVN KILE,X SHIFT TO CORRECT MASK <1 SAME FOR MID BYTES #$27 ^1 (MID),Y >2 #$7F  CD ^2 #$80 (MID),Y SHIFT BOT0 INTO CARRY  <1 #$27RESTORE Y ; ; ; 'SIXBIT TOP,YUSE TOP BYTE AS OFFSET PC1ODD,XINTO PC1 LISTS KILODD+2THESE HA & NEWBOT BASES MIDLIN YLOW,X MID YHIGH,X MID+1 #$02 NBLIN YLOW,X NEWBOT YHIGH,X NEWBOT+1  #$27SET UP BOT WITH NBRS ^1 LINE1,Y >2 #$7F  CDSKIP ORA ^2 #$80 BOT,Y SHIFT BIT0 INTO CARRY RIGHT BYTE #$7FCLEAR BIT 7 (MID),YRESTORE #$00RESTORE Y! MOVE DOWN <1AND LOOP $2000NOW FOR LINE0 #$FE $2000 $2027 #$7F $2027 ; ; STARTSCN#$00CLEAR TOP BUFFER #$27 ^1 TOP,Y  <1 !#$00SET UP MID#$00CLEAR BOTTOM LINE ^1 LINEBF,Y  <1 ; CLRBDR #$00TURN OFF BITS ON #$BELEFT AND RIGHT ^1 YLOW,X MID YHIGH,X MID+1 (MID),YGET LEFT BYTE #$FECLEAR BIT 0 (MID),YRESTORE #$27NOW RIGHT (MID),YGET 1 NEWBOT+1 MID+1MOVE BASES UP <1IF NOT 0, LOOP $C082TURN OFF BANK RAM ; LIFE10 #$00SET GEN CNT CNTLOTO 0 CNTHI $C050SET HGR FOR APPLE $C04CSET HGR FOR THE CAT $C054PAGE 1 $C052ALL GRAPHICS ; ; CLRBOT #$27 $C083 #$00SET UP PTRS MID NEWBOT SET UP OFFSET #$D0COPY $D000-$FFFF MID+1 #$90TO $9000-$BFFF NEWBOT+1 ^1 (MID),YGET A BYTE SAVE IT (NEWBOT),YCOPY BOT TO MID (MID),Y COPY MID TO BOT (NEWBOT),Y  <1 MID+1MOVE BASES UP <1IF NOT 0, LOOP $C082TURN OFF BANK RAM ; LIFE11 #$00SET GEN CNT CNTLOTO 0 CNTHI $C050SET HGR FOR APPLE $C04CSET HGR FOR THE CAT $C054PAGE 1 $C052ALL GRAPHICS $C02FSET CAT INTENSITY ; ; C00SET UP PTRS MID NEWBOT SET UP OFFSET #$D0COPY $D000-$FFFF MID+1 #$90TO $9000-$BFFF NEWBOT+1 ^1 (MID),YGET A BYTE SAVE IT (NEWBOT),YCOPY BOT TO MID (MID),Y COPY MID TO BOT (NEWBOT),Y  <1 NEWBOT+#MONNO, MODIFY RESET RSTVCTRVECTOR /MON RSTVCTR+1 #$A5 RSTVCTR+2AND POWER-UP BYTE #MEMOVE2NOW MODIFY DOS PTR DOG+1 /MEMOVE2 DOG+2 #COUT1DISCONNECT DOS CSWL /COUT1 CSWL+1 $C083TURN ON BANK RAM $C083 #$ROUTINE TABV $FB5BDO A VTAB HOME $FC58CLEAR SCRN COUT $FDEDPRINT CHAR COUT1 $FDF0SCREEN ROUTINE MON $FF69MONITOR ; ; ;  $1000  $1000 ; ; $MEMOVE RSTVCTRHAVE WE BEEN HERE #MONALREADY? LIFE11YES, SKIP  $24CURSOR HORZ POSN DOG $3D0DOS WARM PTR RSTVCTR $3F2RESET VECTOR DOSWRM $9DBFDOS WARMSTART "DOSINP $9EBDDOS INPUT ROUTINE KYBD $C000KEYBOARD KBDSTRB $C010KBD STROBE PRNTAX $F941PRINT A & X RESET $FA62RESET ST PART CNT TABLES PC1EVN $1F00 ; PC2ODD $40002ND PC TABLES PC2EVN $4000 KILE $4000KILL MASK TALES KILO $4000 #STATODD $8000FINAL STATE TABLES STATEVN $8000 ; ; ; ;DOS & ROM STUFF ; CSWL $36OUTPUT POINTER CH TABL %TOPBIT $1700XXXXXX## -> 0000##00 %BOTBIT $1800XXXXXX## -> 00##0000 CELLOFF $1900NEW CELL STATE CELLON $1A00 TABLES YLOW $1B00ROW BASE LSB YHIGH $1BC0ROW BASE MSB %BIT6 $1D00X#XXXXXX -> #0000000 $PC1ODD $1E001T BASE ; ; ;ABSOLUTE (BUFFERS ETC) ; TOP $1C80TOP ROW BUFFER BOT $1CA8BOT ROW BUFFER #LINE00 $2000FIRST LINE ADDRESS LINE01 $2400LINE 01 ADDRESS "LINEBF $3FD0LAST LINE ADDRESS ; ; ;TABLES ; !MIDONLY $1600MID ON ONLY MID TMP STORAGE ; MIDLIN $ECMIDDLE ROW LINE NBLIN $EDNEWBOT ROW LINE EKILMSK $EEEVEN KILL MASK OKILMSK $EF ODD KILL MASK "TEMP $FATEMP SIXBIT STORAGE TEMP2 $FBONEBIT COUNT MID $FCMIDDLE ROW BASE NEWBOT $FENEWBO********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * * AND A.WESLEY * * * ********************* ; ; ; ;ZERO PAGE VARIABLES MIDTMP $EA            !!! ! ! ; CNTLO 00 CNTHI 00 ; MSG1 "GEN: $"  03END OF MESSAGE ; ; ;  ,Y  (NEWBOT),Y (MID),Y  (NEWBOT),Y  <2 NEWBOT+1 MID+1 <2 $C082TURN OFF BANK RAM DOG ; ; CNTLO 00 CNTHI 00 ; MSG1 "GEN: $"  03END OF MESSAGE ; ; ;  <2 $C082TURN OFF BANK RAM DOG ; RSTVCTR+1 DOG+2 #$A5 !RSTVCTR+2FIX UP POWER-UP BYTE #DOSINPRECONNECT DOS CSWL /DOSINP CSWL+1 $C083TURN ON BANK RAM $C083 #$00SET UP PTRS MID NEWBOT AND OFFSET #$D0 MID+1 #$90 NEWBOT+1 ^2 (MID)GET A KEYPRESS <5 KBDSTRBTURN IT OFF $C052SHOW ALL GRAPHICS STARTSCNAND LOOP ; ; $MEMOVE2 RSTVCTRSWAP DOS BACK IN? #DOSWRM >1YES! NO, RETURN ^1 #DOSWRM RSTVCTRMODIFY RESET VECTOR DOG+1AND DOS PTR /DOSWRM #$93A CTRL-S? LOOPNO, LOOP $C053SHOW BOT 4 LINES HOMECLEAR SCREEN #$00 CHHTAB1 #$16 TABVVTAB22 ^3 MSG1,YPRINT MESG >4 COUT  <3 ^4 CNTHIPRINT THE COUNT CNTLO PRNTAXDONE! ^5 KYBDYLOW,XGET LSB NEWBOT YHIGH,XGET MSB NEWBOT+1 MIDLINNOW MID BASE MIDLIN YLOW,X MID YHIGH,X MID+1 #$27START ON RIGHT %(MID),YUPDATE MIDTMP FOR NEXT ROW MIDTMP SIXBITAND DO SCAN ; ; DONESCRNCNTLOINC GEN COUNT WBOT),Y SIXBITAND LOOP ! ; ; ; ENDROW (MID),YUPDATE BUFFERS TOP,Y (NEWBOT),Y BOT,Y TEMPGET 6 NEW BITS (MID),YAND SAVE ON SCREEN ; NEXTROW NBLININC NEWBOT BASE NBLIN #$C1FINISHED SCREEN? DONESCRNYES, EXIT (NEWBOT),Y >2 #$7FBIT OFF, KILL (NEWBOT),Y SIXBITAND LOOP ; ^2 #$80BIT ON ,LIVE (NEWBOT),Y SIXBITAND LOOP ; ; CELLO CELLON,XAS ABOVE TEMP (MID),Y (NEWBOT),Y BOT,Y   (NEWBOT),Y <2 #$7F (NES OFFSET MOVE BACK UP TO CURRENT CELLOOLD CELL ON ,SKIP "CELLOFF,XGET OFFCELL NEW STATE TEMPGET BACK 6 NEW BITS (MID),YAND STORE ON SCRN ; !(NEWBOT),YNOW UPDATE BOT LIST BOT,Y SHIFT BIT0 INTO CARRY AND PUT IT INTO BIT7  BIT6,XINTO A-REG THING+1SAVE THIS FOR A WHILE (MID),YGET 1 MID NBR !MIDTMPUPDATE MIDTMP FOR LATER #$40KILL EXTRA BITS THING #$00RETRIEVE NBRS SHIFT OLD CELL INTO CARRY BOT,YGET LAST NBR! BIT6,XADD IT TO A-REG USE ATMPGET CELL & 1 NBR TOP,YUSE TOP NBRS AS INDEX "TOP,YBUT FIRST UPDATE TOP BUFR #$03REMOVE EXTRA BITS TOPBIT,XADD TOP NBRS BOT,YSAME WITH BOT NBRS BOTBIT,X NOW GET 3 MORE NBRS ENDROWFELL OFF SCREEN, SKIP TOP,YGET 1 TOP NBR ODD STATE OKILMSKKILL SOME BITS TEMPSAVE RESULT MIDTMPGET MID AGAIN CONVERT SO HI-BIT ON  FOR EVEN RESULTS )STATE STATEVN,XGET FINAL EVEN STATE EKILMSKKILL BITS TEMPADD ODD BITS TEMPAND STORE ; ; ; "ONEBIT MIDD,XGET 2ND PC AS ADDR STATO+2FOR FINAL STATE TABLE BOT,YCONVERT BOT AGAIN TO GET EVEN 2ND PARTIAL COUNT PC2E PC2EVN,X STATE+2 ; ; ; MIDTMPGET MID BYTE #$7FTURN BIT7 OFF FOR ODD RESULTS (STATO STATODD,XGET FINALL MASK KILEVN KILE,X SHIFT TO CORRECT MASK EKILMSK &BOT,YGET BOT BYTE & TURN HI-BIT ON #$80  #KILODD KILO,XGET ODD KILL MASK OKILMSK ; GET BOT BYTE WITH HI-BIT OFF !#$7FTO USE AS OFFSET INTO PC2 TABLE &PC2O PC2ODN PC1ODD,XINTO PC1 LISTS KILODD+2THESE HAVE 64 VALUES %PC2O+2USED AS ADDRS INTO BOTH THE &PC1EVN,XKILL MASK TABLE & THEN PC2 &KILEVN+2TABLE, BOTH AT $4000-$7FFF PC2E+2 ; BOT,YUSE BOT BYTE WITH HI-BIT ON TO GET EVEN KILT EVEN PC1 #$C0CONVERT TO PC2 NSTATE+2 ; MIDTMPGET MID BYTE #$7FGET ODD RESULT  NSTATO STATODD,XFINAL ODD TEMPSAVE MIDTMP GET EVEN RESULT   NSTATE STATEVN,X TEMP TEMP ONEBITAND DO ONEBIT ; ; ; "ALLOATES TEMPSAVE FOR LATER ONEBITAND JUMP TO ONEBIT ; ; TOPON BOT,YCHECK BOT OFF ALLONNO, BOTH ON, OLD WAY ; X HOLDS ONLY BYTE THAT WAS ON BOTON PC1ODD,XGET PART CNT #$C0CONVT TO PC2 ADDRESS NSTATO+2USE LATER PC1EVN,XGE #$80 LINE01,Y SHIFT BOT0 INTO CARRY  <1 #$27RESTORE Y ; ; ; 'SIXBIT TOP,YUSE TOP BYTE AS OFFSET TOPONTOP IS ON, SKIP BOT,YNOW IS BOTTOM OFF? BOTONBOTTOM IS ON, SKIP MIDTMPNOW GET MID BYTE MIDONLY,XGET FINAL ST MID & NEWBOT BASES MIDLIN YLOW,X MID YHIGH,X MID+1 #$02 NBLIN YLOW,X NEWBOT YHIGH,X NEWBOT+1 ;  #$27SET UP LINE1'S BIT7 !^1 LINE01,YAS THIS NEVER >2GETS UPDATED BY NEWBOT #$7F  CDSKIP ORA ^2 ,YRESTORE #$27NOW RIGHT (MID),YGET RIGHT BYTE #$7FCLEAR BIT 7 (MID),YRESTORE #$00RESTORE Y! MOVE DOWN <1AND LOOP ; ; STARTSCN#$00CLEAR TOP BUFFER #$27 ^1 TOP,Y BOT,YAND BOTTOM BUFR  <1 !#$00SET UPLRBOT #$27 #$00CLEAR BOTTOM LINE ^1 LINEBF,Y LINE00,YAND TOP LINE TOO  <1 ; CLRBDR #$00TURN OFF BITS ON #$BELEFT AND RIGHT ^1 YLOW,X MID YHIGH,X MID+1 (MID),YGET LEFT BYTE #$FECLEAR BIT 0 (MID)1 MID+1MOVE BASES UP <1IF NOT 0, LOOP $C082TURN OFF BANK RAM ; LIFE11 #$00SET GEN CNT CNTLOTO 0 CNTHI $C050SET HGR FOR APPLE $C04CSET HGR FOR THE CAT $C054PAGE 1 $C052ALL GRAPHICS $C057APPLE HI-RES $C02FSET 00SET UP PTRS MID NEWBOT SET UP OFFSET #$D0COPY $D000-$FFFF MID+1 #$90TO $9000-$BFFF NEWBOT+1 ^1 (MID),YGET A BYTE SAVE IT (NEWBOT),YCOPY BOT TO MID (MID),Y COPY MID TO BOT (NEWBOT),Y  <1 NEWBOT+#MONNO, MODIFY RESET RSTVCTRVECTOR /MON RSTVCTR+1 #$A5 RSTVCTR+2AND POWER-UP BYTE #MEMOVE2NOW MODIFY DOS PTR DOG+1 /MEMOVE2 DOG+2 #COUT1DISCONNECT DOS CSWL /COUT1 CSWL+1 $C083TURN ON BANK RAM $C083 #$ROUTINE TABV $FB5BDO A VTAB HOME $FC58CLEAR SCRN COUT $FDEDPRINT CHAR COUT1 $FDF0SCREEN ROUTINE MON $FF69MONITOR ; ; ;  $1000  $1000 ; ; $MEMOVE RSTVCTRHAVE WE BEEN HERE #MONALREADY? LIFE11YES, SKIP  $24CURSOR HORZ POSN DOG $3D0DOS WARM PTR RSTVCTR $3F2RESET VECTOR DOSWRM $9DBFDOS WARMSTART "DOSINP $9EBDDOS INPUT ROUTINE KYBD $C000KEYBOARD KBDSTRB $C010KBD STROBE PRNTAX $F941PRINT A & X RESET $FA62RESET ST PART CNT TABLES PC1EVN $1F00 ; PC2ODD $40002ND PC TABLES PC2EVN $4000 KILE $4000KILL MASK TALES KILO $4000 #STATODD $8000FINAL STATE TABLES STATEVN $8000 ; ; ; ;DOS & ROM STUFF ; CSWL $36OUTPUT POINTER CH TABL %TOPBIT $1700XXXXXX## -> 0000##00 %BOTBIT $1800XXXXXX## -> 00##0000 CELLOFF $1900NEW CELL STATE CELLON $1A00 TABLES YLOW $1B00ROW BASE LSB YHIGH $1BC0ROW BASE MSB %BIT6 $1D00X#XXXXXX -> #0000000 $PC1ODD $1E001T BASE ; ; ;ABSOLUTE (BUFFERS ETC) ; TOP $1C80TOP ROW BUFFER BOT $1CA8BOT ROW BUFFER #LINE00 $2000FIRST LINE ADDRESS LINE01 $2400LINE 01 ADDRESS "LINEBF $3FD0LAST LINE ADDRESS ; ; ;TABLES ; !MIDONLY $1600MID ON ONLY MID TMP STORAGE ; MIDLIN $ECMIDDLE ROW LINE NBLIN $EDNEWBOT ROW LINE EKILMSK $EEEVEN KILL MASK OKILMSK $EF ODD KILL MASK "TEMP $FATEMP SIXBIT STORAGE TEMP2 $FBONEBIT COUNT MID $FCMIDDLE ROW BASE NEWBOT $FENEWBOd!********************* * * * MACHINE CODE LIFE * * * * BY W.TOOMEY * * * * AND A.WESLEY * * * ********************* ; ; ; ;ZERO PAGE VARIABLES MIDTMP $EA! !!!!!!!!!""" " " " " """""""""     MID+1 <2 $C082TURN OFF BANK RAM DOG ; ; CNTLO 00 CNTHI 00 ; MSG1 "GEN: $"  03END OF MESSAGE ; ; ;  ECONNECT DOS CSWL /DOSINP CSWL+1 $C083TURN ON BANK RAM $C083 #$00SET UP PTRS MID NEWBOT AND OFFSET #$D0 MID+1 #$90 NEWBOT+1 ^2 (MID),Y  (NEWBOT),Y (MID),Y  (NEWBOT),Y  <2 NEWBOT+1 STARTSCNAND LOOP ; ; $MEMOVE2 RSTVCTRSWAP DOS BACK IN? #DOSWRM >1YES! NO, RETURN ^1 #DOSWRM RSTVCTRMODIFY RESET VECTOR DOG+1AND DOS PTR /DOSWRM RSTVCTR+1 DOG+2 #$A5 !RSTVCTR+2FIX UP POWER-UP BYTE #DOSINPREAR SCREEN #$00 CHHTAB1 #$16 TABVVTAB22 ^3 MSG1,YPRINT MESG >4 COUT  <3 ^4 CNTHIPRINT THE COUNT CNTLO PRNTAXDONE! ^5 KYBDGET A KEYPRESS <5 KBDSTRBTURN IT OFF $C052SHOW ALL GRAPHICS >1 CNTHI ^1 KYBDANY KEYPRESS? GETKEYYES LOOP STARTSCNNO, LOOP GETKEY KBDSTRBTURN OFF KYBD #$83A CTRL-C? >2NO RESETYES, EXIT VIA RESET ^2 #$93A CTRL-S? LOOPNO, LOOP $C053SHOW BOT 4 LINES HOMECL CELLOOLD CELL ON ,SKIP "CELLOFF,XGET OFFCELL NEW STATE TEMPGET BACK 6 NEW BITS (MID),YAND STORE ON SCRN ; !(NEWBOT),YNOW UPDATE BOT LIST BOT,Y SHIFT BIT0 INTO CARRY AND PUT IT INTO BIT7 (NEWBOT),Y >2 #$7FBIT OFF, KIE THIS FOR A WHILE (MID),YGET 1 MID NBR !MIDTMPUPDATE MIDTMP FOR LATER #$40KILL EXTRA BITS THING #$00RETRIEVE NBRS SHIFT OLD CELL INTO CARRY BOT,YGET LAST NBR! BIT6,XADD IT TO A-REG USE AS OFFSET MOVE BACK UP TO CURRENTP NBRS AS INDEX "TOP,YBUT FIRST UPDATE TOP BUFR #$03REMOVE EXTRA BITS TOPBIT,XADD TOP NBRS BOT,YSAME WITH BOT NBRS BOTBIT,X NOW GET 3 MORE NBRS ENDROWFELL OFF SCREEN, SKIP TOP,YGET 1 TOP NBR BIT6,XINTO A-REG THING+1SAV TEMPSAVE RESULT MIDTMPGET MID AGAIN CONVERT SO HI-BIT ON  FOR EVEN RESULTS )STATE STATEVN,XGET FINAL EVEN STATE EKILMSKKILL BITS TEMPADD ODD BITS TEMPAND STORE ; ; ; "ONEBIT MIDTMPGET CELL & 1 NBR TOP,YUSE TOR FINAL STATE TABLE BOT,YCONVERT BOT AGAIN TO GET EVEN 2ND PARTIAL COUNT PC2E PC2EVN,X STATE+2 ; ; ; MIDTMPGET MID BYTE #$7FTURN BIT7 OFF FOR ODD RESULTS (STATO STATODD,XGET FINAL ODD STATE OKILMSKKILL SOME BITSO CORRECT MASK EKILMSK &BOT,YGET BOT BYTE & TURN HI-BIT ON #$80  #KILODD KILO,XGET ODD KILL MASK OKILMSK ; GET BOT BYTE WITH HI-BIT OFF !#$7FTO USE AS OFFSET INTO PC2 TABLE &PC2O PC2ODD,XGET 2ND PC AS ADDR STATO+2FOODD+2THESE HAVE 64 VALUES %PC2O+2USED AS ADDRS INTO BOTH THE &PC1EVN,XKILL MASK TABLE & THEN PC2 &KILEVN+2TABLE, BOTH AT $4000-$7FFF PC2E+2 ; BOT,YUSE BOT BYTE WITH HI-BIT ON TO GET EVEN KILL MASK KILEVN KILE,X SHIFT TNSTATE+2 ; MIDTMPGET MID BYTE #$7FGET ODD RESULT  NSTATO STATODD,XFINAL ODD TEMPSAVE MIDTMP GET EVEN RESULT   NSTATE STATEVN,X TEMP TEMP ONEBITAND DO ONEBIT ; ; ; "ALLON PC1ODD,XINTO PC1 LISTS KILTAND JUMP TO ONEBIT ; ; TOPON BOT,YCHECK BOT OFF ALLONNO, BOTH ON, OLD WAY ; X HOLDS ONLY BYTE THAT WAS ON BOTON PC1ODD,XGET PART CNT #$C0CONVT TO PC2 ADDRESS NSTATO+2USE LATER PC1EVN,XGET EVEN PC1 #$C0CONVERT TO PC2 MIDTMP TOP,Y BOT,Y #$40 SIXBITNOT 3, LOOP  #$01SET UP CELL0 ON (MID),Y  SIXBIT ; ; ; NENDROW UPDATE BUFFERS (NEWBOT),Y BOT,Y NEXTROW ; ; ; %MIDON MIDONLY,XNOW GET MID BYTE TEMPSAVE FOR LATER ONEBITOP,YNOW CHECK IF 3 NEXT BOT,YNBRS ARE ON #$40YES? SIXBITNO, DO NEXT STUFF ELSE SET BIT0 ON #$01 (MID),Y RESET Y-REG SIXBITAND LOOP BACK ; ; $^4 #$80AS ABOVE BUT BIT0 ON (NEWBOT),Y (MID),YUPDATE MIDTMP  SKIP MIDTMPNOW GET MID BYTE MIDONMID IS ON ONLY %MIDOFF (NEWBOT),YCOPY BIT 0 OVER BOT,YADD IT TO BUFFER  INTO THE NEXT BYTE NENDROWEND OF ROW (NEWBOT),Y >4 #$7F (NEWBOT),YDONE ; (MID),YSET UP NEW MID MIDTMP CDSKIP ORA ^2 #$80 LINE01,Y SHIFT BOT0 INTO CARRY  <1 #$27RESTORE Y $2027GET FIRST MIDTMP MIDTMP ; ; ; 'SIXBIT TOP,YUSE TOP BYTE AS OFFSET TOPONTOP IS ON, SKIP BOT,YNOW IS BOTTOM OFF? BOTONBOTTOM IS ON, <1 !#$00SET UP MID & NEWBOT BASES MIDLIN YLOW,X MID YHIGH,X MID+1 #$02 NBLIN YLOW,X NEWBOT YHIGH,X NEWBOT+1 ;  #$27SET UP LINE1'S BIT7 !^1 LINE01,YAS THIS NEVER >2GETS UPDATED BY NEWBOT #$7F ECLEAR BIT 0 (MID),YRESTORE #$27NOW RIGHT (MID),YGET RIGHT BYTE #$7FCLEAR BIT 7 (MID),YRESTORE #$00RESTORE Y! MOVE DOWN <1AND LOOP ; ; STARTSCN#$00CLEAR TOP BUFFER #$27 ^1 TOP,Y BOT,YAND BOTTOM BUFR CAT INTENSITY ; ; CLRBOT #$27 #$00CLEAR BOTTOM LINE ^1 LINEBF,Y LINE00,YAND TOP LINE TOO  <1 ; CLRBDR #$00TURN OFF BITS ON #$BELEFT AND RIGHT ^1 YLOW,X MID YHIGH,X MID+1 (MID),YGET LEFT BYTE #$F