home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti_darkcoder / plasma / blueplasma.s next >
Encoding:
Text File  |  1995-12-06  |  9.5 KB  |  412 lines

  1.  
  2. ; Plasma 2 bitplanes - Autore dell'originale: sconosciuto
  3. ;
  4. ; Modificato/Fixato by Randy/Ram Jam in 1995
  5.  
  6.     SECTION prg,CODE
  7.  
  8. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  9.  
  10. ;*****************************************************************************
  11.     include    "startup2.s"    ; Salva Copperlist Etc.
  12. ;*****************************************************************************
  13.  
  14.         ;5432109876543210
  15. DMASET    EQU    %1000001111000000    ; copper,bitplane,blitter DMA
  16.  
  17. Waitdisk    EQU    10
  18.  
  19. width    = 48
  20. depth    = 320
  21. fspeed    = 100
  22.  
  23. Start:
  24.     bsr.w    make_stable    ; fa sintable a mempty
  25.  
  26.     bsr.w    setup_copcols    ; fai la copperlist
  27.  
  28.     move.l    #pic,d0
  29.     move.w    d0,pl0l
  30.     swap    d0
  31.     move.w    d0,pl0h
  32.     move.l    #wind,d0
  33.     move.w    d0,pl1l
  34.     swap    d0
  35.     move.w    d0,pl1h
  36.  
  37.     move.l    #pic+(40*40)+6,marker
  38.     clr.w    effectstage
  39.  
  40.     lea    $dff000,a5
  41.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  42.  
  43.     move.w    #0,$64(a5)        ; bltamod
  44.     move.w    #4*(width+2)-2,$66(a5)    ; bltdmod
  45.     move.l    #$09f00000,$40(a5)    ; bltcon0/1
  46.     move.l    #-1,$44(a5)        ; bltfwm/lwm
  47.  
  48.     bsr.s    fadeeffect    ; Inizializiamo tutto (come fare 1 loop)
  49.     bsr.w    sine_vert    ; Sine verticale con loop di blittate
  50.     bsr.w    sine_horiz    ; modifica i bplcon1 in copperlist con la CPU
  51.  
  52.     move.l    #NewCopper,$80(a5)    ; Puntiamo la nostra COP
  53.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  54.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  55.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  56.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  57.  
  58. loop:
  59.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  60.     MOVE.L    #$0e000,d2    ; linea da aspettare = $e0
  61. Waity1:
  62.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  63.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  64.     CMPI.L    D2,D0        ; aspetta la linea $e0
  65.     BNE.S    Waity1
  66.  
  67.     bsr.s    fadeeffect    ; Scegli effect
  68.     bsr.w    sine_vert    ; Sine verticale con loop di blittate
  69.     bsr.w    sine_horiz    ; modifica i bplcon1 in copperlist con la CPU
  70.  
  71.     btst #6,$bfe001
  72.     bne.s loop
  73.     RTS            ; Quit
  74.  
  75.  
  76. mempty:
  77.     dc.l memory1
  78.  
  79.  
  80. ;*****************************************************************************
  81. ;    Cambia gli effetti secondo la lista.
  82. ;*****************************************************************************
  83.  
  84. fadeeffect:
  85.     move.w    effectstage(PC),d0
  86.     lea    oldeffect(PC),a0
  87.     move.l    neweffect(PC),a1
  88.     lea    thiseffect(PC),a2
  89.     moveq    #4-1,d7
  90. nextelement:
  91.     move.w    (a0)+,d1
  92.     move.w    (a1)+,d2
  93.     move.w    d2,d3
  94.     sub.w    d1,d3
  95.     muls.w    d0,d3
  96.     divs.w    #fspeed,d3
  97.     add.w    d3,d1
  98.     move.w    d1,(a2)+
  99.     dbra    d7,nextelement
  100.  
  101.     cmp.w    #fspeed,effectstage
  102.     beq.s    nexteffect
  103.     addq.w    #1,effectstage
  104.     rts
  105.  
  106. nexteffect:
  107.     lea    thiseffect(PC),a0
  108.     lea    oldeffect(PC),a1
  109.     move.l    (a0)+,(a1)+
  110.     move.l    (a0)+,(a1)+
  111.     add.l    #4*2,neweffect
  112.     clr.w    effectstage
  113.     move.l    neweffect(PC),a0
  114.     cmp.w    #$ffff,(a0)
  115.     beq.s    firsteffect
  116.     rts
  117.  
  118. firsteffect:
  119.     move.l    #effectlist,neweffect
  120.     rts
  121.  
  122. ;*****************************************************************************
  123.  
  124. setup_copcols:
  125.     lea    copcols,a0    ; colori in coplist
  126.     move.w    #$4039,d2    ; wait
  127.     move.w    #(depth/2)-1,d7
  128. sc_loop1:
  129.     move.w    #(width/2)-1,d6
  130.     move.w    #$102,(a0)+    ; dff102 bplcon1
  131.     move.w    d7,(a0)+
  132.     move.w    d2,(a0)        ; Wait prima word
  133.     addq.w    #1,a0        ; secondo byte (pos. XX)
  134.     bset.b    #0,(a0)+
  135.     add.w    #$0100,d2    ; Waita 1 linea sotto
  136.     move.w    #$fffe,(a0)+    ; wait seconda word
  137. sc_loop2:
  138.     move.w    #$186,(a0)+    ; Color3
  139.     clr.w    (a0)+
  140.     move.w    #$184,(a0)+    ; Color2
  141.     clr.w    (a0)+
  142.     dbra    d6,sc_loop2
  143.     dbra    d7,sc_loop1
  144.     rts
  145.  
  146.  
  147. ;*****************************************************************************
  148. ;    Modifica i bplcon1 ($dff102) in copperlist per scroll orizzontale
  149. ;*****************************************************************************
  150.  
  151. sine_horiz:
  152.     move.w    chanh(PC),d6
  153.     add.w    d6,kstageh
  154.     move.w    kstageh(PC),d0
  155.     move.w    disph(PC),d1
  156.     move.w    #$7ffe,d2
  157.     lea    copcols+1+4,a0
  158.     move.l     mempty(PC),a1
  159.     move.w    #(depth/2)-1,d7
  160. loop_sh:
  161.     add.w    d1,d0
  162.     and.w    d2,d0
  163.     move.w    (a1,d0.w),d6
  164.     move.w    d6,d5
  165.     lsr.b    #1,d5
  166.     and.w    #$0f,d5
  167.     move.w    d5,-3(a0)
  168.     lsr.w    #3,d6
  169.     add.w    d6,d6
  170.     add.w    #$17,d6
  171.     move.b    d6,(a0)
  172.     lea    4*(width+2)(a0),a0
  173.     dbra    d7,loop_sh
  174.     rts
  175.  
  176. ;*****************************************************************************
  177. ;         Sine verticale con loop di blittate
  178. ;*****************************************************************************
  179.  
  180. sine_vert:    
  181.     move.w    chan(PC),d6
  182.     add.w    d6,kstage
  183.     move.w    kstage(PC),d0
  184.      move.w    disp(PC),d1
  185.     lea    copcols+6+4,a0
  186.     move.l     mempty(PC),a1    ; sintab
  187.     lea    colors,a2
  188.     move.w    #width-1,d7
  189. loop_sv:
  190.     add.w    d1,d0
  191.     and.w    #$7ffe,d0
  192.     move.w    (a1,d0.w),d6    ; sin
  193.     add.w    d6,d6
  194.     lea    (a2,d6.w),a3
  195.     btst    #6,$02(a5)    ; DmaConr
  196. abwait
  197.     btst    #6,$02(a5)    ; DmaConr - WaitBlit
  198.     bne.s    abwait
  199.     move.l    a3,$50(a5)        ; BltApt
  200.     move.l    a0,$54(a5)        ; BltDpt
  201.     move.w    #64*depth/2+2/2,$58(a5)    ; bltsize
  202.     addq.w    #4,a0
  203.     dbra    d7,loop_sv
  204.     rts
  205.  
  206. ;*****************************************************************************
  207. ; Questa routine si crea una SinTab
  208. ;*****************************************************************************
  209.  
  210. make_stable:
  211.     move.l    mempty(PC),a0
  212.     move.w    #$ffff/4,d7    ; 16384 words, cioe' 32768 bytes
  213.     moveq    #0,d6
  214. ms_more:
  215.     move.w    d6,d0
  216.     addq.w    #4,d6
  217.     bsr.s    get_sine
  218.     move.w    d0,(a0)+
  219.     dbra    d7,ms_more
  220.     rts
  221.  
  222. get_sine:
  223.     movem.l    d1-d7/a0-a6,-(a7)
  224.     and.l    #$ffff,d0
  225.     move.w    d0,d3
  226.     bclr    #15,d0
  227.     move.w    #$7fff,d1
  228.     sub.w    d0,d1
  229.     mulu.w    d1,d0
  230.     lsr.l    #8,d0
  231.     lsr.l    #5,d0
  232.     btst    #15,d3
  233.     beq.b    highbump
  234.     neg.w    d0
  235.     subq.w    #1,d0
  236. highbump:
  237.     add.w    #$8000,d0
  238.     divu.w    #380,d0
  239.     movem.l    (a7)+,d1-d7/a0-a6
  240.     rts
  241.  
  242. ;*****************************************************************************
  243.  
  244. marker:
  245.     dc.l 0
  246.  
  247.  
  248. effectstage:
  249.     dc.w    0
  250.  
  251. thiseffect:
  252. chan:
  253.     dc.w    0
  254. disp:
  255.     dc.w    0
  256. chanh:
  257.     dc.w    0
  258. disph:
  259.     dc.w    0
  260. oldeffect:
  261.     dcb.w    4,0
  262. neweffect:
  263.     dc.l    effectlist
  264.  
  265. effectlist:
  266.  
  267.     ;in ordine
  268.     ;3    velocita' sinus verso il basso
  269.     ;4    velocita' sinus verso l'alto
  270.  
  271. ;    dc.w    100,-500,-100,100
  272. ;    dc.w    200,-500,-200,200
  273. ;    dc.w    300,-500,-300,300
  274. ;    dc.w    400,-500,-400,400
  275. ;    dc.w    500,-500,-500,500
  276. ;    dc.w    600,-500,-600,600
  277. ;    dc.w    700,-500,-700,700
  278.  
  279. ;    dc.w    800,-400,600,500
  280. ;    dc.w    600,500,-500,300
  281. ;    dc.w    400,600,900,400
  282. ;    dc.w    -800,400,-200,500
  283.     dc.w    -500,300,600,600
  284.     dc.w    400,500,-400,400
  285.     dc.w    -100,400,800,800
  286.     dc.w    400,500,-400,1400
  287. ;    dc.w    -400,600,-300,500
  288. ;    dc.w    600,300,400,900
  289. ;    dc.w    -400,500,-500,1000
  290.     dc.w    $ffff,$ffff,$ffff,$ffff
  291.  
  292. nexttosave
  293.     dc.l    effect_store
  294.  
  295. effect_store:
  296.     ds.w    4*200
  297.  
  298. kstage:
  299.     dc.w    0
  300. kstage2:
  301.     dc.w    0
  302. kstageh:
  303.     dc.w    0
  304.  
  305. ;*****************************************************************************
  306. ;     Word colore $0RGB blittate in copperlist
  307. ;*****************************************************************************
  308.  
  309.     Section    RobaInChip,data_C
  310.  
  311. colors:
  312.     dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  313.     dc.w 1,1,1,1,1,1,2,1,2,2,2,2,2,2,3,2
  314.     dc.w 3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4
  315.     dc.w 5,5,5,5,5,5,6,5,6,6,6,6,6,6,7,6
  316.     dc.w 7,7,7,7,7,7,8,7,8,8,8,8,8,8,9,8
  317.     dc.w 9,9,9,9,9,9,$a,9,$a,$a,$a,$a,$a,$a,$b,$a
  318.     dc.w $b,$b,$b,$b,$b,$b,$c,$b,$c,$c,$c,$c,$c,$c,$d,$c
  319.     dc.w $d,$d,$d,$d,$d,$d,$e,$d,$e,$e,$e,$e,$e,$e,$f,$e
  320.     dc.w $f,$f,$f,$f,$f,$f,$f,$f,$e,$f,$e,$e,$e,$e,$e,$e
  321.     dc.w $d,$e,$d,$d,$d,$d,$d,$d,$c,$d,$c,$c,$c,$c,$c,$c
  322.     dc.w $b,$c,$b,$b,$b,$b,$b,$b,$a,$b,$a,$a,$a,$a,$a,$a
  323.     dc.w 9,$a,9,9,9,9,9,9,8,9,8,8,8,8,8,8
  324.     dc.w 7,8,7,7,7,7,7,7,6,7,6,6,6,6,6,6
  325.     dc.w 5,6,5,5,5,5,5,5,4,5,4,4,4,4,4,4
  326.     dc.w 3,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2
  327.     dc.w 1,2,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  328.     dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  329.     dc.w 1,1,1,1,1,1,2,1,2,2,2,2,2,2,3,2
  330.     dc.w 3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4
  331.     dc.w 5,5,5,5,5,5,6,5,6,6,6,6,6,6,7,6
  332.     dc.w 7,7,7,7,7,7,8,7,8,8,8,8,8,8,9,8
  333.     dc.w 9,9,9,9,9,9,$a,9,$a,$a,$a,$a,$a,$a,$b,$a
  334.     dc.w $b,$b,$b,$b,$b,$b,$c,$b,$c,$c,$c,$c,$c,$c,$d,$c
  335.     dc.w $d,$d,$d,$d,$d,$d,$e,$d,$e,$e,$e,$e,$e,$e,$f,$e
  336.     dc.w $f,$f,$f,$f,$f,$f,$f,$f,$e,$f,$e,$e,$e,$e,$e,$e
  337.     dc.w $d,$e,$d,$d,$d,$d,$d,$d,$c,$d,$c,$c,$c,$c,$c,$c
  338.     dc.w $b,$c,$b,$b,$b,$b,$b,$b,$a,$b,$a,$a,$a,$a,$a,$a
  339.     dc.w 9,$a,9,9,9,9,9,9,8,9,8,8,8,8,8,8
  340.     dc.w 7,8,7,7,7,7,7,7,6,7,6,6,6,6,6,6
  341.     dc.w 5,6,5,5,5,5,5,5,4,5,4,4,4,4,4,4
  342.     dc.w 3,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2
  343.     dc.w 1,2,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  344.     dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  345.     dc.w 1,1,1,1,1,1,2,1,2,2,2,2,2,2,3,2
  346.     dc.w 3,3,3,3,3,3,4,3,4,4,4,4,4,4,5,4
  347.     dc.w 5,5,5,5,5,5,6,5,6,6,6,6,6,6,7,6
  348.     dc.w 7,7,7,7,7,7,8,7,8,8,8,8,8,8,9,8
  349.     dc.w 9,9,9,9,9,9,$a,9,$a,$a,$a,$a,$a,$a,$b,$a
  350.     dc.w $b,$b,$b,$b,$b,$b,$c,$b,$c,$c,$c,$c,$c,$c,$d,$c
  351.     dc.w $d,$d,$d,$d,$d,$d,$e,$d,$e,$e,$e,$e,$e,$e,$f,$e
  352.     dc.w $f,$f,$f,$f,$f,$f,$f,$f,$e,$f,$e,$e,$e,$e,$e,$e
  353.     dc.w $d,$e,$d,$d,$d,$d,$d,$d,$c,$d,$c,$c,$c,$c,$c,$c
  354.     dc.w $b,$c,$b,$b,$b,$b,$b,$b,$a,$b,$a,$a,$a,$a,$a,$a
  355.     dc.w 9,$a,9,9,9,9,9,9,8,9,8,8,8,8,8,8
  356.     dc.w 7,8,7,7,7,7,7,7,6,7,6,6,6,6,6,6
  357.     dc.w 5,6,5,5,5,5,5,5,4,5,4,4,4,4,4,4
  358.     dc.w 3,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2
  359.     dc.w 1,2,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  360.  
  361.  
  362. ;*****************************************************************************
  363. ; La pic, fatta a strisce, e la "finestra"
  364.  
  365. pic:
  366.     dcb.w    40*200/2,$ff00
  367. wind:
  368.     dcb.w    40*200/2,$ffff
  369.  
  370. ;*****************************************************************************
  371.  
  372. newcopper:
  373.     dc.w    $008e,$3e91,$0090,$e0b1    ; diwstart/stop
  374.     dc.w    $0092,$0036,$0094,$00ce    ; ddfstart/stop
  375.     dc.w    $0102,$0000,$0104,$000a ; bplcon1/2
  376.     dc.w    $0108,0,$010a,0        ; bplmod
  377.     dc.w    $0100,$200        ; bplcon0 - 0 bitplanes
  378.     dc.w    $3e09,$fffe        ; Wait line $39
  379.     dc.w    $0100,$2200        ; bplcon0 - 2 bitplanes
  380.  
  381.     dc.w    $00e0
  382. pl0h:    dc.w    $0000
  383.     dc.w    $00e2
  384. pl0l:    dc.w    $0000
  385.     dc.w    $00e4
  386. pl1h:    dc.w    $0000
  387.     dc.w    $00e6
  388. pl1l:    dc.w    $0000
  389.  
  390.     dc.w    $180,$000
  391.     dc.w    $182,$000
  392.     dc.w    $184,$000
  393.     dc.w    $186,$000
  394.  
  395. copcols:
  396.     dcb.b    ((8*(width/2))+8)*(depth/2)
  397.     dc.w    $0180,$0000
  398.     dc.w    $0100,$0200,$0102,0
  399.     dc.w    $ffff,$fffe
  400.  
  401. ;*****************************************************************************
  402. ;         SinTab creata con la routine
  403. ;*****************************************************************************
  404.  
  405.     Section    Robaccia,bss
  406.  
  407. Memory1:
  408.     ds.w    16384
  409.  
  410.     end
  411.  
  412.