From 2e185e713d770d973a795addb27ae70e994c91b0 Mon Sep 17 00:00:00 2001 From: IgorA Date: Mon, 16 Nov 2020 07:55:40 +0000 Subject: [PATCH] fix life2, update life3 git-svn-id: svn://kolibrios.org@8199 a494cfbc-eb01-0410-851d-a64ba20cac60 --- data/Tupfile.lua | 1 - data/common/demos/life2 | Bin 15897 -> 15864 bytes programs/demos/life2/include/kos_func.inc | 12 ++--------- programs/demos/life2/include/kos_heap.h | 24 ++++----------------- programs/demos/life2/include/kos_heap.inc | 25 +++++++++++++--------- programs/demos/life2/include/memheap.h | 13 ----------- programs/demos/life2/kos_cdlg.inc | 10 ++++----- programs/games/life3/trunk/life3.asm | 25 +++++++++------------- 8 files changed, 36 insertions(+), 74 deletions(-) delete mode 100644 programs/demos/life2/include/memheap.h diff --git a/data/Tupfile.lua b/data/Tupfile.lua index a25efb853b..b8fe04ccd6 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -197,7 +197,6 @@ extra_files = { {"kolibrios/emul/kwine/lib/", PROGS .. "/emulator/kwine/bin/lib/*"}, {"kolibrios/demos/ak47.lif", "common/demos/ak47.lif"}, {"kolibrios/demos/life2", "common/demos/life2"}, - {"kolibrios/demos/life3tb.png", PROGS .. "/games/life3/trunk/life3tb.png"}, {"kolibrios/demos/relay.lif", "common/demos/relay.lif"}, {"kolibrios/demos/rpento.lif", "common/demos/rpento.lif"}, {"kolibrios/games/BabyPainter", "common/games/BabyPainter"}, diff --git a/data/common/demos/life2 b/data/common/demos/life2 index bb10183e26dd44adb64cbc079fe277522554592a..3463da58b7f36f8ff9eaaa7d6be0b758a6e768a6 100644 GIT binary patch literal 15864 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 OTyt6GntCY$0002L^u!wg literal 15897 zcmV+!KIXwoP(w@Lj{pFH00001Mv*2LLXK;4&&M{gp_Yr{A@y#G3_wjgbP7V=PuB29 z>X^@4xoaCs%6U?O;e#Ri7<(kovU9t<6BTR@A^`$7g~XOmvBdcUWh=@~+?n(U(tS`Z zyX>}cV}EhPQn_B8pJ4t^j$3{gYyQSeYaC65M9Ief^RG5xwJs=#XACUV4T?!LPKsPc zA{qv3{|iS5jAuWk%sI|JlQs9s$SDvE*}36Q%6;Gv+cd~zcMo|!T)y{PE{3Ac9woaI zDUGL-DF%iXduHcBlbqp9sYh~YWhzg)?y#7fc*^l#s1tPiq0I*!?4kX8t;j&(k0{B* zMd-Ky-zoB8-4Iv0lhpY(yj%T=2@LEAsAex~K>LtlQ4}b)=FP#=jOXot&9zJVI2!Je z@zbseTcfE@%EC#RL&XoEcK^anv-l@&wkuIS(|Y8g&<)zX>6@L_$Pnep#q=djk`6t6 z>2SLV1Vpfja^m+WEHfp`Hi)4S98rP&v}JaUY3?Olj46AL?=*^;xS}GiA3% z!j}JgG(R`9k5s|~n^Ku}aUX77qfqPGDZNR4X0e$zusZ8m8Ent0rITI%15el zuy!$q@q1poX7S|E<1kb+D=pXkK67IcwsqQ2PqePz^)6G=Vg~Fy9#e1kSpG_N7fx2A zH`4g^6{@zdYrOdblG;@U5qwgxi^B5;vHmx zS7W+4JURJ~N~ZSuV>V3dtJLM?+gD6*L9H$^d>B{1rfvSW_^dc}Ltgjy>vyp+M>ieQ z9G3#BSZ5lve=Av_6C|p?=JW*qmNQ>fpkHo#FpWYV)cK@f8ds)`Nh&(XTzT64c@&&-X7UFmi`HTMg5Hz0wEcTQ^;J}%H+7MrZNCv#M6P@;qXxa!_SU04p`31 z`znw0GGu&s`4Cl&`lg!|cDDDj-##Rxz%dTX82EvaWnQY@Fqp8{#y0n>c=5Q`4G(6y z&;vP8e!w@-Xq+rAx$!dI4!v?K&=LRiu{n4|Jv)|wJ^Iw978du*H4!~@G7KH>8tlg~ ze~g2f&GRLDEOr(yc8)f}+t6A>)=Ds0IK5eS%3<)#e0tPNh+!$z?}?y-=mcI}h=p`- zoaAZqNyE=)rB3u_nP==N>P&rh@&ObPKLV=ik^|j2l$VwL0VON>V(jyv_Aoo0fHnPh zrZqxclQ)8jE8KLJnH5n6F`P*p9H;j{1*7qz%myi18OgK9gs&2nh}KX$cz2<98sKpS zsVRiY?~2yJ*i$Czb0-!LF&g=+`*tccJr7z7(Gh?blbaQNaFacceK+F#)VVZKVaw|2 zMoR7F?RsDOyj3%oD^WGaa3L7;%IJL@*`%G--JkTT90Ki8t|wqmjg;e&pf?W~h&meu zhNDhM_eJ!tLs&bjKo|41bhc}%o&z4TGLos@0y;m)(+Ufk)-Fq~a-~?mk!w3PXy zo!}7=^mNoAb}Kzia06O9&||u3=ND&S?Pnz0>8d$*H2$9O6zGg5S5adZgWK~M8gFLh zxfgk{FZtJXB7&qRiYUUzkES}_EZ?1fTr7;*w|R2UU9G~Ijc@gMH=uB)jouUPyXp!H zcI~vcT%uoBh*)l!SsbQ#0!3v5-R;B54iM@?WapraLwk*)_$&C~g`T2vM_ zSB1C@YV0^F1%5y!v5mLEQ~aikeuKa|7dwVvM3}pODaXzQ+`9UcBGVV^ED6j)ng%k8Y!9~MdxAG}>A6}y6mjyOt#^DhW&IiZcpLOO$|h&Wba&(sk56E9 z-%Ge4W~5!YfLNrM--fdG(t*B->%UH%IRDfK`?Y7YBh8RxPE$eLi1n3PnZTvE0_tqo z58~z^o11?6@02mGS&a))V(q4{AA&&Pg?&;4kh$JuX`Ug}8Fq4L#xY=vqW(sDJjVnIq5 zIVPnwsZD&)374n0V66Al4R&S7D_Vvxjr|E=tNDCi(FFz3S@JE*8+~~3PDk^tuh!4zKjY3(rUGLLjz=c zeSYmEBqW&O7G=wCX?zG@`cpw_L4tG5-~;9!X#-$1MbZ6u&cvuTj+yY8M01pgH$W zY~z0`Nm^n_gg zf_NI-F2c)GE8$|8LCkI<&zqk=PUWyioEC%|+lHH!pkt~C(k)nwh4c0T5{Z!nZ};6x z)3f}SrskV>p)5U=a2wrIRfkQYXNt^=tz$p?*O_?_8@MpU+2_re9apyf{}3Uj!|Wl& zeC9l^@O~)s9V7HVWGtPd4-DyBJI92D&P5u6&;&Y!dc+nBLHXMoa-JamAU{u_rrka> zO1;*jPjprrIZ|N=Z#w_)8D%oVQ;c|bzc>tYx#;cvEzChHAqGS=h3PNyRHg)n1I`+R zc|8ZKQP2SjE%lHu-6E5q+^Gy8oSBM6CAAzWfDzWko>F?*uG_t2X(p5ge&slsI>A*& zS+-GfNLWk*aY{SgbpO);n9W(=cN>fz*g%xzTw;Z?+V_L{9$Tk7XxTLBJ)?Xyn(sKF z-G7Ile#d=LO}QL&${mWSUY=1x@(ecoMsr5NQQshiG2zvHey*(}r4gMJzd zeb&-Tkp?k6{+Yzyyh=74L&G};CV5uA!Oi2Wuq|tPVMd||*ChP=X(~B7!KD49v203G zOdVM^Vc3D5q-!D6ocrz=RCR)I;tCWfPNxJnUuX?pkGxW)$yUFA(?j^-WMi3X)4N{!~IDBz8grq6mT&#$~VBfHmotaQZvOM_leAof@wZ)?FO3U zFQS9e>Ya5Ma!5_BhWNYEJH1uLy6H|e%D%29^o0Zbq44yc)NfM%cPhrD`jZ0~f&D7t z0N5cG=Axvnd>C`jEp+zv^s|^WP%5&E`5M0$!d}D%ULpezmy8do*>05*c#w=Ks5ZC% zXh#RPN#xD-j0WOq#;M9#W^TtyMKr{55I$Q7(`0UOn{E~$q*nQYYlQuIvCUO{08ItF z#-EkwkGA%hzkcGPPGi$;JB0m!^PB-e)7E6`mbs0#USFin`DL8?3%PgE*&7E3s@Flr zEZ=GJQYb-&5LcasMSk%Wq03yRCGvQL5lL8SF1;ds2;acdSo^T0A>r@9MVEC` zTZn|ayp)S*1ydu4kaAK5Vsn;_rd+w7=dNDopK(ccSw{ za6Ei2?kB;Lxna+5UTpt9N+rv1B0w;Y**5~FFvbNge|X+n5ktSE-BYm>;+X47YQ%pb zzkGHC+*uSxf2S#^_)!upuC3(CzQ8AOH9|DremrWuO&{==Ou?gt9<<~Rf!x3?HZhcZ ztAM@?&(ul+isnBdOvpD+IBjzsnP^Q1GSuNe{|Di;0>of|5?sN$TmIK=SQ`66x0TWF zsYDwiwo)T$sb6ckpbcj4gjM&BG1Xwst(Uk5c=;Je^ubrKmg15<^i`Yyjb~o*kMhbJ zy2G4V)=(DFw4Nz&9}sFg(TkJd`hYfzbg_=8e~a*N7iWP#Q5uAwH!RToBz|_9%D>70 zJ61Pf6(d2nmkQeu$lbWr7e|2_VCmp|dcP5u_p`&*1@f(Yd>F!#e;trDYMg3E&bYBH zB8w}gKI#;!E9E>a(281v~Bbh37|;3<9t|-KB-Bm05xFet5>mHieIdY&6-({VCkbK|Vxtcm z_|pN~(#Z`v3><|b>{?v9XQhFa?(|pY% z>=FL-Xy6fKqRzK55E`k-wFsVTy?v56yJ9W4TJ%u%ic-zcp< z8??X=$aUl=zytX8{c3>U0%Leakvxe`3=Dk<9q>I2XCE*G%t`|cl2XSUa2FZ%+Grc!+LkQ)UfzB4 z7I`_eh*oSo(*@SYN`c1ZnTLi=aN+NKtL)VIezL~&?4&*&MentQh;IqK$ZLz^P>%Y6 z^pYJ(Wa+I{@LPlhkOfXcyA;^%n8nc0_N^c~wy+Jge)Tyq-d;|zoio7An-RM9OP(hQ zUuvD8TB_Yn^pPXyZ8HsL`?jV-~ap^hqdI1%^V^S0@q79*55 za*&a!6qf1Q^*#yytK)KU3RnZBlDW_`qHB&@r+Jn2@134q+ytLzeCF#j{+_f`;5St8 zPb{e!c#5NEQ~iG8*y@Vgtds)dl}jdUY_UbnI19lK5dj6tui#*?OK515N}D^ z;S~#waq1&$^}eB>{VYR5jMudQA|ZJ*aP924{N6>CDUn>Fm^JG}B({&qW8 z6n#HLwglSA1x}v`F7D~nRA8WyM&5x&KQ+ootzryPPzQy*IAAhcTf@A)0qT>pO{;L> z*C#ancYnL1e`3FS=LtI+!<|~QyY;OjODNE2r04mg51s{p;nd%qOv;5yOzon>8B3+KH!7Ra+N z%S!Js+yZThtP%vuIgpxaY;PYTj*`a?*!U$C?E!XT(pw7S}B+V zCCDzve>EazEr9#=j^8az`M1>?!KK>bEy79*;C&ij33S3ahu4_Q-U~iL?`Y@2HNiX9 zYqcuXVCNC}qJDGUe7vdewgol@sp<&tA7ers4MC(o!HFIVzfmVVBc-dyR}1IoJn9L>XA@12wIde&;j?odnSGg0F7g``Jp znx`|I5$Yc4)aB+AK}ZEWrFEE*hemnC+!Niv>%&!ArH5*y?2b&gI+_FECYHKrr1`}1 zx{CGB=OH}hEbXGl2>#pyU@BbXfvf38OTyC*u3n5Lpw`T&CkQ)SFhRK2!+~icQ&C?~?0&&zPCC_!BzVAZp6{=X5J$=~mOx z0j0$0UPiUkB~)|ugLANbrDX4@-0-T<^C(kIM{E$!Nb^O|OaoLX#^GUon|M!K5f1^tUGOI9?I5DG3o1DdUJ}%3;L#K(fCHx=wah)- z*+}pW0ZSJNCMFXZ6wHb@cvlAC$Vn>dqKG}9yP4{d*n)2=>VNH;Ve2!Fvmt(#=^{_J z1LR3O1jy~v)Klp`q{lBqlG&_MFzwM!ErGi|X64U_50?NN!yudz`np-6+)G%fx@t^- z@Fgf2-*0YgQ~hq2uVa)!;_sYRdpm&bAZhPCEu7Ar^WAZw!cuX&WP{0=HlQOdj?{GnqAJ500$AH^;8m1L=!MA;bBg%WU#|J(|m8C)8}hxYe=2vy&>m z;b%?al5Pon)3mEaI?7PVKi_pLaiGHbqd@o#fB3XCIrwZ&3wCz~IYb>Q<8uOWImbSs z*ouSaxh9Q1y*nzi@P;lrCysTH6U4<&9p)osKP)3*0=hbCdb~@K>ftxjLq)m+?qtlv zjvg82WaFU*-DULE)NzZ%3k-Q&eYW<5dl_WE@JTkGhQxILd+CQ53cdk5dH|;EHSo>h zHS|Vuf_{KP#@PTo7PlOn9CHnE#7?u_SQ@AeQ_fe=wB7F9)N(JR4lt5R9kr|U#2zpH zO0PIIJ;dkL!gKRacdH_!0># zhdBt3s>qRG+Dmxu4d=4MD}GeC)JEt=zv+Nyi%5EqHpCi=@5^XcN{0%dMYX7lo5cCw zE3yy8Muhiy9)Qbkj9(V!won1gAU3vp#0k!@nr<5IEx2N=e*}SW#SxFDZw#O~KCc8vFanI#tY3yq-&RGu*qh12*lU+G=yX0a3=Goc z&ch+W53DaiY~V)5-{n<)-hYZs#;YHP?5Vp4s#nlucpo143y%gFq=j#`7iF*HbU4Z2 zkokN@eTy2;T|M54YQJ5Avs^}YcHf%=>Bz02N)Vty$Xm`lh($Cq1xiQh=l6Lef15|` zRv+>MeY9no+&1_O@qS3qfyPVhebjbf!jdbAOq|-hU}9;O7kn=I8{(mK2C`jq(U-A! zfeP!KD421BZz24JMS$dt&En79=_V;>X}bx%dfGyY5c0l)uggxp3{Q%M=yE>UQk^Wp z)ItrfCj2ri{~}2$e0F&hZb_AZ>r=gIEzP9YE=B}o&v;-vt(qFfKCGx`s?nm}TPnm( z-7(Yr0@XuKr;3dx@6HD%R5h-W7qPHQT4K+oWg1qvYt3yFhw4ML+ts*oGgO%2Tovbp z!KE1=rPCVl3|k#j9{(j?Sf8tWqB`G8V`c^i1`r+yp1#_i5MhBjptyhnz!$e^@O8QP z_QLsBF6Ax)$lAJZgcF|xaQ@mt7b&>a(BXfKPA3{-GJb9>`^8RoDl-*3I&ChY+31!b z4c&2U`NdOLd9sl%r7cXY%#brSsvpGKybY$C#zKp;wW3AO>U-TN^wkjjv|`4tCAMH* zu-R`vu?t^?B}Og*;Xnp2K~l!-+r2t+n|-ym(gJ#+6sAIUSEK>TzI>yJRgq zxR#6DyVI&!LKpvK_ao*1E#j}{XE3;UkTn@Kf?3UG$3Lu896TL5?=8 zh*t>Ygt|bj_`w0EdZJ;&krS|~tdis4t78_3wF$40^=GQ(o=MOWo}iNQn+=i@h@6^# zxc9n-eqIqjDNl=9%B%-fc9+4cFl_zz4Q%N*LXIOWH!9EFiDPNBiq}iRE^<<9BK1&@ z+G{8LAX09)BdiLes}1^}ne3Jl5K%>T)(HXJW(aZ#<6W5p@^6hxXoKkquz(R>KLZX{x4^NxF%FO^%<`PwD#x_b^CUh-6z3v zFa1Gag53tUA0D{SmSjH_(Y>?vPpYp6GO28e!6)=XkxS-tjK@6vxttOCV}QGiw+Omu z?_WW@d|fV))p7t+xx(hKDaju(of!mv@)j_?@N4 zvu5k{VmakfcnD=(%1HWmUe-PEGobFYu!QSTAyS zX5uASu1t7)CopcjJ&7bUk8@_IxdmT<&kma@T!q98(OCc9HKs=@-eVR;pH5?NPZ*sI z^P!j?uEgcv08QD}m{DI3Yj>la+p6Ul?%aAjE7%#Un1W=i{me%G`7jB7v3Z%zMsLc3 zxe-a8eRdgn*&0|1TF4bKGJrFR4xOnzIaeFPc4c5fMD`Nmuqwf=Wx);5Q&in+rUYoM z&v$SOR*OzSC?37<+RUFva!d8af;vUfM{D7pw8xSY@>F1H`4llTv2&u6OSGE0iwYJS z-rbV!)@b3_XJHOQkg7ER8@IRA8&)N}QUlGM<2Wm75{+B}c4`93XWK_P1+ABef`I)N zoK%2r484E#$DnlQ7(<9SS}VL8-*OhzJUl>TAS;UdrKD-Z&dxZO2*v}6qT0mh$TqB? zT@Ildp$)?%@&L04BbxYUk_h`}Jdo`F^B|+}*s8GPy0SA3N;s1ol&HR&uH7nz!A5|1;m~MahMrHQtFd47NO#vRQUOJgkpvwP~Tj`W#6- z>H|ei#Xq@BIM+YT-HBq)ANbmAZ^8J;Jz~G^U#e)e{^e4CYexLVeW!IgXeE#9&QMPD z{&AqOhF)Iezl}_kE5^cYg9@O><&>4wW`Gjn?$elk5vsc`eVmDC?4Sw-ImjIgHf^yN z7*tJL<*e>98qldirl7YMAb0EpeqW}&tDYqE+W5lFcDs&fe@-K1m{k1s@buiO2V;A{tVeuG=MN0)|-a$i8QePml z|E~G4X1XZ6n+2gr;ck??won$~l2B}7`0|p^^Z)j&XdeTZ(xF7Eh%P4VnL$*7&SuU& zcf?06~-Zl_!x0Do^QFo03hyY^YiNVJg!n{FNYozYy3Mm#l&icRpK+ zM>CRdH285q#>8&H7M|&_P<6#zVjtEa7W+zF?<>{>l{ngnEoZ;r+C%{bzuA?TH^sD# z`gHyzFOwY&yZdbCqi^F-vtN)bd9D3Spvp548RNSnmc%(R^HR2fwH+y)CsI;w%%arS zrxwV6O5T-||6Xr3x1}CqP!E`~?=>w7Lg{C!?={3X2_p~m&5<*Ii2_Gy`N;n!>`!Vb zW#i}ZUT;3^-zwak0e`}orr_`!;6AXBb$Or-7msE=o>DTe(}fp2j< znA%%a0rQ|FjwKc$RirbI#CV}pbBMjsE*n5B82vzhEQ8>l6(l07F z#ze~HW(n$UVBv_GddahnAIix|L{6tt2yCG#oVKt%Dw_|Gow@F|88h7e#E3kBZD+sx zpG@&J3s7Sz5ndYWGdTyf?Z4?gcmknd%uu@S#|_?rP?%cG8%=fRfgza1RFpu}u-h4FD4lij=%UX=c|)6R$#wXn3De zPNFZUlXS!ZxLxV}AKhPdAF40l41Ysh)PmXgB?cel+x7wrwdNYnBMin&cRxntR@zPY z!|HhG({e;#9mIr3fYaPsTYsDrB=~kvLbSQg2s0w!PJalAE%k)dd9Tt29PNCwN(i0B z12RSM8V2{z%~TLy0QbbUxD}v0Q8SnlZnv`2M=MgBj9%c$Q$^qMgI*)={&&iLrH`S6 z^griR(jy&@JT>@G?Y3sk6x;^W2jdYl`y|u#s*~kU%rh6wjd--NqrS&5^t{54w^bQQ zQ%G@hLpjC;0GEwF0kr9p2MjmGdK=!AO8|<}l6L8^8#hOn8P;dBiNr3N#}x6cHZ~oK z#+xV8_u+&6MA}tELsOg(u@r9x*gbHHv?C%kSh5~jCL~(vz&_<4EvZHH$6^GKe$Sq% zfb>z;m_88jjteiUPZ+)3HCa_~ON!B}yNi$Oad%K34!*08I(7y=du2@x+z;J_+CR9t zPLH8$EhKIEemfALS~IN$)`_A44Gm&p(kkVSGYf~>POIFfuY1geR{hd)b5%Rv^Z)eaI0GIG{0AVE_JNEXzL29}Rbdw63QdRAhgx54 zzp!_5t(Q&>y1fYSL~rQ<1>Jc`U75)|RDfp3|9i=LB+7WD&D!3fZw(4PbyLHhld?*s zn?3rD``~x04csHM{;a)Mt`3PsbrkA<-AwAM^DKjoW8ojjG@;coLC88_RGKj+ZITBUt8hks;thNrAqoRzVsnA#`q-apGDnQ znL>1Ff&1SX-_hNem@0uXxJUYZpDm}NIK`| zxw~bxx@F6_^eBfP0hKKIOj7_qOYgkxzf_VT)A5W3GB!iA<93Ppl zM!)@Nwu*x@jwBOJaT)XAkXY}EuXc(^ld6mWbt=~E#>#acW?KKOXtl|}*x#e$ERlse z*i;r80Q(!I6SRd}13Xmhax2;S4?o%e(qQx%loHPfufB|(tOz{1W9n%J8;0*5#wmYh z$oc11Gip;m5kJd+Y`b`#_DqN4SC<7I_`gO}vl&|{XYD+T&L^tt2JxoxJWMECt`!fj z;{wM17Iz81lj+?t-;f$tnTHnd-lB098LN<-$fz~}*cl6AEN0$Pn%TMUA-KWwc;6eN zH@2%~g#0YxQ*8kI178^)#wf%~Cqx5xiQCcw0FC?pV?AM=Ksa4*C#+tNm?IKRi{wKQ zvP1fyWtMPT>*U|I2(X*KxWvD3n!q)2_*`rHFNBlyxd!=h9kqhlGPHOEpxBX#?G}s^ zHsZMgW|h6AScxGznK~#PxBXK64ub!T|p`rw)dKHKj@W@r+Q0-bIKd(!x3D?5l`}8Q!uk zpzsnUxW&>5pru}CHE6*kK{JB)V5J&Q`s9`qgnzyuNcnB$A<4XMugJ;@)N8j4N9cL3Pc z@BeatT-8#@&g7(O5P0^bz4mwMGsm^Vibw}>$j|u^96P2IZ#-2sorLA@kDOp4hj;-mdgzqe05_xa zd@oWV5C2zK;>$DIN~|Y2x06u}2d94GQQLoKt%b2|)-5P6$uo_2?~~^pmIzNS+3Fe2 z^y5g-y4E_uooF8~Q0BD!={7w0AZwq@UpiAO10BSK!=`l3^~*dF?>VQ{xcJ{pI8}U1v5}JsXtN;7!swuQ|m3T=U(U%TD18fry(k5|jrb(FGr0UDI z5%e#g$^@kKc1l%uKf-7@{!_r6iUsDT_W(0<_b`&MAne;?tvo zkMAx`1@bH>nY7{`&lkgkq#kf)d43vUV~4BY8<_sO114z3Q?TNJNoD-=7soFp8{H}g z0I*|O+xOyN5EyEbwL{V5g?nQetnG@z?zTp_TBYp2(XChK&KIfyx z3vm-rt`XiVJ%^upxL&_ltj>9oyi-Y?H|B0e)3ej!V}oqQ3r`gg#pMEMa@+8o%WgD} zcu$ns*{AfNk5H{)SEgw`e~|~D5&t+zzmvQ%tJ;i@$VLj6`xJLX4RjXh&isFjN`&il z)CRkgEVYNKm@Pu9$}I!x2t4>pAB^OgLCq#!`XBb%ggHtH24y+=XABVnwOhaQ0&Lod z`WJY=!&#sZO6Yznxd%?n9-7DYNGb&*yl(8Fag?!&HTlYGsZLAhObsPr(7qsv2SIIz zYoEXhy7iYdWBm^&|IZSbxpNgmtohi49X61{CvS=`=}Cr8XH5f$`^;y)5XV*zew%Xb zZb_%INd)KBJw>@I^+WtZ=+F5WoTn=iXo)2quoTq_f!}BV$#P*3i_)DDSxeuGAck9O zJU_<>gA1~iB9C8s{x522cB>^XG-=Ht`Sz(;@`Wl}ev{jjEOqHxT_4F1v z>G(c%D1GC#?EXLZDy`OH%O@*paXamo<1g}jVTcyA-SbFL}*# zz#r9fB#%Xrd31@e325t-!+X`|b=_TObGb;wp_4HoeTlW4k2=Sw^DOB!ueUa=*iZNI(x%3 zwycZ5tF@nc-$RtnQjE=oF<@X)-e)0Zv(}lJz9VAQbUH&8P6cxnx8c`!<6KNVC;7S{N zXP#yzS%mIrUE|~Id=_;VCu^?#g}_}kfT#PT?r9bsxmU{a2tn7KdCq~;wrG&-9&-Xz z`2O;mpcPz6Vj(R@Pu3YAw%uRM#?!5qQYlAYWgP>lR(YLG@8_*jUzGAFOHYDnFR*0n z?cL7x{T|8_Z5B`{Xy;8w#avWJOyHxdVHZV~vwbC+%r+o=8o?4{hQ@u{;gs8|Pmru| znO~_{^(RTtW9T4nh#u(kp_&zPvPQH?zOOw zOt4(e@L-9lby{zI2CE#`40XMuyik&7qvbCztM7lBg|o9*lvk(8-=b_rIPnIglU54i zc>!gwDYruuQIY*J7E#vpMoq%~AtKIh!e;ZrI*FQ%m%(MG=ZUU|t6a*` zQ#U@J##_CkV09A?VU=?Ce4r&;11Hzesdtz|U@TKws)nOO<-*ZlUxHBmq1N2uJOZD zAGf5`lqY5`OPE?`T|V6k_%R`Smc5US?MDyW6{85PC7JBP>$V8=f}SXG|$-rgB0m6SYFGx789Vx3&)efZ|!}|v4bRsHO zy!WL1A$OfXbO-oPIzRz#%|@(#9`-*Fs*)JZF^)9X@MD3&UNpiCNilQ{X5)jVuEPLk zKXDPtYZW2es`_H|Uu^l;s&kwmK0@x#EXhp1;+b)Sv8jB>I@X&rVV7lsv^8pJ)C?(B zsfdMqcmzwCw%M8B-^dV<9$S_R#(LpuRTGdctvlrIp5TnHv=}v-Pj+lb)I<4yoV7~5 zUa&ME82leF%V@tT&d=U4n_|j-Ll|}ZT_Q;wb!4z-`c2_2Qp~uaoeGqH=|PVEm4nPs zcRgP=sl;88b0aD49=42X6g;^M8NO;DVo4ftN!U#k^bIvIHN<&Q6!)$4@v7a#!XcLc z#&5X*j}-2GB3e$;K)Ixc5ww^7Y5CjF%zGHpJ)lIvV40+zOk&9+f8IMHC++g~t=@nxTkhw#@3+Ao- zgUp@x)U=gwSFX6i8AKORorpVGF}aot`{zvN@Ak+cn8_Qry$SYUx=8`vgVIaW(f@m3 z%)&)AmGbfzmP$iZ?KBJ|xVlJx@d&Blt&^jJ2|dki)78yR;=HTy{Phx0Nmbk8I{E^m zQ0b-Fm)3!@`&C#aVDMB#snlF3oyrFid;TYGk5_qroDO-w{GV(P3HC~WN+<0P%8@yh zuk=@{&<#0eo23)4D9iZ=!+)2$Oe76|aqNkPi;#Bh(~sf@MpMc5;X3&XCL1{(MChCk z&vdWk8}PCU^~rilFQ13wS$t*3@E+>f0SoOwa~CH#xPv-nk1C?kr8BUP=U4xT+TvFU2pX5@ zsjXpGCe9g=Qm2No%M-0x8FDLu%99Dsg&Q{6{*MzX@~0#np?kpV1*>8!17z`BkbosE zp3VC1x}^bd5ogM1Wp-RpD{E~xdyt)0`@|Ge06u$FR0!)|YwHr(phkLYY=F0$R;R2;ab_m}mY4q7x3<{Z}r98Y3AkV+j3@I``C6wrMMg&5=OS_--C3 zDXih^6L%U$*SS-BUH)o)24(-rlI28*^w8oHCX<_xiE9!KTirY>k85L39T}!5cyD?M zHyuT0#To48!3znd3>K-lujZ_J!LyKx`>{dMJ%^bZxt<;%kna(DVZClfu8US52KpK* z2OEgOMY$zz8vMZ-R5C?>CHTv2icIr+S=U|Feu+TDRyM12V z3#X)v@tiQV(Hh+YGF2R$v94zj;F-4xSw{3`FYH*n#BIkp2i9s^HNSJN0@7UTSXncFMt?N>z#EiK2HD!DA1{Pv9C9Tr>@8iRysADm$q;$-q49PBb$F zE37_f6WSTp3X%i0Fs1}Z)>P-A*YSKLcH-$S`&efbZFL3B2v_q@@ z_QX7es#JeWJ6VcBk39Uw*{MR$m%h;m_+Pns+9#8wJh!8QH^?D1dD0wTCB&;<01xK*xPu zT?6F3?wK|%ihAk@&JBtJwpBWjX5}0o;t+cvD#CvA3Ev*i`}lldTbQ-Ipz#JSyNj_h zSyw<7+^WyWSyj8UThT7Z?Vlfo?e?g(nn@8!@jpX{zmfh!G7EOJZ|oafmFPTTz$6|f zEkjbU(QJNS;$Ml6&-lwUr3M=$w<-y--X5B86f`@*-G1?Y$+uoOP!Wq~IBx3@*OD!9 zGxj6@vO6R3DyM(W`As$b3H;wy4s;Jl&Y@%q>{PhHLZ~LA^GhFzd))2Qweur6K7Yla zpa;MFKg`OcP4!Tc;pJ|T^{gQ_gNGP;N+hAG&h$KO>SLK%LK=al-lUa;xL7OpBO!QS z=dtYfojU%m^i-DL4J{uNxAgv%K&}od7WxQjB4NGu`1dQMz=y+vxHxs7s3+iEXw!zd ztq{2{c6Nc!!>5b;y0?sI0dGpYeMck`Jwhm~qDr0m;hS7U-phlxadD86G>Fx7`b!iU veDOtT;@0ssI2KwbBs diff --git a/programs/demos/life2/include/kos_func.inc b/programs/demos/life2/include/kos_func.inc index a4390764c0..a7753c72e8 100644 --- a/programs/demos/life2/include/kos_func.inc +++ b/programs/demos/life2/include/kos_func.inc @@ -101,19 +101,11 @@ end if movsd Kolibri_Put_MovEaxVal_Ret @Kolibri@GetPid$qv,edx if defined KolibriHeapInit - mov ecx,esp - push ebx - push ecx - push U_END - call KolibriHeapInit ; Initialize a dynamic heap and create new memory in its begin. - pop ecx ; Parameters: begin of a new heap, end of data to create in - mov [esp+4],eax ; the begin of a heap. Return address of the created data. - mov dword [esp],0 -else + call KolibriHeapInit ; Initialize a dynamic heap +end if xor eax,eax push eax push eax -end if call @Kolibri@ThreadMain$qpvt1 .ThreadFinish: add esp,8 diff --git a/programs/demos/life2/include/kos_heap.h b/programs/demos/life2/include/kos_heap.h index 8696df8715..bf63ae8bfd 100644 --- a/programs/demos/life2/include/kos_heap.h +++ b/programs/demos/life2/include/kos_heap.h @@ -2,31 +2,15 @@ #define __KOLIBRI_HEAP_H_INCLUDED_ #include "kolibri.h" -#include "memheap.h" // Kolibri memory heap interface. namespace Kolibri // All kolibri functions, types and data are nested in the (Kolibri) namespace. { - long _HeapInit() - { - return MemoryHeap::mem_Init(); - } - - void *Alloc(unsigned int size) - { - return MemoryHeap::mem_Alloc(size); - } - - void *ReAlloc(void *mem, unsigned int size) - { - return MemoryHeap::mem_ReAlloc(size, mem); - } - - void Free(void *mem) - { - MemoryHeap::mem_Free(mem); - } + long HeapInit(); + void *Alloc(unsigned long int size); + void *ReAlloc(void *mem, unsigned long int size); + void Free(void *mem); } #endif // ndef __KOLIBRI_HEAP_H_INCLUDED_ diff --git a/programs/demos/life2/include/kos_heap.inc b/programs/demos/life2/include/kos_heap.inc index 3aa69d94c2..2d64588a20 100644 --- a/programs/demos/life2/include/kos_heap.inc +++ b/programs/demos/life2/include/kos_heap.inc @@ -1,37 +1,42 @@ ;/*** -KolibriHeapInit = @@Kolibri@_HeapInit$qv +KolibriHeapInit = @Kolibri@HeapInit$qv -KolibriHeapAlloc = @@Kolibri@Alloc$qui +KolibriHeapAlloc = @Kolibri@Alloc$qul -KolibriHeapReAlloc = @@Kolibri@ReAlloc$qpvui +KolibriHeapReAlloc = @Kolibri@ReAlloc$qpvul -KolibriHeapFree = @@Kolibri@Free$qpv +KolibriHeapFree = @Kolibri@Free$qpv -proc @MemoryHeap@mem_Init$qv uses ebx +align 4 +proc @Kolibri@HeapInit$qv uses ebx mov eax,SF_SYS_MISC mov ebx,SSF_HEAP_INIT int 0x40 ret endp -proc @MemoryHeap@mem_Alloc$qul uses ebx +align 4 +proc @Kolibri@Alloc$qul uses ebx mov eax,SF_SYS_MISC mov ebx,SSF_MEM_ALLOC + mov ecx,[esp+8] int 0x40 ret endp -proc @MemoryHeap@mem_ReAlloc$qulpv uses ebx +align 4 +proc @Kolibri@ReAlloc$qpvul uses ebx mov eax,SF_SYS_MISC mov ebx,SSF_MEM_REALLOC - mov ecx,[esp+8] - mov edx,[esp+12] + mov ecx,[esp+12] + mov edx,[esp+8] int 0x40 ret endp -proc @MemoryHeap@mem_Free$qpv uses ebx +align 4 +proc @Kolibri@Free$qpv uses ebx mov eax,SF_SYS_MISC mov ebx,SSF_MEM_FREE mov ecx,[esp+8] diff --git a/programs/demos/life2/include/memheap.h b/programs/demos/life2/include/memheap.h deleted file mode 100644 index 52a06f887d..0000000000 --- a/programs/demos/life2/include/memheap.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __MEMORY_HEAP_H_INCLUDED_ -#define __MEMORY_HEAP_H_INCLUDED_ - -namespace MemoryHeap -{ - long mem_Init(); - void *mem_Alloc(unsigned long size); - void *mem_ReAlloc(unsigned long size, void *mem); - bool mem_Free(void *mem); -} - -#endif // ndef __MEMORY_HEAP_H_INCLUDED_ - diff --git a/programs/demos/life2/kos_cdlg.inc b/programs/demos/life2/kos_cdlg.inc index a386aed80d..1e785cfbee 100644 --- a/programs/demos/life2/kos_cdlg.inc +++ b/programs/demos/life2/kos_cdlg.inc @@ -16,7 +16,7 @@ proc @Kolibri@OpenFileDialog$qr23Kolibri@TOpenFileStruct uses ebx esi edi ebp mov esi,ecx .open_file_dlg_alloc: push esi - call @@Kolibri@Alloc$qui + call @Kolibri@Alloc$qul pop ecx test eax,eax jz .open_file_dlg_ret @@ -97,7 +97,7 @@ proc @Kolibri@OpenFileDialog$qr23Kolibri@TOpenFileStruct uses ebx esi edi ebp push eax push esi push dword [esp+8] - call @@Kolibri@ReAlloc$qpvui + call @Kolibri@ReAlloc$qpvul add esp,8 mov ecx,eax pop eax @@ -131,7 +131,7 @@ proc @Kolibri@OpenFileDialog$qr23Kolibri@TOpenFileStruct uses ebx esi edi ebp mov [esp+8],eax push eax push dword [esp+4] - call @@Kolibri@ReAlloc$qpvui + call @Kolibri@ReAlloc$qpvul add esp,8 test eax,eax jz .open_file_dlg_end @@ -143,12 +143,12 @@ proc @Kolibri@OpenFileDialog$qr23Kolibri@TOpenFileStruct uses ebx esi edi ebp mov ebx,[esp+20] mov dword [ebx],2 push dword [ebx+4] - call @@Kolibri@Free$qpv + call @Kolibri@Free$qpv pop ecx mov [ebx+4],esi jmp .open_file_dlg_invalidate .open_file_dlg_end: - call @@Kolibri@Free$qpv + call @Kolibri@Free$qpv add esp,12 mov ebx,[esp+20] mov dword [ebx],1 diff --git a/programs/games/life3/trunk/life3.asm b/programs/games/life3/trunk/life3.asm index aef56afa2a..e01a2951ba 100644 --- a/programs/games/life3/trunk/life3.asm +++ b/programs/games/life3/trunk/life3.asm @@ -12,7 +12,7 @@ include '../../../develop/libraries/box_lib/load_lib.mac' ;include 'lang.inc' @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -hed db 'Life 04.11.18',0 ;подпись окна +hed db 'Life 16.11.20',0 ;подпись окна run_file_70 FileInfoBlock image_data dd 0 ;указатель на временную память. для нужен преобразования изображения @@ -75,20 +75,17 @@ align 4 proc pole_init_colors uses eax ebx ecx edx esi edi, col_pole:dword, col_cell_n:dword, col_cell_o:dword mov esi,[CellColors] mov ebx,[col_pole] - mov dword[esi],ebx + mov [esi],ebx + lea edi,[esi+4*COL_MEM] add esi,4 - mov edi,COL_MEM - dec edi - shl edi,2 - add edi,esi ; esi - указатель на 1-й градиентный цвет ; edi - указатель на последний градиентный цвет mov eax,[col_cell_n] mov ebx,[col_cell_o] - mov dword[esi],eax - mov dword[edi],ebx + mov [esi],eax + mov [edi],ebx ;need save ecx edx stdcall middle_colors, esi,edi @@ -1767,13 +1764,6 @@ import_buf2d: sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 sz_buf2d_set_pixel db 'buf2d_set_pixel',0 -mouse_dd dd 0 -sc system_colors -last_time dd 0 - -align 16 -procinfo process_information - align 4 buf_0: dd 0 .l: dw 0 ;+4 left @@ -1783,7 +1773,12 @@ buf_0: dd 0 .color: dd 0xffffd0 ;+16 color db 24 ;+20 bit in pixel +align 16 i_end: + mouse_dd dd 0 + last_time dd 0 + sc system_colors + procinfo process_information rb 1024 stacktop: sys_path rb 1024