Q`NNNNNNp &<C@E$g: <1AY&B&f"8*A$ $<!*!&2Q!adNu"x." "4V"GBIZ2۷mG"&AB@4<[Q4/</<?BK*U,M/ ?<NNJ@k:`IG:ܹm*N2<0<4]Q:/</<?B/?< NNJ@kD f0B?<"NNTм/Hz /<NN 8LN@`  @`!#@%`')+-/1 3@5`79;=?AC@E`GIKMOQ S@U`WY[]_ac@e`gikmoq s@u`wy{}@` @ ` @ ` @ ` @ ` ǀ ɠ  @ ` ׀ ٠  @` @`!Aa  !A!!#A%a')+-/1!3A579;=?A!CAEaGIKMOQ!SAUaWY[]_a!OeagikQmoq!sAvy{}!Aa!Aa!Aa!Aa!Aaǁɡ!Aaׁ١!Aa!Aa " B b  !"!B!b!!!!!"!""#B"%b"'")"+"-"/#/#3B#5b#7#9#;#=#?$A"$CB$Eb$G$I$K$M$O%Q"%SB%Ub%W%Y%[%]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'(@`  @`!#@%`')+-/1 3@5`79;=?AC@E`GIKMOQ S@U`WY[]_ac@e`gikmoq s@u`wy{}@` @ ` @ ` @ ` @ ` ǀ ɠ  @ ` ׀ ٠  @` @`!Aa  !A!!#A%a')+-/1!3A579;=?A!CAEaGIKMOQ!SAUaWY[]_a!OeagikQmoq!sAvy{}!Aa!Aa!Aa!Aa!Aaǁɡ!Aaׁ١!Aa!Aa " B b  !"!B!b!!!!!"!""#B"%b"'")"+"-"/#/#3B#5b#7#9#;#=#?$A"$CB$Eb$G$I$K$M$O%Q"%SB%Ub%W%Y%[%]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'(FROMLORDCACANA_WOODPI1 a!"}OUTOFREAPI1 !""}ANA_PINKPI1 I!B"}ANA_SWEDPI1 q!b"}OUT_RINGPI1 !"}OUT_OF_RS `OUT_OF_RBAK `aO_O_R PI1 `"}FRAKTAL BAK <!6%OFRAKTAL DOC !J aYPOLY__2BAK `c$YPOLY__2S W`l$YPOLY__3BAK B`wX+YPOLY__3S %`+YPOLY__4S `6YPOLY__6BAK `DBERG PI1 !B}BERG PI3 C`B}KILLME S E!fYPOLY__6S `ZTESTWRLDS `1@   0@ P ????48 0aÐ`pp78 X8Հ5:wpop,  hv@?oc Pop -̀^a;< @|?wq`X8:<B<O0p6:= 4;@@<@<к0?(??6:9@  ??4;@ t{```X]8~@8?,??t{`hp0p t{`A>}hp/ ` p(6?~{xhw`x|Aâ>z8hw/`}|C<@?p0 <@K  1?0;g|p|Ÿ<܀sp P40;n| o| € RG܈88|p~gp qpЀqcP0An8xw(->@->c` C>n 8 Ahx 0A(hXvx7> 7> ?xA큟?@8n8 ( 0Bc< 0}||f`SAo>z<8 u~ :=p}g[|m` p 0A` ~<hW~<:/<; ;?:=`C<\y5|;pV7@8Z| ` @~ Ow  hnx <8 48 `]|_xvv,x^?p-> `@@~t,.Qp6?p<8 t,x*>|-:h:pp->@ P0`v6>;x<8 hhp '8x5dpHcx?, @`p 0\5{  <; ;=`hwƻDtp `p`pp 0\x 0 }|<8 0 =:Xиm=@|@48 #0,;8D<8 4` =:-!||0,q0<x` p0.80 A@<:  |aπ?h 1<|~x ?``@  p/0,; 0>9 0  >| 0ut#`ߠp0,; 1<=: `  b#?xx%|``Ǡ0-:|}|<;` )!ǻ?7 |l515xt~` p0,81 A`=:` kc{> ; }`|~ ` w tqx߀|~~/x*70n <=/8 p~9Y` q.A| q|18n#?`;R*<E`8`ؠ` p `E8G0wpw?*  {xQ1+<n`E~<8Р`q?E8C<xxp*t݌6 >xp->.`4s &@d~70Oπ,> K0@/?W }k]_o`<< 0@P 0@P`pu3 ?j`1@>~ \`px cL?00(dxp|2`A>>f000fx>p X |P ?@><00`2< (.,0(@?p`?p6wrvxxv`\3\P  ?`<? @##`۵??@s,`0h/Y ` @pA(`x?77 %U?@7wH H`O0@`-8AЀphNx1`1~fg|d :^ H`V8h'@"@@x<x``Z&!x_?_L0` ?|@ ^'U P`x.1 Y%Ap9.A*\ r|f p5NUU'؁x-3 v:9 ᄀp` d3%jtC) ? P0M?@Pᨙ|0@o???>P tጆp6O`? @>?@/3O0`倚>c &a@_#??T~x`4BAoC$-s8]3#_@>#O @~0ꀕ|At>a`T6??9~0`<yA C@T)vF|L~`<ׁ)|2N??g`6V< ??1|%@<E4z`n  @7'y=0<\`8Qg??هD&~<a??2 ??0<d0# †c   %Zr=1>G&@ppA߂ |??`:b 8p??$ ??<ax@ QCm98kpz~<~4`px€J"l<0qD tj:qQg Şމ!80(=V&.|p|H'8??pp(P aN"z+0qz  pjMq(L >:p).' 2||! 9??b}Kx0bhx0I l2 x`paLƒa:H0":'<27:*||8= 30??[}`xx0+ph |`pA!ˀ@C׭&t ]&:4xx!09778??Ap}c 0x0x@  aaZ@V5L@H?? "p +\qp a>02???p}  x)0dd@a aa|D $ j7L@??y8P<lspf`x40??"} a!x02F vAaw`C*~M@-??p<+P sp<0 ??@}mc x*0U'1wAapSA8V~ </BIΡb@0P ?@@~g<y9>"< ^?? (80&rq@V &>??J7<O$a$(,>A?@]8 y3;Ū?@8B<<<Fax0`spg>2oE@ϏRka@IX 0o@p<0igUh0L~qacg` q(0??/?DCX800@'pxxa  P0gU8Ba/Fg`Sv ??v ?ENC@jX0|0h@.pxa|A ?00&pـO a@eb:H??-@{Ch!(0 mch`h @sMcMs€Oig`7h` R7EKL0 - ??[O@0X?!`g Ai"A. > O0?f` Uj1{P~Ó\ ^3??@"Ax8q G7BC8f`iB>>BǓ! <001??߿"@89<~D+c@h.f`uulP Ο/P|8~0~h<0??#WFIA>?tt?@8Ŀ@=F@L*h'r@ Ο_ sOp8z4|p|A48??@c>V8?` WB&~`>ϟ;:D sp|!(||a. "??fL\B,<(?.>08/!f< BW s@.ϟq`g`@~  ||\re+ ??V//â]1?.??#f^`Wo ΟH[BAg`z||w ??F? K<% !PnlrXlOWhŀg`|~|E ??H>7!@??F8>Q??`m0HnAn p>@J>Ag`z??&fhavxwbf`:6Pg`B܁b%P~|PTG l>  !???0!  ??Z&o kmUPB<0CjJ1 9Oh:@$&`|| 0AF <'  =3 LF390<reVP0C ŃEBbV< "P||X"p @<' HoO 8$K=?X@reuqc0CK Iچ$%BF8||1`\/և8pA(f"<0op@Ph6@g\||t`1B=HW_88 ^4,!lѪ3c_C`HxavDy/`||@ut158:&]8̂AbD8$V8#r̳S x|?C@400) SBd{8Msȃ%dN~q ||L8Zg`.PI  @Ms?@<pMu??"`;˃p%_<`À`y`.??l0S %:7pAÀ$+0 ??@'?< =0 _`h@@p 6e  <6pΰ _p@< -7T `4 : ?? *??: X` <?TmeЖ(4 W zr `-11۠@À< p6p @Ph`,P/`/dh@ U'@+@P @:6 5d7 /  Hd `n V?7@?` X<0 *<;@Ǡ`-  `p  gx~fMsx `nq~@,0 y8QvǠ`( @@g(X@ ?@ǀp@@2 p G ( 1?4T,|? H 3 (:g@$7P0> yh(0 3 T=0k ? 9 3 0<s  0!3@-Q@-@php$8?'@!`!GW$$5@@@??0??0 p@p @c࢟# ??  D=C}`@o`q FCCpCp  l\`1? '3g8vq@ӱNpΟ`x6.0DnyF@;?8:>!GGG- ό sb@Xؘ'ʰY"{dN@?9<=5"p+ɘg7; O  ` #8"=="=48#kgh "` 7; @k{ D@ 430@6:!{x' gggǘ8` / ٜ9yyyD4q!@qyiy:>!L=L!Gp]8<#|||ss m~D@333}" ̀π0;? pc cc>:>ЁH;? aaa5 ;? ~~o~@qb_ŀǀ8;? p wut`Amkl:>!?0  @w@sXsxs@o@wwwc0"^n:mBnw@@ϡ!0">|w@@8v~p??~@w@s0޽߁ w@@א` nbw@@ 8A~>@u1}11B| ~|v~@A/? >} @Ϭ 8~ F@~8>@{cc ???1~@o_@uE:>` k @, x xq HKA|`? ;ٳ>L<<<ka ~` i K|{>` /o? l\`koh;cg}C<`'  ?_K@A>w` nE~{08` o[G@+/(_}A>8`3 8u ̏̏0p_{@A>wss ` iL\@s@>m!(` m]`8<#ǿ9KOH5> }SpGf@>$`?  f3#ACC8{cc0` ٩ L\@K@>|`  8<#7>sA7> @ƎpD` $!0wr ߧ'P` ~0t a! }yB?c6? `CB/ 0_q@pPa!G0tqw{"@6޿р#ŀÀ86? 0HST߱q<6/0|  ^@Ha!uv~pE0t w"@6cp6? H.T߱}0ުIHa!uiӧpt qw@6?㠽@2? 8HT߱>*Ha!i6>0`_prqpw@ccaHӁӂ|RY~V~_~P>=z;<^@D!h6>0d`` vw~p@ED8@cbHy   ???`!7}74~!t60€_^ @ߐnP`i  ӏ ^WPca774pwc܀"`8'$l`[;@;` ` I}I60oٿ9|ۀ?"p81molh@[{@/` a;?0` L}L300o<ggd}egd0c?"i9q8h@;'` ;?0` ~}~00o/? ƾ>[C>>! }08c?"i9pŨ[{@3 `j~ A{x-/(` ~}~0 ? ƿ{?n?? ra@  Pڀcހ?"qj~1AqEE E[{@:n|@A-/J(` }? }} }/? Ŀz?n?= ??q0?38P߀?"Qj~QA?= GG G߿> m@@{x=?J8` |?Yy y@;>?= qg?$Q :'<'$!~߿~m@@534 -/H8p }?=`}@~ڿ~?= ;= m~@g$n~A :g>gd! ~~m~@@ӿ@ -/8m ?Y`y~~?= ;? 9n@ǿDn~A=;<:>! o~`~m~@@[ -/8۰p[$ ? u5@uW_Pvvp?= :C>!n@DoA}{|:>!/~? ~5>@ ߯6'4g98x@xwp~~x?= ;>!5? =Ah:>! ?/ |7> vgH|ưF9^@wop_\ @GD`8?= a;>!5? ss ÷=C`{@ _\ 6? yNW8|M0M2~:60@/lw߅Px?= ~zA5? nBs½Cw{@ϋ6? },lV|_`8|[[$0pWx??@ ??<w{@2 vb#~}~@u}Bϋݟ'`6? { ,V<_ 8|wXxw@Uz@(@ t>>@!wwtw&. @ :b#>?>@t|Cߒ|6?  <, xCC<Uz@0zx`|>>@!w@  8vd'@u~}}~B_xa0vVn'p}U6`j~Ax Fx??@ 9w@cccq<@w@_@y0~.Oܸ#sR|@up k@y BB֞`X8@ch|@`o}@y @>??@ q,< =3?33 @߀ q 8=0f,;ώa~x>X>@|P@PPo@W' @>??@ q?9=99 nvA@o#/???=@ a ?= o@~@k*9c`_]P~8~8~ :}Yieo@/ A>?=@  ?= >@ XwX'~~{|| pd 88 88(|7? pwwtq?=@ ><}!n^`@ ͰMp2xpz8 (ǜl77?75 a??@ ?>>?!ؾBtsp@  ǣGc8O50ܻX 獀}7? C_!#430@ a]>A@cfqgggg8(m7? A>>>@!<??@ H~~Aˠ 0@GG G4} ެm\#_??@@@y@??=@ 88 n~A?KEA@'''xM}>>@!1xX`?11μk@|@???w}̀1_P /ǁǁ8>؍r7?}~>>@!|88 ޟd~>@Dߣ_c y@9py@v 6g>gey~>>@!|88 ߌp>~@@p????=<̿D;ᚑ}xX` ||pG>GEy~>>@!88 4724 lc`~@`C}H7뙋~qH =-04p9~??@ xx `{:|~p|@р Oq{l]!y88(qC??@ {|ɼ|0@N p.n.\.Bс774دoX'xx` 6??=~??@  ok>N@ W}Cl_'Mp2zx h  ?s} A>??@  ***OK0?@ w|mߣ_c |>6.52?6>{}A>??@  +*+++(O0/>0@DD;''$x?n@?=<?7 /֝̐?e1|??@  egda}o`N@ cGg7GDx` $7? a`?=@  >E>G:D@ ~}pW'q?p@}{|yyiA?@O ||xpo@{p~8S#gg 88 (wp_ p?/ @G@Ё w< g?<GO80{xپA?88??<x8@??} ???<n]?ȍs@=/ 0agGgd߿_ ׀#xx`0 ?11ξ{}AGGD???rtpp{{x|c@} paWGGD|88 JD@??=q fqqqssp|@Ї ݶ'y~o88 d321̟a_ >͜͟`2nfjq@D_q|m` ѶO?331c??>?pǽ8? 9o(@ }w|m`  G8?pZazaJa?5;q(~@&{7= okhx>~0 yV@  .? 1 ts2p2?41qH@@>@o`w5? xA:p0 Vx@|>/{{{ՎĎq4D3D0DϻuqH@@>@v5? ۏp2A >0  T|Dsss2 ?yyycc( & ջ߷Ѹ Ah@HBB<@5? _p:am( T|D```yyy!"'<<<?11ε;?8@1? BB<@5? 8>8m( U|D,00 a><aJD@{x;? NN0@,< 5? xy>/fa$!V}DW2 /`WG| ZZ$@, p5p>p g8>3 g$!X8 @DVː3o>?xxxχ0զŀ?1 rp @x@7> ߞ bC]:'00bb>8p880c  8@`0]c7878 `p78 8݀29 op ?0  `0?0  :9 `  /0 /a0/0 jy _` op oc0op  _` op c0op  8   ;<wa0 ;<~8 ` ;<;<wq8;<~*x p;<?81?8x 0?878@л078@x 78@78@л078@ x 78@78@078@ x 78@wx@]0~wx@?8x wx@wx`]8~wx`opx wx`p`n p``x p`op `/? op`_`x op`|op `.? ~op`ߪx Àxop`}op `6? ~op`x À{op`~ߟ?` }ax G~ǁߟ?`~}_?p~}qx g~_p?0 1x g0~߀?0 ~3x g߀0~߀30[ | [|~3`g߀c0߀3708o | o|39@g߀c0߁oqw0x-> ->7y?@o~߁ao0aow8x->->?zo߁Ao8Aop->->nAo AAoop->-> A~n Ao AAoop->%> A| n Ao Aop7>7> An C8cǹ}c0߳s@:9|c 03_8:9_ ~c 03ox:9 w~ ~c 03ox:9 w~ _c߀ 03x:9 e~׀ 8<`'g|X| 0 0 ~`7~8:9 ;?8<~Xx ;<}w|[|  ~~ o?}w|]0:9 ;< ~_x8?`7X?  `:9 8?X7?[? @ wo:9 7?]_08`7X|? @ p `:9 08 ]Xx787o|? @ w >9 78 j~oxp,?? @p? Q6?8?p *>(?p,??0`p?Q8?p*> (?p,?`p?c8?p6>  ?`,?  ?6>8?` ?`,?  ?8?` ?op?7>`p?>9 op/0?  ` pXx :9 88<@`p? _ :9 ;?`o   X :9 8?``   _x :9 ?8p ` Xx :9 888  ox :9 ?8E 78  /8:9 ?8m78 /8:9 ?8l?0 /8:9 ?8 |op /8:9 x| /8:9 8 /8:9  /8:9 @ /8:9  /8:9 8 /8:9 8 /8:9 8 /8:9 x /8:9 x /8:9 (ffx /8:9 (ow /8:9 (>ow /8:9 &> /8:9 >~ ???߻~~ p*x ߫n ߪx nø x k/8 x K/8 x `/8ٿ9 x `z/8ѿ1 x `}7+< }1ߠ`p }x p 3+< }ߠ`p }x p 3+< }ߠ`p }x p Q 3X+< }ߠ`p }x p c 1+< }~ߠ`p }x p 6 >0+< }~ߠ`p }x p  0@/@< `p x p  p->`7x 7> {`->?@7x 7? @.??ߪx  @/?W*x  @/?w 7?{}k]_o`c` col`o`>>~~>0>?2= << 0@P 0@P`pu"????0???~`#AF@~w@}& > ??sx `!!0~n@;``??0??{{`? $ ??F8 _`n@?~~w?}}??~g~~_??ހ! |@A>0?C:;??}_0??߰#}x xx?|_}~g?? bw' ???oZ???w``!`wH=??ooތ [<o?8w`>~x??G?5?`pj7z3p;$xa<1d??^@<0p 0p~<׀8?  Wr@;s3;`?_ y??j`1_>p~? ?\`px$cL?00@(dxp|2dA?>f000g|x>@p X |P ?H> <00`3<  Ϡ@(.,0(@?p`?p 6wrwxyv `\3\P  ?`<?  @##l' ۵??@s},xx a0h/Y ` @pA(`x?77$' %U?@7wyxI !H`O0@`-8AЀphNx1|1~fg|d :yx^@!H`V8h'@"@@x<x``Z&!x_?a`_L@1` ?|@ ^'U P`x.1 Y%Ap9nA@*|\!r|f p5NUU'؁x-3 v:9 ᄀp`Md3@%ktC) ? P0M?@Pᨙ|0@o?>P tጆpZ6΂AO`? @>?@/3O0`倚>c &a@_#T~x`4BAoCd-܀Cǐs8]3#_@>#O @~0ꀕ|At>a`T69~0`<yA CDCXT)vF|L~`<ׁ)|2N??g`6V<1|%@<E4z`nK F8@7'y=0<\`8Qg??هD&~<a2 0<d0# †cL F %Zr=1>G&@ppA߂ |??`:b 8p$ <ax@ QCmyF8kpz~<~4`px€J"l?3qD tj:qQg Şމ!xFa0(=V&.|p|H'8??pp(P aN"z+3q{ pjMq(L >zDp).' 2||! 9??b}Kx0bhx3I o2 x`paLƒazD`H0":'<27:*||8= 30??[}`xx3+h |`pA!ˀ@C׭&^@t ]&:4xx!09778??Ap}c 0x3x@  aaZ@V5L@H "p +\qp a>02???p}  x)3ddLa aa|D $ j7L@ߔy8P<lspf`x40??"} a!x32F vAaw`C*~M@-p<+P sp<0 ??@}mc x*3U'1wAapSA8V~ Қ<(Hx8,sp ,4??f}ˆw`Hp$3* ixxܣF18E8hx0.sp(4 ??W,8u@l`‒h # p ~yb-Sį@}6<ܧhx0;P spR -4??E></BIΡb@0P#?@@~g<y9>"<^ (80&rq@V &>??J7<O$a$(/>A?@??]8 y3;Ū?@8B<Fax0`spg>2oE@ϏRka@IX3o@??p<0igUh3L~qacg` q(0??/?DCX80 3p??'pxxa  P3gU8Ba/Fg`Sv ??v ?ENC@jX03h@.pxa|A ?03&pـO a@eb:H??-@{Ch!+3 mch`h @sMcMs€Oig`7h` R7EKL3 -[O@0X?!`g Ai"A. > O0?f` Uj1{P~Ó\#^3@"Ax8q G7BC8f`iB>>BǓ! <301߿"@89<~D+c@h.f`uulP Ο/P|8~3~h<0#WFIA>?tt?@8Ŀ@=F@L*h'r@ Ο_ sOp8z4|s|A48@c>V8?` WB&~`>ϟ;:D sp|!(||a."fL\B,<(?.>08/!f< BW s@.ϟq`g`@~  ||\re+ V//â]1?.??#f^`Wo ΟH[BAg`z||wF? K<% !PnlrXlOWhŀg`|~|E H>7!@??F8>Q`m0HnAn p>@J>Ag`z&fhavxwbf`:6Pg`B܁b%P~|PTw ??l>  !???0! Z&o kmUPB<0CjJ1 9Oh:@$&`|| 0Av?? <'  =3 LF390<reVP0C ŃEBbV< "P||X"p @??<' HoO ;$K=?X@reuqc0CK Iچ$%BF8||1l\/և8pA(f.<  0op@Ph6@g\||tl1B=HW_88 ^7,!lݪ3c _C`HxavDy/`||@ut158:&]8̂AbD;$V8#~̳S x|?C@400) SBd{8Msȃ%dN~q ||L8Zg`.PI  @Ms?̠ @<pMu??"`;˃p%_<`À`y`.??l0S %:?pIψ$+0 ??@'?< =0 _`h@@p 6e  <6pΰ _pD< -7T `4 : ?? *??: X` <?TmeЖ(4 W zr `-11۠@À< p6p @Ph`,P/`/dh@ U'@+@P @:6 5d7 /  Hd `n V?7@?`n| <<X<0 *<;@Ǡ` -  `p  gx~fMsx5 `nq~~~@,0 y8QvϠ` ( @@g(X@ ?@ǀp@> @2 p O ( 1?4T,|?=Np H 3 (:g7@88$7P0> ??yh(0 3 T=1k 788? 9 3 0<s  ??08!883Aۀ'-Q@-@php$8 <?xx'CC !`! x wo~>a?????m :`???`lwk4?8`׀8;s0P@`?0> 1l@<<;$o" ??j?N5??8 p>??<?< @o`[8$;#~=Z {`???? [' }#?ހ?gx @} x:;????߰#>?C |@Aހ!_g~~~w?}}???~~n@_`8  F{{`? $??0;``0~n@`!!?{~ > & w@??F@~#A?~`?0???*************************************************************************** * Out of Reach demo, hopsttning av alla rutiner 940321-?????? * *************************************************************************** section text jsr first_init jsr save_mfp jsr set_mfp jsr init_sam move.l #scrblk,a0 move.w #168*365*2/4,d0 clr: move.l #0,(a0)+ dbf.w d0,clr *************************************************************************** * Main loop * *************************************************************************** main_loop: jsr set_screen jsr vsync cmp.b #57,$fffffc02.w beq slut * Counter fr delarna addq.w #1,timer move.w timer,d0 cmp.w next,d0 blt .hopp move.l #part_order,a0 add.w part_pointer,a0 move.w (a0),next move.l 2(a0),part addq.w #6,part_pointer .hopp: move.l part,a0 jsr (a0) ; hoppa till den nuvarande delen bra main_loop *************************************************************************** intro_fade1: move.w #$800,$ff8240 rts intro_fade2: move.w #$100,$ff8240 rts intro_fade3: move.w #$900,$ff8240 rts intro_fade4: move.w #$200,$ff8240 rts intro_fade5: move.w #$a00,$ff8240 rts intro_fade6: move.w #$300,$ff8240 rts intro_fade7: move.w #$b00,$ff8240 rts intro_fade8: move.w #$400,$ff8240 rts intro_fade9: move.w #$c00,$ff8240 rts intro_fade10: move.w #$500,$ff8240 rts intro_fade11: move.w #$d00,$ff8240 rts intro_fade12: move.w #$600,$ff8240 rts intro_fade13: move.w #$e00,$ff8240 rts intro_fade14: move.w #$700,$ff8240 rts intro_fade15: move.w #$f00,$ff8240 rts *************************************************************************** fadevit1: move.w #$f22,$ff8240 rts fadevit2: move.w #$f44,$ff8240 rts fadevit3: move.w #$f66,$ff8240 rts fadevit4: move.w #$fff,$ff8240 move.w #$fff,$ff8242 move.w #$fff,$ff8244 move.w #$fff,$ff8246 move.w #$fff,$ff8248 move.w #$fff,$ff824a move.w #$fff,$ff824c move.w #$fff,$ff824e move.w #$fff,$ff8250 move.w #$fff,$ff8252 move.w #$fff,$ff8254 move.w #$fff,$ff8256 move.w #$fff,$ff8258 move.w #$fff,$ff825a move.w #$fff,$ff825c move.w #$fff,$ff825e rts setvit: move.w #$666,$ff8240 move.w #$777,$ff8242 move.w #$666,$ff8244 move.w #$666,$ff8246 move.w #$666,$ff8248 move.w #$666,$ff824a move.w #$666,$ff824c move.w #$666,$ff824e move.w #$666,$ff8250 move.w #$666,$ff8252 move.w #$666,$ff8254 move.w #$666,$ff8256 move.w #$666,$ff8258 move.w #$666,$ff825a move.w #$666,$ff825c move.w #$666,$ff825e rts *************************************************************************** first_ana_logo: move.l #analogga1,a0 move.l #scrblk,a1 add.w #160*90,a1 move.w #89,d0 .copy: move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ dbf.w d0,.copy move.l #analogga2,a0 move.l #scrblk,a1 add.l #168*365,a1 add.w #160*90,a1 move.w #89,d0 .copy2: move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ dbf.w d0,.copy2 rts *************************************************************************** fadedownvit1: move.w #$777,$ff8240 move.w #$777,$ff8242 move.w #$777,$ff8244 move.w #$777,$ff8246 move.w #$777,$ff8248 move.w #$777,$ff824a move.w #$777,$ff824c move.w #$777,$ff824e move.w #$777,$ff8250 move.w #$777,$ff8252 move.w #$777,$ff8254 move.w #$777,$ff8256 move.w #$777,$ff8258 move.w #$777,$ff825a move.w #$777,$ff825c move.w #$77f,$ff825e rts fadedownvit2: move.w #$666,$ff8240 move.w #$666,$ff8242 move.w #$666,$ff8244 move.w #$666,$ff8246 move.w #$666,$ff8248 move.w #$666,$ff824a move.w #$666,$ff824c move.w #$666,$ff824e move.w #$666,$ff8250 move.w #$666,$ff8252 move.w #$666,$ff8254 move.w #$666,$ff8256 move.w #$666,$ff8258 move.w #$66e,$ff825a move.w #$667,$ff825c move.w #$66f,$ff825e rts fadedownvit3: move.w #$555,$ff8240 move.w #$555,$ff8242 move.w #$555,$ff8244 move.w #$555,$ff8246 move.w #$555,$ff8248 move.w #$555,$ff824a move.w #$555,$ff824c move.w #$555,$ff824e move.w #$555,$ff8250 move.w #$555,$ff8252 move.w #$555,$ff8254 move.w #$55d,$ff8256 move.w #$556,$ff8258 move.w #$55e,$ff825a move.w #$557,$ff825c move.w #$55f,$ff825e rts fadedownvit4: move.w #$444,$ff8240 move.w #$444,$ff8242 move.w #$444,$ff8244 move.w #$444,$ff8246 move.w #$444,$ff8248 move.w #$444,$ff824a move.w #$444,$ff824c move.w #$444,$ff824e move.w #$444,$ff8250 move.w #$44c,$ff8252 move.w #$445,$ff8254 move.w #$44d,$ff8256 move.w #$446,$ff8258 move.w #$44e,$ff825a move.w #$447,$ff825c move.w #$44f,$ff825e rts fadedownvit5: move.w #$333,$ff8240 move.w #$333,$ff8242 move.w #$333,$ff8244 move.w #$333,$ff8246 move.w #$333,$ff8248 move.w #$333,$ff824a move.w #$333,$ff824c move.w #$33b,$ff824e move.w #$334,$ff8250 move.w #$33c,$ff8252 move.w #$335,$ff8254 move.w #$33d,$ff8256 move.w #$336,$ff8258 move.w #$33e,$ff825a move.w #$337,$ff825c move.w #$33f,$ff825e rts fadedownvit6: move.w #$222,$ff8240 move.w #$222,$ff8242 move.w #$222,$ff8244 move.w #$222,$ff8246 move.w #$222,$ff8248 move.w #$22a,$ff824a move.w #$223,$ff824c move.w #$22b,$ff824e move.w #$224,$ff8250 move.w #$22c,$ff8252 move.w #$225,$ff8254 move.w #$22d,$ff8256 move.w #$226,$ff8258 move.w #$22e,$ff825a move.w #$227,$ff825c move.w #$22f,$ff825e rts fadedownvit7: move.w #$111,$ff8240 move.w #$111,$ff8242 move.w #$111,$ff8244 move.w #$119,$ff8246 move.w #$112,$ff8248 move.w #$11a,$ff824a move.w #$113,$ff824c move.w #$11b,$ff824e move.w #$114,$ff8250 move.w #$11c,$ff8252 move.w #$115,$ff8254 move.w #$11d,$ff8256 move.w #$116,$ff8258 move.w #$11e,$ff825a move.w #$117,$ff825c move.w #$11f,$ff825e rts fadedownvit8: move.w #$000,$ff8240 move.w #$008,$ff8242 move.w #$001,$ff8244 move.w #$009,$ff8246 move.w #$002,$ff8248 move.w #$00a,$ff824a move.w #$003,$ff824c move.w #$00b,$ff824e move.w #$004,$ff8250 move.w #$00c,$ff8252 move.w #$005,$ff8254 move.w #$00d,$ff8256 move.w #$006,$ff8258 move.w #$00e,$ff825a move.w #$007,$ff825c move.w #$00f,$ff825e rts *************************************************************************** init_zoom: move.l #scrblk,a0 move.w #(365*2)-1,d7 moveq.l #0,d0 moveq.l #0,d1 moveq.l #0,d2 moveq.l #0,d3 moveq.l #0,d4 moveq.l #0,d5 moveq.l #0,d6 move.l #0,a1 move.l #0,a2 move.l #0,a3 move.l #0,a4 move.l #0,a5 move.l #0,a6 .cls_z: movem.l d0-d6/a1-a6,(a0) movem.l d0-d6/a1-a6,52(a0) movem.l d0-d6/a1-a6,104(a0) move.l d0,156(a0) add.w #160,a0 dbf.w d7,.cls_z move.w #28,$ff820e move.l #hp,a0 move.l #put_pixel_1,(a0)+ move.l #put_pixel_2,(a0)+ move.l #put_pixel_3,(a0)+ move.l #put_pixel_4,(a0)+ move.l #put_pixel_5,(a0)+ move.l #put_pixel_6,(a0)+ move.l #put_pixel_7,(a0)+ move.l #put_pixel_8,(a0)+ move.l #put_pixel_9,(a0)+ move.l #put_pixel_10,(a0)+ move.l #put_pixel_11,(a0)+ move.l #put_pixel_12,(a0)+ move.l #put_pixel_13,(a0)+ move.l #put_pixel_14,(a0)+ move.l #put_pixel_15,(a0)+ move.l #put_pixel_16,(a0)+ jsr vsync rts *************************************************************************** intro_zoom: .hur: add.w #96,storlek_y cmp.w #13*3*96+96*2,storlek_y blt .hopp move.w #0,storlek_y move.w #0,storlek_x add.w #48*7*2,plus move.w #136+16*7,x move.w #216*96,y bra .hur .hopp: cmp.w #13*3*96+96*2-96*3,storlek_y blt .hopp2 add.w #$222,$ff8240 .hopp2: cmp.w #96*3,storlek_y bgt .hopp3 sub.w #$222,$ff8240 .hopp3: add.w #96,storlek_x sub.w #6,x sub.w #216,y move.w #1000,d0 .wait: nop dbf.w d0,.wait move.w #27*200,d0 move.w #0,d1 jsr cls move.l #picture,a0 add.w plus,a0 move.l #prerot,a1 move.l #zoom,a3 ; fr y move.l srn,a4 add.w y,a4 add.w #160,a4 move.l #hp,a6 add.w storlek_y,a3 move.w #7-1,d0 ; 6-1 y yrader: move.w #48-1,d1 ; 70-1 x move.w x,d6 ; Vi skall starta p X move.l #zoom,a2 ; fr x add.w storlek_x,a2 xrader: move.w (a2)+,d2 add.w d2,d6 addq.w #1,d6 tst.w (a0)+ beq.s nodraw cmp.w #450,d6 bgt nodraw move.w d6,d3 sub.w d2,d3 ; justering move.w d3,d4 lsr.w #1,d3 and.w #%1111111111111000,d3 move.w d4,d5 and.w #%1111111111110000,d5 sub.w d5,d4 lsl.w #3,d4 ; *8 fr att passa prerotningen lsl.w #7,d2 ; *128 add.w d4,d2 add.w d3,a4 ; g till slutet fr frra pixeln (skrmen(16-)) move.w (a1,d2),d5 move.w 2(a1,d2),d4 ; yrader move.w (a3),d7 add d7,d7 ; passa listan p hopp variabler add d7,d7 move.l (a6,d7),a5 jsr (a5) ; hoppa till put pixel sub.w d3,a4 nodraw: dbf.w d1,xrader move.w (a3)+,d5 addq.w #1,d5 mulu.w #216,d5 add.w d5,a4 ; lgga till p y dbf.w d0,yrader rts put_pixel_1: or.w d5,(a4) or.w d4,8(a4) rts put_pixel_2: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) rts put_pixel_3: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) rts put_pixel_4: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) rts put_pixel_5: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) rts put_pixel_6: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) rts put_pixel_7: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) rts put_pixel_8: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) rts put_pixel_9: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) rts put_pixel_10: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) rts put_pixel_11: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) rts put_pixel_12: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) rts put_pixel_13: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) or.w d5,216*12(a4) or.w d4,216*12+8(a4) rts put_pixel_14: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) or.w d5,216*12(a4) or.w d4,216*12+8(a4) or.w d5,216*13(a4) or.w d4,216*13+8(a4) rts put_pixel_15: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) or.w d5,216*12(a4) or.w d4,216*12+8(a4) or.w d5,216*13(a4) or.w d4,216*13+8(a4) or.w d5,216*14(a4) or.w d4,216*14+8(a4) rts put_pixel_16: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4)  or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) or.w d5,216*12(a4) or.w d4,216*12+8(a4) or.w d5,216*13(a4) or.w d4,216*13+8(a4) or.w d5,216*14(a4) or.w d4,216*14+8(a4) or.w d5,216*15(a4) or.w d4,216*15+8(a4) rts *************************************************************************** init_fall1: move.l #scrblk,a0 move.w #(365*2)-1,d7 moveq.l #0,d0 moveq.l #0,d1 moveq.l #0,d2 moveq.l #0,d3 moveq.l #0,d4 moveq.l #0,d5 moveq.l #0,d6 move.l #0,a1 move.l #0,a2 move.l #0,a3 move.l #0,a4 move.l #0,a5 move.l #0,a6 .cls_z: movem.l d0-d6/a1-a6,(a0) movem.l d0-d6/a1-a6,52(a0) movem.l d0-d6/a1-a6,104(a0) move.l d0,156(a0) add.w #160,a0 dbf.w d7,.cls_z move.w #4,$ff820e move.l #falldata,a1 move.w (a1)+,x move.w (a1)+,y move.w (a1)+,stop add.w #6,pointer move.w (a1)+,x2fall move.w (a1)+,y2fall move.w (a1)+,stop2 jsr vsync move.w #$0,$ff8240 rts *************************************************************************** fall1: move.w #1000,d0 .wait: nop dbf.w d0,.wait * move.w #$700,$ff8240 move.l #$0,$ff8a00 move.l #$0,$ff8a04 move.l #$0,$ff8a08 move.l #$0,$ff8a0c move.l #$0,$ff8a10 move.l #$0,$ff8a14 move.l #$0,$ff8a18 move.l #$0,$ff8a1c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #0,$ff8a30 move.l srn,a0 move.l a0,$ff8a32 ; flytta dest. adress till blitter chipet move.w #21*365,$ff8a36 ; X rknare move.w #1,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! jsr draw_boxes jsr fallcube jsr fallcube2 rts draw_boxes: move.l #$ffffffff,$ff8a00 move.l #$ffffffff,$ff8a04 move.l #$ffffffff,$ff8a08 move.l #$ffffffff,$ff8a0c move.l #$ffffffff,$ff8a10 move.l #$ffffffff,$ff8a14 move.l #$ffffffff,$ff8a18 move.l #$ffffffff,$ff8a1c move.l #falldata+6*24,a1 move.w #23*6,d0 move.w pointer,d1 sub.w d1,d0 ext.l d0 divs.w #6,d0 blt .no_draw .draw_box_loop: move.w (a1),d1 move.w 2(a1),d2 move.w #0,d3 asr.w #1,d1 cmp.w #160,d2 blt .flopp sub.w #160,d2 move.w #160*168,d3 .flopp mulu.w #168,d2 move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #168-32+8,$ff8a30 move.l srn,a0 add.w #160,a0 add.w d1,a0 add.w d2,a0 add.w d3,a0 add.w #8,a0 move.l a0,$ff8a32 ; flytta dest. adress till blitter chipet move.w #4,$ff8a36 ; X rknare move.w #64,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! sub.w #6,a1 dbf.w d0,.draw_box_loop .no_draw: rts fallcube: move.l #fallanim,a0 add.w #4*2*2,anim move.w anim,d0 cmp.w stop,d0 blt .gt add.w #6,pointer cmp.w #25*6,pointer bge .no_draw move.w #0,anim move.l #falldata,a1 add.w pointer,a1 move.w (a1)+,xfall move.w (a1)+,yfall move.w (a1)+,stop .gt: add.w anim,a0 move.l srn,a5 add.w #160,a5 move.w xfall,d0 move.w yfall,d1 move.l #cords,a6 move.w (a0)+,(a6) add.w d0,(a6) move.w (a0)+,2(a6) add.w d1,2(a6) move.w (a0)+,4(a6) add.w d0,4(a6) move.w (a0)+,6(a6) add.w d1,6(a6) move.w (a0)+,8(a6) add.w d0,8(a6) move.w (a0)+,10(a6) add.w d1,10(a6) move.w (a0)+,12(a6) add.w d0,12(a6) move.w (a0)+,14(a6) add.w d1,14(a6) move.w #0,16(a6) ; Colour (0-2) move.w #0,18(a6) ; Medsols-clipping on(1)/off(0) jsr fpoly rts .no_draw: rts fallcube2: move.l #fallanim,a0 add.w #4*2*2,anim2 move.w anim2,d0 cmp.w stop2,d0 blt .gt add.w #6,pointer cmp.w #25*6,pointer bge .no_draw move.w #0,anim2 move.l #falldata,a1 add.w pointer,a1 move.w (a1)+,x2fall move.w (a1)+,y2fall move.w (a1)+,stop2 .gt: add.w anim2,a0 move.l srn,a5 add.w #160,a5 move.w x2fall,d0 move.w y2fall,d1 move.l #cords,a6 move.w (a0)+,(a6) add.w d0,(a6) move.w (a0)+,2(a6) add.w d1,2(a6) move.w (a0)+,4(a6) add.w d0,4(a6) move.w (a0)+,6(a6) add.w d1,6(a6) move.w (a0)+,8(a6) add.w d0,8(a6) move.w (a0)+,10(a6) add.w d1,10(a6) move.w (a0)+,12(a6) add.w d0,12(a6) move.w (a0)+,14(a6) add.w d1,14(a6) move.w #0,16(a6) ; Colour (0-2) move.w #0,18(a6) ; Medsols-clipping on(1)/off(0) jsr fpoly .no_draw: rts *************************************************************************** *************************************************************************** * Polygon rout by OB 940129-940130,At laaaaast a working poly rout !! * * Small bugs fixed during february -94 * *************************************************************************** * move.l #$70000,a5 * add.w srnp,a5 ; Screen pointer * * move.l #cords,a6 * move.w x1,(a6) * move.w y1,2(a6) * move.w x2,4(a6) * move.w y2,6(a6) * move.w x3,8(a6) * move.w y3,10(a6) * move.w x4,12(a6) * move.w y4,14(a6) * move.w #0,16(a6) ; Colour (0-2) * move.w #0,18(a6) ; Medsols-clipping on(1)/off(0) * * jsr poly * * ; svar = Om medsols-clippingen r p och polygonen har blivit * ; bortklippt s innehller d0 en etta. * * ; Rutinen klipper nu ocks mot nedre borden *************************************************************************** opt o+,ow- fpoly: move.l #cords,a0 move.l #tabell,a1 move.l (a0),(a1) move.l 4(a0),4(a1) move.l 8(a0),8(a1) move.l 12(a0),12(a1) move.l (a0),16(a1) move.l 4(a0),20(a1) move.l 8(a0),24(a1) move.l 12(a0),28(a1) move.w 2(a0),d0 moveq.w #0,d2 cmp.w 6(a0),d0 ble .hopp move.w 6(a0),d0 moveq.w #4,d2 .hopp: cmp.w 10(a0),d0 ble .hopp2 move.w 10(a0),d0 moveq.w #8,d2 .hopp2: cmp.w 14(a0),d0 ble .hopp3 move.w 14(a0),d0 move.w #12,d2 .hopp3: move.w d0,start move.w 2(a0),d0 cmp.w 6(a0),d0 bge .hopp4 move.w 6(a0),d0 .hopp4: cmp.w 10(a0),d0 bge .hopp5 move.w 10(a0),d0 .hopp5: cmp.w 14(a0),d0 bge .hopp6 move.w 14(a0),d0 .hopp6: move.w d0,end move.l (a1,d2),(a0) move.l 4(a1,d2),4(a0) move.l 8(a1,d2),8(a0) move.l 12(a1,d2),12(a0) * Kolla med/motsols move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 cmp.w d3,d1 ble .h2pp move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .h2pp: sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k move.w d2,d4 move.w 12(a0),d0 move.w 14(a0),d1 move.w (a0),d2 move.w 2(a0),d3 cmp.w d3,d1 ble .h2pp4 move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .h2pp4: sub.w d0,d2 sub.w d1,d3 bne .big move.w #32767,d2 bra .big2 .big: asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k .big2: tst.w 18(a0) beq .flip ; inget medsols-clip move.l #1,d0 cmp.w d2,d4 bgt .end bra .cont .flip: cmp.w d2,d4 ble .cont move.l 4(a0),d0 move.l 12(a0),4(a0) move.l d0,12(a0) .cont: * hr r det slut med kolla med/motsols cmp.w #150,start blt.w .fly sub.w #150,start sub.w #150,end sub.w #150,2(a0) sub.w #150,6(a0) sub.w #150,10(a0) sub.w #150,14(a0) add.l #150*168,a5 .fly: move.w end,d0 moveq.w #0,d6 ; A1 moveq.w #4,d7 ; A2 cmp.w 6(a0),d0 bne .hupp moveq.w #4,d6 .hupp: cmp.w 14(a0),d0 bne .hupp2 moveq.w #0,d7 .hupp2: * First part move.w 6(a0),d0 cmp.w 2(a0),d0 beq .second move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 cmp.w d3,d1 ble .hpp move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .hpp: * cmp.w #199,d1 * bgt .second move.l #lines,a2 move.w d1,d4 add.w d4,d4 add.w d4,d4 add.w d4,d4 add.w d4,a2 move.w d3,a6 move.l #bitar+4,a4 sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k asl.w #6,d0 subq.w #1,d3 cmp.w #199,a6 ble .skutta sub.w #199,a6 sub.w a6,d3 .skutta: move.w #%1111111111000000,d5 ; Bara fr att snabba upp .loop: add.w d2,d0 move.w d0,d4 and.w d5,d4 move.l (a4,d4),(a2) addq.w #8,a2 dbf.w d3,.loop * Second part .second: move.w 10(a0),d0 cmp.w 6(a0),d0 beq .third move.w 4(a0),d0 move.w 6(a0),d1 move.w 8(a0),d2 move.w 10(a0),d3 cmp.w d3,d1 ble .hpp2 move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .hpp2: * cmp.w #199,d1 * bgt .third move.l #bitar+4,a4 sub.w d6,a4 move.l #lines,a2 add.w d6,a2 move.w d1,d4 add.w d4,d4 add.w d4,d4 add.w d4,d4 add.w d4,a2 move.w d3,a6 sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k asl.w #6,d0 subq.w #1,d3 * cmp.w #199,a6 * ble .skutta2 * sub.w #199,a6 * sub.w a6,d3 *.skutta2: move.w #%1111111111000000,d5 ; Bara fr att snabba upp .loop2: add.w d2,d0 move.w d0,d4 and.w d5,d4 move.l (a4,d4),(a2) addq.w #8,a2 dbf.w d3,.loop2 * Third part .third: move.w 14(a0),d0 cmp.w 10(a0),d0 beq .fourth move.w 8(a0),d0 move.w 10(a0),d1 move.w 12(a0),d2 move.w 14(a0),d3 cmp.w d3,d1 ble .hpp3 move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .hpp3: * cmp.w #199,d1 * bgt .fourth move.l #bitar+4,a4 sub.w d7,a4 move.l #lines,a2 add.w d7,a2 move.w d1,d4 add.w d4,d4 add.w d4,d4 add.w d4,d4 add.w d4,a2 move.w d3,a6 sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k asl.w #6,d0 subq.w #1,d3 * cmp.w #199,a6 * ble .skutta3 * sub.w #199,a6 * sub.w a6,d3 *.skutta3: move.w #%1111111111000000,d5 ; Bara fr att snabba upp .loop3: add.w d2,d0 move.w d0,d4 and.w d5,d4 move.l (a4,d4),(a2) addq.w #8,a2 dbf.w d3,.loop3 * Fourth part .fourth: move.w 2(a0),d0 cmp.w 14(a0),d0 beq .fill move.w 12(a0),d0 move.w 14(a0),d1 move.w (a0),d2 move.w 2(a0),d3 cmp.w d3,d1 ble .hpp4 move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .hpp4: * cmp.w #199,d1 * bgt .fill move.l #bitar,a4 move.l #lines,a2 add.w #4,a2 move.w d1,d4 add.w d4,d4 add.w d4,d4 add.w d4,d4 add.w d4,a2 move.w d3,a6 sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k asl.w #6,d0 subq.w #1,d3 * cmp.w #199,a6 * ble .skutta4 * sub.w #199,a6 * sub.w a6,d3 .skutta4: move.w #%1111111111000000,d5 ; Bara fr att snabba upp .loop4: add.w d2,d0 move.w d0,d4 and.w d5,d4 move.l (a4,d4),(a2) addq.w #8,a2 dbf.w d3,.loop4 .fill: * move.w #$7,$ff8240 move.w end,d0 cmp.w start,d0 beq .end ; Ingen poly move.w end,d7 * cmp.w #199,d7 * ble .noendchange * move.w d7,d6 * sub.w #199,d6 * sub.w d6,d7 *.noendchange: sub.w start,d7 add.w d7,d7 move.l #lines,a2 move.w start,d6 add.w d6,d6 add.w d6,d6 add.w d6,d6 add.w d6,a2 * move.w #$707,$ff8240 move.l #lines,a2 add.w d0,d0 add.w d0,d0 add.w d0,d0 add.w d0,a2 * move.w -2(a2),-4(a2) move.l #-1,$ff8a00 move.l #-1,$ff8a04 move.l #-1,$ff8a08 move.l #-1,$ff8a0c move.l #-1,$ff8a10 move.l #-1,$ff8a14 move.l #-1,$ff8a18 move.l #-1,$ff8a1c move.w #-1,$ff8a2a move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #0,$ff8a30 move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.l #lines-4,a2 move.l #lines,a3 move.l #$ff8a28,a6 move.w start,d0 move.w d0,d1 move.w d0,d3 lsl.w #3,d3 add.w d3,a2 add.w d3,a3 cmp.w #190,d1 bgt .jippi mulu.w #168,d1 add.w d1,a5 bra .jippa .jippi: sub.w #190,d1 add.l #31920,a5 mulu.w #168,d1 add.w d1,a5 .jippa: move.w end,d2 sub.w d0,d2 subq.w #1,d2 * cmp.w #199,end * ble .skutt * move.w end,d7 * sub.w #199,d7 * sub.w d7,d2 *.skutt: move.l a5,d7 move.l #.hopp_tabell+4,a5 move.l #-1,d3 move.l #cords,a1 cmp.w #1,16(a1) blt .col1 bgt .col3 addq.w #2,d7 * Colour 1 and 2 .col1 .fill_loop: addq.w #4,a2 addq.w #4,a3 move.w (a2)+,d4 move.w (a3)+,d5 sub.w d4,d5 blt.s .draw_0 move.l d7,a1 add.w d4,d4 add.w d4,a1 move.l (a5,d5),a4 jmp (a4) * Olika hopp alternativ .draw_0: addq.w #2,a2 addq.w #2,a3 add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 .end: rts .draw_1: move.w (a2)+,d5 and.w (a3)+,d5 or.w d5,(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_2: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d1,8(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_3: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) or.w d1,16(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_4: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) or.w d1,24(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_5: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) move.w d3,24(a1) or.w d1,32(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_6: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) move.w d3,24(a1) move.w d3,32(a1) or.w d1,40(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_7: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) move.w d3,24(a1) move.w d3,32(a1) move.w d3,40(a1) or.w d1,48(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_8: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) move.w d3,24(a1) move.w d3,32(a1) move.w d3,40(a1) move.w d3,48(a1) or.w d1,56(a1) add #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_9: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00090001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_10: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000a0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_11: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000b0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_12: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000c0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_13: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000d0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_14: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000e0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_15: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000f0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_16: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00100001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_17: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00110001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_18: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00120001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_19: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00130001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_20: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00140001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts * Colour 3 .col3 move.l #.hopp_tabell2+4,a5 .fill_loop3: addq.w #4,a2 addq.w #4,a3 move.w (a2)+,d4 move.w (a3)+,d5 sub.w d4,d5 blt.s .2draw_0 move.l d7,a1 add.w d4,d4 add.w d4,a1 move.l (a5,d5),a4 jmp (a4) * Olika hopp alternativ .2draw_0: addq.w #2,a2 addq.w #2,a3 add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_1: move.w (a3)+,d0 and.w (a2)+,d0 or.w d0,(a1) or.w d0,2(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_2: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) or.w d1,8(a1) or.w d1,10(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_3: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) or.w d1,16(a1) or.w d1,18(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_4: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) or.w d1,24(a1) or.w d1,26(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_5: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) move.l d3,24(a1) or.w d1,32(a1) or.w d1,34(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_6: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) move.l d3,24(a1) move.l d3,32(a1) or.w d1,40(a1) or.w d1,42(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_7: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) move.l d3,24(a1) move.l d3,32(a1) move.l d3,40(a1) or.w d1,48(a1) or.w d1,50(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_8: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) move.l d3,24(a1) move.l d3,32(a1) move.l d3,40(a1) move.l d3,48(a1) or.w d1,56(a1) or.w d1,58(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_9: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00090001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00090001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_10: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000a0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000a0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_11: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000b0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000b0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_12: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000c0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000c0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_13: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000d0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000d0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_14: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000e0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000e0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_15: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000f0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000f0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_16: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00100001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00100001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_17: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00110001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00110001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_18: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00120001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00120001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_19: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00130001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00130001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_20: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00140001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00140001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .hopp_tabell: dc.l .draw_0,.draw_1,.draw_2,.draw_3,.draw_4,.draw_5,.draw_6,.draw_7,.draw_8,.draw_9,.draw_10,.draw_11,.draw_12,.draw_13,.draw_14,.draw_15,.draw_16,.draw_17,.draw_18,.draw_19,.draw_20 .hopp_tabell2: dc.l .2draw_0,.2draw_1,.2draw_2,.2draw_3,.2draw_4,.2draw_5,.2draw_6,.2draw_7,.2draw_8,.2draw_9,.2draw_10,.2draw_11,.2draw_12,.2draw_13,.2draw_14,.2draw_15,.2draw_16,.2draw_17,.2draw_18,.2draw_19,.2draw_20 *************************************************************************** *************************************************************************** dummy: rts *************************************************************************** *************************************************************************** * Clear screen, d0 innehller antal block (20*200), d1 - Offset * *************************************************************************** cls: move.l #$0,$ff8a00 move.l #$0,$ff8a04 move.l #$0,$ff8a08 move.l #$0,$ff8a0c move.l #$0,$ff8a10 move.l #$0,$ff8a14 move.l #$0,$ff8a18 move.l #$0,$ff8a1c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #0,$ff8a30 move.l srn,a0 add.w d1,a0 move.l a0,$ff8a32 ; flytta dest. adress till blitter chipet move.w d0,$ff8a36 ; X rknare move.w #1,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! rts *************************************************************************** ******************* * fade rutinen * ******************* fade lea .trans_lista,a2 ; transfer list lea .col_list,a3 .fade_lp move.w (a0),d1 ; color from move.w (a1),d2 ; color to and.w #$f00,d1 ; just r and.w #$f00,d2 ror.w #8,d1 ; to lower nibble  ror.w #8,d2 add.w d1,d1 add.w d2,d2 move.w 0(a2,d1.w),d3 move.w 0(a2,d2.w),d4 cmp.w d3,d4 ; if eq goto green beq.s .equal1 cmp.w d3,d4 blt.s .nert1 add.w #2,d3 move.w 0(a3,d3.w),d3 ; new color rol.w #8,d3 move.w d3,d7 ; total color data reg bra.s .green .nert1 sub.w #2,d3 move.w 0(a3,d3.w),d3 rol.w #8,d3 move.w d3,d7 bra.s .green .equal1 move.w 0(a3,d3.w),d3 ; new color rol.w #8,d3 move.w d3,d7 ; total color data reg .green move.w (a0),d1 ; color from move.w (a1),d2 ; color to and.w #$0f0,d1 ; just g and.w #$0f0,d2 ror.w #4,d1 ; to lower nibble ror.w #4,d2 add.w d1,d1 add.w d2,d2 move.w 0(a2,d1.w),d3 move.w 0(a2,d2.w),d4 cmp.w d3,d4 ; if eq goto green beq.s .equal2 cmp.w d3,d4 blt.s .nert2 add.w #2,d3 move.w 0(a3,d3.w),d3 ; new color rol.w #4,d3 or.w d3,d7 ; total color data reg bra.s .blue .nert2 sub.w #2,d3 move.w 0(a3,d3.w),d3 rol.w #4,d3 or.w d3,d7 bra.s .blue .equal2 move.w 0(a3,d3.w),d3 ; new color rol.w #4,d3 or.w d3,d7 ; total color data reg .blue move.w (a0),d1 ; color from move.w (a1)+,d2 ; color to and.w #$00f,d1 ; just b and.w #$00f,d2 add.w d1,d1 add.w d2,d2 move.w 0(a2,d1.w),d3 move.w 0(a2,d2.w),d4 cmp.w d3,d4 ; if eq goto green beq.s .equal3 cmp.w d3,d4 blt.s .nert3 add.w #2,d3 move.w 0(a3,d3.w),d3 ; new color or.w d3,d7 ; total color data reg bra.s .save_col .nert3 sub.w #2,d3 move.w 0(a3,d3.w),d3 or.w d3,d7 bra.s .save_col .equal3 move.w 0(a3,d3.w),d3 ; new color or.w d3,d7 ; total color data reg .save_col move.w d7,(a0)+ ; save color dbf d0,.fade_lp rts .trans_lista dc.w 1*2,3*2,5*2,7*2,9*2,11*2,13*2,15*2,2*2,4*2,6*2,8*2,10*2,12*2,14*2,16*2 .col_list dc.w $0,$0,$8,$1,$9,$2,$a,$3,$b,$4,$c,$5,$d,$6,$e,$7,$f *************************************************************************** **************** * First init * **************** first_init clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,ustk move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,oldphys move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,oldlog move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,oldrez move.w #0,-(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea 12(sp),sp rts *************************************************************************** ********************* * fixa mfp djveln * ********************* save_mfp lea s_buffer,a0 move.l $120.w,(a0)+ move.l $70.w,(a0)+ mov*************************************************************************** * Out of Reach demo, hopsttning av alla rutiner 940321-?????? * *************************************************************************** section text jsr first_init jsr save_mfp jsr set_mfp jsr init_sam move.l #scrblk,a0 move.w #168*365*2/4,d0 clr: move.l #0,(a0)+ dbf.w d0,clr *************************************************************************** * Main loop * *************************************************************************** main_loop: jsr set_screen jsr vsync cmp.b #57,$fffffc02.w beq slut * Counter fr delarna addq.w #1,timer move.w timer,d0 cmp.w next,d0 blt .hopp move.l #part_order,a0 add.w part_pointer,a0 move.w (a0),next move.l 2(a0),part addq.w #6,part_pointer .hopp: move.l part,a0 jsr (a0) ; hoppa till den nuvarande delen bra main_loop *************************************************************************** intro_fade1: move.w #$800,$ff8240 rts intro_fade2: move.w #$100,$ff8240 rts intro_fade3: move.w #$900,$ff8240 rts intro_fade4: move.w #$200,$ff8240 rts intro_fade5: move.w #$a00,$ff8240 rts intro_fade6: move.w #$300,$ff8240 rts intro_fade7: move.w #$b00,$ff8240 rts intro_fade8: move.w #$400,$ff8240 rts intro_fade9: move.w #$c00,$ff8240 rts intro_fade10: move.w #$500,$ff8240 rts intro_fade11: move.w #$d00,$ff8240 rts intro_fade12: move.w #$600,$ff8240 rts intro_fade13: move.w #$e00,$ff8240 rts intro_fade14: move.w #$700,$ff8240 rts intro_fade15: move.w #$f00,$ff8240 rts *************************************************************************** fadevit1: move.w #$f22,$ff8240 rts fadevit2: move.w #$f44,$ff8240 rts fadevit3: move.w #$f66,$ff8240 rts fadevit4: move.w #$fff,$ff8240 move.w #$fff,$ff8242 move.w #$fff,$ff8244 move.w #$fff,$ff8246 move.w #$fff,$ff8248 move.w #$fff,$ff824a move.w #$fff,$ff824c move.w #$fff,$ff824e move.w #$fff,$ff8250 move.w #$fff,$ff8252 move.w #$fff,$ff8254 move.w #$fff,$ff8256 move.w #$fff,$ff8258 move.w #$fff,$ff825a move.w #$fff,$ff825c move.w #$fff,$ff825e rts *************************************************************************** first_ana_logo: move.l #analogga1,a0 move.l #scrblk,a1 add.w #160*90,a1 move.w #89,d0 .copy: move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ dbf.w d0,.copy move.l #analogga2,a0 move.l #scrblk,a1 add.l #168*365,a1 add.w #160*90,a1 move.w #89,d0 .copy2: move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ dbf.w d0,.copy2 rts *************************************************************************** fadedownvit1: move.w #$777,$ff8240 move.w #$777,$ff8242 move.w #$777,$ff8244 move.w #$777,$ff8246 move.w #$777,$ff8248 move.w #$777,$ff824a move.w #$777,$ff824c move.w #$777,$ff824e move.w #$777,$ff8250 move.w #$777,$ff8252 move.w #$777,$ff8254 move.w #$777,$ff8256 move.w #$777,$ff8258 move.w #$777,$ff825a move.w #$777,$ff825c move.w #$77f,$ff825e rts fadedownvit2: move.w #$666,$ff8240 move.w #$666,$ff8242 move.w #$666,$ff8244 move.w #$666,$ff8246 move.w #$666,$ff8248 move.w #$666,$ff824a move.w #$666,$ff824c move.w #$666,$ff824e move.w #$666,$ff8250 move.w #$666,$ff8252 move.w #$666,$ff8254 move.w #$666,$ff8256 move.w #$666,$ff8258 move.w #$66e,$ff825a move.w #$667,$ff825c move.w #$66f,$ff825e rts fadedownvit3: move.w #$555,$ff8240 move.w #$555,$ff8242 move.w #$555,$ff8244 move.w #$555,$ff8246 move.w #$555,$ff8248 move.w #$555,$ff824a move.w #$555,$ff824c move.w #$555,$ff824e move.w #$555,$ff8250 move.w #$555,$ff8252 move.w #$555,$ff8254 move.w #$55d,$ff8256 move.w #$556,$ff8258 move.w #$55e,$ff825a move.w #$557,$ff825c move.w #$55f,$ff825e rts fadedownvit4: move.w #$444,$ff8240 move.w #$444,$ff8242 move.w #$444,$ff8244 move.w #$444,$ff8246 move.w #$444,$ff8248 move.w #$444,$ff824a move.w #$444,$ff824c move.w #$444,$ff824e move.w #$444,$ff8250 move.w #$44c,$ff8252 move.w #$445,$ff8254 move.w #$44d,$ff8256 move.w #$446,$ff8258 move.w #$44e,$ff825a move.w #$447,$ff825c move.w #$44f,$ff825e rts fadedownvit5: move.w #$333,$ff8240 move.w #$333,$ff8242 move.w #$333,$ff8244 move.w #$333,$ff8246 move.w #$333,$ff8248 move.w #$333,$ff824a move.w #$333,$ff824c move.w #$33b,$ff824e move.w #$334,$ff8250 move.w #$33c,$ff8252 move.w #$335,$ff8254 move.w #$33d,$ff8256 move.w #$336,$ff8258 move.w #$33e,$ff825a move.w #$337,$ff825c move.w #$33f,$ff825e rts fadedownvit6: move.w #$222,$ff8240 move.w #$222,$ff8242 move.w #$222,$ff8244 move.w #$222,$ff8246 move.w #$222,$ff8248 move.w #$22a,$ff824a move.w #$223,$ff824c move.w #$22b,$ff824e move.w #$224,$ff8250 move.w #$22c,$ff8252 move.w #$225,$ff8254 move.w #$22d,$ff8256 move.w #$226,$ff8258 move.w #$22e,$ff825a move.w #$227,$ff825c move.w #$22f,$ff825e rts fadedownvit7: move.w #$111,$ff8240 move.w #$111,$ff8242 move.w #$111,$ff8244 move.w #$119,$ff8246 move.w #$112,$ff8248 move.w #$11a,$ff824a move.w #$113,$ff824c move.w #$11b,$ff824e move.w #$114,$ff8250 move.w #$11c,$ff8252 move.w #$115,$ff8254 move.w #$11d,$ff8256 move.w #$116,$ff8258 move.w #$11e,$ff825a move.w #$117,$ff825c move.w #$11f,$ff825e rts fadedownvit8: move.w #$000,$ff8240 move.w #$008,$ff8242 move.w #$001,$ff8244 move.w #$009,$ff8246 move.w #$002,$ff8248 move.w #$00a,$ff824a move.w #$003,$ff824c move.w #$00b,$ff824e move.w #$004,$ff8250 move.w #$00c,$ff8252 move.w #$005,$ff8254 move.w #$00d,$ff8256 move.w #$006,$ff8258 move.w #$00e,$ff825a move.w #$007,$ff825c move.w #$00f,$ff825e rts *************************************************************************** init_zoom: move.l #scrblk,a0 move.w #(365*2)-1,d7 moveq.l #0,d0 moveq.l #0,d1 moveq.l #0,d2 moveq.l #0,d3 moveq.l #0,d4 moveq.l #0,d5 moveq.l #0,d6 move.l #0,a1 move.l #0,a2 move.l #0,a3 move.l #0,a4 move.l #0,a5 move.l #0,a6 .cls_z: movem.l d0-d6/a1-a6,(a0) movem.l d0-d6/a1-a6,52(a0) movem.l d0-d6/a1-a6,104(a0) move.l d0,156(a0) add.w #160,a0 dbf.w d7,.cls_z move.w #28,$ff820e move.l #hp,a0 move.l #put_pixel_1,(a0)+ move.l #put_pixel_2,(a0)+ move.l #put_pixel_3,(a0)+ move.l #put_pixel_4,(a0)+ move.l #put_pixel_5,(a0)+ move.l #put_pixel_6,(a0)+ move.l #put_pixel_7,(a0)+ move.l #put_pixel_8,(a0)+ move.l #put_pixel_9,(a0)+ move.l #put_pixel_10,(a0)+ move.l #put_pixel_11,(a0)+ move.l #put_pixel_12,(a0)+ move.l #put_pixel_13,(a0)+ move.l #put_pixel_14,(a0)+ move.l #put_pixel_15,(a0)+ move.l #put_pixel_16,(a0)+ jsr vsync rts *************************************************************************** intro_zoom: .hur: add.w #96,storlek_y cmp.w #13*3*96+96*2,storlek_y blt .hopp move.w #0,storlek_y move.w #0,storlek_x add.w #48*7*2,plus move.w #136+16*7,x move.w #216*96,y bra .hur .hopp: cmp.w #13*3*96+96*2-96*7,storlek_y blt .hopp2 add.w #$111,$ff8240 .hopp2: cmp.w #96*7,storlek_y bgt .hopp3 sub.w #$111,$ff8240 .hopp3: add.w #96,storlek_x sub.w #6,x sub.w #216,y move.w #1000,d0 .wait: nop dbf.w d0,.wait move.w #27*200,d0 move.w #0,d1 jsr cls move.l #picture,a0 add.w plus,a0 move.l #prerot,a1 move.l #zoom,a3 ; fr y move.l srn,a4 add.w y,a4 add.w #160,a4 move.l #hp,a6 add.w storlek_y,a3 move.w #7-1,d0 ; 6-1 y yrader: move.w #48-1,d1 ; 70-1 x move.w x,d6 ; Vi skall starta p X move.l #zoom,a2 ; fr x add.w storlek_x,a2 xrader: move.w (a2)+,d2 add.w d2,d6 addq.w #1,d6 tst.w (a0)+ beq.s nodraw cmp.w #450,d6 bgt nodraw move.w d6,d3 sub.w d2,d3 ; justering move.w d3,d4 lsr.w #1,d3 and.w #%1111111111111000,d3 move.w d4,d5 and.w #%1111111111110000,d5 sub.w d5,d4 lsl.w #3,d4 ; *8 fr att passa prerotningen lsl.w #7,d2 ; *128 add.w d4,d2 add.w d3,a4 ; g till slutet fr frra pixeln (skrmen(16-)) move.w (a1,d2),d5 move.w 2(a1,d2),d4 ; yrader move.w (a3),d7 add d7,d7 ; passa listan p hopp variabler add d7,d7 move.l (a6,d7),a5 jsr (a5) ; hoppa till put pixel sub.w d3,a4 nodraw: dbf.w d1,xrader move.w (a3)+,d5 addq.w #1,d5 mulu.w #216,d5 add.w d5,a4 ; lgga till p y dbf.w d0,yrader rts put_pixel_1: or.w d5,(a4) or.w d4,8(a4) rts put_pixel_2: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) rts put_pixel_3: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) rts put_pixel_4: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) rts put_pixel_5: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) rts put_pixel_6: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) rts put_pixel_7: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) rts put_pixel_8: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) rts put_pixel_9: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) rts put_pixel_10: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) rts put_pixel_11: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) rts put_pixel_12: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) rts put_pixel_13: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) or.w d5,216*12(a4) or.w d4,216*12+8(a4) rts put_pixel_14: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) or.w d5,216*12(a4) or.w d4,216*12+8(a4) or.w d5,216*13(a4) or.w d4,216*13+8(a4) rts put_pixel_15: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) or.w d5,216*12(a4) or.w d4,216*12+8(a4) or.w d5,216*13(a4) or.w d4,216*13+8(a4) or.w d5,216*14(a4) or.w d4,216*14+8(a4) rts put_pixel_16: or.w d5,(a4) or.w d4,8(a4) or.w d5,216(a4) or.w d4,216+8(a4) or.w d5,216*2(a4) or.w d4,216*2+8(a4) or.w d5,216*3(a4) or.w d4,216*3+8(a4) or.w d5,216*4(a4) or.w d4,216*4+8(a4) or.w d5,216*5(a4) or.w d4,216*5+8(a4) or.w d5,216*6(a4) or.w d4,216*6+8(a4) or.w d5,216*7(a4) or.w d4,216*7+8(a4) or.w d5,216*8(a4) or.w d4,216*8+8(a4) or.w d5,216*9(a4) or.w d4,216*9+8(a4) or.w d5,216*10(a4) or.w d4,216*10+8(a4) or.w d5,216*11(a4) or.w d4,216*11+8(a4) or.w d5,216*12(a4) or.w d4,216*12+8(a4) or.w d5,216*13(a4) or.w d4,216*13+8(a4) or.w d5,216*14(a4) or.w d4,216*14+8(a4) or.w d5,216*15(a4) or.w d4,216*15+8(a4) rts *************************************************************************** init_fall1: move.l #scrblk,a0 move.w #(365*2)-1,d7 moveq.l #0,d0 moveq.l #0,d1 moveq.l #0,d2 moveq.l #0,d3 moveq.l #0,d4 moveq.l #0,d5 moveq.l #0,d6 move.l #0,a1 move.l #0,a2 move.l #0,a3 move.l #0,a4 move.l #0,a5 move.l #0,a6 .cls_z: movem.l d0-d6/a1-a6,(a0) movem.l d0-d6/a1-a6,52(a0) movem.l d0-d6/a1-a6,104(a0) move.l d0,156(a0) add.w #160,a0 dbf.w d7,.cls_z move.w #4,$ff820e move.l #falldata,a1 move.w (a1)+,x move.w (a1)+,y move.w (a1)+,stop add.w #6,pointer move.w (a1)+,x2fall move.w (a1)+,y2fall move.w (a1)+,stop2 jsr vsync move.w #$0,$ff8240 rts *************************************************************************** fall1: move.w #1000,d0 .wait: nop dbf.w d0,.wait * move.w #$700,$ff8240 move.l #$0,$ff8a00 move.l #$0,$ff8a04 move.l #$0,$ff8a08 move.l #$0,$ff8a0c move.l #$0,$ff8a10 move.l #$0,$ff8a14 move.l #$0,$ff8a18 move.l #$0,$ff8a1c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #0,$ff8a30 move.l srn,a0 move.l a0,$ff8a32 ; flytta dest. adress till blitter chipet move.w #21*365,$ff8a36 ; X rknare move.w #1,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! jsr draw_boxes jsr fallcube jsr fallcube2 rts draw_boxes: move.l #$ffffffff,$ff8a00 move.l #$ffffffff,$ff8a04 move.l #$ffffffff,$ff8a08 move.l #$ffffffff,$ff8a0c move.l #$ffffffff,$ff8a10 move.l #$ffffffff,$ff8a14 move.l #$ffffffff,$ff8a18 move.l #$ffffffff,$ff8a1c move.l #falldata+6*24,a1 move.w #23*6,d0 move.w pointer,d1 sub.w d1,d0 ext.l d0 divs.w #6,d0 blt .no_draw .draw_box_loop: move.w (a1),d1 move.w 2(a1),d2 move.w #0,d3 asr.w #1,d1 cmp.w #160,d2 blt .flopp sub.w #160,d2 move.w #160*168,d3 .flopp mulu.w #168,d2 move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #168-32+8,$ff8a30 move.l srn,a0 add.w #160,a0 add.w d1,a0 add.w d2,a0 add.w d3,a0 add.w #8,a0 move.l a0,$ff8a32 ; flytta dest. adress till blitter chipet move.w #4,$ff8a36 ; X rknare move.w #64,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! sub.w #6,a1 dbf.w d0,.draw_box_loop .no_draw: rts fallcube: move.l #fallanim,a0 add.w #4*2*2,anim move.w anim,d0 cmp.w stop,d0 blt .gt add.w #6,pointer cmp.w #25*6,pointer bge .no_draw move.w #0,anim move.l #falldata,a1 add.w pointer,a1 move.w (a1)+,xfall move.w (a1)+,yfall move.w (a1)+,stop .gt: add.w anim,a0 move.l srn,a5 add.w #160,a5 move.w xfall,d0 move.w yfall,d1 move.l #cords,a6 move.w (a0)+,(a6) add.w d0,(a6) move.w (a0)+,2(a6) add.w d1,2(a6) move.w (a0)+,4(a6) add.w d0,4(a6) move.w (a0)+,6(a6) add.w d1,6(a6) move.w (a0)+,8(a6) add.w d0,8(a6) move.w (a0)+,10(a6) add.w d1,10(a6) move.w (a0)+,12(a6) add.w d0,12(a6) move.w (a0)+,14(a6) add.w d1,14(a6) move.w #0,16(a6) ; Colour (0-2) move.w #0,18(a6) ; Medsols-clipping on(1)/off(0) jsr fpoly rts .no_draw: rts fallcube2: move.l #fallanim,a0 add.w #4*2*2,anim2 move.w anim2,d0 cmp.w stop2,d0 blt .gt add.w #6,pointer cmp.w #25*6,pointer bge .no_draw move.w #0,anim2 move.l #falldata,a1 add.w pointer,a1 move.w (a1)+,x2fall move.w (a1)+,y2fall move.w (a1)+,stop2 .gt: add.w anim2,a0 move.l srn,a5 add.w #160,a5 move.w x2fall,d0 move.w y2fall,d1 move.l #cords,a6 move.w (a0)+,(a6) add.w d0,(a6) move.w (a0)+,2(a6) add.w d1,2(a6) move.w (a0)+,4(a6) add.w d0,4(a6) move.w (a0)+,6(a6) add.w d1,6(a6) move.w (a0)+,8(a6) add.w d0,8(a6) move.w (a0)+,10(a6) add.w d1,10(a6) move.w (a0)+,12(a6) add.w d0,12(a6) move.w (a0)+,14(a6) add.w d1,14(a6) move.w #0,16(a6) ; Colour (0-2) move.w #0,18(a6) ; Medsols-clipping on(1)/off(0) jsr fpoly .no_draw: rts *************************************************************************** *************************************************************************** * Polygon rout by OB 940129-940130,At laaaaast a working poly rout !! * * Small bugs fixed during february -94 * *************************************************************************** * move.l #$70000,a5 * add.w srnp,a5 ; Screen pointer * * move.l #cords,a6 * move.w x1,(a6) * move.w y1,2(a6) * move.w x2,4(a6) * move.w y2,6(a6) * move.w x3,8(a6) * move.w y3,10(a6) * move.w x4,12(a6) * move.w y4,14(a6) * move.w #0,16(a6) ; Colour (0-2) * move.w #0,18(a6) ; Medsols-clipping on(1)/off(0) * * jsr poly * * ; svar = Om medsols-clippingen r p och polygonen har blivit * ; bortklippt s innehller d0 en etta. * * ; Rutinen klipper nu ocks mot nedre borden *************************************************************************** opt o+,ow- fpoly: move.l #cords,a0 move.l #tabell,a1 move.l (a0),(a1) move.l 4(a0),4(a1) move.l 8(a0),8(a1) move.l 12(a0),12(a1) move.l (a0),16(a1) move.l 4(a0),20(a1) move.l 8(a0),24(a1) move.l 12(a0),28(a1) move.w 2(a0),d0 moveq.w #0,d2 cmp.w 6(a0),d0 ble .hopp move.w 6(a0),d0 moveq.w #4,d2 .hopp: cmp.w 10(a0),d0 ble .hopp2 move.w 10(a0),d0 moveq.w #8,d2 .hopp2: cmp.w 14(a0),d0 ble .hopp3 move.w 14(a0),d0 move.w #12,d2 .hopp3: move.w d0,start move.w 2(a0),d0 cmp.w 6(a0),d0 bge .hopp4 move.w 6(a0),d0 .hopp4: cmp.w 10(a0),d0 bge .hopp5 move.w 10(a0),d0 .hopp5: cmp.w 14(a0),d0 bge .hopp6 move.w 14(a0),d0 .hopp6: move.w d0,end move.l (a1,d2),(a0) move.l 4(a1,d2),4(a0) move.l 8(a1,d2),8(a0) move.l 12(a1,d2),12(a0) * Kolla med/motsols move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 cmp.w d3,d1 ble .h2pp move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .h2pp: sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k move.w d2,d4 move.w 12(a0),d0 move.w 14(a0),d1 move.w (a0),d2 move.w 2(a0),d3 cmp.w d3,d1 ble .h2pp4 move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .h2pp4: sub.w d0,d2 sub.w d1,d3 bne .big move.w #32767,d2 bra .big2 .big: asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k .big2: tst.w 18(a0) beq .flip ; inget medsols-clip move.l #1,d0 cmp.w d2,d4 bgt .end bra .cont .flip: cmp.w d2,d4 ble .cont move.l 4(a0),d0 move.l 12(a0),4(a0) move.l d0,12(a0) .cont: * hr r det slut med kolla med/motsols cmp.w #150,start blt.w .fly sub.w #150,start sub.w #150,end sub.w #150,2(a0) sub.w #150,6(a0) sub.w #150,10(a0) sub.w #150,14(a0) add.l #150*168,a5 .fly: move.w end,d0 moveq.w #0,d6 ; A1 moveq.w #4,d7 ; A2 cmp.w 6(a0),d0 bne .hupp moveq.w #4,d6 .hupp: cmp.w 14(a0),d0 bne .hupp2 moveq.w #0,d7 .hupp2: * First part move.w 6(a0),d0 cmp.w 2(a0),d0 beq .second move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 cmp.w d3,d1 ble .hpp move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .hpp: * cmp.w #199,d1 * bgt .second move.l #lines,a2 move.w d1,d4 add.w d4,d4 add.w d4,d4 add.w d4,d4 add.w d4,a2 move.w d3,a6 move.l #bitar+4,a4 sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k asl.w #6,d0 subq.w #1,d3 cmp.w #199,a6 ble .skutta sub.w #199,a6 sub.w a6,d3 .skutta: move.w #%1111111111000000,d5 ; Bara fr att snabba upp .loop: add.w d2,d0 move.w d0,d4 and.w d5,d4 move.l (a4,d4),(a2) addq.w #8,a2 dbf.w d3,.loop * Second part .second: move.w 10(a0),d0 cmp.w 6(a0),d0 beq .third move.w 4(a0),d0 move.w 6(a0),d1 move.w 8(a0),d2 move.w 10(a0),d3 cmp.w d3,d1 ble .hpp2 move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .hpp2: * cmp.w #199,d1 * bgt .third move.l #bitar+4,a4 sub.w d6,a4 move.l #lines,a2 add.w d6,a2 move.w d1,d4 add.w d4,d4 add.w d4,d4 add.w d4,d4 add.w d4,a2 move.w d3,a6 sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k asl.w #6,d0 subq.w #1,d3 * cmp.w #199,a6 * ble .skutta2 * sub.w #199,a6 * sub.w a6,d3 *.skutta2: move.w #%1111111111000000,d5 ; Bara fr att snabba upp .loop2: add.w d2,d0 move.w d0,d4 and.w d5,d4 move.l (a4,d4),(a2) addq.w #8,a2 dbf.w d3,.loop2 * Third part .third: move.w 14(a0),d0 cmp.w 10(a0),d0 beq .fourth move.w 8(a0),d0 move.w 10(a0),d1 move.w 12(a0),d2 move.w 14(a0),d3 cmp.w d3,d1 ble .hpp3 move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .hpp3: * cmp.w #199,d1 * bgt .fourth move.l #bitar+4,a4 sub.w d7,a4 move.l #lines,a2 add.w d7,a2 move.w d1,d4 add.w d4,d4 add.w d4,d4 add.w d4,d4 add.w d4,a2 move.w d3,a6 sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k asl.w #6,d0 subq.w #1,d3 * cmp.w #199,a6 * ble .skutta3 * sub.w #199,a6 * sub.w a6,d3 *.skutta3: move.w #%1111111111000000,d5 ; Bara fr att snabba upp .loop3: add.w d2,d0 move.w d0,d4 and.w d5,d4 move.l (a4,d4),(a2) addq.w #8,a2 dbf.w d3,.loop3 * Fourth part .fourth: move.w 2(a0),d0 cmp.w 14(a0),d0 beq .fill move.w 12(a0),d0 move.w 14(a0),d1 move.w (a0),d2 move.w 2(a0),d3 cmp.w d3,d1 ble .hpp4 move.w d0,d5 move.w d2,d0 move.w d5,d2 move.w d1,d5 move.w d3,d1 move.w d5,d3 .hpp4: * cmp.w #199,d1 * bgt .fill move.l #bitar,a4 move.l #lines,a2 add.w #4,a2 move.w d1,d4 add.w d4,d4 add.w d4,d4 add.w d4,d4 add.w d4,a2 move.w d3,a6 sub.w d0,d2 sub.w d1,d3 asl.w #6,d2 ext.l d2 divs.w d3,d2 ; d2=k asl.w #6,d0 subq.w #1,d3 * cmp.w #199,a6 * ble .skutta4 * sub.w #199,a6 * sub.w a6,d3 .skutta4: move.w #%1111111111000000,d5 ; Bara fr att snabba upp .loop4: add.w d2,d0 move.w d0,d4 and.w d5,d4 move.l (a4,d4),(a2) addq.w #8,a2 dbf.w d3,.loop4 .fill: * move.w #$7,$ff8240 move.w end,d0 cmp.w start,d0 beq .end ; Ingen poly move.w end,d7 * cmp.w #199,d7 * ble .noendchange * move.w d7,d6 * sub.w #199,d6 * sub.w d6,d7 *.noendchange: sub.w start,d7 add.w d7,d7 move.l #lines,a2 move.w start,d6 add.w d6,d6 add.w d6,d6 add.w d6,d6 add.w d6,a2 * move.w #$707,$ff8240 move.l #lines,a2 add.w d0,d0 add.w d0,d0 add.w d0,d0 add.w d0,a2 * move.w -2(a2),-4(a2) move.l #-1,$ff8a00 move.l #-1,$ff8a04 move.l #-1,$ff8a08 move.l #-1,$ff8a0c move.l #-1,$ff8a10 move.l #-1,$ff8a14 move.l #-1,$ff8a18 move.l #-1,$ff8a1c move.w #-1,$ff8a2a move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #0,$ff8a30 move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.l #lines-4,a2 move.l #lines,a3 move.l #$ff8a28,a6 move.w start,d0 move.w d0,d1 move.w d0,d3 lsl.w #3,d3 add.w d3,a2 add.w d3,a3 cmp.w #190,d1 bgt .jippi mulu.w #168,d1 add.w d1,a5 bra .jippa .jippi: sub.w #190,d1 add.l #31920,a5 mulu.w #168,d1 add.w d1,a5 .jippa: move.w end,d2 sub.w d0,d2 subq.w #1,d2 * cmp.w #199,end * ble .skutt * move.w end,d7 * sub.w #199,d7 * sub.w d7,d2 *.skutt: move.l a5,d7 move.l #.hopp_tabell+4,a5 move.l #-1,d3 move.l #cords,a1 cmp.w #1,16(a1) blt .col1 bgt .col3 addq.w #2,d7 * Colour 1 and 2 .col1 .fill_loop: addq.w #4,a2 addq.w #4,a3 move.w (a2)+,d4 move.w (a3)+,d5 sub.w d4,d5 blt.s .draw_0 move.l d7,a1 add.w d4,d4 add.w d4,a1 move.l (a5,d5),a4 jmp (a4) * Olika hopp alternativ .draw_0: addq.w #2,a2 addq.w #2,a3 add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 .end: rts .draw_1: move.w (a2)+,d5 and.w (a3)+,d5 or.w d5,(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_2: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d1,8(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_3: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) or.w d1,16(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_4: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) or.w d1,24(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_5: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) move.w d3,24(a1) or.w d1,32(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_6: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) move.w d3,24(a1) move.w d3,32(a1) or.w d1,40(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_7: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) move.w d3,24(a1) move.w d3,32(a1) move.w d3,40(a1) or.w d1,48(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_8: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) move.w d3,8(a1) move.w d3,16(a1) move.w d3,24(a1) move.w d3,32(a1) move.w d3,40(a1) move.w d3,48(a1) or.w d1,56(a1) add #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_9: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00090001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_10: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000a0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_11: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000b0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_12: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000c0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_13: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000d0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_14: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000e0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_15: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000f0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_16: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00100001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_17: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00110001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_18: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00120001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_19: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00130001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .draw_20: move.w (a2)+,(a6) move.w (a3)+,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00140001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts * Colour 3 .col3 move.l #.hopp_tabell2+4,a5 .fill_loop3: addq.w #4,a2 addq.w #4,a3 move.w (a2)+,d4 move.w (a3)+,d5 sub.w d4,d5 blt.s .2draw_0 move.l d7,a1 add.w d4,d4 add.w d4,a1 move.l (a5,d5),a4 jmp (a4) * Olika hopp alternativ .2draw_0: addq.w #2,a2 addq.w #2,a3 add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_1: move.w (a3)+,d0 and.w (a2)+,d0 or.w d0,(a1) or.w d0,2(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_2: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) or.w d1,8(a1) or.w d1,10(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_3: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) or.w d1,16(a1) or.w d1,18(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_4: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) or.w d1,24(a1) or.w d1,26(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_5: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) move.l d3,24(a1) or.w d1,32(a1) or.w d1,34(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_6: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) move.l d3,24(a1) move.l d3,32(a1) or.w d1,40(a1) or.w d1,42(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_7: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) move.l d3,24(a1) move.l d3,32(a1) move.l d3,40(a1) or.w d1,48(a1) or.w d1,50(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_8: move.w (a2)+,d0 move.w (a3)+,d1 or.w d0,(a1) or.w d0,2(a1) move.l d3,8(a1) move.l d3,16(a1) move.l d3,24(a1) move.l d3,32(a1) move.l d3,40(a1) move.l d3,48(a1) or.w d1,56(a1) or.w d1,58(a1) add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_9: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00090001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00090001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_10: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000a0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000a0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_11: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000b0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000b0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_12: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000c0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000c0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_13: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000d0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000d0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_14: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000e0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000e0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_15: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000f0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$000f0001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts  .2draw_16: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00100001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00100001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_17: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00110001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00110001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_18: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00120001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00120001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_19: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00130001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00130001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .2draw_20: move.w (a2)+,d0 move.w (a3)+,d1 move.w d0,(a6) move.w d1,$4(a6) move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00140001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! addq.w #2,a1 move.l a1,$a(a6) ; flytta dest. adress till blitter chipet move.l #$00140001,$e(a6) ; X och y rknare move.b #%11000011,$14(a6) ; let's go !!!! add.l #168,d7 dbf.w d2,.fill_loop move.l #0,d0 rts .hopp_tabell: dc.l .draw_0,.draw_1,.draw_2,.draw_3,.draw_4,.draw_5,.draw_6,.draw_7,.draw_8,.draw_9,.draw_10,.draw_11,.draw_12,.draw_13,.draw_14,.draw_15,.draw_16,.draw_17,.draw_18,.draw_19,.draw_20 .hopp_tabell2: dc.l .2draw_0,.2draw_1,.2draw_2,.2draw_3,.2draw_4,.2draw_5,.2draw_6,.2draw_7,.2draw_8,.2draw_9,.2draw_10,.2draw_11,.2draw_12,.2draw_13,.2draw_14,.2draw_15,.2draw_16,.2draw_17,.2draw_18,.2draw_19,.2draw_20 *************************************************************************** *************************************************************************** dummy: rts *************************************************************************** *************************************************************************** * Clear screen, d0 innehller antal block (20*200), d1 - Offset * *************************************************************************** cls: move.l #$0,$ff8a00 move.l #$0,$ff8a04 move.l #$0,$ff8a08 move.l #$0,$ff8a0c move.l #$0,$ff8a10 move.l #$0,$ff8a14 move.l #$0,$ff8a18 move.l #$0,$ff8a1c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #0,$ff8a30 move.l srn,a0 add.w d1,a0 move.l a0,$ff8a32 ; flytta dest. adress till blitter chipet move.w d0,$ff8a36 ; X rknare move.w #1,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! rts *************************************************************************** ******************* * fade rutinen * ******************* fade lea .trans_lista,a2 ; transfer list lea .col_list,a3 .fade_lp move.w (a0),d1 ; color from move.w (a1),d2 ; color to and.w #$f00,d1 ; just r and.w #$f00,d2 ror.w #8,d1 ; to lower nibble ror.w #8,d2 add.w d1,d1 add.w d2,d2 move.w 0(a2,d1.w),d3 move.w 0(a2,d2.w),d4 cmp.w d3,d4 ; if eq goto green beq.s .equal1 cmp.w d3,d4 blt.s .nert1 add.w #2,d3 move.w 0(a3,d3.w),d3 ; new color rol.w #8,d3 move.w d3,d7 ; total color data reg bra.s .green .nert1 sub.w #2,d3 move.w 0(a3,d3.w),d3 rol.w #8,d3 move.w d3,d7 bra.s .green .equal1 move.w 0(a3,d3.w),d3 ; new color rol.w #8,d3 move.w d3,d7 ; total color data reg .green move.w (a0),d1 ; color from move.w (a1),d2 ; color to and.w #$0f0,d1 ; just g and.w #$0f0,d2 ror.w #4,d1 ; to lower nibble ror.w #4,d2 add.w d1,d1 add.w d2,d2 move.w 0(a2,d1.w),d3 move.w 0(a2,d2.w),d4 cmp.w d3,d4 ; if eq goto green beq.s .equal2 cmp.w d3,d4 blt.s .nert2 add.w #2,d3 move.w 0(a3,d3.w),d3 ; new color rol.w #4,d3 or.w d3,d7 ; total color data reg bra.s .blue .nert2 sub.w #2,d3 move.w 0(a3,d3.w),d3 rol.w #4,d3 or.w d3,d7 bra.s .blue .equal2 move.w 0(a3,d3.w),d3 ; new color rol.w #4,d3 or.w d3,d7 ; total color data reg .blue move.w (a0),d1 ; color from move.w (a1)+,d2 ; color to and.w #$00f,d1 ; just b and.w #$00f,d2 add.w d1,d1 add.w d2,d2 move.w 0(a2,d1.w),d3 move.w 0(a2,d2.w),d4 cmp.w d3,d4 ; if eq goto green beq.s .equal3 cmp.w d3,d4 blt.s .nert3 add.w #2,d3 move.w 0(a3,d3.w),d3 ; new color or.w d3,d7 ; total color data reg bra.s .save_col .nert3 sub.w #2,d3 move.w 0(a3,d3.w),d3 or.w d3,d7 bra.s .save_col .equal3 move.w 0(a3,d3.w),d3 ; new color or.w d3,d7 ; total color data reg .save_col move.w d7,(a0)+ ; save color dbf d0,.fade_lp rts .trans_lista dc.w 1*2,3*2,5*2,7*2,9*2,11*2,13*2,15*2,2*2,4*2,6*2,8*2,10*2,12*2,14*2,16*2 .col_list dc.w $0,$0,$8,$1,$9,$2,$a,$3,$b,$4,$c,$5,$d,$6,$e,$7,$f *************************************************************************** **************** * First init * **************** first_init clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,ustk move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,oldphys move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,oldlog move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,oldrez move.w #0,-(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea 12(sp),sp rts *************************************************************************** ********************* * fixa mfp djveln * ********************* save_mfp lea s_buffer,a0 move.l $120.w,(a0)+ move.l $70.w,(a0)+ move.l $68.w,(a0)+ move.w sr,(a0)+ move.b $fffffa07.w,(a0)+ move.b $fffffa09.w,(a0)+ move.b $fffffa21.w,(a0)+ move.b $fffffa1b.w,(a0)+ movem.l $ffff8240.w,d0-d7 movem.l d0-d7,(a0) rts set_mfp move.w #$2700,sr move.l #hbl_68000,$68.w move.l #vbl,$70.w move.l #lo_border,$120.w move.b #1,$fffffa07.w move.b #0,$fffffa09.w bset #0,$fffffa13.w bclr #3,$fffffa17.w move.b #198,$fffffa21.w move.b #8,$fffffa1b.w move.w #$2300,sr rts stop_mfp lea s_buffer,a0 move.l (a0)+,$120.w move.l (a0)+,$70.w move.l (a0)+,$68.w move.w (a0)+,sr move.b (a0)+,$fffffa07.w move.b (a0)+,$fffffa09.w bclr #0,$fffffa13.w bset #3,$fffffa17.w move.b (a0)+,$fffffa21.w move.b (a0)+,$fffffa1b.w movem.l (a0),d0-d7 movem.l d0-d7,$ffff8240.w rts *************************************************************************** ************* * init sam * ************* init_sam move.w #37,-(sp) ; sync screen trap #14 addq.l #2,sp move.w #$2700,sr bset #5,$fffffa07.w bset #5,$fffffa13.w move.l $0134.w,save_a move.l #change_sam,$0134.w ; adr to sub move.b #%10000001,$ffff8921.w lea order,a0 move.b #0,$fffffa1f.w move.b #0,$fffffa19.w move.b #1,$fffffa1f.w move.b #8,$fffffa19.w ; hndelserknar lge move.b 1(a0),$ffff8903.w move.b 2(a0),$ffff8905.w move.b 3(a0),$ffff8907.w move.b 5(a0),$ffff890f.w move.b 6(a0),$ffff8911.w move.b 7(a0),$ffff8913.w move.b #3,$ffff8901.w ; start dma move.w #$2300,sr rts *************************************************************************** *************** * change sam * *************** change_sam move.w #$2700,sr bclr #5,$fffffa0f.w move.l a0,-(sp) add.l #12,vilken_sam ; start end adr + times to play lea order,a0 add.l vilken_sam,a0 tst.l (a0) ; look if end bge.s order_ej_slut lea order,a0 move.l #0,vilken_sam order_ej_slut move.b #0,$fffffa1f.w move.b #0,$fffffa19.w move.b 11(a0),$fffffa1f.w move.b #8,$fffffa19.w ; hndelserknar lge move.b 1(a0),$ffff8903.w ; start adr move.b 2(a0),$ffff8905.w move.b 3(a0),$ffff8907.w move.b 1+4(a0),$ffff890f.w ; end adr move.b 2+4(a0),$ffff8911.w move.b 3+4(a0),$ffff8913.w move.l (sp)+,a0 move.w #$2300,sr rte *************************************************************************** **************** * Endif * **************** slut: jsr stop_mfp move.w #$2700,sr clr.b $fffffa19.w move.l save_a,$0134.w bclr #5,$fffffa07.w bclr #5,$fffffa13.w move.b #0,$ffff8901.w ; dma off move.w #$2300,sr move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.w #$777,$ff8240 move.w #$700,$ff8242 move.w #$70,$ff8244 move.w #$0,$ff8246 move.w #0,$ff820e move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 *************************************************************************** ***************** * VBI och VSYNC * ***************** vbl move.w #$2700,sr move.w #2,top_count move.w #1,vflag move.b #0,$fffffa1b.w move.l #soon_upper,$120.w move.b #100,$fffffa21.w move.b #4,$fffffa1b.w move.w #$2300,sr rte hbl_68000 subq.w #1,top_count beq.s .cont rte .cont move.b #0,$fffffa1b.w move.l #lo_border,$120.w move.b #228,$fffffa21.w move.b #8,$fffffa1b.w dcb.w 92-16,$4E71 move.b #0,$ffff820a.w addq.l #6,sp move.b #2,$ffff820a.w rte lo_border bclr #0,$fffffa0f.w move.b #0,$fffffa1b.w move.l #hhb2,$120.w move.b #1,$fffffa21.w move.b #8,$fffffa1b.w move.w #$2300,sr dcb.w 128,$4E71 rte hhb2 move.b #0,$ffff820a.w move.b #0,$fffffa1b.w move.b #2,$ffff820a.w addq.l #6,sp rte soon_upper move.w #$2100,sr dcb.w 200,$4E71 rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts *************************************************************************** ********************** * olika screenseters * ********************** change_screen move.l a0,-(sp) move.l screen,a0 move.l screen,screen+4 move.l a0,screen move.l (sp)+,a0 set_screen addq.w #1,flag cmp.w #2,flag blt set_screen2 move.w #0,flag move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w move.l screen+4,srn rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w move.l screen,srn rts *************************************************************************** section data screen dc.l scrblk,scrblk+168*365 border dc.w 0 s_super dc.l 0 top_count dc.w 34 ds.l 100 tom: dc.w 0 timer: dc.w 0 part_pointer: dc.w 0 storlek_x: dc.w 0 storlek_y: dc.w 0 lngd: dc.w 0 plus: dc.w 0 x: dc.w 136+7*16 y: dc.w 216*96 hp: ds.l 16 pointer: dc.w 0 jump_out: dc.w 0 fallanim: incbin "fallanim.dat" falldata: dc.w 64*0,64*4,10*2*2*4 dc.w 64*1,64*4,10*2*2*4 dc.w 64*0,64*3,20*2*2*4 dc.w 64*2,64*4,10*2*2*4 dc.w 64*1,64*3,20*2*2*4 dc.w 64*0,64*2,25*2*2*4 dc.w 64*3,64*4,10*2*2*4 dc.w 64*2,64*3,20*2*2*4 dc.w 64*1,64*2,25*2*2*4 dc.w 64*0,64*1,30*2*2*4 dc.w 64*4,64*4,10*2*2*4 dc.w 64*3,64*3,20*2*2*4 dc.w 64*2,64*2,25*2*2*4 dc.w 64*1,64*1,30*2*2*4 dc.w 64*0,64*0,34*2*2*4 dc.w 64*4,64*3,20*2*2*4 dc.w 64*3,64*2,25*2*2*4 dc.w 64*2,64*1,30*2*2*4 dc.w 64*1,64*0,34*2*2*4 dc.w 64*4,64*2,25*2*2*4 dc.w 64*3,64*1,30*2*2*4 dc.w 64*2,64*0,34*2*2*4 dc.w 64*4,64*1,30*2*2*4 dc.w 64*3,64*0,34*2*2*4 dc.w 64*4,64*0,34*2*2*4 cords: ds.w 10 start: dc.w 0 end: dc.w 0 anim: dc.w 0 anim2: dc.w 6*5 * Frdigroterade bitar uppt och nedt inc: set 0 bitar: rept 22 dc.w inc dc.w %1000000000000000 dc.w inc dc.w %1111111111111111 ds.w 14*2 dc.w inc dc.w %1100000000000000 dc.w inc dc.w %0111111111111111 ds.w 14*2 dc.w inc dc.w %1110000000000000 dc.w inc dc.w %0011111111111111 ds.w 14*2 dc.w inc dc.w %1111000000000000 dc.w inc dc.w %0001111111111111 ds.w 14*2 dc.w inc dc.w %1111100000000000 dc.w inc dc.w %0000111111111111 ds.w 14*2 dc.w inc dc.w %1111110000000000 dc.w inc dc.w %0000011111111111 ds.w 14*2 dc.w inc dc.w %1111111000000000 dc.w inc dc.w %0000001111111111 ds.w 14*2 dc.w inc dc.w %1111111100000000 dc.w inc dc.w %0000000111111111 ds.w 14*2 dc.w inc dc.w %1111111110000000 dc.w inc dc.w %0000000011111111 ds.w 14*2 dc.w inc dc.w %1111111111000000 dc.w inc dc.w %0000000001111111 ds.w 14*2 dc.w inc dc.w %1111111111100000 dc.w inc dc.w %0000000000111111 ds.w 14*2 dc.w inc dc.w %1111111111110000 dc.w inc dc.w %0000000000011111 ds.w 14*2 dc.w inc dc.w %1111111111111000 dc.w inc dc.w %0000000000001111 ds.w 14*2 dc.w inc dc.w %1111111111111100 dc.w inc dc.w %0000000000000111 ds.w 14*2 dc.w inc dc.w %1111111111111110 dc.w inc dc.w %0000000000000011 ds.w 14*2 dc.w inc dc.w %1111111111111111 dc.w inc dc.w %0000000000000001 ds.w 14*2 inc: set inc+4 endr picture: incbin "from.zom" incbin "sweden.zom" incbin "is.zom" incbin "back.zom" prerot: incbin "zoom.dat" zoom: low set 0 hi set 1 rept 16 dc.w low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low dc.w low,low,hi,low,low,low,hi,low,low,hi,low,low,low,hi,low,low,low,hi,low,low,low,hi,low,low,hi,low,low,low,hi,low,low,low,hi,low,low,hi,low,low,low,hi,low,low,low,hi,low,low,hi,low dc.w hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,hi,low,hi,low dc.w hi,hi,hi,low,hi,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,hi,low,hi,hi,hi,low low set low+1 hi set hi+1 endr part_order: dc.w 12 dc.l intro_fade1 dc.w 24 dc.l intro_fade2 dc.w 36 dc.l intro_fade3 dc.w 48 dc.l intro_fade4 dc.w 60 dc.l intro_fade5 dc.w 72 dc.l intro_fade6 dc.w 84 dc.l intro_fade7 dc.w 96 dc.l intro_fade8 dc.w 108 dc.l intro_fade9 dc.w 120 dc.l intro_fade10 dc.w 132 dc.l intro_fade11 dc.w 144 dc.l intro_fade12 dc.w 156 dc.l intro_fade13 dc.w 168 dc.l intro_fade14 dc.w 175 dc.l intro_fade15 dc.w 176 dc.l fadevit1 dc.w 177 dc.l fadevit2 dc.w 178 dc.l fadevit3 dc.w 179 dc.l fadevit4 dc.w 180 dc.l first_ana_logo dc.w 181 dc.l fadedownvit1 dc.w 182 dc.l fadedownvit2 dc.w 183 dc.l fadedownvit3 dc.w 184 dc.l fadedownvit4 dc.w 185 dc.l fadedownvit5 dc.w 186 dc.l fadedownvit6 dc.w 187 dc.l fadedownvit7 dc.w 350 dc.l fadedownvit8 dc.w 351 dc.l fadedownvit6 dc.w 352 dc.l fadedownvit4 dc.w 353 dc.l fadedownvit2 dc.w 354 dc.l fadevit4 dc.w 315 dc.l init_zoom dc.w 515 dc.l intro_zoom dc.w 516 dc.l fadevit4 dc.w 517 dc.l init_fall1 dc.w 860 dc.l fall1 dc.w 10000 dc.l dummy order ********* beg end times dc.l d,de,4-1 dc.l sam1a+128,sam1ae,1 dc.l sam1b+128,sam1be,1 dc.l sam2+128,sam2e,1 dc.l sam3+128,sam3e-630,1 dc.l sam2+128,sam2e,1 dc.l sam4+128,sam4e-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam2+128,sam2e,1 dc.l sam3+128,sam3e-630,1 dc.l sam2+128,sam2e,1 dc.l sam4+128,sam4e-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam5+128,sam5e,1 dc.l sam7+128,sam7e-630,1 dc.l sam11+128,sam11e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam8+128,sam8e,1 dc.l sam9+128,sam9e-630,1 dc.l sam8+128,sam8e,1 dc.l sam10+128,sam10e-630,1 dc.l sam2+128,sam2e,1 dc.l sam3+128,sam3e-630,1 dc.l sam2+128,sam2e,1 dc.l sam4+128,sam4e-630,1 dc.l sam13+128,sam13e,1 dc.l sam14+128,sam14e-630,1 dc.l sam13+128,sam13e,1 dc.l sam14+128,sam14e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam11+128,sam11e,1 dc.l sam8+128,sam8e,1 dc.l sam9+128,sam9e-630,1 dc.l sam8+128,sam8e,1 dc.l sam9+128,sam9e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam13+128,sam13e,1 dc.l sam14+128,sam14e-630,1 dc.l sam13+128,sam13e,1 dc.l sam14+128,sam14e-630,1 dc.l sam2+128,sam2e,1 dc.l sam3+128,sam3e-630,1 dc.l sam2+128,sam2e,1 dc.l sam4+128,sam4e-630,1 dc.l sam11+128,sam11e,1 dc.l sam16+128,sam16e,1 dc.l sam17+128,sam17e-630,1 dc.l sam16+128,sam16e,1 dc.l sam18+128,sam18e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam16+128,sam16e,1 dc.l sam17+128,sam17e-630,1 dc.l sam16+128,sam16e,1 dc.l sam18+128,sam18e-630,1 dc.l sam19+128,sam19e,1 dc.l sam19+128,sam19e,1 dc.l sam19+128,sam19e,1 dc.l sam20+128,sam20e,1 dc.l -1 * Saker att ladda frn disk analogga1: incbin "ana1.dat" analogga2: incbin "ana2.dat" sam1a incbin 'c:\oorfiles\1_a.avr' sam1ae sam1b incbin 'c:\oorfiles\1_b.avr sam1be sam2 incbin 'c:\oorfiles\2.avr' sam2e sam3 incbin 'c:\oorfiles\3.avr' sam3e sam4 incbin 'c:\oorfiles\4.avr' sam4e sam5 incbin 'c:\oorfiles\5.avr' sam5e sam6 incbin 'c:\oorfiles\6.avr' sam6e sam7 incbin 'c:\oorfiles\7.avr' sam7e sam8 incbin 'c:\oorfiles\8.avr' sam8e sam9 incbin 'c:\oorfiles\9.avr' sam9e sam10 incbin 'c:\oorfiles\10.avr' sam10e sam11 incbin 'c:\oorfiles\11.avr' sam11e sam12a incbin 'c:\oorfiles\12_a.avr' sam12ae sam12b incbin 'c:\oorfiles\12_b.avr' sam12be sam13 incbin 'c:\oorfiles\13.avr' sam13e sam14 incbin 'c:\oorfiles\14.avr' sam14e sam15 incbin 'c:\oorfiles\15.avr' sam15e sam16 incbin 'c:\oorfiles\16.avr' sam16e sam17 incbin 'c:\oorfiles\17.avr' sam17e sam18 incbin 'c:\oorfiles\18.avr' sam18e sam19 incbin 'c:\oorfiles\19.avr' sam19e sam20 incbin 'c:\oorfiles\20.avr' sam20e d ds.b 1000 de section bss scrblk ds.b 2*168*365 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 s_buffer ds.b 50 s_pal ds.w 16 hsync ds.w 1 stack ds.l 1 vflag ds.w 1 part: ds.l 1 next: ds.w 1 flag: ds.w 1 srn: ds.l 1 savessp ds.l 1 vilken_sam ds.l 1 save_a ds.l 1 xfall: ds.w 1 yfall: ds.w 1 stop: ds.w 1 x2fall: ds.w 1 y2fall: ds.w 1 stop2: ds.w 1 tabell: ds.w 16 lines: ds.l 512 end e.l $68.w,(a0)+ move.w sr,(a0)+ move.b $fffffa07.w,(a0)+ move.b $fffffa09.w,(a0)+ move.b $fffffa21.w,(a0)+ move.b $fffffa1b.w,(a0)+ movem.l $ffff8240.w,d0-d7 movem.l d0-d7,(a0) rts set_mfp move.w #$2700,sr move.l #hbl_68000,$68.w move.l #vbl,$70.w move.l #lo_border,$120.w move.b #1,$fffffa07.w move.b #0,$fffffa09.w bset #0,$fffffa13.w bclr #3,$fffffa17.w move.b #198,$fffffa21.w move.b #8,$fffffa1b.w move.w #$2300,sr rts stop_mfp lea s_buffer,a0 move.l (a0)+,$120.w move.l (a0)+,$70.w move.l (a0)+,$68.w move.w (a0)+,sr move.b (a0)+,$fffffa07.w move.b (a0)+,$fffffa09.w bclr #0,$fffffa13.w bset #3,$fffffa17.w move.b (a0)+,$fffffa21.w move.b (a0)+,$fffffa1b.w movem.l (a0),d0-d7 movem.l d0-d7,$ffff8240.w rts *************************************************************************** ************* * init sam * ************* init_sam move.w #37,-(sp) ; sync screen trap #14 addq.l #2,sp move.w #$2700,sr bset #5,$fffffa07.w bset #5,$fffffa13.w move.l $0134.w,save_a move.l #change_sam,$0134.w ; adr to sub move.b #%10000001,$ffff8921.w lea order,a0 move.b #0,$fffffa1f.w move.b #0,$fffffa19.w move.b #1,$fffffa1f.w move.b #8,$fffffa19.w ; hndelserknar lge move.b 1(a0),$ffff8903.w move.b 2(a0),$ffff8905.w move.b 3(a0),$ffff8907.w move.b 5(a0),$ffff890f.w move.b 6(a0),$ffff8911.w move.b 7(a0),$ffff8913.w move.b #3,$ffff8901.w ; start dma move.w #$2300,sr rts *************************************************************************** *************** * change sam * *************** change_sam move.w #$2700,sr bclr #5,$fffffa0f.w move.l a0,-(sp) add.l #12,vilken_sam ; start end adr + times to play lea order,a0 add.l vilken_sam,a0 tst.l (a0) ; look if end bge.s order_ej_slut lea order,a0 move.l #0,vilken_sam order_ej_slut move.b #0,$fffffa1f.w move.b #0,$fffffa19.w move.b 11(a0),$fffffa1f.w move.b #8,$fffffa19.w ; hndelserknar lge move.b 1(a0),$ffff8903.w ; start adr move.b 2(a0),$ffff8905.w move.b 3(a0),$ffff8907.w move.b 1+4(a0),$ffff890f.w ; end adr move.b 2+4(a0),$ffff8911.w move.b 3+4(a0),$ffff8913.w move.l (sp)+,a0 move.w #$2300,sr rte *************************************************************************** **************** * Endif * **************** slut: jsr stop_mfp move.w #$2700,sr clr.b $fffffa19.w move.l save_a,$0134.w bclr #5,$fffffa07.w bclr #5,$fffffa13.w move.b #0,$ffff8901.w ; dma off move.w #$2300,sr move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.w #$777,$ff8240 move.w #$700,$ff8242 move.w #$70,$ff8244 move.w #$0,$ff8246 move.w #0,$ff820e move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 *************************************************************************** ***************** * VBI och VSYNC * ***************** vbl move.w #$2700,sr move.w #2,top_count move.w #1,vflag move.b #0,$fffffa1b.w move.l #soon_upper,$120.w move.b #100,$fffffa21.w move.b #4,$fffffa1b.w move.w #$2300,sr rte hbl_68000 subq.w #1,top_count beq.s .cont rte .cont move.b #0,$fffffa1b.w move.l #lo_border,$120.w move.b #228,$fffffa21.w move.b #8,$fffffa1b.w dcb.w 92-16,$4E71 move.b #0,$ffff820a.w addq.l #6,sp move.b #2,$ffff820a.w rte lo_border bclr #0,$fffffa0f.w move.b #0,$fffffa1b.w move.l #hhb2,$120.w move.b #1,$fffffa21.w move.b #8,$fffffa1b.w move.w #$2300,sr dcb.w 128,$4E71 rte hhb2 move.b #0,$ffff820a.w move.b #0,$fffffa1b.w move.b #2,$ffff820a.w addq.l #6,sp rte soon_upper move.w #$2100,sr dcb.w 200,$4E71 rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts *************************************************************************** ********************** * olika screenseters * ********************** change_screen move.l a0,-(sp) move.l screen,a0 move.l screen,screen+4 move.l a0,screen move.l (sp)+,a0 set_screen addq.w #1,flag cmp.w #2,flag blt set_screen2 move.w #0,flag move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w move.l screen+4,srn rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w move.l screen,srn rts *************************************************************************** section data screen dc.l scrblk,scrblk+168*365 border dc.w 0 s_super dc.l 0 top_count dc.w 34 ds.l 100 tom: dc.w 0 timer: dc.w 0 part_pointer: dc.w 0 storlek_x: dc.w 0 storlek_y: dc.w 0 lngd: dc.w 0 plus: dc.w 0 x: dc.w 136+7*16 y: dc.w 216*96 hp: ds.l 16 pointer: dc.w 0 jump_out: dc.w 0 fallanim: incbin "fallanim.dat" falldata: dc.w 64*0,64*4,10*2*2*4 dc.w 64*1,64*4,10*2*2*4 dc.w 64*0,64*3,20*2*2*4 dc.w 64*2,64*4,10*2*2*4 dc.w 64*1,64*3,20*2*2*4 dc.w 64*0,64*2,25*2*2*4 dc.w 64*3,64*4,10*2*2*4 dc.w 64*2,64*3,20*2*2*4 dc.w 64*1,64*2,25*2*2*4 dc.w 64*0,64*1,30*2*2*4 dc.w 64*4,64*4,10*2*2*4 dc.w 64*3,64*3,20*2*2*4 dc.w 64*2,64*2,25*2*2*4 dc.w 64*1,64*1,30*2*2*4 dc.w 64*0,64*0,34*2*2*4 dc.w 64*4,64*3,20*2*2*4 dc.w 64*3,64*2,25*2*2*4 dc.w 64*2,64*1,30*2*2*4 dc.w 64*1,64*0,34*2*2*4 dc.w 64*4,64*2,25*2*2*4 dc.w 64*3,64*1,30*2*2*4 dc.w 64*2,64*0,34*2*2*4 dc.w 64*4,64*1,30*2*2*4 dc.w 64*3,64*0,34*2*2*4 dc.w 64*4,64*0,34*2*2*4 cords: ds.w 10 start: dc.w 0 end: dc.w 0 anim: dc.w 0 anim2: dc.w 6*5 * Frdigroterade bitar uppt och nedt inc: set 0 bitar: rept 22 dc.w inc dc.w %1000000000000000 dc.w inc dc.w %1111111111111111 ds.w 14*2 dc.w inc dc.w %1100000000000000 dc.w inc dc.w %0111111111111111 ds.w 14*2 dc.w inc dc.w %1110000000000000 dc.w inc dc.w %0011111111111111 ds.w 14*2 dc.w inc dc.w %1111000000000000 dc.w inc dc.w %0001111111111111 ds.w 14*2 dc.w inc dc.w %1111100000000000 dc.w inc dc.w %0000111111111111 ds.w 14*2 dc.w inc dc.w %1111110000000000 dc.w inc dc.w %0000011111111111 ds.w 14*2 dc.w inc dc.w %1111111000000000 dc.w inc dc.w %0000001111111111 ds.w 14*2 dc.w inc dc.w %1111111100000000 dc.w inc dc.w %0000000111111111 ds.w 14*2 dc.w inc dc.w %1111111110000000 dc.w inc dc.w %0000000011111111 ds.w 14*2 dc.w inc dc.w %1111111111000000 dc.w inc dc.w %0000000001111111 ds.w 14*2 dc.w inc dc.w %1111111111100000 dc.w inc dc.w %0000000000111111 ds.w 14*2 dc.w inc dc.w %1111111111110000 dc.w inc dc.w %0000000000011111 ds.w 14*2 dc.w inc dc.w %1111111111111000 dc.w inc dc.w %0000000000001111 ds.w 14*2 dc.w inc dc.w %1111111111111100 dc.w inc dc.w %0000000000000111 ds.w 14*2 dc.w inc  dc.w %1111111111111110 dc.w inc dc.w %0000000000000011 ds.w 14*2 dc.w inc dc.w %1111111111111111 dc.w inc dc.w %0000000000000001 ds.w 14*2 inc: set inc+4 endr picture: incbin "from.zom" incbin "sweden.zom" incbin "is.zom" incbin "back.zom" prerot: incbin "zoom.dat" zoom: low set 0 hi set 1 rept 16 dc.w low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low,low dc.w low,low,hi,low,low,low,hi,low,low,hi,low,low,low,hi,low,low,low,hi,low,low,low,hi,low,low,hi,low,low,low,hi,low,low,low,hi,low,low,hi,low,low,low,hi,low,low,low,hi,low,low,hi,low dc.w hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,low,hi,hi,low,hi,low dc.w hi,hi,hi,low,hi,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,low,hi,hi,hi,hi,low,hi,hi,hi,low low set low+1 hi set hi+1 endr part_order: dc.w 12 dc.l intro_fade1 dc.w 24 dc.l intro_fade2 dc.w 36 dc.l intro_fade3 dc.w 48 dc.l intro_fade4 dc.w 60 dc.l intro_fade5 dc.w 72 dc.l intro_fade6 dc.w 84 dc.l intro_fade7 dc.w 96 dc.l intro_fade8 dc.w 108 dc.l intro_fade9 dc.w 120 dc.l intro_fade10 dc.w 132 dc.l intro_fade11 dc.w 144 dc.l intro_fade12 dc.w 156 dc.l intro_fade13 dc.w 168 dc.l intro_fade14 dc.w 175 dc.l intro_fade15 dc.w 176 dc.l fadevit1 dc.w 177 dc.l fadevit2 dc.w 178 dc.l fadevit3 dc.w 179 dc.l fadevit4 dc.w 180 dc.l first_ana_logo dc.w 181 dc.l fadedownvit1 dc.w 182 dc.l fadedownvit2 dc.w 183 dc.l fadedownvit3 dc.w 184 dc.l fadedownvit4 dc.w 185 dc.l fadedownvit5 dc.w 186 dc.l fadedownvit6 dc.w 187 dc.l fadedownvit7 dc.w 350 dc.l fadedownvit8 dc.w 351 dc.l fadedownvit6 dc.w 352 dc.l fadedownvit4 dc.w 353 dc.l fadedownvit2 dc.w 354 dc.l setvit dc.w 315 dc.l init_zoom dc.w 515 dc.l intro_zoom dc.w 516 dc.l fadevit4 dc.w 517 dc.l init_fall1 dc.w 860 dc.l fall1 dc.w 10000 dc.l dummy order ********* beg end times dc.l d,de,4-1 dc.l sam1a+128,sam1ae,1 dc.l sam1b+128,sam1be,1 dc.l sam2+128,sam2e,1 dc.l sam3+128,sam3e-630,1 dc.l sam2+128,sam2e,1 dc.l sam4+128,sam4e-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam2+128,sam2e,1 dc.l sam3+128,sam3e-630,1 dc.l sam2+128,sam2e,1 dc.l sam4+128,sam4e-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam5+128,sam5e,1 dc.l sam7+128,sam7e-630,1 dc.l sam11+128,sam11e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam8+128,sam8e,1 dc.l sam9+128,sam9e-630,1 dc.l sam8+128,sam8e,1 dc.l sam10+128,sam10e-630,1 dc.l sam2+128,sam2e,1 dc.l sam3+128,sam3e-630,1 dc.l sam2+128,sam2e,1 dc.l sam4+128,sam4e-630,1 dc.l sam13+128,sam13e,1 dc.l sam14+128,sam14e-630,1 dc.l sam13+128,sam13e,1 dc.l sam14+128,sam14e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam11+128,sam11e,1 dc.l sam8+128,sam8e,1 dc.l sam9+128,sam9e-630,1 dc.l sam8+128,sam8e,1 dc.l sam9+128,sam9e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam13+128,sam13e,1 dc.l sam14+128,sam14e-630,1 dc.l sam13+128,sam13e,1 dc.l sam14+128,sam14e-630,1 dc.l sam2+128,sam2e,1 dc.l sam3+128,sam3e-630,1 dc.l sam2+128,sam2e,1 dc.l sam4+128,sam4e-630,1 dc.l sam11+128,sam11e,1 dc.l sam16+128,sam16e,1 dc.l sam17+128,sam17e-630,1 dc.l sam16+128,sam16e,1 dc.l sam18+128,sam18e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam5+128,sam5e,1 dc.l sam6+128,sam6e-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam12a+128,sam12ae,1 dc.l sam12b+128,sam12be-630,1 dc.l sam16+128,sam16e,1 dc.l sam17+128,sam17e-630,1 dc.l sam16+128,sam16e,1 dc.l sam18+128,sam18e-630,1 dc.l sam19+128,sam19e,1 dc.l sam19+128,sam19e,1 dc.l sam19+128,sam19e,1 dc.l sam20+128,sam20e,1  dc.l -1 * Saker att ladda frn disk analogga1: incbin "ana1.dat" analogga2: incbin "ana2.dat" sam1a incbin 'c:\oorfiles\1_a.avr' sam1ae sam1b incbin 'c:\oorfiles\1_b.avr sam1be sam2 incbin 'c:\oorfiles\2.avr' sam2e sam3 incbin 'c:\oorfiles\3.avr' sam3e sam4 incbin 'c:\oorfiles\4.avr' sam4e sam5 incbin 'c:\oorfiles\5.avr' sam5e sam6 incbin 'c:\oorfiles\6.avr' sam6e sam7 incbin 'c:\oorfiles\7.avr' sam7e sam8 incbin 'c:\oorfiles\8.avr' sam8e sam9 incbin 'c:\oorfiles\9.avr' sam9e sam10 incbin 'c:\oorfiles\10.avr' sam10e sam11 incbin 'c:\oorfiles\11.avr' sam11e sam12a incbin 'c:\oorfiles\12_a.avr' sam12ae sam12b incbin 'c:\oorfiles\12_b.avr' sam12be sam13 incbin 'c:\oorfiles\13.avr' sam13e sam14 incbin 'c:\oorfiles\14.avr' sam14e sam15 incbin 'c:\oorfiles\15.avr' sam15e sam16 incbin 'c:\oorfiles\16.avr' sam16e sam17 incbin 'c:\oorfiles\17.avr' sam17e sam18 incbin 'c:\oorfiles\18.avr' sam18e sam19 incbin 'c:\oorfiles\19.avr' sam19e sam20 incbin 'c:\oorfiles\20.avr' sam20e d ds.b 1000 de section bss scrblk ds.b 2*168*365 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 s_buffer ds.b 50 s_pal ds.w 16 hsync ds.w 1 stack ds.l 1 vflag ds.w 1 part: ds.l 1 next: ds.w 1 flag: ds.w 1 srn: ds.l 1 savessp ds.l 1 vilken_sam ds.l 1 save_a ds.l 1 xfall: ds.w 1 yfall: ds.w 1 stop: ds.w 1 x2fall: ds.w 1 y2fall: ds.w 1 stop2: ds.w 1 tabell: ds.w 16 lines: ds.l 512 end  0@P`p=G? @@~ '~`@7Z@tx (`?h@hppTU @@=%PC>W>pp7|K$  `U PD<@`@ xJ`@@8@0H < p0 &%@@z>pm@=<~aZA: @Vz!w .0u@><7Xg?3#B<W;8G<4x+Tv6>xx`?@_?H |p`@ |0 G@  p4? p ?`^׀ 00 7@@@π P2`  w!  h(I/$ >4| #8~>  `h@G@< g8@ ~|3 pOC8!v@@0x (@р.=x`?p 0?&*<op+ .`\><<`41G@?~<nx><>(o p8|z~<g ? pxz x<>0p@<P? ~<#x|?vD |I<#x~?l |xȀ<xQ>~P %rx| PHx0 " x$#d k>P@D;  dD^<0xw @ xHx@ PP1Џ  p .! `!@ C> cP!pp8|bN @ 0|%5@  j)++Ԁ@E=TV ீ[P4@@xxu .߀?.t|A?A> 6}@?U* 1T>@ QT.& *`@?p0~ARW0@?` `@? `/.~@5_ @?>5Q@><|@* @?|@U!`@*t`@. @@@IQ8 !X7*"?G< D <19@/@xG0x*j@p0@ U:"`E?EP ;UU?`w**||>U7>~|*߀?(*||| P~P|t  | (TFPX  ."@ "S@Gp<3 d ({/+ih@ @?7 h @+ /gp@>o@?**|/@ ?1TT,`>h 88>` 4 <~|pp> $@B| x?@> S?|E@>B<PwO? X ;" @?xJ7?~ XPPnS*P @P+PXpp`?.SBPd` @@>WV(U 5 @@`/| 0&|=B?$P p` =x* 0ʰ 3K;t/uP>mM=  ^?H0 z|T8'wx1 8z P @A86' $x L0o.Z?p[>H@>H0\ P4|| p~~R0pxPp|6_@R  (P?R _T?&?:V@ ?`?xv<60 ~  T@*O?@`<~`y@@8 l@@|` _T|Px@x%} X'p@p~R*_?  P!!a'h @?UЀ!P< GG8G?TUU@@Rf< @<N 0'C 8 ?~DxP<xO@L4uj`P B<!d T pE@|Z$   WTD@|x <X ? X(Tj?Pd<@ 0 pXy%xՑ@@ p@ !X > _X pAϳ? $@`@ A>)@ pUP  " @@ >8' p1N? 0 8@9>|'n 8g?o$,<H  8;'~0@/t u$0}C@@@8ppP 0O?<~?b"~/ x o @`o P 07|0@/@<U` ` @Q Q 1?x?DD8;@p@48   J *xx2U0U u@@@??P@ `Q Q 1pp@A?> H`p~+ # C #Xpp*U_<=r  5 U 5  |V@<b  k +pd;PTD8T@?  5  5 J?5 x?`@`x(* *@@jazTxXp   5 W~E  N;@G@p}=Php80      ~j*jT@< @?TUZU\*p`4@ @``` j* 0 $0x@7px```O?ee @`` ~@ !h|u5 C hG|U5 ??T+|?@=?@TuTV W6@<|`" ܪUj||?% TVWT(||/Z@|8|x?x<xp~xp8?00x? <~? ~? ?  @@@06601030305800 1 2# F0110030 9[...................................................]001  Fraktalerochkaos EttspecialarbeteavOskarBurmanT3B Introduktion Sominbitendatavetareharjagmngagngerunderminatimmar framfrdatornstttpfraktaler,monsterkurvorochkaos bilder.Eftersomjagprogrammerarrelativtmycketsbrjadejag funderapvilkaalgoritmersombyggdeuppfraktalernaochhur mansjlvskullekunnaskrivaprogramsomritarfraktalerna. Vadrenfraktal? Iteration Enfraktalruppbyggdavenalgoritmsommaniteoretiskt uppreparenondligtantalgnger,ipraktikensttermandremot stoppnriterationernaintegerngonmersynbarfrndring. Sjlvlikformighet Enfraktalrsjlvlikformigvilketinnebrattdenserdess ursprungligaformterkommermedgivnaintervallnrman frstorarden,mankanockssgaattdenspeglarsigsjlvisig sjlv.Urdenklassiskageometrinkanvitextaencirkel ochtittapden.Nrvifrstorardenkommerdenmerochmeratt brjataformenavenrtlinje,denursprungligaformen (cirkeln)terkommerinte,vilketdengrhosfraktalen. Dimensionen Mandelbrotsdefinitionavenfraktalrenmngd"frvilken HausdorffBesicovich-dimensionenverstigerdentopologiska dimensionen"(Mandelbrot,TheFractalGeometryofNature). Medtopologiskdimensionmenasdetdetvanligadimensions begreppet.Dettaralltidettheltal,texharpunktendimensionen 0,linjendimensionen1,ytandimensionen2ochkroppen dimensionen3.Frfraktalalenbehverintedimensionenvaraett heltal,denrnstanalltidstrrendenvanligadimesionen. Hurkanmandrknauthurmngadimensionerettfremlhar? Ettsttattrknaprattunderskavadsomskervid skalfrndringar. Enstrckamedlngden1kan,givetettheltalb,delasuppiN=b delarsomharlngdenr=1/blngdenheter.Pssttkanen kvadratdelasuppiN=b^2delarmedsidolngdenr=1/bochkubeni N^3delkubermedsidanr=1/b.  FrkubengllerdattN=(1/r)^3elleratt3=logN*log(1/r) DennaformelnD=logN*log(1/r)kansedananvndasfrattberkna enfigursdimension. Tex.sgllerdfrstrckanattD=log2/log2=1ochfr kvadratenattD=log4/log2=2 Historia Matematikenomfraktalernarrelativtnymenettexempelpatt grundtankenharfunnitstidigarert.exettstyckeurentextav JonathanSwift: Allts,harnaturvetarenfunnitenloppa Harmindrelopporsomphonomlever; ochdessabitsavnnumindreloppor; Sgrdetvidare,ondligen. HrharalltsSwiftbeskrivitettslagsfraktalfrloppvenom detkanskeintevarmenatpdetsttet. Kochkurvan Ibrjanp1900-taletbeskrevdensvenskematematikernHelgevon Kochenfraktalvarstypsenarefttnamnetmonsterkurvor. Kochsmonsterkurvainleddesmedentriangeldrvarjesidahar lngden1.Imittenavvarjesidalggermantillennymindre liksidigtriangelmedlngden1/3osv.tillsmanfrngontingsom skullekunnavaraensnflinga.Algoritmenitererasettondligt antalgnger. BILDPKOCHKURVAIOLIKASTEG Cantormngden EnannantypavmonsterkurvarCantormngdensomruppkallad efterdentyskematematikernGeorgeCantor(1845-1918).Encantor mngdfrmanommanfrnenlinjemedstrckan1tarbortden mitterstatredjedelen,ochfrndetvkvarvarandelinjerna,tar bortdessmitterstatredjedelarosv. BILDPCANTORMNGD Peanokurva Peanokurvanerhllsgenomenkvadratsomdelasiniodelarvarav desomliggerimittenpvarjesidaflyttasuttenstrckasomr likamedentredjedelavdenursprungligakvadratenssida.Denna processupprepasochkvadratenblirettrutmnstersomtillslut barabestravenkvadratsomrvriden45graderochsomr uppbyggdavettfinmaskigtnt. BILDPPEANOKURVA Siepinskitriangeln SistavmonsterkurvornasomjagtaruppharviSierpinski triangelnsomruppkalladefterdenpolskamatematikernWaclaw Sierpinski.Sjlvasierpinskitriangelnkantnkasvaraen Cantormngdsomliggeriplanet.Manutgrifrnentriangel sedanfrbindermanmittpunktenpdenursprungligatriangelns sidorochfrpssttfyradeltrianglarvaravdenmittersta tasbort.Dennaproccessfortstterochmanfrensdan formationsomvisaspbilden. BILDPSIERPINSKITRIANGEL Fraktaltransformation Viharhitilsbeskrivitdiskuteratfraktalenifomen"mantar bortdenmitterstatredjedelen..."osv.Mankangivetvisven berknafraktalensform,Algoritmenfrdformenaven transformation. Allafraktalerbildasavtransformationerochmanbrukartalaom linjratransformationerochicke-linjratransformationer. Egentligenskallmananvndaordetaffinatransformationer istllenfrlinjra.Affinbetyderinommatematikenett geometrisktproblemsombehandlaegenskapersomrofrndrade underaffinavbildning. Linjratransformationer Nrenaffintransformationanvndspenfigurfrflyttarden punkternaifigurentillettnyttlge.Mankandessutomrotera ellerpannatsttfrandraobjektet.Omtransformationen upprepasettondligtantalgngerkommerslutproduktenattvara enfraktalundervissafrutsttningar. Affinatransformationeranvnderiprincipsammaformelfratt frflyttapunkternaiplanet.Lt(X,Y)varaenpunktiursprungs figurenoch(Xny,Yny)denfrflyttadepunktenskoordinater. Mankanddefineratransformationenmedhjlpavtvekvationer: Xny=aX+bY+e Yny=cX+dY+f dra,c,b,d,eochfrtransformationenskonstanter. Enaffintransformationrlinjristriktbemrkelsebaraom e=f=0. Vikantextillmpatransformationen: Xny=0,5Y Yny=-0,5X pkoordinaternafrettstortantalpunkterientriangel framtrderennytriangelsomharvridits90graderochrmindre ndenursprungliga.Fraktalamnsterkanframtrdaomflera transformationertillmpasettstortantalgnger. Mngaolikateknikerharutvecklatsfrattsnabbauppdenna sortstransformation.TexsharMichaelF.Barnsleyutvecklaten metodsomgrutpattslumvisvaldapunktertransformeras. DennametodharblivitkalladIFSfraktal-"IterationFunction System". Uppstllningen-somBarnsleykallarIFS-kod-ger koefficienternaitretransformationer: a b c d e f ---------------------------------- 1. 0,5 0 0 0,5 0 0 2. 0,5 0 0 0,5 0 0,5 3. 0,5 0 0 0,5 0,5 0,5 Vistartaripunkten(X,Y)somkanvaravilkensomhelst.Sedan vljervislumpvisvilkenavdetretransformationernasomskall utfrasochgerXochYdenyavrdernaXnyochYny.Resultatet blirdensierpinskitriangel. Genomattfrndratransformationsformlernakanviskapaolika fraktaler.Meddessavrdenfrvitexenormbunke. a b c d e  f ----------------------------------------------------------- 1. 0 0 0 0,17 0 0 2. 0,84962 0,0255 -0,0255 0,84962 0 3,0 3. -0,1554 0,235 0,19583 0,18648 0 1,2 4. 0,1554 -0,235 0,19583 0,18648 0 3,0 Vilkenbildsomhelstkanframstllasmedhjlpavettantal fraktalatransformationermenarBarnsley.Problemetratt bestmmatransformationsparametrarna(IFS-koden). BILDPHAGTORNSLV Vifrskertexavbildaetthagtornslv.Vimstealtshittaen serieaffinatransformationersomgerenavbildningavlvet.Vi placerardrfrutenbildplvetverettmillimeterpapper. TrepunkterA,BochCidentifierasochderaskoordinaterplockas ut.Idettafallglleratt A=(0;3) B=(-4,47;7,9) C=(-1,05;13,45) Nstastegrattplaceraenfrminskadkopiaavlvetp ursprungslvetsattendelavdettatckssvlsommjligt. KoordinaternaAny,BnyochCnynoteras:  Any=(0,3;6,1) Bny=(-3,15;9,25) Cny=(-1,05;13,45) Drmedkanvilsadenfrstauppsttningenparametrargenomatt sttaindessavrdenitranformationsformeln: 0,2=a*0+3*b+e 6,1=c*0+3*d+f -3,15=a*-4,47+b*7,9+e 9,25=c*-4,47+d*7,9+f -1,05=a*-1,05+b*13,45+e 13,45=c*-1,05+d*13,45+f Klammerruntdetta Lserviuta,b,c,d,eochfurdessaekvationerharvifrsta transformationsraden. Ettandrangotmerfrminskatlvplacerasinedravnstradelen avursprungslvet,riktatsnettupptvnster.Koordinaternafr punkternanoteras. Any2=(-0,8;4,22) Bny2=(-4,03;4,74) Cny2=(-4,33;8,02) Etttredjelgsiniurspungslvetshgradel. Any3=(-0,13;3,85) Bny3=(-0,37;7,07) Cny3=(2,65;8,17) Detfjrdeplaceraslngstneriursprungslvet. Any4=(0;3) Bny4=(-2,2;5,25) Cny4=(-0,65;8,1) Slutligenplacerarvietthoptrycktlvsomstjlk. Any5=(-0,1;2) Any5=(-0,05;2,3) Any4=(0;3) Varochenavdessageruppehovavettekvationssystemsomkan lsasochIFS-kodenerhlls. a b c d e f -------------------------------------------------------------- 1. 0,69485 -0,0498 0,07452 0,7108 0,3494 3,9675 2. 0,3959 -0,298 0,3162 0,3955 0,094 3,0335 3. 0,38805 0,305 -0,30027 0,3832 -1,0451 2,7003 4. 0,47647 -0,0143 0,0414 0,49695 0,09298 1,5091 5. 0,0 0,00009 0,0581 -0,08986 0,02847 3,2696 Hrnedanvisasresultatet. BILDpUrsprungslvetochFraktalLvet Icke-linjrtransformation Fraktalerkanocksskapasmedhjlpavickelinjra transformationer,dvsentransformationsomharettgradtalsom rhgrenfrstagraden. Enintressanticke-linjrtransformationr: f(X)=AX(1-X)dr00(Arenkonstant) Transformationenstuderadesfrstagngen1906avPierreFatou. Ekvationenkananvndassommodellverbiologiskapopulationer. Xrettmttppopulationensstorlekvidetttillflleochf(X) blirdstorlekenvidettsenaretillflle.Xtilldelasvrdet f(X)ochberkningenupprepasettstortantalgnger.Pdetta sttkanmanberknavadsomhndermedpopulationenvidolika ingngsvrdenpXochA. OmA<1svisardetsigattf(X)grmotnollochpopulationen utplnas,omdremot14sgrZnmotondligheten.Detta kontroleraseftervarjeIterationfrattsparatidnrman berknarpunkterna.Vigrnuvertilldenkanskemestknda fraktalenavdemalla,nmligenMandelbrotmngden Mandelbrotmngden  MandelbrotmngdenliknarJuliamngdenmycketochutgrfrnsamma grundlggandeformel,Zn=Z(n-1)^2+c,mentillskillnadmot juliamngdenshllsinteckonstantutanistllensttsZntill 0ochvisersedanhurZnutvecklasvidolikavrdenpc. Nrviritaruppmandelbrotmngdensplottarviallapunkter drZnintegrmotondligheten.Iblandkandetvenvaraav intresseattnoterahursnabbtsomZngrmotondligheten,dvs hursnabbtabs(Zn)blirstrren2ochrknauthurmnga iterationersombehvs.NrPochQnrmarsigvrdendrZninte grmotondlighetenkarantaletiterationermanmsteutfra. Hurmngaiterationermansttersomgrnsinnanmanbestmmersig frattpunktengrmotondlighetenvarierarmedfrstorings nivnochbildskrmensprestanda.Depunktersomliggerp grnslinjenavpunktersomgrmotondlighetenochdesominte grdetrenfraktalochdennagrnslinjerondligtlng, Omrdetsomgrmotondlighetenkallasdfren Mandelbrotmngd. Standardformenavenmandelbrotfraktalvisashrnedanoch denharettPvrdesomstrckersigfrn-1,5till1,5ochettQ vrdefrn-1,2till1,2.Pbildenharvenolikafrgersatts pskrmenfrmedhnsynphurmngaiterationersomkrvdes. Pdenfljandesidanharjagvaltattginnrmarep mandelbrotmngdenochviserdattdenuppvisarenotrolig variationochuppreparsigsllan. Bronskrrelseochslumpfraktaler. DenBrownskarrelsenbeskrevsfrfrstagngen1827avden skotskakemistenRobertBrown.Hanhadestuderatmycketsmfasta partiklarienvtskaochkommitframtillattdedrrsigp ettheltslumpmssigtstt.Dettaberorpattpartiklarnars smattdepverkasavvtskemolekylernastermiskarrelse.Detta dptehanslundatillBrownskrrelse. Mandelbrotkomframtillattdetvenrmjligtattmed fraktalerefterliknabrownskrrelsegenomfljandealgoritm: MittpunktenpstrckanABavstts,vinkelrtmotAB,enstrcka somr1/2ABantingenupptellernedt,heltslumpmssigtoch dennapunktkallasfrC.TvnyalinjerharbildatsACochBC. Dennaalgoritmfortgrochresultatetrenfraktal.Denna fraktalkanmedlitefantasiislutetseutsomenbergskedjai fjrran. Bildpdettasomjagfrklarariolikasteg. Dennafraktalsdimensionkansedanberknaspsammasttsom jagtidigareberknadeenfraktalsdimension.Vierstter strckanmellanABmedtvstrckorACochBC.DAB=1r r=AC=BC=sqr(1/2)=>N=2.FraktalensdimensionblirslundaD=log 2/logsqr(2)=2.Dennafraktalraltsyttckande.Dess topologiskadimensionremellertid1,denkansessomenslags deformeradlinje.Omviistlletfrattsttadennyapunktenp avstndetAB/2stterdenpettmindreavstndsfrvien dimensionsomr10(Arenkonstant) Transformationenstuderadesfrstagngen1906avPierreFatou. Ekvationenkananvndassommodellverbiologiskapopulationer. Xrettmttppopulationensstorlekvidetttillflleochf(X) blirdstorlekenvidettsenaretillflle.Xtilldelasvrdet f(X)ochberkningenupprepasettstortantalgnger.Pdetta sttkanmanberknavadsomhndermedpopulationenvidolika ingngsvrdenpXochA. OmA<1svisardetsigattf(X)grmotnollochpopulationen utplnas,omdremot14sgrZnmotondligheten.Detta kontroleraseftervarjeIterationfrattsparatidnrman berknarpunkterna.Vigrnuvertilldenkanskemestknda fraktalenavdemalla,nmligenMandelbrotmngden Mandelbrotmngden  MandelbrotmngdenliknarJuliamngdenmycketochutgrfrnsamma grundlggandeformel,Zn=Z(n-1)^2+c,mentillskillnadmot juliamngdenshllsinteckonstantutanistllensttsZntill 0ochvisersedanhurZnutvecklasvidolikavrdenpc. Nrviritaruppmandelbrotmngdensplottarviallapunkter drZnintegrmotondligheten.Iblandkandetvenvaraav intresseattnoterahursnabbtsomZngrmotondligheten,dvs hursnabbtabs(Zn)blirstrren2ochrknauthurmnga iterationersombehvs.NrPochQnrmarsigvrdendrZninte grmotondlighetenkarantaletiterationermanmsteutfra. Hurmngaiterationermansttersomgrnsinnanmanbestmmersig frattpunktengrmotondlighetenvarierarmedfrstorings nivnochbildskrmensprestanda.Depunktersomliggerp grnslinjenavpunktersomgrmotondlighetenochdesominte grdetrenfraktalochdennagrnslinjerondligtlng, Omrdetsomgrmotondlighetenkallasdfren Mandelbrotmngd. Standardformenavenmandelbrotfraktalvisashrnedanoch denharettPvrdesomstrckersigfrn-1,5till1,5ochettQ vrdefrn-1,2till1,2.Pbildenharvenolikafrgersatts pskrmenfrmedhnsynphurmngaiterationersomkrvdes. Pdenfljandesidanharjagvaltattginnrmarep mandelbrotmngdenochviserdattdenuppvisarenotrolig variationochuppreparsigsllan. Bronskrrelseochslumpfraktaler. DenBrownskarrelsenbeskrevsfrfrstagngen1827avden skotskakemistenRobertBrown.Hanhadestuderatmycketsmfasta partiklarienvtskaochkommitframtillattdedrrsigp ettheltslumpmssigtstt.Dettaberorpattpartiklarnars smattdepverkasavvtskemolekylernastermiskarrelse.Detta dptehanslundatillBrownskrrelse. Mandelbrotkomframtillattdetvenrmjligtattmed fraktalerefterliknabrownskrrelsegenomfljandealgoritm: MittpunktenpstrckanABavstts,vinkelrtmotAB,enstrcka somr1/2ABantingenupptellernedt,heltslumpmssigtoch dennapunktkallasfrC.TvnyalinjerharbildatsACochBC. Dennaalgoritmfortgrochresultatetrenfraktal.Denna fraktalkanmedlitefantasiislutetseutsomenbergskedjai fjrran. Bildpdettasomjagfrklarariolikasteg. Dennafraktalsdimensionkansedanberknaspsammasttsom jagtidigareberknadeenfraktalsdimension.Vierstter strckanmellanABmedtvstrckorACochBC.DAB=1r r=AC=BC=sqr(1/2)=>N=2.FraktalensdimensionblirslundaD=log 2/logsqr(2)=2.Dennafraktalraltsyttckande.Dess topologiskadimensionremellertid1,denkansessomenslags deformeradlinje.Omviistlletfrattsttadennyapunktenp avstndetAB/2stterdenpettmindreavstndsfrvien dimensionsomr1255 klipp cmp.w #255,(a0) ble .no_clipp_x1_2 move.w 4(a0),d3 muls.w d0,d3 move.w #255,d5 muls.w d0,d5 move.w 6(a0),d4 asl.w #4,d4 add.w d5,d4 sub.w d3,d4 asr.w #4,d4 move.w #255,(a0) move.w d4,2(a0) .no_clipp_x1_2: * X2<0 klipp tst.w 4(a0) bge .no_clipp_x2 move.w (a0),d3 muls.w d0,d3 move.w 2(a0),d4 asl.w #4,d4 sub.w d3,d4 asr.w #4,d4 move.w #0,4(a0) move.w d4,6(a0) .no_clipp_x2: * X2>255 klipp cmp.w #255,4(a0) ble .no_clipp_x2_2 move.w #255,d3 muls.w d0,d3 move.w (a0),d5 muls.w d0,d5 move.w 2(a0),d4 asl.w #4,d4 sub.w d5,d4 add.w d3,d4 asr.w #4,d4 move.w #255,4(a0) move.w d4,6(a0) .no_clipp_x2_2: rts **************** * Endif * **************** end movem.l savepal,d0-d7 movem.l d0-d7,$ffff8240.w move.l svbi,$70.w move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 ***************** * VBI och VSYNC * ***************** vbi add.w #1,vflag rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts ********************** * olika screenseters * ********************** change_screen move.l a0,-(sp) move.l screen,a0 move.l screen,screen+4 move.l a0,screen move.l (sp)+,a0 set_screen move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w rts *************************************************************************** section data screen dc.l scrblk,scrblk+32000 y_normal dc.w 99 koords dc.w 10,10,100,40 slutmasker dc.w %1000000000000000 dc.w %1100000000000000 dc.w %1110000000000000 dc.w %1111000000000000 dc.w %1111100000000000 dc.w %1111110000000000 dc.w %1111111000000000 dc.w %1111111100000000 dc.w %1111111110000000 dc.w %1111111111000000 dc.w %1111111111100000 dc.w %1111111111110000 dc.w %1111111111111000 dc.w %1111111111111100 dc.w %1111111111111110 dc.w %1111111111111111 dc.w 0 ; endcode slutmasker3 dc.w %1111111111111111 dc.w %0111111111111111 dc.w %0011111111111111 dc.w %0001111111111111 dc.w %0000111111111111 dc.w %0000011111111111 dc.w %0000001111111111 dc.w %0000000111111111 dc.w %0000000011111111 dc.w %0000000001111111 dc.w %0000000000111111 dc.w %0000000000011111 dc.w %0000000000001111 dc section text jmp main **************** * First init * **************** first_init clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,ustk move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,oldphys move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,oldlog move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,oldrez movem.l $ffff8240.w,d0-d7 movem.l d0-d7,savepal move.w #0,-(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea 12(sp),sp rts ************** * init y rot * ************** init_y_rot lea y_add,a0 moveq #0,d0 move.w #200-1,d1 .precy move.w d0,(a0)+ add.w #160,d0 dbf d1,.precy lea x_add,a0 moveq #0,d0 moveq #0,d1 move.w #20-1,d6 .precx1 move.w #16-1,d7 moveq #0,d1 .precx2 move.w d0,(a0)+ move.w d1,(a0)+ add.w #2560,d1 dbf d7,.precx2 add.w #8,d0 dbf d6,.precx1 lea bredd_add1,a0 lea slutmasker3,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb1 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb2 cmp.w #1,d0 bne .hopp move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; helt ondig nu nr den inte ritas bra .hopp2 .hopp: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp2: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on add.w #1,d0 ; ett mera p xc sub.w #8,d1 ; ett mindre p ya lea slutmasker,a1 .go_on dbf d6,.precb2 add.l #2,d4 dbf d7,.precb1 lea bredd_add2,a0 lea slutmasker,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb3 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker4+30,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb4 cmp.w #1,d0 bne .hopp3 move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; slutmask 3 r helt ondig nu nr den inte ritas bra .hopp4 .hopp3: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp4: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on2 add.w #1,d0 ; ett mera p xc add.w #8,d1 ; ett mera p ya lea slutmasker4,a1 .go_on2 dbf d6,.precb4 sub.l #2,d4 dbf d7,.precb3 rts ************** * init y bli * ************** init_y_bli1 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts init_y_bli2 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #-8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts ********************* * Main och mainloop * ********************* main jsr first_init jsr init_y_rot move.l $70.w,svbi move.l #vbi,$70.w main_loop jsr change_screen move.w #1500,d0 .wait: nop dbf.w d0,.wait move.w #$353,$ffff8240.w lea koords,a0 ; x1,y1,x2,y3 jsr do_yrot_poly move.w #$0,$ffff8240.w jsr vsync cmp.b #59,$fffffc02.w bne.s h add.w #1,koords move.l screen,a0 move.w #7999,d0 suddgg move.l #0,(a0)+ dbf d0,suddgg h cmp.b #57,$fffffc02.w bne main_loop bra end **************** * Do yrot poly * **************** do_yrot_poly move.w 6(a0),d0 cmp.w 2(a0),d0 bge .hopp move.w 2(a0),6(a0) move.w d0,2(a0) move.w 4(a0),d0 move.w (a0),4(a0) move.w d0,(a0) .hopp: cmp.w #0,(a0) blt clipp cmp.w #255,(a0) bgt clipp cmp.w #0,4(a0) blt clipp cmp.w #255,4(a0) bgt clipp back_to_poly: moveq #0,d2 move.w (a0),d0 ; x1 move.w 2(a0),d1 ; y1 move.w 4(a0),d2 ; x2 move.w 6(a0),d3 ; y2 cmp.w d0,d2 blt rita_bak jsr init_y_bli1 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add1,a4 add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l screen,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ************************************************ DRA MIG BAKLNGES rita_bak: jsr init_y_bli2 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l screen,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts draw_no_poly: rts **************************************************************** * Clipping rutinen clipp: * Sortera frst bort linjen om den inte syns tst.w (a0) bge .no_bort tst.w 4(a0) bge .no_bort bra draw_no_poly .no_bort: cmp.w #255,(a0) ble .no_bort2 cmp.w #255,4(a0) ble .no_bort2 bra draw_no_poly .no_bort2: * Clipp linjen move.w (a0),d1 sub.w 4(a0),d1 move.w 2(a0),d0 sub.w 6(a0),d0 asl.w #4,d0 ext.l d0 divs.w d1,d0 ; d0 innehller K vrdet p linjen * X1<0 klipp tst.w (a0) bge .no_clipp_x1 move.w 4(a0),d3 muls.w d0,d3 move.w 6(a0),d4 asl.w #4,d4 sub.w d3,d4 asr.w #4,d4 move.w #0,(a0) move.w d4,2(a0) .no_clipp_x1: * X1>255 klipp cmp.w #255,(a0) ble .no_clipp_x1_2 move.w 4(a0),d3 muls.w d0,d3 move.w #255,d5 muls.w d0,d5 move.w 6(a0),d4 asl.w #4,d4 add.w d5,d4 sub.w d3,d4 asr.w #4,d4 move.w #255,(a0) move.w d4,2(a0) .no_clipp_x1_2: * X2<0 klipp tst.w 4(a0) bge .no_clipp_x2 move.w (a0),d3 muls.w d0,d3 move.w 2(a0),d4 asl.w #4,d4 sub.w d3,d4 asr.w #4,d4 move.w #0,4(a0) move.w d4,6(a0) .no_clipp_x2: * X2>255 klipp cmp.w #255,4(a0) ble .no_clipp_x2_2 move.w #255,d3 muls.w d0,d3 move.w (a0),d5 muls.w d0,d5 move.w 2(a0),d4 asl.w #4,d4 sub.w d5,d4 add.w d3,d4 asr.w #4,d4 move.w #255,4(a0) move.w d4,6(a0) .no_clipp_x2_2: rts **************** * Endif * **************** end movem.l savepal,d0-d7 movem.l d0-d7,$ffff8240.w move.l svbi,$70.w move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 ***************** * VBI och VSYNC * ***************** vbi add.w #1,vflag rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts ********************** * olika screenseters * ********************** change_screen move.l a0,-(sp) move.l screen,a0 move.l screen,screen+4 move.l a0,screen move.l (sp)+,a0 set_screen move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w rts *************************************************************************** section data screen dc.l scrblk,scrblk+32000 y_normal dc.w 99 koords dc.w 10,5,100,40 slutmasker dc.w %1000000000000000 dc.w %1100000000000000 dc.w %1110000000000000 dc.w %1111000000000000 dc.w %1111100000000000 dc.w %1111110000000000 dc.w %1111111000000000 dc.w %1111111100000000 dc.w %1111111110000000 dc.w %1111111111000000 dc.w %1111111111100000 dc.w %1111111111110000 dc.w %1111111111111000 dc.w %1111111111111100 dc.w %1111111111111110 dc.w %1111111111111111 dc.w 0 ; endcode slutmasker3 dc.w %1111111111111111 dc.w %0111111111111111 dc.w %0011111111111111 dc.w %0001111111111111 dc.w %0000111111111111 dc.w %0000011111111111 dc.w %0000001111111111 dc.w %0000000111111111 dc.w %0000000011111111 dc.w %0000000001111111 dc.w %0000000000111111 dc.w %0000000000011111 dc.w %0000000000001111 dc.w %0000000000000111 dc.w %0000000000000011 dc.w %0000000000000001 slutmasker4 dc.w %0000000000000001 dc.w %0000000000000011 dc.w %0000000000000111 dc.w %0000000000001111 dc.w %0000000000011111 dc.w %0000000000111111 dc.w %0000000001111111 dc.w %0000000011111111 dc.w %0000000111111111 dc.w %0000001111111111 dc.w %0000011111111111 dc.w %0000111111111111 dc.w %0001111111111111 dc.w %0011111111111111 dc.w %0111111111111111 dc.w %1111111111111111 dc.w 0 ; endcode fyllt_word dc.w $ffff section bss scrblk ds.l 2*8000 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 y_add ds.w 200 x_add ds.w 640 bredd_add1 ds.w 20480 bredd_add2 ds.w 20480 savepal ds.w 16 vflag ds.w 1 end .w %0000000000000111 dc.w %0000000000000011 dc.w %0000000000000001 slutmasker4 dc.w %0000000000000001 dc.w %0000000000000011 dc.w %0000000000000111 dc.w %0000000000001111 dc.w %0000000000011111 dc.w %0000000000111111 dc.w %0000000001111111 dc.w %0000000011111111 dc.w %0000000111111111 dc.w %0000001111111111 dc.w %0000011111111111 dc.w %0000111111111111 dc.w %0001111111111111 dc.w %0011111111111111 dc.w %0111111111111111 dc.w %1111111111111111 dc.w 0 ; endcode fyllt_word dc.w $ffff section bss scrblk ds.l 2*8000 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 y_add ds.w 200 x_add ds.w 640 bredd_add1 ds.w 20480 bredd_add2 ds.w 20480 savepal ds.w 16 vflag ds.w 1 end section text jmp main **************** * First init * **************** first_init clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,ustk move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,oldphys move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,oldlog move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,oldrez movem.l $ffff8240.w,d0-d7 movem.l d0-d7,savepal move.w #0,-(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea 12(sp),sp rts ************** * init y rot * ************** init_y_rot lea y_add,a0 moveq #0,d0 move.w #200-1,d1 .precy move.w d0,(a0)+ add.w #160,d0 dbf d1,.precy lea x_add,a0 moveq #0,d0 moveq #0,d1 move.w #20-1,d6 .precx1 move.w #16-1,d7 moveq #0,d1 .precx2 move.w d0,(a0)+ move.w d1,(a0)+ add.w #2560,d1 dbf d7,.precx2 add.w #8,d0 dbf d6,.precx1 lea bredd_add1,a0 lea slutmasker3,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb1 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb2 cmp.w #1,d0 bne .hopp move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; helt ondig nu nr den inte ritas bra .hopp2 .hopp: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp2: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on add.w #1,d0 ; ett mera p xc sub.w #8,d1 ; ett mindre p ya lea slutmasker,a1 .go_on dbf d6,.precb2 add.l #2,d4 dbf d7,.precb1 lea bredd_add2,a0 lea slutmasker,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb3 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker4+30,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb4 cmp.w #1,d0 bne .hopp3 move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; slutmask 3 r helt ondig nu nr den inte ritas bra .hopp4 .hopp3: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp4: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on2 add.w #1,d0 ; ett mera p xc add.w #8,d1 ; ett mera p ya lea slutmasker4,a1 .go_on2 dbf d6,.precb4 sub.l #2,d4 dbf d7,.precb3 rts ************** * init y bli * ************** init_y_bli1 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts init_y_bli2 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #-8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts ********************* * Main och mainloop * ********************* main jsr first_init jsr init_y_rot move.l $70.w,svbi move.l #vbi,$70.w main_loop jsr change_screen move.w #1500,d0 .wait: nop dbf.w d0,.wait move.w #$353,$ffff8240.w lea koords,a0 ; x1,y1,x2,y3 jsr do_yrot_poly move.w #$0,$ffff8240.w jsr vsync cmp.b #59,$fffffc02.w bne.s h add.w #1,koords move.l screen,a0 move.w #7999,d0 suddgg move.l #0,(a0)+ dbf d0,suddgg h cmp.b #57,$fffffc02.w bne main_loop bra end **************** * Do yrot poly * **************** do_yrot_poly move.w 6(a0),d0 cmp.w 2(a0),d0 bge .hopp move.w 2(a0),6(a0) move.w d0,2(a0) move.w 4(a0),d0 move.w (a0),4(a0) move.w d0,(a0) .hopp: cmp.w #0,(a0) blt clipp cmp.w #255,(a0) bgt clipp cmp.w #0,4(a0) blt clipp cmp.w #255,4(a0) bgt clipp back_to_poly: moveq #0,d2 move.w (a0),d0 ; x1 move.w 2(a0),d1 ; y1 move.w 4(a0),d2 ; x2 move.w 6(a0),d3 ; y2 cmp.w d0,d2 blt rita_bak ; Hr hoppar vi till en mycket lik rutin fast den har inverterade x1,x2 jsr init_y_bli1 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add1,a4 tst.w 2(a0) blt draw_y_clip_poly add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l screen,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts draw_y_clip_poly: add.w d0,d0 add.w d0,d0 move.l screen,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ************************************************ DRA MIG BAKLNGES rita_bak: jsr init_y_bli2 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 tst.w 2(a0) blt draw_y_clip_poly2 add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l screen,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts draw_no_poly: rts draw_y_clip_poly2: add.w d0,d0 add.w d0,d0 move.l screen,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts **************************************************************** * Clipping rutinen clipp: * Sortera frst bort linjen om den inte syns tst.w (a0) bge .no_bort tst.w 4(a0) bge .no_bort bra draw_no_poly .no_bort: cmp.w #255,(a0) ble .no_bort2 cmp.w #255,4(a0) ble .no_bort2 bra draw_no_poly .no_bort2: * Clipp linjen move.w (a0),d1 sub.w 4(a0),d1 move.w 2(a0),d0 sub.w 6(a0),d0 asl.w #4,d0 ext.l d0 divs.w d1,d0 ; d0 innehller K vrdet p linjen * X1<0 klipp tst.w (a0) bge .no_clipp_x1 move.w 4(a0),d3 muls.w d0,d3 move.w 6(a0),d4 asl.w #4,d4 sub.w d3,d4 asr.w #4,d4 move.w #0,(a0) move.w d4,2(a0) .no_clipp_x1: * X1>255 klipp cmp.w #255,(a0) ble .no_clipp_x1_2 move.w 4(a0),d3 muls.w d0,d3 move.w #255,d5 muls.w d0,d5 move.w 6(a0),d4 asl.w #4,d4 add.w d5,d4 sub.w d3,d4 asr.w #4,d4 move.w #255,(a0) move.w d4,2(a0) .no_clipp_x1_2: * X2<0 klipp tst.w 4(a0) bge .no_clipp_x2 move.w (a0),d3 muls.w d0,d3 move.w 2(a0),d4 asl.w #4,d4 sub.w d3,d4 asr.w #4,d4 move.w #0,4(a0) move.w d4,6(a0) .no_clipp_x2: * X2>255 klipp cmp.w #255,4(a0) ble .no_clipp_x2_2 move.w #255,d3 muls.w d0,d3 move.w (a0),d5 muls.w d0,d5 move.w 2(a0),d4 asl.w #4,d4 sub.w d5,d4 add.w d3,d4 asr.w #4,d4 move.w #255,4(a0) move.w d4,6(a0) .no_clipp_x2_2: rts **************** * Endif * **************** end movem.l savepal,d0-d7 movem.l d0-d7,$ffff8240.w move.l svbi,$70.w move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 ***************** * VBI och VSYNC * ***************** vbi add.w #1,vflag rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts ********************** * olika screenseters * ********************** change_screen move.l a0,-(sp) move.l screen,a0 move.l screen,screen+4 move.l a0,screen move.l (sp)+,a0 set_screen move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w rts *************************************************************************** section data screen dc.l scrblk,scrblk+32000 y_normal dc.w 99 koords dc.w 10,10,100,40 slutmasker dc.w %1000000000000000 dc.w %1100000000000000 dc.w %1110000000000000 dc.w %1111000000000000 dc.w %1111100000000000 dc.w %1111110000000000 dc.w %1111111000000000 dc.w %1111111100000000 dc.w %1111111110000000 dc.w %1111111111000000 dc.w %1111111111100000 dc.w %1111111111110000 dc.w %1111111111111000 dc.w %1111111111111100 dc.w %1111111111111110 dc.w %1111111111111111 dc.w 0 ; endcode slutmasker3 dc.w %1111111111111111 dc.w %0111111111111111 dc.w %0011111111111111 dc.w %0001111111111111 dc.w %0000111111111111 dc.w %0000011111111111 dc.w %0000001111111111 dc.w %0000000111111111 dc.w %0000000011111111 dc.w %0000000001111111 dc.w %0000000000111111 dc.w %0000000000011111 dc.w %0000000000001111 dc.w %0000000000000111 dc.w %0000000000000011 dc.w %0000000000000001 slutmasker4 dc.w %0000000000000001 dc.w %0000000000000011 dc.w %0000000000000111 dc.w %0000000000001111 dc.w %0000000000011111 dc.w %0000000000111111 dc.w %0000000001111111 dc.w %0000000011111111 dc.w %0000000111111111 dc.w %0000001111111111 dc.w %0000011111111111 dc.w %0000111111111111 dc.w %0001111111111111 dc.w %0011111111111111 dc.w %0111111111111111 dc.w %1111111111111111 dc.w 0 ; endcode fyllt_word dc.w $ffff section bss scrblk ds.l 2*8000 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 y_add ds.w 200 x_add ds.w 640 bredd_add1 ds.w 20480 bredd_add2 ds.w 20480 savepal ds.w 16 vflag ds.w 1 end section text jmp main **************** * First init * **************** first_init clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,ustk move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,oldphys move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,oldlog move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,oldrez movem.l $ffff8240.w,d0-d7 movem.l d0-d7,savepal move.w #0,-(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea 12(sp),sp  rts ************** * init y rot * ************** init_y_rot lea y_add,a0 moveq #0,d0 move.w #200-1,d1 .precy move.w d0,(a0)+ add.w #160,d0 dbf d1,.precy lea x_add,a0 moveq #0,d0 moveq #0,d1 move.w #20-1,d6 .precx1 move.w #16-1,d7 moveq #0,d1 .precx2 move.w d0,(a0)+ move.w d1,(a0)+ add.w #2560,d1 dbf d7,.precx2 add.w #8,d0 dbf d6,.precx1 lea bredd_add1,a0 lea slutmasker3,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb1 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb2 cmp.w #1,d0 bne .hopp move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; helt ondig nu nr den inte ritas bra .hopp2 .hopp: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp2: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on add.w #1,d0 ; ett mera p xc sub.w #8,d1 ; ett mindre p ya lea slutmasker,a1 .go_on dbf d6,.precb2 add.l #2,d4 dbf d7,.precb1 lea bredd_add2,a0 lea slutmasker,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb3 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker4+30,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb4 cmp.w #1,d0 bne .hopp3 move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; slutmask 3 r helt ondig nu nr den inte ritas bra .hopp4 .hopp3: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp4: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on2 add.w #1,d0 ; ett mera p xc add.w #8,d1 ; ett mera p ya lea slutmasker4,a1 .go_on2 dbf d6,.precb4 sub.l #2,d4 dbf d7,.precb3 rts ************** * init y bli * ************** init_y_bli1 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts init_y_bli2 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #-8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts ********************* * Main och mainloop * ********************* main jsr first_init jsr init_y_rot move.l $70.w,svbi move.l #vbi,$70.w main_loop jsr change_screen move.w #1500,d0 .wait: nop dbf.w d0,.wait move.w #$353,$ffff8240.w lea koords,a0 ; x1,y1,x2,y2,col move.w #40,(a0) move.w #10,2(a0) move.w #240,4(a0) move.w #30,6(a0) move.w #1,8(a0) jsr do_yrot_poly move.w #$0,$ffff8240.w jsr vsync cmp.b #59,$fffffc02.w bne.s h add.w #1,koords move.l screen,a0 move.w #7999,d0 suddgg move.l #0,(a0)+ dbf d0,suddgg h cmp.b #57,$fffffc02.w bne main_loop bra end **************** * Do yrot poly * **************** do_yrot_poly move.w 6(a0),d0 cmp.w 2(a0),d0 bge .hopp move.w 2(a0),6(a0) move.w d0,2(a0) move.w 4(a0),d0 move.w (a0),4(a0) move.w d0,(a0) .hopp: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: cmp.w #0,(a0) blt clipp cmp.w #255,(a0) bgt clipp cmp.w #0,4(a0) blt clipp cmp.w #255,4(a0) bgt clipp back_to_poly: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: moveq #0,d2 move.w (a0),d0 ; x1 move.w 2(a0),d1 ; y1 move.w 4(a0),d2 ; x2 move.w 6(a0),d3 ; y2 cmp.w d0,d2 blt rita_bak ; Hr hoppar vi till en mycket lik rutin fast den har inverterade x1,x2 jsr init_y_bli1 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add1,a4 tst.w 2(a0) blt draw_y_clip_poly add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,save_source add.w (a1,d0.w),a6 ; dest in add.w (a2,d1.w),a6 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.w #$0003,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts draw_y_clip_poly: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ************************************************ DRA MIG BAKLNGES rita_bak: jsr init_y_bli2 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 tst.w 2(a0) blt draw_y_clip_poly2 add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts draw_no_poly: rts draw_y_clip_poly2: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ***************************************************************** * Om Triangeln inte syns skall det bara ritas en fyrkant pure_box: move.w #$300,$ff8240 tst.w (a0) bge .hoppy move.w #0,(a0) .hoppy: cmp.w #255,(a0) ble .hoppy2 move.w #255,(a0) .hoppy2: tst.w 4(a0) bge .hoppy3 move.w #0,4(a0) .hoppy3: cmp.w #255,4(a0) ble .hoppy4 move.w #255,4(a0) .hoppy4: jsr init_y_bli2 move.w 4(a0),d0 cmp.w (a0),d0 ble .hopp move.w (a0),4(a0) move.w d0,(a0) move.w 6(a0),d0 move.w 2(a0),6(a0) move.w d0,2(a0) .hopp: move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 add.w d0,d0 add.w d0,d0 move.l screen,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 move.w (a0),d3 sub.w d3,d2 tst.w d2 bge .haha neg.w d2 .haha: asl.w #3,d2 add.w d2,a4 * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta *.no_rak_draw: rts *************************************************************************** * Clipping rutinen ; step p 1/32=0,03125 vilket r lite fr dlig * precision... clipp: * Sortera frst bort boxen om den inte syns ((x1 och x2)<0 eller >255) tst.w (a0) bge .no_bort tst.w 4(a0) bge .no_bort bra draw_no_poly .no_bort: cmp.w #255,(a0) ble .no_bort2 cmp.w #255,4(a0) ble .no_bort2 bra draw_no_poly .no_bort2: * Clipp linjen move.w (a0),d1 sub.w 4(a0),d1 move.w 2(a0),d0 sub.w 6(a0),d0 asl.w #5,d0 ext.l d0 divs.w d1,d0 ; d0 innehller K vrdet p linjen * X1<0 klipp tst.w (a0) bge .no_clipp_x1 move.w 4(a0),d3 muls.w d0,d3 move.w 6(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,(a0) move.w d4,2(a0) .no_clipp_x1: * X1>255 klipp cmp.w #255,(a0) ble .no_clipp_x1_2 move.w 4(a0),d3 muls.w d0,d3 move.w #255,d5 muls.w d0,d5 move.w 6(a0),d4 asl.w #5,d4 add.w d5,d4 sub.w d3,d4 asr.w #5,d4 move.w #255,(a0) move.w d4,2(a0) .no_clipp_x1_2: * X2<0 klipp tst.w 4(a0) bge .no_clipp_x2 move.w (a0),d3 muls.w d0,d3 move.w 2(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,4(a0) move.w d4,6(a0) .no_clipp_x2: * X2>255 klipp cmp.w #255,4(a0) ble .no_clipp_x2_2 move.w #255,d3 muls.w d0,d3 move.w (a0),d5 muls.w d0,d5 move.w 2(a0),d4 asl.w #5,d4 sub.w d5,d4 add.w d3,d4 asr.w #5,d4 move.w #255,4(a0) move.w d4,6(a0) .no_clipp_x2_2: bra back_to_poly **************** * Endif * **************** end movem.l savepal,d0-d7 movem.l d0-d7,$ffff8240.w move.l svbi,$70.w move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 ***************** * VBI och VSYNC * ***************** vbi add.w #1,vflag rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts ********************** * olika screenseters * ********************** change_screen move.l a0,-(sp) move.l screen,a0 move.l screen,screen+4 move.l a0,screen move.l (sp)+,a0 set_screen move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w rts *************************************************************************** section data screen dc.l scrblk,scrblk+32000 y_normal dc.w 99 koords ds.w 5 slutmasker dc.w %1000000000000000 dc.w %1100000000000000 dc.w %1110000000000000 dc.w %1111000000000000 dc.w %1111100000000000 dc.w %1111110000000000 dc.w %1111111000000000 dc.w %1111111100000000 dc.w %1111111110000000 dc.w %1111111111000000 dc.w %1111111111100000 dc.w %1111111111110000 dc.w %1111111111111000 dc.w %1111111111111100 dc.w %1111111111111110 dc.w %1111111111111111 dc.w 0 ; endcode slutmasker3 dc.w %1111111111111111 dc.w %0111111111111111 dc.w %0011111111111111 dc.w %0001111111111111 dc.w %0000111111111111 dc.w %0000011111111111 dc.w %0000001111111111 dc.w %0000000111111111 dc.w %0000000011111111 dc.w %0000000001111111 dc.w %0000000000111111 dc.w %0000000000011111 dc.w %0000000000001111 dc.w %0000000000000111 dc.w %0000000000000011 dc.w %0000000000000001 slutmasker4 dc.w %0000000000000001 dc.w %0000000000000011 dc.w %0000000000000111 dc.w %0000000000001111 dc.w %0000000000011111 dc.w %0000000000111111 dc.w %0000000001111111 dc.w %0000000011111111 dc.w %0000000111111111 dc.w %0000001111111111 dc.w %0000011111111111 dc.w %0000111111111111 dc.w %0001111111111111 dc.w %0011111111111111 dc.w %0111111111111111 dc.w %1111111111111111 dc.w 0 ; endcode fyllt_word dc.w $ffff section bss scrblk ds.l 2*8000 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 y_add ds.w 200 x_add ds.w 640 bredd_add1 ds.w 20480 bredd_add2 ds.w 20480 tillf_scr: ds.l 4000 savepal ds.w 16 vflag ds.w 1 save_source: ds.l 1 end wppwU33ss77wf0 @@0@x@  h@@`@00`p8@@0p @     @ @ $0 @0  ?00  ``@@0 8|  0 #, 0 0 ? @` @` @@  T*w@`@@@@@        @0@@  8 D@ @ 0 @@P@P  @`  $ ""B  @B @A @  @@@@@ @@@@G @@x  @ @@ @@@p@P P@   @@P  @@L @@@@  `@  ! @&@@ @ @@ @@@@@@@   p @     @ $   @@  @ @ 0 @  @@~ ?  @ `@ @   @4@@@@ `  ` @@ @@@@@  |   pp`p0T*section text jmp main **************** * First init * **************** first_init clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,ustk move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,oldphys move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,oldlog move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,oldrez movem.l $ffff8240.w,d0-d7 movem.l d0-d7,savepal move.w #0,-(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea 12(sp),sp rts ************** * init y rot * ************** init_y_rot lea y_add,a0 moveq #0,d0 move.w #200-1,d1 .precy move.w d0,(a0)+ add.w #160,d0 dbf d1,.precy lea x_add,a0 moveq #0,d0 moveq #0,d1 move.w #20-1,d6 .precx1 move.w #16-1,d7 moveq #0,d1 .precx2 move.w d0,(a0)+ move.w d1,(a0)+ add.w #2560,d1 dbf d7,.precx2 add.w #8,d0 dbf d6,.precx1 lea bredd_add1,a0 lea slutmasker3,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb1 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb2 cmp.w #1,d0 bne .hopp move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; helt ondig nu nr den inte ritas bra .hopp2 .hopp: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp2: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on add.w #1,d0 ; ett mera p xc sub.w #8,d1 ; ett mindre p ya lea slutmasker,a1 .go_on dbf d6,.precb2 add.l #2,d4 dbf d7,.precb1 lea bredd_add2,a0 lea slutmasker,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb3 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker4+30,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb4 cmp.w #1,d0 bne .hopp3 move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; slutmask 3 r helt ondig nu nr den inte ritas bra .hopp4 .hopp3: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp4: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on2 add.w #1,d0 ; ett mera p xc add.w #8,d1 ; ett mera p ya lea slutmasker4,a1 .go_on2 dbf d6,.precb4 sub.l #2,d4 dbf d7,.precb3 rts ************** * init y bli * ************** init_y_bli1 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts init_y_bli2 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #-8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts ********************* * Main och mainloop * ********************* main jsr first_init jsr init_y_rot move.w #$3,$ff8242 move.w #$7,$ff8244 move.w #$30,$ff8246 move.w #$70,$ff8248 move.w #$300,$ff824a move.w #$700,$ff824c move.w #$770,$ff824e move.l $70.w,svbi move.l #vbi,$70.w main_loop jsr change_screen move.w #1500,d0 .wait: nop dbf.w d0,.wait move.w #$353,$ffff8240.w lea koords,a0 ; x1,y1,x2,y2,col move.w #130,(a0) move.w #-2,2(a0) move.w #14,4(a0) move.w #23,6(a0) move.w #1,8(a0) jsr do_yrot_poly move.w #$0,$ffff8240.w jsr vsync cmp.b #59,$fffffc02.w bne.s h add.w #1,koords move.l screen,a0 move.w #7999,d0 suddgg move.l #0,(a0)+ dbf d0,suddgg h cmp.b #57,$fffffc02.w bne main_loop bra end **************** * Do yrot poly * **************** do_yrot_poly move.w 6(a0),d0 cmp.w 2(a0),d0 bge .hopp move.w 2(a0),6(a0) move.w d0,2(a0) move.w 4(a0),d0 move.w (a0),4(a0) move.w d0,(a0) .hopp: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: cmp.w #0,(a0) blt clipp cmp.w #255,(a0) bgt clipp cmp.w #0,4(a0) blt clipp cmp.w #255,4(a0) bgt clipp back_to_poly: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: moveq #0,d2 move.w (a0),d0 ; x1 move.w 2(a0),d1 ; y1 move.w 4(a0),d2 ; x2 move.w 6(a0),d3 ; y2 cmp.w d0,d2 blt rita_bak ; Hr hoppar vi till en mycket lik rutin fast den har inverterade x1,x2 jsr init_y_bli1 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add1,a4 tst.w 2(a0) blt draw_y_clip_poly add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,save_source add.w (a1,d0.w),a6 ; dest in add.w (a2,d1.w),a6 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts * Y clip polyn draw_y_clip_poly: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ************************************************ DRA MIG BAKLNGES rita_bak: jsr init_y_bli2 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 tst.w 2(a0) blt draw_y_clip_poly2 add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; tillf. screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner add.w (a1,d0.w),a6 ; dest in add.w (a2,d1.w),a6 ; dest ner move.l d4,save_source move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240  move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts draw_no_poly: rts draw_y_clip_poly2: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta  add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: ***************************************************************** * Om Triangeln inte syns skall det bara ritas en fyrkant pure_box: move.w #$300,$ff8240 tst.w (a0) bge .hoppy move.w #0,(a0) .hoppy: cmp.w #255,(a0) ble .hoppy2 move.w #255,(a0) .hoppy2: tst.w 4(a0) bge .hoppy3 move.w #0,4(a0) .hoppy3: cmp.w #255,4(a0) ble .hoppy4 move.w #255,4(a0) .hoppy4: jsr init_y_bli2 move.w 4(a0),d0 cmp.w (a0),d0 ble .hopp move.w (a0),4(a0) move.w d0,(a0) move.w 6(a0),d0 move.w 2(a0),6(a0) move.w d0,2(a0) .hopp: move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 move.w (a0),d3 sub.w d3,d2 tst.w d2 bge .haha neg.w d2 .haha: asl.w #3,d2 add.w d2,a4 * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw * move.w (a4),$28(a3) ; slutmask1 * move.w 2(a4),$2c(a3) ; slutmask3 * move.w 4(a4),$36(a3) ; xcount * move.w #99,$38(a3) ; ycount * move.w 6(a4),$30(a3) ; yadd * move.b #$c0,$3c(a3) ; blitta * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta *.no_rak_draw: *.no_rak_draw: rts *************************************************************************** * Clipping rutinen ; step p 1/32=0,03125 vilket r lite fr dlig * precision... clipp: * Sortera frst bort boxen om den inte syns ((x1 och x2)<0 eller >255) tst.w (a0) bge .no_bort tst.w 4(a0) bge .no_bort bra draw_no_poly .no_bort: cmp.w #255,(a0) ble .no_bort2 cmp.w #255,4(a0) ble .no_bort2 bra draw_no_poly .no_bort2: * Clipp linjen move.w (a0),d1 sub.w 4(a0),d1 move.w 2(a0),d0 sub.w 6(a0),d0 asl.w #5,d0 ext.l d0 divs.w d1,d0 ; d0 innehller K vrdet p linjen * X1<0 klipp tst.w (a0) bge .no_clipp_x1 move.w 4(a0),d3 muls.w d0,d3 move.w 6(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,(a0) move.w d4,2(a0) .no_clipp_x1: * X1>255 klipp cmp.w #255,(a0) ble .no_clipp_x1_2 move.w 4(a0),d3 muls.w d0,d3 move.w #255,d5 muls.w d0,d5 move.w 6(a0),d4 asl.w #5,d4 add.w d5,d4 sub.w d3,d4 asr.w #5,d4 move.w #255,(a0) move.w d4,2(a0) .no_clipp_x1_2: * X2<0 klipp tst.w 4(a0) bge .no_clipp_x2 move.w (a0),d3 muls.w d0,d3 move.w 2(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,4(a0) move.w d4,6(a0) .no_clipp_x2: * X2>255 klipp cmp.w #255,4(a0) ble .no_clipp_x2_2 move.w #255,d3 muls.w d0,d3 move.w (a0),d5 muls.w d0,d5 move.w 2(a0),d4 asl.w #5,d4 sub.w d5,d4 add.w d3,d4 asr.w #5,d4 move.w #255,4(a0) move.w d4,6(a0) .no_clipp_x2_2: bra back_to_poly **************** * Endif * **************** end movem.l savepal,d0-d7 movem.l d0-d7,$ffff8240.w move.l svbi,$70.w move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 ***************** * VBI och VSYNC * ***************** vbi add.w #1,vflag rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts ********************** * olika screenseters * ********************** change_screen move.l a0,-(sp) move.l screen,a0 move.l screen,screen+4 move.l a0,screen move.l (sp)+,a0 set_screen move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w rts *************************************************************************** section data screen dc.l scrblk,scrblk+32000 y_normal dc.w 99 koords ds.w 5 slutmasker dc.w %1000000000000000 dc.w %1100000000000000 dc.w %1110000000000000 dc.w %1111000000000000 dc.w %1111100000000000 dc.w %1111110000000000 dc.w %1111111000000000 dc.w %1111111100000000 dc.w %1111111110000000 dc.w %1111111111000000 dc.w %1111111111100000 dc.w %1111111111110000 dc.w %1111111111111000 dc.w %1111111111111100 dc.w %1111111111111110 dc.w %1111111111111111 dc.w 0 ; endcode slutmasker3 dc.w %1111111111111111 dc.w %0111111111111111 dc.w %0011111111111111 dc.w %0001111111111111 dc.w %0000111111111111 dc.w %0000011111111111 dc.w %0000001111111111 dc.w %0000000111111111 dc.w %0000000011111111 dc.w %0000000001111111 dc.w %0000000000111111 dc.w %0000000000011111 dc.w %0000000000001111 dc.w %0000000000000111 dc.w %0000000000000011 dc.w %0000000000000001 slutmasker4 dc.w %0000000000000001 dc.w %0000000000000011 dc.w %0000000000000111 dc.w %0000000000001111 dc.w %0000000000011111 dc.w %0000000000111111 dc.w %0000000001111111 dc.w %0000000011111111 dc.w %0000000111111111 dc.w %0000001111111111 dc.w %0000011111111111 dc.w %0000111111111111 dc.w %0001111111111111 dc.w %0011111111111111 dc.w %0111111111111111 dc.w %1111111111111111 dc.w 0 ; endcode fyllt_word dc.w $ffff tomt_word: dc.w $0 section bss scrblk ds.l 2*8000 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 y_add ds.w 200 x_add ds.w 640 bredd_add1 ds.w 20480 bredd_add2 ds.w 20480 tillf_scr: ds.l 4000 savepal ds.w 16 vflag ds.w 1 save_source: ds.l 1 end draw_y_clip_poly2: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Rita den raka delen av vggen move.w #$300,$ff8240 move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ***************************************************************** * Om Triangeln inte syns skall det bara ritas en fyrkant pure_box: move.w #$300,$ff8240 tst.w (a0) bge .hoppy move.w #0,(a0) .hoppy: cmp.w #255,(a0) ble .hoppy2 move.w #255,(a0) .hoppy2: tst.w 4(a0) bge .hoppy3 move.w #0,4(a0) .hoppy3: cmp.w #255,4(a0) ble .hoppy4 move.w #255,4(a0) .hoppy4: jsr init_y_bli2 move.w 4(a0),d0 cmp.w (a0),d0 ble .hopp move.w (a0),4(a0) move.w d0,(a0) move.w 6(a0),d0 move.w 2(a0),6(a0) move.w d0,2(a0) .hopp: move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 add.w d0,d0 add.w d0,d0 move.l screen,d4 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 move.w (a0),d3 sub.w d3,d2 tst.w d2 bge .haha neg.w d2 .haha: asl.w #3,d2 add.w d2,a4 * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta *.no_rak_draw: rtssection text jmp main **************** * First init * **************** first_init clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,ustk move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,oldphys move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,oldlog move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,oldrez movem.l $ffff8240.w,d0-d7 movem.l d0-d7,savepal move.w #0,-(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea 12(sp),sp rts ************** * init y rot * ************** init_y_rot lea y_add,a0 moveq #0,d0 move.w #200-1,d1 .precy move.w d0,(a0)+ add.w #160,d0 dbf d1,.precy lea x_add,a0 moveq #0,d0 moveq #0,d1 move.w #20-1,d6 .precx1 move.w #16-1,d7 moveq #0,d1 .precx2 move.w d0,(a0)+ move.w d1,(a0)+ add.w #2560,d1 dbf d7,.precx2 add.w #8,d0 dbf d6,.precx1 lea bredd_add1,a0 lea slutmasker3,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb1 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb2 cmp.w #1,d0 bne .hopp move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; helt ondig nu nr den inte ritas bra .hopp2 .hopp: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp2: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on add.w #1,d0 ; ett mera p xc sub.w #8,d1 ; ett mindre p ya lea slutmasker,a1 .go_on dbf d6,.precb2 add.l #2,d4 dbf d7,.precb1 lea bredd_add2,a0 lea slutmasker,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb3 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker4+30,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb4 cmp.w #1,d0 bne .hopp3 move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; slutmask 3 r helt ondig nu nr den inte ritas bra .hopp4 .hopp3: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp4: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on2 add.w #1,d0 ; ett mera p xc add.w #8,d1 ; ett mera p ya lea slutmasker4,a1 .go_on2 dbf d6,.precb4 sub.l #2,d4 dbf d7,.precb3 rts ************** * init y bli * ************** init_y_bli1 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts init_y_bli2 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #-8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts ********************* * Main och mainloop * ********************* main jsr first_init jsr init_y_rot move.w #$3,$ff8242 move.w #$7,$ff8244 move.w #$30,$ff8246 move.w #$70,$ff8248 move.w #$300,$ff824a move.w #$700,$ff824c move.w #$770,$ff824e move.l $70.w,svbi move.l #vbi,$70.w main_loop jsr change_screen move.l #0,$ff8a00 move.l #0,$ff8a04 move.l #0,$ff8a08 move.l #0,$ff8a0c move.l #0,$ff8a10 move.l #0,$ff8a14 move.l #0,$ff8a18 move.l #0,$ff8a1c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #0,$ff8a30 move.l screen,a0 move.l a0,$ff8a32 ; flytta dest. adress till blitter chipet move.w #20*100-1,$ff8a36 ; X rknare move.w #1,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #0,$ff8a30 move.l #tillf_scr,a0 move.l a0,$ff8a32 ; flytta dest. adress till blitter chipet move.w #20*100-1,$ff8a36 ; X rknare move.w #1,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! move.w #$353,$ffff8240.w lea koords,a0 ; x1,y1,x2,y3,col move.w x1,(a0) move.w y1,2(a0) move.w x2,4(a0) move.w y2,6(a0) move.w #1,8(a0) jsr do_yrot_poly move.w #$0,$ffff8240.w jsr vsync move.b $fffffc02.w,d0 cmp.b #75,d0 bne .no1 sub.w #1,x1 .no1: cmp.b #77,d0 bne .no2 add.w #1,x1 .no2: cmp.b #72,d0 bne .no3 sub.w #1,y1 .no3: cmp.b #80,d0 bne .no4 add.w #1,y1 .no4: cmp.b #106,d0 bne .no5 sub.w #1,x2 .no5: cmp.b #108,d0 bne .no6 add.w #1,x2 .no6: cmp.b #104,d0 bne .no7 sub.w #1,y2 .no7: cmp.b #110,d0 bne .no8 add.w #1,y2 .no8: cmp.b #59,d0 bne.s h add.w #1,koords move.l screen,a0 move.w #7999,d0 suddgg move.l #0,(a0)+ dbf d0,suddgg h cmp.b #57,d0 bne main_loop bra end **************** * Do yrot poly * **************** do_yrot_poly move.w 6(a0),d0 cmp.w 2(a0),d0 bge .hopp move.w 2(a0),6(a0) move.w d0,2(a0) move.w 4(a0),d0 move.w (a0),4(a0) move.w d0,(a0) .hopp: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: cmp.w #0,(a0) blt clipp cmp.w #255,(a0) bgt clipp cmp.w #0,4(a0) blt clipp cmp.w #255,4(a0) bgt clipp back_to_poly: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: moveq #0,d2 move.w (a0),d0 ; x1 move.w 2(a0),d1 ; y1 move.w 4(a0),d2 ; x2 move.w 6(a0),d3 ; y2 cmp.w d0,d2 blt rita_bak ; Hr hoppar vi till en mycket lik rutin fast den har inverterade x1,x2 jsr init_y_bli1 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add1,a4 tst.w 2(a0) blt draw_y_clip_poly add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,save_source add.w (a1,d0.w),a6 ; dest in add.w (a2,d1.w),a6 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. addq.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts * Y clip polyn draw_y_clip_poly: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. addq.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ************************************************ DRA MIG BAKLNGES rita_bak: jsr init_y_bli2 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 tst.w 2(a0) blt draw_y_clip_poly2 add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; tillf. screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner add.w (a1,d0.w),a6 ; dest in add.w (a2,d1.w),a6 ; dest ner move.l d4,save_source move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. add.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts draw_no_poly: rts draw_y_clip_poly2: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. addq.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ***************************************************************** * Om Triangeln inte syns skall det bara ritas en fyrkant pure_box: move.w #$300,$ff8240 tst.w (a0) bge .hoppy move.w #0,(a0) .hoppy: cmp.w #255,(a0) ble .hoppy2 move.w #255,(a0) .hoppy2: tst.w 4(a0) bge .hoppy3 move.w #0,4(a0) .hoppy3: cmp.w #255,4(a0) ble .hoppy4 move.w #255,4(a0) .hoppy4: jsr init_y_bli2 move.w 4(a0),d0 cmp.w (a0),d0 ble .hopp move.w (a0),4(a0) move.w d0,(a0) move.w 6(a0),d0 move.w 2(a0),6(a0) move.w d0,2(a0) .hopp: move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 move.w (a0),d3 sub.w d3,d2 tst.w d2 bge .haha neg.w d2 .haha: asl.w #3,d2 add.w d2,a4 * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw * move.w (a4),$28(a3) ; slutmask1 * move.w 2(a4),$2c(a3) ; slutmask3 * move.w 4(a4),$36(a3) ; xcount * move.w #99,$38(a3) ; ycount * move.w 6(a4),$30(a3) ; yadd * move.b #$c0,$3c(a3) ; blitta * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw * sub.w #4,a6 ; Fixxa till skrmadressen * mulu.w #160,d5 * add.w d5,a6 moveq #0,d0 move.w 8(a0),d0 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3)  move.w #0,$22(a3) move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta *.no_rak_draw: *.no_rak_draw: rts *************************************************************************** * Clipping rutinen ; step p 1/32=0,03125 vilket r lite fr dlig * precision... clipp: * Sortera frst bort boxen om den inte syns ((x1 och x2)<0 eller >255) tst.w (a0) bge .no_bort tst.w 4(a0) bge .no_bort bra draw_no_poly .no_bort: cmp.w #255,(a0) ble .no_bort2 cmp.w #255,4(a0) ble .no_bort2 bra draw_no_poly .no_bort2: * Clipp linjen move.w (a0),d1 sub.w 4(a0),d1 move.w 2(a0),d0 sub.w 6(a0),d0 asl.w #5,d0 ext.l d0 divs.w d1,d0 ; d0 innehller K vrdet p linjen * X1<0 klipp tst.w (a0) bge .no_clipp_x1 move.w 4(a0),d3 muls.w d0,d3 move.w 6(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,(a0) move.w d4,2(a0) .no_clipp_x1: * X1>255 klipp cmp.w #255,(a0) ble .no_clipp_x1_2 move.w 4(a0),d3 muls.w d0,d3 move.w #255,d5 muls.w d0,d5 move.w 6(a0),d4 asl.w #5,d4 add.w d5,d4 sub.w d3,d4 asr.w #5,d4 move.w #255,(a0) move.w d4,2(a0) .no_clipp_x1_2: * X2<0 klipp tst.w 4(a0) bge .no_clipp_x2 move.w (a0),d3 muls.w d0,d3 move.w 2(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,4(a0) move.w d4,6(a0) .no_clipp_x2: * X2>255 klipp cmp.w #255,4(a0) ble .no_clipp_x2_2 move.w #255,d3 muls.w d0,d3 move.w (a0),d5 muls.w d0,d5 move.w 2(a0),d4 asl.w #5,d4 sub.w d5,d4 add.w d3,d4 asr.w #5,d4 move.w #255,4(a0) move.w d4,6(a0) .no_clipp_x2_2: bra back_to_poly **************** * Endif * **************** end movem.l savepal,d0-d7 movem.l d0-d7,$ffff8240.w move.l svbi,$70.w move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 ***************** * VBI och VSYNC * ***************** vbi add.w #1,vflag rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts ********************** * olika screenseters * ********************** change_screen move.l a0,-(sp) move.l screen,a0 move.l screen,screen+4 move.l a0,screen move.l (sp)+,a0 set_screen move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w rts *************************************************************************** section data screen dc.l scrblk,scrblk+32000 y_normal dc.w 99 koords ds.w 5 x1: dc.w 11 y1: dc.w 30 x2: dc.w 100 y2: dc.w 10 tom: dc.w 0 slutmasker dc.w %1000000000000000 dc.w %1100000000000000 dc.w %1110000000000000 dc.w %1111000000000000 dc.w %1111100000000000 dc.w %1111110000000000 dc.w %1111111000000000 dc.w %1111111100000000 dc.w %1111111110000000 dc.w %1111111111000000 dc.w %1111111111100000 dc.w %1111111111110000 dc.w %1111111111111000 dc.w %1111111111111100 dc.w %1111111111111110 dc.w %1111111111111111 dc.w 0 ; endcode slutmasker3 dc.w %1111111111111111 dc.w %0111111111111111 dc.w %0011111111111111 dc.w %0001111111111111 dc.w %0000111111111111 dc.w %0000011111111111 dc.w %0000001111111111 dc.w %0000000111111111 dc.w %0000000011111111 dc.w %0000000001111111 dc.w %0000000000111111 dc.w %0000000000011111 dc.w %0000000000001111 dc.w %0000000000000111 dc.w %0000000000000011 dc.w %0000000000000001 slutmasker4 dc.w %0000000000000001 dc.w %0000000000000011 dc.w %0000000000000111 dc.w %0000000000001111 dc.w %0000000000011111 dc.w %0000000000111111 dc.w %0000000001111111 dc.w %0000000011111111 dc.w %0000000111111111 dc.w %0000001111111111 dc.w %0000011111111111 dc.w %0000111111111111 dc.w %0001111111111111 dc.w %0011111111111111 dc.w %0111111111111111 dc.w %1111111111111111 dc.w 0 ; endcode fyllt_word dc.w $ffff tomt_word: dc.w $0 section bss scrblk ds.l 2*8000 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 y_add ds.w 200 x_add ds.w 640 bredd_add1 ds.w 20480 bredd_add2 ds.w 20480 tillf_scr: ds.l 4000 savepal ds.w 16 vflag ds.w 1 save_source: ds.l 1 end ******************************************* * Styr med pilarna (rotera med hger-vnster, g med fram-bak) * * Du r den lilla rda pricken (ganska lik dig ;-), och du tittar * alltid nedt!!! * * Du kan editera om vrlden (world.inc), genom att ndra p nuffrorna * 1=vgg ned * 2=vgg vnster * 3=vgg upp * 4=vgg hger * 5-8=hrn (vilken ordning vet jag inte riktigt (glmt bort!)) * * /emp section text jmp main **************** * First init * **************** first_init clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,ustk move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,oldphys move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,oldlog move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,oldrez movem.l $ffff8240.w,d0-d7 movem.l d0-d7,savepal move.w #0,-(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea 12(sp),sp move.l screen,d0 move.b #0,d0 move.l d0,screen move.l screen+4,d0 move.b #0,d0 move.l d0,screen+4 move.l screen,a0 add.l #100*160+80+2,a0 move.b #%10000000,(a0) move.l screen+4,a0 add.l #100*160+80+2,a0 move.b #%10000000,(a0) rts ************** * init y rot * ************** init_y_rot lea y_add,a0 moveq #0,d0 move.w #200-1,d1 .precy move.w d0,(a0)+ add.w #160,d0 dbf d1,.precy lea x_add,a0 moveq #0,d0 moveq #0,d1 move.w #20-1,d6 .precx1 move.w #16-1,d7 moveq #0,d1 .precx2 move.w d0,(a0)+ move.w d1,(a0)+ add.w #2560,d1 dbf d7,.precx2 add.w #8,d0 dbf d6,.precx1 lea bredd_add1,a0 lea slutmasker3,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb1 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb2 cmp.w #1,d0 bne .hopp move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; helt ondig nu nr den inte ritas bra .hopp2 .hopp: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp2: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on add.w #1,d0 ; ett mera p xc sub.w #8,d1 ; ett mindre p ya lea slutmasker,a1 .go_on dbf d6,.precb2 add.l #2,d4 dbf d7,.precb1 lea bredd_add2,a0 lea slutmasker,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb3 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker4+30,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb4 cmp.w #1,d0 bne .hopp3 move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; slutmask 3 r helt ondig nu nr den inte ritas bra .hopp4 .hopp3: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp4: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on2 add.w #1,d0 ; ett mera p xc add.w #8,d1 ; ett mera p ya lea slutmasker4,a1 .go_on2 dbf d6,.precb4 sub.l #2,d4 dbf d7,.precb3 rts ************** * init y bli * ************** init_y_bli1 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts init_y_bli2 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #-8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts ******************** * init 3d-world * ******************** init_3dworld lea adr_world,a0 ; rensa adr_world move.w #32*32-1,d7 .loop move.l #0,(a0)+ dbf d7,.loop lea world,a0 lea adr_world,a1 lea cordslist,a2 move.w #0,d0 ; x move.w #0,d1 ; y move.w #32-1,d7 .loop1 move.w #32-1,d6 .loop2 tst.b (a0) beq .ej_8 cmp.b #1,(a0) bne.s .ej_1 move.l a2,(a1) ; save adr to cords move.w d0,d2 ; save x,y move.w d1,d3 move.w #2,(a2)+ ; antal add.w #64,d3 move.w d2,(a2)+ ; x1 move.w d3,(a2)+ ; y1 add.w #64,d2 move.w d2,(a2)+ ; x2 move.w d3,(a2)+ ; y2 .ej_1 cmp.b #2,(a0) bne.s .ej_2 move.l a2,(a1) ; save adr to cords move.w d0,d2 ; save x,y move.w d1,d3 move.w #2,(a2)+ ; antal move.w d2,(a2)+ ; x1 move.w d3,(a2)+ ; y1 add.w #64,d3 move.w d2,(a2)+ ; x2 move.w d3,(a2)+ ; y2 .ej_2 cmp.b #3,(a0) bne.s .ej_3 move.l a2,(a1) ; save adr to cords move.w d0,d2 ; save x,y move.w d1,d3 move.w #2,(a2)+ ; antal add.w #64,d2 move.w d2,(a2)+ ; x1 move.w d3,(a2)+ ; y1 sub.w #64,d2 move.w d2,(a2)+ ; x2 move.w d3,(a2)+ ; y2 .ej_3 cmp.b #4,(a0) bne.s .ej_4 move.l a2,(a1) ; save adr to cords move.w d0,d2 ; save x,y move.w d1,d3 move.w #2,(a2)+ ; antal add.w #64,d2 add.w #64,d3 move.w d2,(a2)+ ; x1 move.w d3,(a2)+ ; y1 sub.w #64,d3 move.w d2,(a2)+ ; x2 move.w d3,(a2)+ ; y2 .ej_4 cmp.b #5,(a0) bne.s .ej_5 move.l a2,(a1) ; save adr to cords move.w d0,d2 ; save x,y move.w d1,d3 move.w #3,(a2)+ ; antal add.w #64,d3 move.w d2,(a2)+ ; x1 move.w d3,(a2)+ ; y1 add.w #64,d2 move.w d2,(a2)+ ; x2 move.w d3,(a2)+ ; y2 sub.w #64,d3 move.w d2,(a2)+ ; x3 move.w d3,(a2)+ ; y3 .ej_5 cmp.b #6,(a0) bne.s .ej_6 move.l a2,(a1) ; save adr to cords move.w d0,d2 ; save x,y move.w d1,d3 move.w #3,(a2)+ ; antal move.w d2,(a2)+ ; x1 move.w d3,(a2)+ ; y1 add.w #64,d3 move.w d2,(a2)+ ; x2 move.w d3,(a2)+ ; y2 add.w #64,d2 move.w d2,(a2)+ ; x3 move.w d3,(a2)+ ; y3 .ej_6 cmp.b #7,(a0) bne.s .ej_7 move.l a2,(a1) ; save adr to cords move.w d0,d2 ; save x,y move.w d1,d3 move.w #3,(a2)+ ; antal add.w #64,d2 move.w d2,(a2)+ ; x1 move.w d3,(a2)+ ; y1 sub.w #64,d2 move.w d2,(a2)+ ; x2 move.w d3,(a2)+ ; y2 add.w #64,d3 move.w d2,(a2)+ ; x3 move.w d3,(a2)+ ; y3 .ej_7 cmp.b #8,(a0) bne.s .ej_8 move.l a2,(a1) ; save adr to cords move.w d0,d2 ; save x,y move.w d1,d3 move.w #3,(a2)+ ; antal add.w #64,d2 add.w #64,d3 move.w d2,(a2)+ ; x1 move.w d3,(a2)+ ; y1 sub.w #64,d3 move.w d2,(a2)+ ; x2 move.w d3,(a2)+ ; y2 sub.w #64,d2 move.w d2,(a2)+ ; x3 move.w d3,(a2)+ ; y3 .ej_8 addq.l #1,a0 ; next in world addq.l #4,a1 add.w #64,d0 ; ut p x dbf d6,.loop2 move.w #0,d0 ; restal x add.w #64,d1 ; ner p y dbf d7,.loop1 rts ********************* * init lite listor * ********************* init_3dlist move.w #-256,object_points move.w #-16,object_points+2 lea sin_360,a0 ; sin lea sin_360+90*2,a1 ; cos lea look_cord,a4 ; x,z move.w #0,look_angle move.w #360-1,d7 .loop1 lea object_points,a2 ; ta ifrn move.l a2,a3 ; ta ifrn moveq #0,d0 moveq #0,d1 moveq #0,d2 moveq #0,d3 move.w look_angle,d4 add.w d4,d4 move.w (a0,d4.w),d1 ; sin alpha move.w (a1,d4.w),d0 ; cos alpha move.w (a2)+,d2 ; x move.w (a2)+,d3 ; z muls d1,d2 swap d2 rol.l #2,d2 muls d0,d3 swap d3 rol.l #2,d3 add.w d2,d3 move.w d3,(a4)+ ; look x moveq #0,d2 moveq #0,d3 move.w (a3)+,d2 ; x move.w (a3)+,d3 ; z muls d1,d3 swap d3 rol.l #2,d3 muls d0,d2 swap d2 rol.l #2,d2 sub.w d2,d3 move.w d3,(a4)+ ; look z add.w #1,look_angle dbf d7,.loop1 **** Lite fr plotten lea y_add,a0 moveq #0,d0 move.w #200-1,d7 .precy move.w d0,(a0)+ add.w #160,d0 dbf d7,.precy moveq #0,d0 lea x_add,a0 move.w #20-1,d7 .precx1 move.w #16-1,d6 move.w #%1000000000000000,d1 .precx2 move.w d0,(a0)+ move.w d1,(a0)+ ror.w #1,d1 dbf d6,.precx2 add.w #8,d0 dbf d7,.precx1 rts ********************* * Main och mainloop * ********************* main jsr first_init jsr init_y_rot jsr init_3dworld jsr init_3dlist move.w #1024,x_gubbe move.w #1024,y_gubbe move.w #0,look_angle move.w #$001,$ffff8240.w move.w #$667,$ffff8242.w move.w #$701,$ffff8244.w move.w #$701,$ffff8246.w move.l $70.w,svbi move.l #vbi,$70.w main_loop * move.w #$353,$ffff8240.w jsr change_screen jsr erase_screen jsr styr jsr make_3dworld move.w #$001,$ffff8240.w move.w #2,d0 jsr vsync2 cmp.b #57,$fffffc02.w bne main_loop bra end ***************** * Sudda skrmen * ***************** erase_screen lea $ffff8a20.w,a0 move.l #0,(a0)+ move.l screen,(a0)+ addq.l #6,a0 move.l #$00080008,(a0)+ move.l screen,(a0)+ move.w #20,(a0)+ move.w #200,(a0)+ move.l #$0000c000,(a0)+ rts ***************** * Styra runt * ***************** styr lea sin_360,a0 lea sin_360+180,a1 move.w look_angle,d0 add.w d0,d0 move.w (a0,d0.w),d1 ; sin move.w (a1,d0.w),d2 ; cos muls #14,d1 swap d1 rol.l #2,d1 muls #14,d2 swap d2 rol.l #2,d2 moveq #0,d0 move.b $fffffc02.w,d0 cmp.b #77,d0 bne.s .ej_van sub.w #4,look_angle .ej_van cmp.b #75,d0 bne.s .ej_hog add.w #4,look_angle .ej_hog cmp.w #-1,look_angle bgt.s .angle1 move.w #359,look_angle .angle1 cmp.w #360,look_angle blt.s .angle2 move.w #0,look_angle .angle2 cmp.b #80,d0 bne.s .ej_fram add.w d1,x_gubbe sub.w d2,y_gubbe cmp.w #512,x_gubbe bgt.s .jop1 sub.w d1,x_gubbe add.w d2,y_gubbe .jop1 cmp.w #1536,x_gubbe blt.s .jop2 sub.w d1,x_gubbe add.w d2,y_gubbe .jop2 cmp.w #512,y_gubbe bgt.s .jop3 sub.w d1,x_gubbe add.w d2,y_gubbe .jop3 cmp.w #1536,y_gubbe blt.s .jop4 sub.w d1,x_gubbe add.w d2,y_gubbe .jop4 .ej_fram cmp.b #72,d0 bne.s .ej_bak sub.w d1,x_gubbe add.w d2,y_gubbe cmp.w #512,x_gubbe bgt.s .jop1b add.w d1,x_gubbe sub.w d2,y_gubbe .jop1b cmp.w #1536,x_gubbe blt.s .jop2b add.w d1,x_gubbe sub.w d2,y_gubbe .jop2b cmp.w #512,y_gubbe bgt.s .jop3b add.w d1,x_gubbe sub.w d2,y_gubbe .jop3b cmp.w #1536,y_gubbe blt.s .jop4b add.w d1,x_gubbe sub.w d2,y_gubbe .jop4b .ej_bak rts ***************** * Make 3d-world * ***************** make_3dworld jsr get_right_cords tst.w num_points bge.s .just_go_on rts .just_go_on jsr rotera_cords jsr display_cords jsr plotta rts *********************** * get the right cords * *********************** get_right_cords lea adr_world,a0 lea look_cord,a1 lea xcya_circ,a2 lea object_points,a4 ; hr kommer x,y ligga move.w x_gubbe,d0 ; gubbens x,y koordinat move.w y_gubbe,d1 move.w look_angle,d2 add.w d2,d2 ; *4 add.w d2,d2 add.w 0(a1,d2.w),d0 ; relativ add p x,y fr add.w 2(a1,d2.w),d1 ; att n synfltscirkelns mitt lsr.w #6,d0 ; /64 fr att f rtt ruta lsr.w #6,d1 ; /64 add.w d0,d0 ; x*4 add.w d0,d0 lsl.w #7,d1 ; y*32*4 add.w d0,a0 ; t sidan add.w d1,a0 ; och nert sub.l #2*4+6*4*32,a0 move.l x_gubbe,d4 ; x och y gubbe * sub.l #$00200020,d4 moveq #-1,d3 ; num_points move.w #12-1,d7 ; antal rader .loop1 move.w (a2)+,d6 ; antal x per rad... .loop2 tst.l (a0) beq.s .no_cord move.l (a0),a3 ; koord lista add.w (a3),d3 ; antal kordinater move.w (a3)+,d5 subq.w #1,d5 .loop3 move.l (a3)+,(a4) ; lassa koords sub.l d4,(a4)+ dbf d5,.loop3 .no_cord addq.l #4,a0 dbf d6,.loop2 add.w (a2)+,a0 ; nsta rad dbf d7,.loop1 move.w #2,num_points rts *********************** * Rotera kordinaterna * *********************** rotera_cords lea sin_360,a0 ; sin lea sin_360+90*2,a1 ; cos lea object_points,a2 ; ta ifrn (x,z) move.l a2,a3 ; lgga i moveq #0,d0 moveq #0,d1 move.w look_angle,d2 add.w d2,d2 move.w (a0,d2.w),d0 ; sin alpha move.w (a1,d2.w),d1 ; cos alpha move.w num_points,d7 .rotta move.w (a2)+,d2 ; x move.w (a2)+,d3 ; z move.w d2,d5 move.w d3,d6 muls d1,d2 ; x*cos(alpha) swap d2 rol.l #2,d2 muls d0,d3 swap d3 rol.l #2,d3 add.w d2,d3 move.w d3,(a3)+ ; new x move.w d5,d2 ; x move.w d6,d3 ; z muls d0,d2 swap d2 rol.l #2,d2 muls d1,d3 swap d3 rol.l #2,d3 sub.w d2,d3 move.w d3,(a3)+ ; new z dbf d7,.rotta rts ********************* * Display ska mamma * ********************* display_cords lea object_points,a0 move.l a0,a1 move.w #500,d0 move.w num_points,d7 .proj_it move.w (a0)+,d1 ; x move.w #(-40*2),d2 ; y move.w (a0)+,d3 ; z muls d0,d1 ; a*x add.w d0,d3 ; a+z divs d3,d1 move.w d1,(a1)+ ; new x muls d0,d2 ; a*y divs d3,d2 move.w d2,(a1)+ ; new y dbf d7,.proj_it rts **************** * Plotta saken * **************** plotta move.l screen,a0 lea x_add,a1 lea y_add,a2 lea object_points,a3 move.w #160,d2 move.w #100,d3 lea koords,a0 ; x1,y1,x2,y3,col move.w (a3)+,(a0) move.w (a3)+,2(a0) move.w (a3)+,4(a0) move.w (a3)+,6(a0) move.w #1,8(a0) jsr do_yrot_poly rts **************** * Do yrot poly * **************** do_yrot_poly move.w 6(a0),d0 cmp.w 2(a0),d0 bge .hopp move.w 2(a0),6(a0) move.w d0,2(a0) move.w 4(a0),d0 move.w (a0),4(a0) move.w d0,(a0) .hopp: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: cmp.w #0,(a0) blt clipp cmp.w #255,(a0) bgt clipp cmp.w #0,4(a0) blt clipp cmp.w #255,4(a0) bgt clipp back_to_poly: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: moveq #0,d2 move.w (a0),d0 ; x1 move.w 2(a0),d1 ; y1 move.w 4(a0),d2 ; x2 move.w 6(a0),d3 ; y2 cmp.w d0,d2 blt rita_bak ; Hr hoppar vi till en mycket lik rutin fast den har inverterade x1,x2 move.w #$770,$ff8240 * Clear tillf screen move.l #tillf_scr,a5 ; tillf screen adr move.w 2(a0),d4 bge .small_jmp move.w #0,d4 .small_jmp: mulu.w #160,d4 add.w d4,a5 move.w (a0),d4 asr.w #4,d4 asl.w #3,d4 add.w d4,a5 move.w 4(a0),d4 sub.w (a0),d4 asr.w #4,d4 addq.w #2,d4 ; antal word att rita move.w d4,d5 asl.w #3,d5 neg.w d5 add.w #168,d5 ;160+xinc move.w 6(a0),d6 bge .sml_jmp move.w #0,d6 .sml_jmp: move.w 2(a0),d7 bge .sml_jmp2 move.w #0,d7 .sml_jmp2: sub.w d7,d6 addq.w #2,d6 move.w #$ffff,$ff8a28 move.w #$ffff,$ff8a2c move.l #0,$ff8a00 move.l #0,$ff8a04 move.l #0,$ff8a08 move.l #0,$ff8a0c move.l #0,$ff8a10 move.l #0,$ff8a14 move.l #0,$ff8a18 move.l #0,$ff8a1c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w d5,$ff8a30 ; rad add move.l a5,$ff8a32 ; flytta dest. adress till blitter chipet move.w d4,$ff8a36 ; X rknare move.w d6,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! move.w #$345,$ff8240 jsr init_y_bli1 lea x_add2,a1 lea y_add2,a2 lea $ffff8a00,a3 lea bredd_add1,a4 tst.w 2(a0) blt draw_y_clip_poly add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,save_source add.w (a1,d0.w),a6 ; dest in add.w (a2,d1.w),a6 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 move.l save_source,$32(a3) ; stt dest sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. addq.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts * Y clip polyn draw_y_clip_poly: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. addq.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ************************************************ DRA MIG BAKLNGES rita_bak: move.w #$770,$ff8240 * Clear tillf screen move.l #tillf_scr,a5 ; tillf screen adr move.w 2(a0),d4 bge .small_jmp move.w #0,d4 .small_jmp: mulu.w #160,d4 add.w d4,a5 move.w 4(a0),d4 asr.w #4,d4 asl.w #3,d4 add.w d4,a5 move.w (a0),d4 sub.w 4(a0),d4 asr.w #4,d4 addq.w #2,d4 ; antal word att rita move.w d4,d5 asl.w #3,d5 neg.w d5 add.w #168,d5 ;160+xinc move.w 6(a0),d6 bge .sml_jmp move.w #0,d6 .sml_jmp: move.w 2(a0),d7 bge .sml_jmp2 move.w #0,d7 .sml_jmp2: sub.w d7,d6 addq.w #2,d6 move.l #0,$ff8a00 move.l #0,$ff8a04 move.l #0,$ff8a08 move.l #0,$ff8a0c move.l #0,$ff8a10 move.l #0,$ff8a14 move.l #0,$ff8a18 move.l #0,$ff8a1c move.w #$ffff,$ff8a28 move.w #$ffff,$ff8a2c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w d5,$ff8a30 ; rad add move.l a5,$ff8a32 ; flytta dest. adress till blitter chipet move.w d4,$ff8a36 ; X rknare move.w d6,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! move.w #$345,$ff8240 jsr init_y_bli2 lea x_add2,a1 lea y_add2,a2 lea $ffff8a00,a3 lea bredd_add2,a4 tst.w 2(a0) blt draw_y_clip_poly2 add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; tillf. screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner add.w (a1,d0.w),a6 ; dest in add.w (a2,d1.w),a6 ; dest ner move.l d4,save_source move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. add.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts draw_no_poly: rts draw_y_clip_poly2: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. addq.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ***************************************************************** * Om Triangeln inte syns skall det bara ritas en fyrkant pure_box: move.w #$300,$ff8240 tst.w (a0) bge .hoppy move.w #0,(a0) .hoppy: cmp.w #255,(a0) ble .hoppy2 move.w #255,(a0) .hoppy2: tst.w 4(a0) bge .hoppy3 move.w #0,4(a0) .hoppy3: cmp.w #255,4(a0) ble .hoppy4 move.w #255,4(a0) .hoppy4: jsr init_y_bli2 move.w 4(a0),d0 cmp.w (a0),d0 ble .hopp move.w (a0),4(a0) move.w d0,(a0) move.w 6(a0),d0 move.w 2(a0),6(a0) move.w d0,2(a0) .hopp: move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 lea x_add2,a1 lea y_add2,a2 lea $ffff8a00,a3 lea bredd_add2,a4 add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 move.w (a0),d3 sub.w d3,d2 tst.w d2 bge .haha neg.w d2 .haha: asl.w #3,d2 add.w d2,a4 * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw * move.w (a4),$28(a3) ; slutmask1 * move.w 2(a4),$2c(a3) ; slutmask3 * move.w 4(a4),$36(a3) ; xcount * move.w #99,$38(a3) ; ycount * move.w 6(a4),$30(a3) ; yadd * move.b #$c0,$3c(a3) ; blitta * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw * sub.w #4,a6 ; Fixxa till skrmadressen * mulu.w #160,d5 * add.w d5,a6 moveq #0,d0 move.w 8(a0),d0 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta *.no_rak_draw: *.no_rak_draw: rts *************************************************************************** * Clipping rutinen ; step p 1/32=0,03125 vilket r lite fr dlig * precision... clipp: * Sortera frst bort boxen om den inte syns ((x1 och x2)<0 eller >255) tst.w (a0) bge .no_bort tst.w 4(a0) bge .no_bort bra draw_no_poly .no_bort: cmp.w #255,(a0) ble .no_bort2 cmp.w #255,4(a0) ble .no_bort2 bra draw_no_poly .no_bort2: * Clipp linjen move.w (a0),d1 sub.w 4(a0),d1 move.w 2(a0),d0 sub.w 6(a0),d0 asl.w #5,d0 ext.l d0 divs.w d1,d0 ; d0 innehller K vrdet p linjen * X1<0 klipp tst.w (a0) bge .no_clipp_x1 move.w 4(a0),d3 muls.w d0,d3 move.w 6(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,(a0) move.w d4,2(a0) .no_clipp_x1: * X1>255 klipp cmp.w #255,(a0) ble .no_clipp_x1_2 move.w 4(a0),d3 muls.w d0,d3 move.w #255,d5 muls.w d0,d5 move.w 6(a0),d4 asl.w #5,d4 add.w d5,d4 sub.w d3,d4 asr.w #5,d4 move.w #255,(a0) move.w d4,2(a0) .no_clipp_x1_2: * X2<0 klipp tst.w 4(a0) bge .no_clipp_x2 move.w (a0),d3 muls.w d0,d3 move.w 2(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,4(a0) move.w d4,6(a0) .no_clipp_x2: * X2>255 klipp cmp.w #255,4(a0) ble .no_clipp_x2_2 move.w #255,d3 muls.w d0,d3 move.w (a0),d5 muls.w d0,d5 move.w 2(a0),d4 asl.w #5,d4 sub.w d5,d4 add.w d3,d4 asr.w #5,d4 move.w #255,4(a0) move.w d4,6(a0) .no_clipp_x2_2: bra back_to_poly **************** * Endif * **************** end movem.l savepal,d0-d7 movem.l d0-d7,$ffff8240.w move.l svbi,$70.w move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 ***************** * VBI och VSYNC * ***************** vbi add.w #1,vflag rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts ********************** * olika screenseters * ********************** change_screen movem.l d0-d1,-(sp) move.l screen+0,d0 move.l screen+4,d1 move.l d1,screen+0 move.l d0,screen+4 movem.l (sp)+,d0-d1 set_screen move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w rts *************************************************************************** section data screen dc.l scrblk+256,scrblk+32000+256 xcya_circ dc.w 05-1,25*4 dc.w 09-1,23*4 dc.w 09-1,22*4 dc.w 11-1,21*4 dc.w 11-1,21*4 dc.w 11-1,21*4 dc.w 11-1,21*4 dc.w 11-1,21*4 dc.w 11-1,22*4 dc.w 09-1,23*4 dc.w 09-1,25*4 dc.w 05-1,0 tom: dc.w 0 slutmasker dc.w %1000000000000000 dc.w %1100000000000000 dc.w %1110000000000000 dc.w %1111000000000000 dc.w %1111100000000000 dc.w %1111110000000000 dc.w %1111111000000000 dc.w %1111111100000000 dc.w %1111111110000000 dc.w %1111111111000000 dc.w %1111111111100000 dc.w %1111111111110000 dc.w %1111111111111000 dc.w %1111111111111100 dc.w %1111111111111110 dc.w %1111111111111111 dc.w 0 ; endcode slutmasker3 dc.w %1111111111111111 dc.w %0111111111111111 dc.w %0011111111111111 dc.w %0001111111111111 dc.w %0000111111111111 dc.w %0000011111111111 dc.w %0000001111111111 dc.w %0000000111111111 dc.w %0000000011111111 dc.w %0000000001111111 dc.w %0000000000111111 dc.w %0000000000011111 dc.w %0000000000001111 dc.w %0000000000000111 dc.w %0000000000000011 dc.w %0000000000000001 slutmasker4 dc.w %0000000000000001 dc.w %0000000000000011 dc.w %0000000000000111 dc.w %0000000000001111 dc.w %0000000000011111 dc.w %0000000000111111 dc.w %0000000001111111 dc.w %0000000011111111 dc.w %0000000111111111 dc.w %0000001111111111 dc.w %0000011111111111 dc.w %0000111111111111 dc.w %0001111111111111 dc.w %0011111111111111 dc.w %0111111111111111 dc.w %1111111111111111 dc.w 0 ; endcode fyllt_word dc.w $ffff tomt_word: dc.w $0 sin_360 include 'a:\sin_360.inc' world include 'a:\world.inc' section bss scrblk ds.l 2*8000+256 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 savepal ds.w 16 vflag ds.w 1 x_gubbe ds.w 1 y_gubbe ds.w 1 look_angle ds.w 1 num_points ds.w 1 x_add ds.w 640 y_add ds.w 200 ds.l 32*4 ; bara drfr att adr_world ds.l 32*36 cordslist ds.w 6*16*16 look_cord ds.l 360 object_points ds.w 101*2 object_points2 ds.w 101*3 y_add2 ds.w 200 x_add2 ds.w 640 bredd_add1 ds.w 20480 bredd_add2 ds.w 20480 tillf_scr: ds.l 4000 save_source: ds.l 1 koords ds.w 5 end section text jmp main **************** * First init * **************** first_init clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,ustk move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,oldphys move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,oldlog move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,oldrez movem.l $ffff8240.w,d0-d7 movem.l d0-d7,savepal move.w #0,-(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea 12(sp),sp rts ************** * init y rot * ************** init_y_rot lea y_add,a0 moveq #0,d0 move.w #200-1,d1 .precy move.w d0,(a0)+ add.w #160,d0 dbf d1,.precy lea x_add,a0 moveq #0,d0 moveq #0,d1 move.w #20-1,d6 .precx1 move.w #16-1,d7 moveq #0,d1 .precx2 move.w d0,(a0)+ move.w d1,(a0)+ add.w #2560,d1 dbf d7,.precx2 add.w #8,d0 dbf d6,.precx1 lea bredd_add1,a0 lea slutmasker3,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb1 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb2 cmp.w #1,d0 bne .hopp move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; helt ondig nu nr den inte ritas bra .hopp2 .hopp: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp2: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on add.w #1,d0 ; ett mera p xc sub.w #8,d1 ; ett mindre p ya lea slutmasker,a1 .go_on dbf d6,.precb2 add.l #2,d4 dbf d7,.precb1 lea bredd_add2,a0 lea slutmasker,a2 moveq #0,d4 ; list add moveq #0,d5 move.w #-1,d5 ; first slutm move.w #16-1,d7 .precb3 move.w #320-1,d6 moveq #1,d0 ; xc move.w #160-(8*1)+8,d1 ; yadd lea slutmasker4+30,a1 add.l d4,a1 move.w (a2)+,d5 ; hmta ettan .precb4 cmp.w #1,d0 bne .hopp3 move.w d5,d3 and.w (a1)+,d3 move.w d3,(a0)+ move.w #0,(a0)+ ; slutmask 3 r helt ondig nu nr den inte ritas bra .hopp4 .hopp3: move.w d5,(a0)+ ; slutmask 1 move.w (a1)+,(a0)+ ; slutmask 2 .hopp4: move.w d0,(a0)+ ; xcount move.w d1,(a0)+ ; yadd tst.w (a1) bne.s .go_on2 add.w #1,d0 ; ett mera p xc add.w #8,d1 ; ett mera p ya lea slutmasker4,a1 .go_on2 dbf d6,.precb4 sub.l #2,d4 dbf d7,.precb3 rts ************** * init y bli * ************** init_y_bli1 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts init_y_bli2 move.w #0,$ffff8a20.w move.w #0,$ffff8a22.w move.l #fyllt_word,$ffff8a24.w move.w #-1,$ffff8a2a.w move.w #-8,$ffff8a2e.w move.w #$0003,$ffff8a3a.w move.b #0,$ffff8a3d.w rts ********************* * Main och mainloop * ********************* main jsr first_init jsr init_y_rot move.w #$3,$ff8242 move.w #$7,$ff8244 move.w #$30,$ff8246 move.w #$70,$ff8248 move.w #$300,$ff824a move.w #$700,$ff824c move.w #$770,$ff824e move.l $70.w,svbi move.l #vbi,$70.w main_loop jsr change_screen move.l #0,$ff8a00 move.l #0,$ff8a04 move.l #0,$ff8a08 move.l #0,$ff8a0c move.l #0,$ff8a10 move.l #0,$ff8a14 move.l #0,$ff8a18 move.l #0,$ff8a1c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w #0,$ff8a30 move.l screen,a0 move.l a0,$ff8a32 ; flytta dest. adress till blitter chipet move.w #20*100-1,$ff8a36 ; X rknare move.w #1,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! move.w #$353,$ffff8240.w lea koords,a0 ; x1,y1,x2,y3,col move.w x1,(a0) move.w y1,2(a0) move.w x2,4(a0) move.w y2,6(a0) move.w #1,8(a0) jsr do_yrot_poly move.w #$0,$ffff8240.w jsr vsync move.b $fffffc02.w,d0 cmp.b #75,d0 bne .no1 sub.w #1,x1 .no1: cmp.b #77,d0 bne .no2 add.w #1,x1 .no2: cmp.b #72,d0 bne .no3 sub.w #1,y1 .no3: cmp.b #80,d0 bne .no4 add.w #1,y1 .no4: cmp.b #106,d0 bne .no5 sub.w #1,x2 .no5: cmp.b #108,d0 bne .no6 add.w #1,x2 .no6: cmp.b #104,d0 bne .no7 sub.w #1,y2 .no7: cmp.b #110,d0 bne .no8 add.w #1,y2 .no8: cmp.b #59,d0 bne.s h add.w #1,koords move.l screen,a0 move.w #7999,d0 suddgg move.l #0,(a0)+ dbf d0,suddgg h cmp.b #57,d0 bne main_loop bra end **************** * Do yrot poly * **************** do_yrot_poly move.w 6(a0),d0 cmp.w 2(a0),d0 bge .hopp move.w 2(a0),6(a0) move.w d0,2(a0) move.w 4(a0),d0 move.w (a0),4(a0) move.w d0,(a0) .hopp: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: cmp.w #0,(a0) blt clipp cmp.w #255,(a0) bgt clipp cmp.w #0,4(a0) blt clipp cmp.w #255,4(a0) bgt clipp back_to_poly: tst.w 2(a0) bgt .no_pure_box tst.w 6(a0) ble pure_box .no_pure_box: moveq #0,d2 move.w (a0),d0 ; x1 move.w 2(a0),d1 ; y1 move.w 4(a0),d2 ; x2 move.w 6(a0),d3 ; y2 cmp.w d0,d2 blt rita_bak ; Hr hoppar vi till en mycket lik rutin fast den har inverterade x1,x2 move.w #$770,$ff8240 * Clear tillf screen move.l #tillf_scr,a5 ; tillf screen adr move.w 2(a0),d4 bge .small_jmp move.w #0,d4 .small_jmp: mulu.w #160,d4 add.w d4,a5 move.w (a0),d4 asr.w #4,d4 asl.w #3,d4 add.w d4,a5 move.w 4(a0),d4 sub.w (a0),d4 asr.w #4,d4 addq.w #2,d4 ; antal word att rita move.w d4,d5 asl.w #3,d5 neg.w d5 add.w #168,d5 ;160+xinc move.w 6(a0),d6 bge .sml_jmp move.w #0,d6 .sml_jmp: move.w 2(a0),d7 bge .sml_jmp2 move.w #0,d7 .sml_jmp2: sub.w d7,d6 addq.w #2,d6 move.w #$ffff,$ff8a28 move.w #$ffff,$ff8a2c move.l #0,$ff8a00 move.l #0,$ff8a04 move.l #0,$ff8a08 move.l #0,$ff8a0c move.l #0,$ff8a10 move.l #0,$ff8a14 move.l #0,$ff8a18 move.l #0,$ff8a1c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w d5,$ff8a30 ; rad add move.l a5,$ff8a32 ; flytta dest. adress till blitter chipet move.w d4,$ff8a36 ; X rknare move.w d6,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! move.w #$345,$ff8240 jsr init_y_bli1 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add1,a4 tst.w 2(a0) blt draw_y_clip_poly add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner move.l d4,save_source add.w (a1,d0.w),a6 ; dest in add.w (a2,d1.w),a6 ; dest ner move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 move.l save_source,$32(a3) ; stt dest sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. addq.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts * Y clip polyn draw_y_clip_poly: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. addq.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #8,$20(a3) move.w -2(a4),$22(a3) move.l a6,$32(a3) move.w #$ffff,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ************************************************ DRA MIG BAKLNGES rita_bak: move.w #$770,$ff8240 * Clear tillf screen move.l #tillf_scr,a5 ; tillf screen adr move.w 2(a0),d4 bge .small_jmp move.w #0,d4 .small_jmp: mulu.w #160,d4 add.w d4,a5 move.w 4(a0),d4 asr.w #4,d4 asl.w #3,d4 add.w d4,a5 move.w (a0),d4 sub.w 4(a0),d4 asr.w #4,d4 addq.w #2,d4 ; antal word att rita move.w d4,d5 asl.w #3,d5 neg.w d5 add.w #168,d5 ;160+xinc move.w 6(a0),d6 bge .sml_jmp move.w #0,d6 .sml_jmp: move.w 2(a0),d7 bge .sml_jmp2 move.w #0,d7 .sml_jmp2: sub.w d7,d6 addq.w #2,d6 move.l #0,$ff8a00 move.l #0,$ff8a04 move.l #0,$ff8a08 move.l #0,$ff8a0c move.l #0,$ff8a10 move.l #0,$ff8a14 move.l #0,$ff8a18 move.l #0,$ff8a1c move.w #$ffff,$ff8a28 move.w #$ffff,$ff8a2c move.w #0,$ff8a20 move.w #0,$ff8a22 move.l #tom,$ff8a24 ; flytta source. adress till blitter chipet move.w #8,$ff8a2e move.w d5,$ff8a30 ; rad add move.l a5,$ff8a32 ; flytta dest. adress till blitter chipet move.w d4,$ff8a36 ; X rknare move.w d6,$ff8a38 ; Y rknare move.b #1,$ff8a3a ; HOP move.b #3,$ff8a3b ; Op move.b #0,$ff8a3d ; hger shift move.b #%11000011,$ff8a3c ; let's go !!!! move.w #$345,$ff8240 jsr init_y_bli2 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3  lea bredd_add2,a4 tst.w 2(a0) blt draw_y_clip_poly2 add.w d0,d0 add.w d0,d0 add.w d1,d1 move.l #tillf_scr,d4 ; tillf. screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in add.w (a2,d1.w),d4 ; dest ner add.w (a1,d0.w),a6 ; dest in add.w (a2,d1.w),a6 ; dest ner move.l d4,save_source move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 sub.w d1,d4 ; y2-y1=ant scan subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. add.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts draw_no_poly: rts draw_y_clip_poly2: add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 sub.w (a0),d2 neg.w d2 moveq #0,d0 ; x1 move.w 2(a0),d1 ; y1 move.w d3,d4 ; save y2 subq.w #1,d4 ; -1 for the dbf moveq #0,d6 sub.w d1,d3 ; y2-y1 bne .do_a_little_jump move.w #1,d4 asl.w #6,d2 move.w d2,d6 move.w #0,d2 move.l a4,a5 ; save move.w d4,d5 move.w 4(a0),d6 muls.w d2,d6 bra .tri_lp1 .do_a_little_jump: asl.w #6,d2 ext.l d2 divs d3,d2 ; d3=k*64 move.l a4,a5 ; save move.w 2(a0),d6 neg.w d6 muls.w d2,d6 move.w d4,d5 .tri_lp1 add.w d2,d6 ; x1+k move.w d6,d0 asr.w #3,d0 ; /64*8 and.w #%1111111111111000,d0 move.l a5,a4 add.w d0,a4 move.w (a4)+,$28(a3) ; slutmask1 move.w (a4)+,$2c(a3) ; slutmask3 move.w (a4)+,$36(a3) ; xcount move.w #1,$38(a3) ; ycount move.w (a4)+,$30(a3) ; yadd move.b #$c0,$3c(a3) ; blitta dbf d4,.tri_lp1 * Nu har vi ritat triangeln p en egen skrm och den skall nu ritas * p den riktiga skrmen. addq.w #1,d5 move.w 8(a0),d0 ; col move.b #3,$3b(a3) ; det normala btst.l #0,d0 bne .no_bitplane1 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane1: move.w #$7,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #1,d0 bne .no_bitplane2 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane2: move.w #$5,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.b #3,$3b(a3) ; det normala btst.l #2,d0 bne .no_bitplane3 move.b #4,$3b(a3) ; men skall ej planet ritas s maska det .no_bitplane3: move.w #$3,$ff8240 move.l save_source,$24(a3) move.w #-8,$20(a3) move.w -2(a4),$22(a3) add.w #8,$22(a3) move.l a6,$32(a3) add.l #8,$32(a3) move.w #$0,$28(a3) ; slutmask1 move.w #$ffff,$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount add.w #1,$36(a3) move.w d5,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd add.w #8,$30(a3) move.b #2,$3a(a3) move.b #$c0,$3c(a3) ; blitta * Rita den raka delen av vggen move.w 6(a0),d4 neg.w d4 add.w #99,d4 tst.w d4 ble .no_rak_draw sub.w #4,a6 ; Fixxa till skrmadressen subq.w #1,d5 mulu.w #160,d5 add.w d5,a6 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0  bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w -8(a4),$28(a3) ; slutmask1 move.w -6(a4),$2c(a3) ; slutmask3 move.w -4(a4),$36(a3) ; xcount move.w d4,$38(a3) ; ycount move.w -2(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta .no_rak_draw: rts ***************************************************************** * Om Triangeln inte syns skall det bara ritas en fyrkant pure_box: move.w #$300,$ff8240 tst.w (a0) bge .hoppy move.w #0,(a0) .hoppy: cmp.w #255,(a0) ble .hoppy2 move.w #255,(a0) .hoppy2: tst.w 4(a0) bge .hoppy3 move.w #0,4(a0) .hoppy3: cmp.w #255,4(a0) ble .hoppy4 move.w #255,4(a0) .hoppy4: jsr init_y_bli2 move.w 4(a0),d0 cmp.w (a0),d0 ble .hopp move.w (a0),4(a0) move.w d0,(a0) move.w 6(a0),d0 move.w 2(a0),6(a0) move.w d0,2(a0) .hopp: move.w (a0),d0 move.w 2(a0),d1 move.w 4(a0),d2 move.w 6(a0),d3 lea x_add,a1 lea y_add,a2 lea $ffff8a00,a3 lea bredd_add2,a4 add.w d0,d0 add.w d0,d0 move.l #tillf_scr,d4 ; screen adr move.l screen,a6 ; screen adr add.w (a1,d0.w),d4 ; dest in move.l d4,save_source add.w (a1,d0.w),a6 ; dest in move.l d4,$32(a3) ; stt dest moveq #0,d4 move.w 2(a1,d0.w),d4 ; rtt skew och allt add.l d4,a4 move.w (a0),d3 sub.w d3,d2 tst.w d2 bge .haha neg.w d2 .haha: asl.w #3,d2 add.w d2,a4 * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw * move.w (a4),$28(a3) ; slutmask1 * move.w 2(a4),$2c(a3) ; slutmask3 * move.w 4(a4),$36(a3) ; xcount * move.w #99,$38(a3) ; ycount * move.w 6(a4),$30(a3) ; yadd * move.b #$c0,$3c(a3) ; blitta * move.w 6(a0),d4 * neg.w d4 * add.w #99,d4 * tst.w d4 * ble .no_rak_draw * sub.w #4,a6 ; Fixxa till skrmadressen * mulu.w #160,d5 * add.w d5,a6 moveq #0,d0 move.w 8(a0),d0 move.l #-1,d3 ;det normala btst.l #0,d0 bne .no_bitplane1_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane1_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$700,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #1,d0 bne .no_bitplane2_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane2_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$500,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta add.w #2,a6 move.l #-1,d3 ; det normala btst.l #2,d0 bne .no_bitplane3_2 move.l #0,d3 ; men skall ej planet ritas s maska det .no_bitplane3_2: move.l d3,(a3) move.l d3,4(a3) move.l d3,8(a3) move.l d3,12(a3) move.l d3,16(a3) ; men skall ej planet ritas s maska det move.l d3,20(a3) move.l d3,24(a3) move.l d3,28(a3) move.w #$300,$ff8240 move.w #0,$20(a3) move.w #0,$22(a3) move.w (a4),$28(a3) ; slutmask1 move.w 2(a4),$2c(a3) ; slutmask3 move.w 4(a4),$36(a3) ; xcount move.w #99,$38(a3) ; ycount move.w 6(a4),$30(a3) ; yadd move.l a6,$32(a3) move.b #1,$3a(a3) move.b #3,$3b(a3) move.b #$c0,$3c(a3) ; blitta *.no_rak_draw: *.no_rak_draw: rts *************************************************************************** * Clipping rutinen ; step p 1/32=0,03125 vilket r lite fr dlig * precision... clipp: * Sortera frst bort boxen om den inte syns ((x1 och x2)<0 eller >255) tst.w (a0) bge .no_bort tst.w 4(a0) bge .no_bort bra draw_no_poly .no_bort: cmp.w #255,(a0) ble .no_bort2 cmp.w #255,4(a0) ble .no_bort2 bra draw_no_poly .no_bort2: * Clipp linjen move.w (a0),d1 sub.w 4(a0),d1 move.w 2(a0),d0 sub.w 6(a0),d0 asl.w #5,d0 ext.l d0 divs.w d1,d0 ; d0 innehller K vrdet p linjen * X1<0 klipp tst.w (a0) bge .no_clipp_x1 move.w 4(a0),d3 muls.w d0,d3 move.w 6(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,(a0) move.w d4,2(a0) .no_clipp_x1: * X1>255 klipp cmp.w #255,(a0) ble .no_clipp_x1_2 move.w 4(a0),d3 muls.w d0,d3 move.w #255,d5 muls.w d0,d5 move.w 6(a0),d4 asl.w #5,d4 add.w d5,d4 sub.w d3,d4 asr.w #5,d4 move.w #255,(a0) move.w d4,2(a0) .no_clipp_x1_2: * X2<0 klipp tst.w 4(a0) bge .no_clipp_x2 move.w (a0),d3 muls.w d0,d3 move.w 2(a0),d4 asl.w #5,d4 sub.w d3,d4 asr.w #5,d4 move.w #0,4(a0) move.w d4,6(a0) .no_clipp_x2: * X2>255 klipp cmp.w #255,4(a0) ble .no_clipp_x2_2 move.w #255,d3 muls.w d0,d3 move.w (a0),d5 muls.w d0,d5 move.w 2(a0),d4 asl.w #5,d4 sub.w d5,d4 add.w d3,d4 asr.w #5,d4 move.w #255,4(a0) move.w d4,6(a0) .no_clipp_x2_2: bra back_to_poly **************** * Endif * **************** end movem.l savepal,d0-d7 movem.l d0-d7,$ffff8240.w move.l svbi,$70.w move.w oldrez,-(sp) move.l oldphys,-(sp) move.l oldlog,-(sp) move.w #5,-(sp) trap #14 lea 12(sp),sp move.l ustk,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 ***************** * VBI och VSYNC * ***************** vbi add.w #1,vflag rte vsync tst.w vflag beq.s vsync clr.w vflag rts vsync2 cmp.w vflag,d0 ; d0 = parameter fr antal vbi bgt.s vsync2 clr.w vflag rts ********************** * olika screenseters * ********************** change_screen move.l a0,-(sp) move.l screen,a0 move.l screen,screen+4 move.l a0,screen move.l (sp)+,a0 set_screen move.b screen+1,$ffff8201.w move.b screen+2,$ffff8203.w move.b screen+3,$ffff820d.w rts set_screen2 move.b screen+4+1,$ffff8201.w move.b screen+4+2,$ffff8203.w move.b screen+4+3,$ffff820d.w rts *************************************************************************** section data screen dc.l scrblk,scrblk+32000 y_normal dc.w 99 koords ds.w 5 x1: dc.w 11 y1: dc.w 30 x2: dc.w 100 y2: dc.w 10 tom: dc.w 0 slutmasker dc.w %1000000000000000 dc.w %1100000000000000 dc.w %1110000000000000 dc.w %1111000000000000 dc.w %1111100000000000 dc.w %1111110000000000 dc.w %1111111000000000 dc.w %1111111100000000 dc.w %1111111110000000 dc.w %1111111111000000 dc.w %1111111111100000 dc.w %1111111111110000 dc.w %1111111111111000 dc.w %1111111111111100 dc.w %1111111111111110 dc.w %1111111111111111 dc.w 0 ; endcode slutmasker3 dc.w %1111111111111111 dc.w %0111111111111111 dc.w %0011111111111111 dc.w %0001111111111111 dc.w %0000111111111111 dc.w %0000011111111111 dc.w %0000001111111111 dc.w %0000000111111111 dc.w %0000000011111111 dc.w %0000000001111111 dc.w %0000000000111111 dc.w %0000000000011111 dc.w %0000000000001111 dc.w %0000000000000111 dc.w %0000000000000011 dc.w %0000000000000001 slutmasker4 dc.w %0000000000000001 dc.w %0000000000000011 dc.w %0000000000000111 dc.w %0000000000001111 dc.w %0000000000011111 dc.w %0000000000111111 dc.w %0000000001111111 dc.w %0000000011111111 dc.w %0000000111111111 dc.w %0000001111111111 dc.w %0000011111111111 dc.w %0000111111111111 dc.w %0001111111111111 dc.w %0011111111111111 dc.w %0111111111111111 dc.w %1111111111111111 dc.w 0 ; endcode fyllt_word dc.w $ffff tomt_word: dc.w $0 section bss scrblk ds.l 2*8000 ustk ds.l 1 oldphys ds.l 1 oldlog ds.l 1 oldrez ds.l 1 svbi ds.l 1 y_add ds.w 200 x_add ds.w 640 bredd_add1 ds.w 20480 bredd_add2 ds.w 20480 tillf_scr: ds.l 4000 savepal ds.w 16 vflag ds.w 1 save_source: ds.l 1 end