home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti7 / lezione11l3b.s < prev    next >
Text File  |  1995-09-29  |  8KB  |  298 lines

  1.  
  2. ;  Lezione11l3b.s - allunghiamo "a ondeggio" una pic in senso verticale.
  3.  
  4.     SECTION    coplanes,CODE
  5.  
  6. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  7.  
  8. *****************************************************************************
  9.     include    "startup2.s" ; Salva Copperlist Etc.
  10. *****************************************************************************
  11.  
  12.         ;5432109876543210
  13. DMASET    EQU    %1000001110000000    ; solo copper e bitplane DMA
  14.  
  15. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  16.  
  17. NumLinee    EQU    53    ; Numero di linee da fare nell'effetto.
  18.  
  19. scr_bytes    = 40    ; Numero di bytes per ogni linea orizzontale.
  20.             ; Da questa si calcola la larghezza dello schermo,
  21.             ; moltiplicando i bytes per 8: schermo norm. 320/8=40
  22.             ; Es. per uno schermo largo 336 pixel, 336/8=42
  23.             ; larghezze esempio:
  24.             ; 264 pixel = 33 / 272 pixel = 34 / 280 pixel = 35
  25.             ; 360 pixel = 45 / 368 pixel = 46 / 376 pixel = 47
  26.             ; ... 640 pixel = 80 / 648 pixel = 81 ...
  27.  
  28. scr_h        = 256    ; Altezza dello schermo in linee
  29. scr_x        = $81    ; Inizio schermo, posizione XX (normale $xx81) (129)
  30. scr_y        = $2c    ; Inizio schermo, posizione YY (normale $2cxx) (44)
  31. scr_res        = 1    ; 2 = HighRes (640*xxx) / 1 = LowRes (320*xxx)
  32. scr_lace    = 0    ; 0 = non interlace (xxx*256) / 1 = interlace (xxx*512)
  33. ham        = 1    ; 0 = non ham / 1 = ham
  34. scr_bpl        = 6    ; Numero Bitplanes
  35.  
  36. ; parametri calcolati automaticamente
  37.  
  38. scr_w        = scr_bytes*8        ; larghezza dello schermo
  39. scr_size    = scr_bytes*scr_h    ; dimensione in bytes dello schermo
  40. BPLC0    = ((scr_res&2)<<14)+(scr_bpl<<12)+$200+(scr_lace<<2)+(ham<<11)
  41. DIWS    = (scr_y<<8)+scr_x
  42. DIWSt    = ((scr_y+scr_h/(scr_lace+1))&255)<<8+(scr_x+scr_w/scr_res)&255
  43. DDFS    = (scr_x-(16/scr_res+1))/2
  44. DDFSt    = DDFS+(8/scr_res)*(scr_bytes/2-scr_res)
  45.  
  46.  
  47. START:
  48.  
  49. ; Puntiamo la PIC
  50.  
  51.     LEA    bplpointers,A0
  52.     MOVE.L    #LOGO+40*40,d0    ; indirizzo logo (un po' ribassato)
  53.     MOVEQ    #6-1,D7        ; 6 bitplanes HAM.
  54. pointloop:
  55.     MOVE.W    D0,6(A0)
  56.     SWAP    D0
  57.     MOVE.W    D0,2(A0)
  58.     SWAP    D0
  59.     ADDQ.w    #8,A0
  60.     ADD.L    #176*40,D0    ; lunghezza plane
  61.     DBRA    D7,pointloop
  62.  
  63.     bsr.s    PreparaCopEff    ; Prepara l'effetto copper
  64.  
  65.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  66.                     ; e sprites.
  67.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  68.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  69.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  70.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  71.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  72.  
  73. mouse:
  74.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  75.     MOVE.L    #$11000,d2    ; linea da aspettare = $110
  76. Waity1:
  77.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  78.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  79.     CMPI.L    D2,D0        ; aspetta la linea $110
  80.     BNE.S    Waity1
  81.  
  82.     BSR.W    LOGOEFF2    ; "allunga" la pic usando i moduli
  83.  
  84.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  85.     MOVE.L    #$11000,d2    ; linea da aspettare = $110
  86. Aspetta:
  87.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  88.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  89.     CMPI.L    D2,D0        ; aspetta la linea $110
  90.     BEQ.S    Aspetta
  91.  
  92.     btst    #6,$bfe001    ; Mouse premuto?
  93.     bne.s    mouse
  94.     rts            ; esci
  95.  
  96.  
  97. *****************************************************************************
  98. ;        ROUTINE DI PREPARAZIONE DELL'EFFETTO COPPER            *
  99. *****************************************************************************
  100.  
  101. ;     :        __
  102. ;     : .-----'  `-----.
  103. ;    _:_|______________|___
  104. ;    \                    /
  105. ;     \________/\________/
  106. ;     : |  _        _  |
  107. ;     `-|  \________/  |
  108. ;       |              |
  109. ;       `----,,,,,,----'
  110.  
  111. PreparaCopEff:
  112.  
  113. ; Crea la copperlist
  114.  
  115.     LEA    coppyeff1,A0    ; Indirizzo dove creare l'effetto in copperlist
  116.     MOVE.L    #$1080000,D0    ; bpl1mod
  117.     MOVE.L    #$10A0000,D1    ; bpl2mod
  118.     MOVE.L    #$2E07FFFE,D2    ; wait (comincia dalla linea $2e)
  119.     MOVE.L    #$01000000,D3    ; Valore da addare al wait ogni volta
  120.     MOVEQ    #(NumLinee*2)-1,D7    ; 53 linee da fare
  121. makecop1:
  122.     MOVE.L    D2,(A0)+    ; Metti il WAIT
  123.     MOVE.L    D0,(A0)+    ; Metti il bpl1mod
  124.     MOVE.L    D1,(A0)+    ; Metti il bpl2mod
  125.     ADD.L    D3,D2        ; Fai aspettare una linea piu' in basso al wait
  126.     DBRA    D7,makecop1
  127.  
  128. ; Moltiplica per il modulo i valori nella tabella, in modo da poter essere
  129. ; usati come valori da mettere nei BPL1MOD e BPL2MOD.
  130.  
  131.     LEA    tabby2,A0    ; Indirizzo tabella
  132.     MOVE.W    #200-1,D7    ; Numero valori contenuti nella tabella
  133. tab2mul:
  134.     MOVE.W    (A0),D0        ; Prendi il valore dalla tabella
  135.     MULU.W    #40,D0        ; Moltiplicalo per la lungh. di 1 linea (mod.)
  136.     MOVE.W    D0,(A0)+    ; Rimetti il valore moltiplicato e avanza
  137.     DBRA    D7,tab2mul
  138.     rts
  139.  
  140.  
  141. ; Tabella contenente 200 valori .word, che saranno moltiplicati *40
  142.  
  143. tabby2:
  144.     dc.w    0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0
  145.     dc.w    0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
  146.     dc.w    0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,-1,0,0,0
  147.     dc.w    0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0
  148.     dc.w    -1,0,0,-1,0,0,0,-1,0,0,-1,0,0,-1,0
  149.     dc.w    0,-1,0,0,0,-1,0,0,-1,0,0,-1,0,0,0
  150.     dc.w    -1,0,0,0,-1,0,0,0,-1,0,0,0,0,0,-1,0,0
  151.     dc.w    0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  152.     dc.w    0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0
  153.     dc.w    0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0
  154. tab2end:
  155.  
  156. *****************************************************************************
  157. ;            ROUTINE COPPER EFFECT DEL LOGO                *
  158. *****************************************************************************
  159.  
  160. ;               _
  161. ;           .--' `-.
  162. ;           |     .|      
  163. ;           |  /\__|       
  164. ;           `------'____ __
  165. ;          ./ (_________|__)
  166. ;          |         |_|__)
  167. ;          |         |   __
  168. ;          |_________|  |  |
  169. ;     _____/\_     `----'  |
  170. ;    |       (_____________|
  171. ;    |   _______/         
  172. ;    l__|g®m
  173.  
  174. ; L'effetto in copperlist e' cosi' strutturato:
  175. ;
  176. ;    DC.W    $2e07,$FFFE    ; wait
  177. ;    dc.w    $108        ; registro bpl1mod
  178. ;COPPEREFFY:
  179. ;    DC.w    xxx        ; valore bpl1mod
  180. ;    dc.w    $10A,xxx    ; registro e valore bpl1mod
  181. ;    wait... eccetera.
  182.  
  183. LOGOEFF2:
  184.     LEA    coppyeff1+6,A0        ; Indirizzo copper effect bpl1mod
  185.     LEA    TABBY2POINTER(PC),A4    ; Indirizzo puntatore alla tabella
  186.     LEA    tab2end(PC),A3        ; Indirizzo fine della tabella
  187.     MOVE.L    TABBY2POINTER(PC),A1    ; Dove siamo attualmente in tabella
  188.     MOVEQ    #10,D0
  189.     MOVEQ    #(NumLinee*2)-1,D7    ; numero di linee per l'effetto
  190. LOGOEFFLOOP:
  191.     MOVE.W    (A1),(A0)+    ; Copia il valore bpl1mod dalla tab alla cop
  192.     MOVE.W    (A1)+,2(A0)    ;  "      "      bpl2mod    "    "
  193.     ADDA.L    D0,A0        ; Vai al prossimo $dff108 (bpl1mod) in coplist
  194.     CMPA.L    A3,A1        ; Era l'ultimo valore della tabella?
  195.     BNE.S    norestart    ; Se non ancora, non ripartire
  196.     LEA    tabby2(PC),A1    ; Altrimenti, riparti!
  197. norestart:
  198.     DBRA    D7,LOGOEFFLOOP
  199.     ADDQ.L    #4,(A4)        ; Salta 2 valori in coplist (se si mette #2 si
  200.                 ; "rallenta" l'effetto facendo leggere tutti
  201.                 ; i 200 valori della tabella).
  202.     CMPA.L    (A4),A3        ; Fine della tabella?
  203.     BNE.S    NOTABENDY    ; Se non ancora, ok
  204.     MOVE.L    #tabby2,(A4)    ; Altrimenti ripunta da capo
  205. NOTABENDY:
  206.     RTS
  207.  
  208. ; Puntatore alla tabella usato per leggerne i valori
  209.  
  210. TABBY2POINTER:
  211.     dc.l    tabby2
  212.  
  213. ******************************************************************************
  214. ;        COPPERLIST:
  215. ******************************************************************************
  216.  
  217.     Section    MioCoppero,data_C    
  218.  
  219. COPPERLIST:
  220.     dc.w    $8e,DIWS    ; DiwStrt
  221.     dc.w    $90,DIWSt    ; DiwStop
  222.     dc.w    $92,DDFS    ; DdfStart
  223.     dc.w    $94,DDFSt    ; DdfStop
  224.     dc.w    $102,0        ; BplCon1
  225.     dc.w    $104,0        ; BplCon2
  226.     dc.w    $108,0        ; Bpl1Mod
  227.     dc.w    $10a,0        ; Bpl2Mod
  228.  
  229. BPLPOINTERS:
  230.     dc.w $e0,0,$e2,0        ;primo      bitplane
  231.     dc.w $e4,0,$e6,0        ;secondo    "
  232.     dc.w $e8,0,$ea,0        ;terzo      "
  233.     dc.w $ec,0,$ee,0        ;quarto     "
  234.     dc.w $f0,0,$f2,0        ;quinto     "
  235.     dc.w $f4,0,$f6,0        ;sesto      "
  236.  
  237.     dc.w    $180,0    ; Color0 nero
  238.  
  239.     dc.w    $100,BPLC0    ; BplCon0 - 320*256 HAM
  240.  
  241.     dc.w $180,$0000,$182,$134,$184,$531,$186,$443
  242.     dc.w $188,$0455,$18a,$664,$18c,$466,$18e,$973
  243.     dc.w $190,$0677,$192,$886,$194,$898,$196,$a96
  244.     dc.w $198,$0ca6,$19a,$9a9,$19c,$bb9,$19e,$dc9
  245.     dc.w $1a0,$0666
  246.  
  247.     dc.w    $102    ; bplcon1
  248. CON1:
  249.     dc.w    0
  250.  
  251. coppyeff1:
  252.     dcb.w    12*NumLinee
  253.  
  254.     dc.w    $9707,$FFFE    ; wait linea $97
  255.     dc.w    $100,$200    ; no bitplanes
  256.     dc.w    $180,$110    ; color0
  257.     dc.w    $9807,$FFFE    ; wait
  258.     dc.w    $180,$120    ; color0
  259.     dc.w    $9a07,$FFFE
  260.     dc.w    $180,$130
  261.     dc.w    $9b07,$FFFE
  262.     dc.w    $180,$240
  263.     dc.w    $9c07,$FFFE
  264.     dc.w    $180,$250
  265.     dc.w    $9d07,$FFFE
  266.     dc.w    $180,$370
  267.     dc.w    $9e07,$FFFE
  268.     dc.w    $180,$390
  269.     dc.w    $9f07,$FFFE
  270.     dc.w    $180,$4b0
  271.     dc.w    $a007,$FFFE
  272.     dc.w    $180,$5d0
  273.     dc.w    $a107,$FFFE
  274.     dc.w    $180,$4a0
  275.     dc.w    $a207,$FFFE
  276.     dc.w    $180,$380
  277.     dc.w    $a307,$FFFE
  278.     dc.w    $180,$360
  279.     dc.w    $a407,$FFFE
  280.     dc.w    $180,$240
  281.     dc.w    $a507,$FFFE
  282.     dc.w    $180,$120
  283.     dc.w    $a607,$FFFE
  284.     dc.w    $180,$110
  285.     DC.W    $A70F,$FFFE
  286.     DC.W    $180,$000
  287.  
  288.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  289.  
  290.  
  291.     SECTION    LOGO,CODE_C
  292.  
  293. LOGO:
  294.     incbin    "amiet.raw"    ; 6 bitplanes * 176 lines * 40 bytes (HAM)
  295.  
  296.     END
  297.  
  298.