home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / Source / pheno.lha / pha / StrBars2.S < prev    next >
Encoding:
Text File  |  1987-12-17  |  12.3 KB  |  494 lines

  1. ;------------------------------------------------------------------------
  2. ;-                                    -
  3. ;-                 Vector-Stars                -
  4. ;-                                    -
  5. ;------------------------------------------------------------------------
  6.  
  7. org    $20000
  8. load    $20000
  9.  
  10. >EXTERN        'Perspektiv',Per
  11.  
  12. AntBars:    =    6
  13.  
  14. ;------------------------------------------------------------------------
  15.  
  16. S:        movem.l    d0-d7/a0-a6,-(sp)
  17.         lea.l    $dff000,a6
  18.         bsr    Startup
  19.         bsr    InitRutin
  20.         bsr    StartCop
  21.         bsr    MainLoop
  22.         bsr    RestoreCop
  23.         movem.l    (sp)+,d0-d7/a0-a6
  24.         rts
  25.  
  26. Startup:    move.w    2(a6),d0
  27.         bset    #15,d0
  28.         move.w    d0,OldDma
  29.         move.w    $1c(a6),d0
  30.         bset    #15,d0
  31.         move.w    d0,OldIrq
  32.         move.l    $4,a6
  33.         lea.l    Lib(pc),a1
  34.         moveq    #0,d0
  35.         jsr    -408(a6)
  36.         move.l    d0,a0
  37.         move.l    $26(a0),OldCop
  38.         lea.l    $dff000,a6
  39.         rts
  40.  
  41. StartCop:    move.l    #CopperList,$80(a6)
  42.         tst.w    $88(a6)
  43.         move.w    #$7fff,$96(a6)
  44.         move.w    #$87c0,$96(a6)
  45.         move.w    #$7fff,$9a(a6)
  46.         move.w    #$c000,$9a(a6)
  47.         rts
  48.  
  49. RestoreCop:    move.l    OldCop(pc),$80(a6)
  50.         tst.w    $88(a6)
  51.         move.w    OldDma(pc),$96(a6)
  52.         move.w    OldIrq(pc),$9a(a6)
  53.         rts
  54.  
  55.     ;-----------------------------------------------------
  56.         OldCop:        dc.l    0
  57.         OldDma:        dc.w    0
  58.         OldIrq:        dc.w    0
  59.         Lib:        dc.b    'graphics.library',0
  60.                 even
  61.     ;-----------------------------------------------------
  62.  
  63. ;------------------------------------------------------------------------
  64.  
  65. BlitWait:    btst    #14,2(a6)
  66.         bne.S    BlitWait
  67.         rts
  68.  
  69. ClearScreen:    bsr.S    BlitWait
  70.         move.l    #-1,$44(a6)
  71.         move.l    #$01000000,$40(a6)
  72.         move.w    d2,$66(a6)
  73.         move.l    d0,$54(a6)
  74.         move.w    d1,$58(a6)
  75.         rts
  76.  
  77. ;------------------------------------------------------------------------
  78.  
  79. InitRutin:    move.l    CopAdr(pc),a0
  80.         move.l    CopAdr+4(pc),a1
  81.         lea.l    CopperList(pc),a2
  82. MLoop:        move.l    (a2),(a0)+
  83.         move.l    (a2)+,(a1)+
  84.         cmp.l    #-2,(a2)
  85.         bne.S    MLoop
  86.  
  87.         move.l    a0,d0
  88.         sub.l    CopAdr,d0
  89.         move.l    d0,CopAdd
  90.  
  91.         move.l    #$2007fffe,d0
  92.         move.l    #$01800000,d1
  93.         move.l    #$20ddfffe,d2
  94.         move.l    #$01000000,d3
  95.         move.w    #280-1,d7
  96. MLoop2:        move.l    d0,(a0)+
  97.         move.l    d0,(a1)+
  98.         move.l    d1,(a0)+
  99.         move.l    d1,(a1)+
  100.         move.l    d2,(a0)+
  101.         move.l    d2,(a1)+
  102.         add.l    d3,d0
  103.         add.l    d3,d2
  104.         dbra    d7,MLoop2
  105.         move.l    #-2,(a0)+
  106.         move.l    #-2,(a1)+
  107.  
  108.         lea.l    Sinus(pc),a0
  109.         lea.l    SinAdr,a1
  110.         move.w    #300-1,d7
  111. SLoop1:        move.w    (a0)+,d0
  112.         lsr.w    #1,d0
  113.         move.w    d0,(a1)+
  114.         dbra    d7,SLoop1
  115.         lea.l    SinAdr,a0
  116.         move.w    #300*9,d7
  117. SLoop2:        move.w    (a0)+,(a1)+
  118.         dbra    d7,SLoop2
  119.  
  120.         lea    MulsList,a0
  121.         moveq    #0,d0
  122.         move.w    #300-1,d7
  123. MLoop3:        move.w    d0,(a0)+
  124.         add.w    #12,d0
  125.         dbra    d7,MLoop3
  126.         rts
  127.  
  128. CopAdr:        dc.l    $60000
  129.         dc.l    $70000
  130. SinAdr:        =    $75000
  131. MulsList:    =    $7a000
  132.  
  133. CopAdd:        dc.l    0
  134.  
  135. ;------------------------------------------------------------------------
  136.  
  137. MainLoop:    cmp.b    #-1,$6(a6)
  138.         bne.S    MainLoop
  139. MainLoop2:    cmp.b    #$38,$6(a6)
  140.         bne.S    MainLoop2
  141.  
  142.         ;move.w    #$ff,$180(a6)
  143.         bsr    Bars
  144.         ;move.w    #$fff,$180(a6)
  145.  
  146.         btst    #6,$bfe001
  147.         bne.S    MainLoop
  148.         rts
  149.  
  150. ;------------------------------------------------------------------------
  151.  
  152. Bars:        bsr    Buffra
  153.         bsr    Rensa
  154.         bsr    NewSin
  155.         bsr    CalcPosses
  156.         bsr    Sortera
  157.         bsr    Blitta
  158.         rts
  159.  
  160. Sortera:    lea.l    Posses+2(pc),a0
  161.         lea.l    Posses2(pc),a1
  162.         moveq    #4,d6
  163.         moveq    #0,d2
  164.         move.w    #AntBars-1,d7
  165.         move.w    -2(a0),(a1)
  166.         move.w    (a0),2(a1)
  167.         move.w    (a0),d2
  168.         addq.l    #4,a0
  169.         subq.w    #1,d7
  170.  
  171.         bsr    BlitWait
  172.         move.l    #-1,$44(a6)
  173.         move.l    #$09f00002,$40(a6)
  174.         clr.l    $64(a6)
  175.         move.l    a1,$50(a6)
  176.         move.l    a1,$54(a6)
  177.  
  178. SortLoop:    move.w    (a0),d0
  179.         move.w    d6,d5
  180.         move.l    a1,a2
  181.         addq.w    #2,a2
  182.         cmp.w    d0,d2
  183.         blo.S    NoLow
  184.         move.w    -2(a0),(a1,d6.W)
  185.         addq.w    #2,d6
  186.         move.w    d0,(a1,d6.W)
  187.         addq.w    #2,d6
  188.         move.w    d0,d2
  189.         bra.S    Next
  190. NoLow:        cmp.w    (a2),d0
  191.         bge.S    MoveIt
  192.         addq.w    #4,a2
  193.         subq.w    #4,d5
  194.         bne.S    NoLow
  195. MoveIt:        move.l    a2,a4
  196.         add.w    d5,a2
  197.         move.l    a2,a3
  198.         addq.w    #4,a3
  199.         lsr.w    #1,d5
  200.         addq.w    #2,d5
  201.         lsl.w    #6,d5
  202.         addq.w    #1,d5
  203.         move.l    a2,$50(a6)
  204.         move.l    a3,$54(a6)
  205.         move.w    d5,$58(a6)
  206. WW:        btst    #14,$2(a6)
  207.         bne.S    WW
  208.         move.w    d0,(a4)
  209.         move.w    -2(a0),-2(a4)
  210.         addq.w    #4,d6
  211. Next:        addq.w    #4,a0
  212.         dbra    d7,SortLoop
  213.         rts
  214.  
  215. Buffra:        move.l    CopAdr(pc),d0
  216.         move.l    CopAdr+4(pc),CopAdr
  217.         move.l    d0,CopAdr+4
  218.         move.l    d0,$80(a6)
  219.         tst.w    $88(a6)
  220.         rts
  221.  
  222. Rensa:        move.l    CopAdr(pc),d0
  223.         add.l    CopAdd(pc),d0
  224.         addq.l    #6,d0
  225.         move.w    #12-2,d2
  226.         move.w    #280*64+1,d1
  227.         bsr    ClearScreen
  228.         rts
  229.  
  230. NewSin:        moveq    #0,d0
  231.         move.w    Oldie(pc),d0
  232.         add.w    #297,d0
  233.         cmp.w    #300,d0
  234.         bls.S    NoD
  235.         sub.w    #300,d0
  236. NoD:        move.w    d0,Oldie
  237.         add.w    d0,d0
  238.         add.l    #SinAdr,d0
  239.         move.l    d0,SinSave
  240.         moveq    #0,d0
  241.         move.w    Oldie2(pc),d0
  242.         addq.w    #2,d0
  243.         cmp.w    #300,d0
  244.         bls.S    NoD2
  245.         sub.w    #300,d0
  246. NoD2:        move.w    d0,Oldie2
  247.         add.w    d0,d0
  248.         add.l    #SinAdr,d0
  249.         move.l    d0,SinSave2
  250.  
  251.         move.w    ZVinkel(pc),d0
  252.         addq.w    #2,d0
  253.         cmp.w    #720,d0
  254.         bls.S    NoV1
  255.         sub.w    #720,d0
  256. NoV1:        move.w    d0,ZVinkel
  257.         rts
  258.  
  259. CalcPosses:    move.l    SinSave(pc),a0
  260.         move.l    SinSave2(pc),a1
  261.         lea.l    VecSin(pc),a2
  262.         lea.l    Posses(pc),a3
  263.         lea.l    MulsList,a4
  264.         lea.l    Per,a5
  265.         move.w    ZVinkel(pc),d1
  266.         move.w    (a2,d1.W),d0
  267.         add.l    #180,a2
  268.         move.w    (a2,d1.W),d1
  269.         move.w    #-200,d2
  270.         move.w    #0,d6
  271.         move.w    #AntBars-1,d7
  272. CalcLoop:    move.w    (a0),d3
  273.         add.w    (a1),d3
  274.         move.w    d1,d4
  275.         muls    d3,d4
  276.         move.w    d0,d5
  277.         muls    d2,d5
  278.         sub.l    d5,d4
  279.         asl.l    #2,d4
  280.         swap    d4        ;Y
  281.         muls    d0,d3
  282.         move.w    d2,d5
  283.         muls    d1,d5
  284.         add.l    d3,d5
  285.         asl.l    #2,d5
  286.         swap    d5        ;Z
  287.         add.w    #140,d4
  288.         add.w    #300,d5
  289.         move.w    d5,d6
  290.         add.w    d6,d6
  291.         move.w    (a5,d6.W),d6
  292.         muls    d6,d4
  293.         asl.l    #5,d4
  294.         swap    d4
  295.         add.w    d4,d4
  296.         move.w    (a4,d4.W),(a3)+
  297.         move.w    d5,(a3)+
  298.         add.w    #16,d2
  299.         add.w    #12,a0
  300.         add.w    #18,a1
  301.         dbra    d7,CalcLoop
  302.         rts
  303.  
  304. Blitta:        move.l    CopAdr(pc),d0
  305.         add.l    CopAdd(pc),d0
  306.         addq.l    #6,d0
  307.         move.l    #Bar,d1
  308.         lea.l    Posses2(pc),a0
  309.         move.w    #32*64+1,d3
  310.         bsr    BlitWait
  311.         move.l    #-1,$44(a6)
  312.         move.l    #$09f00000,$40(a6)
  313.         move.w    #12-2,$66(a6)
  314.         clr.w    $64(a6)
  315.         move.l    d0,$54(a6)
  316.         move.l    d1,$50(a6)
  317.         lea.l    $52(a6),a1
  318.         lea.l    $56(a6),a2
  319.         lea.l    $58(a6),a3
  320.         move.w    #AntBars-1,d7
  321.  
  322. BLoop:        move.w    d0,d2
  323.         add.w    (a0),d2
  324.         move.w    d1,(a1)
  325.         move.w    d2,(a2)
  326.         move.w    d3,(a3)
  327.         addq.w    #4,a0
  328.         dbra    d7,BLoop
  329.         rts
  330.  
  331. Oldie:        dc.w    0
  332. SinSave:    dc.l    0
  333. Oldie2:        dc.w    0
  334. SinSave2:    dc.l    0
  335.  
  336. ZVinkel:    dc.w    0
  337.  
  338. Posses:        blk.w    AntBars*4,0
  339. Posses2:    blk.w    AntBars*4,0
  340.  
  341. Bar:        dc.w    0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
  342.         dc.w    $ff0,$ee0,$dd0,$cc0,$bb0,$aa0,$990,$880
  343.         dc.w    $770,$660,$550,$440,$330,$220,$110,$000
  344.  
  345. ;------------------------------------------------------------------------
  346.  
  347. CopperList:    dc.l    $008e4866,$009010c6,$00920030,$009400d8
  348.         dc.l    $01020000,$01040000,$01080000,$010a0000
  349.  
  350.         dc.l    $01800000
  351.         dc.l    $01000000
  352.  
  353.         dc.l    -2
  354.  
  355. ;------------------------------------------------------------------------
  356.  
  357. Sinus:    dc.w    240,240,240,240,240,239,239,239
  358.     dc.w    238,238,237,237,236,236,235,234
  359.     dc.w    233,232,232,231,230,229,227,226
  360.     dc.w    225,224,223,221,220,219,217,216
  361.     dc.w    214,212,211,209,207,206,204,202
  362.     dc.w    200,198,196,195,193,191,188,186
  363.     dc.w    184,182,180,178,176,173,171,169
  364.     dc.w    167,164,162,159,157,155,152,150
  365.     dc.w    147,145,142,140,138,135,133,130
  366.     dc.w    128,125,123,120,117,115,112,110
  367.     dc.w    107,105,102,100,98,95,93,90
  368.     dc.w    88,85,83,81,78,76,73,71
  369.     dc.w    69,67,64,62,60,58,56,54
  370.     dc.w    52,49,47,45,44,42,40,38
  371.     dc.w    36,34,33,31,29,28,26,24
  372.     dc.w    23,21,20,19,17,16,15,14
  373.     dc.w    13,11,10,9,8,8,7,6
  374.     dc.w    5,4,4,3,3,2,2,1
  375.     dc.w    1,1,0,0,0,0,0,0
  376.     dc.w    0,0,0,1,1,1,2,2
  377.     dc.w    3,3,4,4,5,6,7,8
  378.     dc.w    8,9,10,11,13,14,15,16
  379.     dc.w    17,19,20,21,23,24,26,28
  380.     dc.w    29,31,33,34,36,38,40,42
  381.     dc.w    44,45,47,49,52,54,56,58
  382.     dc.w    60,62,64,67,69,71,73,76
  383.     dc.w    78,81,83,85,88,90,93,95
  384.     dc.w    98,100,102,105,107,110,112,115
  385.     dc.w    117,120,123,125,128,130,133,135
  386.     dc.w    138,140,142,145,147,150,152,155
  387.     dc.w    157,159,162,164,167,169,171,173
  388.     dc.w    176,178,180,182,184,186,188,191
  389.     dc.w    193,195,196,198,200,202,204,206
  390.     dc.w    207,209,211,212,214,216,217,219
  391.     dc.w    220,221,223,224,225,226,227,229
  392.     dc.w    230,231,232,232,233,234,235,236
  393.     dc.w    236,237,237,238,238,239,239,239
  394.     dc.w    240,240,240,240
  395.  
  396.  
  397. VecSin:    dc.w    16384,16382,16374,16362,16344,16322,16294,16262
  398.     dc.w    16225,16182,16135,16083,16026,15964,15897,15826
  399.     dc.w    15749,15668,15582,15491,15396,15296,15191,15082
  400.     dc.w    14967,14849,14726,14598,14466,14330,14189,14044
  401.     dc.w    13894,13741,13583,13421,13255,13085,12911,12733
  402.     dc.w    12551,12365,12176,11982,11786,11585,11381,11174
  403.     dc.w    10963,10749,10531,10311,10087,9860,9630,9397
  404.     dc.w    9162,8923,8682,8438,8192,7943,7692,7438
  405.     dc.w    7182,6924,6664,6401,6137,5871,5603,5334
  406.     dc.w    5063,4790,4516,4240,3963,3685,3406,3126
  407.     dc.w    2845,2563,2280,1996,1712,1427,1142,857
  408.     dc.w    571,285,0,-285,-571,-857,-1142,-1428
  409.     dc.w    -1712,-1996,-2280,-2563,-2845,-3126,-3406,-3685
  410.     dc.w    -3963,-4240,-4516,-4790,-5063,-5334,-5603,-5871
  411.     dc.w    -6137,-6401,-6664,-6924,-7182,-7438,-7692,-7943
  412.     dc.w    -8192,-8438,-8682,-8923,-9162,-9397,-9630,-9860
  413.     dc.w    -10087,-10311,-10531,-10749,-10963,-11174,-11381,-11585
  414.     dc.w    -11786,-11982,-12176,-12365,-12551,-12733,-12911,-13085
  415.     dc.w    -13255,-13421,-13583,-13741,-13894,-14044,-14189,-14330
  416.     dc.w    -14466,-14598,-14726,-14849,-14967,-15082,-15191,-15296
  417.     dc.w    -15396,-15491,-15582,-15668,-15749,-15826,-15897,-15964
  418.     dc.w    -16026,-16083,-16135,-16182,-16225,-16262,-16294,-16322
  419.     dc.w    -16344,-16362,-16374,-16382,-16384,-16382,-16374,-16362
  420.     dc.w    -16344,-16322,-16294,-16262,-16225,-16182,-16135,-16083
  421.     dc.w    -16026,-15964,-15897,-15826,-15749,-15668,-15582,-15491
  422.     dc.w    -15396,-15296,-15191,-15082,-14968,-14849,-14726,-14598
  423.     dc.w    -14466,-14330,-14189,-14044,-13894,-13741,-13583,-13421
  424.     dc.w    -13255,-13085,-12911,-12733,-12551,-12365,-12176,-11982
  425.     dc.w    -11786,-11585,-11381,-11174,-10963,-10749,-10531,-10311
  426.     dc.w    -10087,-9860,-9630,-9397,-9162,-8923,-8682,-8438
  427.     dc.w    -8192,-7943,-7692,-7438,-7182,-6924,-6664,-6402
  428.     dc.w    -6137,-5871,-5604,-5334,-5063,-4790,-4516,-4240
  429.     dc.w    -3963,-3685,-3406,-3126,-2845,-2563,-2280,-1996
  430.     dc.w    -1712,-1428,-1143,-857,-572,-286,0,285
  431.     dc.w    571,857,1142,1427,1712,1996,2280,2562
  432.     dc.w    2844,3126,3406,3685,3963,4240,4515,4790
  433.     dc.w    5062,5334,5603,5871,6137,6401,6663,6924
  434.     dc.w    7182,7438,7691,7943,8192,8438,8682,8923
  435.     dc.w    9161,9397,9630,9860,10087,10310,10531,10748
  436.     dc.w    10963,11173,11381,11585,11785,11982,12175,12365
  437.     dc.w    12551,12732,12910,13085,13255,13421,13583,13740
  438.     dc.w    13894,14044,14189,14330,14466,14598,14726,14849
  439.     dc.w    14967,15081,15191,15296,15396,15491,15582,15668
  440.     dc.w    15749,15826,15897,15964,16026,16083,16135,16182
  441.     dc.w    16224,16262,16294,16322,16344,16361,16374,16382
  442.  
  443.     dc.w    16384,16382,16374,16362,16344,16322,16294,16262
  444.     dc.w    16225,16182,16135,16083,16026,15964,15897,15826
  445.     dc.w    15749,15668,15582,15491,15396,15296,15191,15082
  446.     dc.w    14967,14849,14726,14598,14466,14330,14189,14044
  447.     dc.w    13894,13741,13583,13421,13255,13085,12911,12733
  448.     dc.w    12551,12365,12176,11982,11786,11585,11381,11174
  449.     dc.w    10963,10749,10531,10311,10087,9860,9630,9397
  450.     dc.w    9162,8923,8682,8438,8192,7943,7692,7438
  451.     dc.w    7182,6924,6664,6401,6137,5871,5603,5334
  452.     dc.w    5063,4790,4516,4240,3963,3685,3406,3126
  453.     dc.w    2845,2563,2280,1996,1712,1427,1142,857
  454.     dc.w    571,285,0,-285,-571,-857,-1142,-1428
  455.     dc.w    -1712,-1996,-2280,-2563,-2845,-3126,-3406,-3685
  456.     dc.w    -3963,-4240,-4516,-4790,-5063,-5334,-5603,-5871
  457.     dc.w    -6137,-6401,-6664,-6924,-7182,-7438,-7692,-7943
  458.     dc.w    -8192,-8438,-8682,-8923,-9162,-9397,-9630,-9860
  459.     dc.w    -10087,-10311,-10531,-10749,-10963,-11174,-11381,-11585
  460.     dc.w    -11786,-11982,-12176,-12365,-12551,-12733,-12911,-13085
  461.     dc.w    -13255,-13421,-13583,-13741,-13894,-14044,-14189,-14330
  462.     dc.w    -14466,-14598,-14726,-14849,-14967,-15082,-15191,-15296
  463.     dc.w    -15396,-15491,-15582,-15668,-15749,-15826,-15897,-15964
  464.     dc.w    -16026,-16083,-16135,-16182,-16225,-16262,-16294,-16322
  465.     dc.w    -16344,-16362,-16374,-16382,-16384,-16382,-16374,-16362
  466.     dc.w    -16344,-16322,-16294,-16262,-16225,-16182,-16135,-16083
  467.     dc.w    -16026,-15964,-15897,-15826,-15749,-15668,-15582,-15491
  468.     dc.w    -15396,-15296,-15191,-15082,-14968,-14849,-14726,-14598
  469.     dc.w    -14466,-14330,-14189,-14044,-13894,-13741,-13583,-13421
  470.     dc.w    -13255,-13085,-12911,-12733,-12551,-12365,-12176,-11982
  471.     dc.w    -11786,-11585,-11381,-11174,-10963,-10749,-10531,-10311
  472.     dc.w    -10087,-9860,-9630,-9397,-9162,-8923,-8682,-8438
  473.     dc.w    -8192,-7943,-7692,-7438,-7182,-6924,-6664,-6402
  474.     dc.w    -6137,-5871,-5604,-5334,-5063,-4790,-4516,-4240
  475.     dc.w    -3963,-3685,-3406,-3126,-2845,-2563,-2280,-1996
  476.     dc.w    -1712,-1428,-1143,-857,-572,-286,0,285
  477.     dc.w    571,857,1142,1427,1712,1996,2280,2562
  478.     dc.w    2844,3126,3406,3685,3963,4240,4515,4790
  479.     dc.w    5062,5334,5603,5871,6137,6401,6663,6924
  480.     dc.w    7182,7438,7691,7943,8192,8438,8682,8923
  481.     dc.w    9161,9397,9630,9860,10087,10310,10531,10748
  482.     dc.w    10963,11173,11381,11585,11785,11982,12175,12365
  483.     dc.w    12551,12732,12910,13085,13255,13421,13583,13740
  484.     dc.w    13894,14044,14189,14330,14466,14598,14726,14849
  485.     dc.w    14967,15081,15191,15296,15396,15491,15582,15668
  486.     dc.w    15749,15826,15897,15964,16026,16083,16135,16182
  487.     dc.w    16224,16262,16294,16322,16344,16361,16374,16382
  488.  
  489. Per:        =    $40000
  490.  
  491.  
  492.  
  493.  
  494.