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

  1.  
  2. ; Lezione11i3.s    - Fantasia in COP minore
  3.  
  4.     SECTION    GnippiCop,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    %1000001010000000    ; solo copper DMA
  14.  
  15. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  16.  
  17. START:
  18.     bsr.w    Write        ; Crea la copperlist...
  19.  
  20.     lea    $dff000,a5
  21.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  22.                     ; e sprites.
  23.  
  24.     move.l    CopperEffPointer,$80(a5)
  25.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  26.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  27.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  28.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  29.  
  30. mouse:
  31.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  32.     MOVE.L    #$12000,d2    ; linea da aspettare = $FF
  33. Waity1:
  34.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  35.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  36.     CMPI.L    D2,D0        ; aspetta la linea $FF
  37.     BNE.S    Waity1
  38. Aspetta:
  39.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  40.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  41.     CMPI.L    D2,D0        ; aspetta la linea $FF
  42.     BEQ.S    Aspetta
  43.  
  44.     bsr.w    main
  45.  
  46.     btst    #6,$bfe001    ; mouse premuto?
  47.     bne.s    mouse
  48.     rts            ; esci
  49.  
  50.  
  51. CopperEffPointer:
  52.     dc.l    Copperlist
  53.  
  54. colmemory:
  55.     dc.l    colbuf
  56.  
  57.  
  58.  
  59. *****************************************************************************
  60. ;    Routine che crea la copperlist
  61. *****************************************************************************
  62.  
  63. ;    __/\__
  64. ;    \()()/
  65. ;    /_\/_\
  66. ;      \/  
  67.  
  68. cxstart        equ    $26    ; posizione X da cui iniziare
  69. cystart        equ    $1c    ; posizione Y da cui iniziare
  70. ylinee        equ    280    ; numero linee Y
  71. xlinee        equ    10    ; numero sezioni X
  72. yDistanza    equ    1    ; distanza verticale
  73. xDistanza    equ    20    ; distanza ORIZZONTALE tra "strisce"
  74.  
  75.  
  76. write:
  77.     move.l    CopperEffPointer(pc),a0    ; indirizzo copper
  78.     moveq    #cystart,d0        ; posizione Y start
  79.     move.w    #ylinee-1,d4        ; numero linee Y da fare
  80. cr2loop:
  81.     moveq    #cxstart,d1        ; posizione X start
  82.     moveq    #xlinee-1,d3        ; numero blocchi orizzontali da fare
  83. FaiOrizz:
  84.     move.w    d1,d2        ; X in d2
  85.     ori.b    #1,d2        ; selez. solo bit 1
  86.     move.b    d0,(a0)+    ; WAIT - coord Y
  87.     move.b    d2,(a0)+    ; WAIT - coord X
  88.     move.w    #$fffe,(a0)+    ; seconda word del wait
  89.     move.w    #$180,(a0)+    ; registro color0
  90.     clr.w    (a0)+        ; color0 (ora azzerato)
  91.     add.w    #xDistanza,d1    ; scatta posizione X prossima "striscia"
  92.     dbra    d3,FaiOrizz    ; fai tutta la linea orizzontale
  93.  
  94.     addq.w    #yDistanza,d0    ; aggiungi la distanza Y
  95.     dbra    d4,cr2loop    ; fai tutte le linee
  96.     move.l    #$fffffffe,(a0)+ ; fine della copperlist!
  97.     rts
  98.  
  99. *****************************************************************************
  100. ;    Routine che modifica la copperlist
  101. *****************************************************************************
  102.  
  103. ;    __/\__
  104. ;    \ oO /
  105. ;    /_<>_\
  106. ;      \/  
  107.  
  108. speed        equ    6
  109. stadd        equ    100
  110.  
  111.  
  112. main:
  113.     move.l    colmemory(pc),a0    ; tabella per i colori
  114.     lea    pointer1(pc),a1        ; puntatore 1
  115.     lea    addtable(pc),a2        ; tabella con valori da addare
  116.     moveq    #0,d4
  117.     move.w    pointer2(pc),d4        ; puntatore 2 in d4
  118.     addq.w    #speed,d4        ; + speed
  119.     andi.w    #$1ff,d4        ; seleziona solo 9 bit (max 511)
  120.     move.w    d4,pointer2        ; salva in puntatore 2
  121.     bclr.l    #8,d4            ; azzera bit 8
  122.     beq.s    nosub            ; =0 (era 256?)
  123.     move.w    #$100,d1
  124.     sub.w    d4,d1
  125.     move.w    d1,d4
  126. nosub:
  127.     add.w    #stadd,d4    ; salta 100
  128.     moveq    #xlinee-1,d1    ; num. linee X
  129. Cstart:
  130.     clr.w    d0
  131.     move.b    (a2)+,d0    ; prendi valore da addtable
  132.     bclr.l    #7,d0
  133.     bne.s    pstripe
  134.     bclr.l    #6,d0
  135.     bne.s    sub
  136.     bclr.l    #5,d0
  137.     bne.s    add
  138. back:
  139.     dbra    d1,Cstart    ; fai per tutte le linee
  140.     bra.s    copy
  141.  
  142. *****************************************************************************
  143.  
  144. add:
  145.     bsr.s    addr
  146.     bra.s    back
  147.  
  148. sub:
  149.     bsr.s    subr
  150.     bra.s    back    
  151.  
  152. sub1:
  153.     bsr.s    subr
  154.     bra.s    sback
  155.  
  156. add1:
  157.     bsr.s    addr
  158.     bra.s    sback
  159.  
  160. *****************************************************************************
  161.  
  162. ;    __/\__
  163. ;    \-OO-/
  164. ;    /_-)_\
  165. ;      \/
  166.  
  167. colors        equ    210    ; num coloritab
  168.  
  169. addr:
  170.     moveq    #0,d2
  171.     move.w    (a1),d2
  172.     add.w    d0,d2
  173.     cmp.w    #colors-2,d2    ; finiti i colori tab?
  174.     blo.s    noclr
  175.     clr.w    d2
  176. noclr:
  177.     move.w    d2,(a1)+
  178.     bra.s    do_it
  179.  
  180. *****************************************************************************
  181.  
  182. ;    __/\__
  183. ;    \[oO]/
  184. ;    /_{}_\
  185. ;      \/
  186.  
  187. subr:
  188.     moveq    #0,d2
  189.     move.w    (a1),d2
  190.     sub.w    d0,d2
  191.     bpl.s    nomove
  192.     move.w    #colors-2,d2
  193. nomove:
  194.     move.w    d2,(a1)+
  195. do_it:
  196.     lea    colortable(pc),a4
  197.     add.l    d2,a4
  198.     move.w    #ylinee/2-1,d2
  199. do_loop:
  200.     move.l    (a4)+,(a0)+    ; metti colori in coplist
  201.     dbra    d2,do_loop
  202.     rts
  203.  
  204. *****************************************************************************
  205.  
  206. ;    \      _      /
  207. ;     \    (ö)    /
  208. ;      \  '(_)`  /
  209. ;       \  ¯ ¯  /
  210.  
  211. pstripe:
  212.     move.l    a0,d3
  213.     bclr.l    #5,d0
  214.     bne.s    add1
  215.     bclr.l    #6,d0
  216.     bne.s    sub1    
  217. clear:
  218.     move.w    #ylinee/2-1,d2
  219. clloop:
  220.     clr.l    (a0)+        ; azzera tutte le linee
  221.     dbra    d2,clloop
  222. sback:
  223.     move.l    d3,a0    
  224.     add.l    d4,a0
  225.     moveq    #stlinee/4-1,d2
  226.     lea    stable(pc),a4
  227. csloop:
  228.     move.l    (a4)+,(a0)+    ; copia dalla stable i colori in cop
  229.     dbra    d2,csloop
  230.     move.l    d3,a0
  231.     add.l    #ylinee*2,a0
  232.     bra.s    back
  233.  
  234. *****************************************************************************
  235.  
  236. ;          :
  237. ;         _|_
  238. ;    _ __/__/\__ _
  239. ;        \__\/
  240. ;          |
  241. ;          :
  242.  
  243. copy:
  244.     move.l    colmemory(pc),a0
  245.     move.l    CopperEffPointer(pc),a1
  246.     addq.w    #6,a1
  247.     move.w    #ylinee-1,d0    ; fai tutte le linee Y
  248. coloop:
  249.     move.w    (a0),(a1)
  250.     move.w    ylinee*2(a0),8(a1)    ; copia da colmemory a coplist
  251.     move.w    ylinee*4(a0),8*2(a1)
  252.     move.w    ylinee*6(a0),8*3(a1)
  253.     move.w    ylinee*8(a0),8*4(a1)
  254.     move.w    ylinee*10(a0),8*5(a1)
  255.     move.w    ylinee*12(a0),8*6(a1)
  256.     move.w    ylinee*14(a0),8*7(a1)
  257.     move.w    ylinee*16(a0),8*8(a1)
  258.     move.w    ylinee*18(a0),8*9(a1)
  259.     lea    8*10(a1),a1
  260.     addq.w    #2,a0
  261.     dbra    d0,coloop
  262.     rts
  263.  
  264. *****************************************************************************
  265. ;            TABELLE DEI COLORI
  266. *****************************************************************************
  267.  
  268. colortable:
  269.     dc.w    $001,$002,$003,$004,$005,$006,$007,$008,$009,$00a
  270.     dc.w    $00b,$00c,$00d,$00e,$00f
  271.     dc.w    $01f,$02f,$03f,$04f,$05f
  272.     dc.w    $06f,$07f,$08f,$09f,$0af,$0bf,$0cf,$0df,$0ef,$0ff
  273.     dc.w    $0fe,$0fd,$0fc,$0fb,$0fa,$0f9,$0f8,$0f7,$0f6,$0f5
  274.     dc.w    $0f4,$0f3,$0f2,$0f1,$0f0,$1f0,$2f0,$3f0,$4f0,$5f0
  275.     dc.w    $6f0,$7f0,$8f0,$9f0,$af0,$bf0,$cf0,$df0,$ef0,$ff0
  276.     dc.w    $fe0,$fd0,$fc0,$fb0,$fa0,$f90,$f80,$f70,$f60,$f50
  277.     dc.w    $f40,$f30,$f20,$f10,$f00,$f01,$f02,$f03,$f04,$f05
  278.     dc.w    $f06,$f07,$f08,$f09,$f0a,$f0b,$f0c,$f0d,$f0e,$f0f
  279.     dc.w    $e0e,$d0d,$c0c,$b0b,$a0a,$909,$808,$707,$606
  280.     dc.w    $505,$404,$303,$202,$101,$000
  281. colorend:
  282.     dc.w    $001,$002,$003,$004,$005,$006,$007,$008,$009,$00a
  283.     dc.w    $00b,$00c,$00d,$00e,$00f
  284.     dc.w    $01f,$02f,$03f,$04f,$05f
  285.     dc.w    $06f,$07f,$08f,$09f,$0af,$0bf,$0cf,$0df,$0ef,$0ff
  286.     dc.w    $0fe,$0fd,$0fc,$0fb,$0fa,$0f9,$0f8,$0f7,$0f6,$0f5
  287.     dc.w    $0f4,$0f3,$0f2,$0f1,$0f0,$1f0,$2f0,$3f0,$4f0,$5f0
  288.     dc.w    $6f0,$7f0,$8f0,$9f0,$af0,$bf0,$cf0,$df0,$ef0,$ff0
  289.     dc.w    $fe0,$fd0,$fc0,$fb0,$fa0,$f90,$f80,$f70,$f60,$f50
  290.     dc.w    $f40,$f30,$f20,$f10,$f00,$f01,$f02,$f03,$f04,$f05
  291.     dc.w    $f06,$f07,$f08,$f09,$f0a,$f0b,$f0c,$f0d,$f0e,$f0f
  292.     dc.w    $e0e,$d0d,$c0c,$b0b,$a0a,$909,$808,$707,$606
  293.     dc.w    $505,$404,$303,$202,$101,$000
  294.     dc.w    $001,$002,$003,$004,$005,$006,$007,$008,$009,$00a
  295.     dc.w    $00b,$00c,$00d,$00e,$00f
  296.     dc.w    $01f,$02f,$03f,$04f,$05f
  297.     dc.w    $06f,$07f,$08f,$09f,$0af,$0bf,$0cf,$0df,$0ef,$0ff
  298.     dc.w    $0fe,$0fd,$0fc,$0fb,$0fa,$0f9,$0f8,$0f7,$0f6,$0f5
  299.     dc.w    $0f4,$0f3,$0f2,$0f1,$0f0,$1f0,$2f0,$3f0,$4f0,$5f0
  300.     dc.w    $6f0,$7f0,$8f0,$9f0,$af0,$bf0,$cf0,$df0,$ef0,$ff0
  301.     dc.w    $fe0,$fd0,$fc0,$fb0,$fa0,$f90,$f80,$f70,$f60,$f50
  302.     dc.w    $f40,$f30,$f20,$f10,$f00,$f01,$f02,$f03,$f04,$f05
  303.     dc.w    $f06,$f07,$f08,$f09,$f0a,$f0b,$f0c,$f0d,$f0e,$f0f
  304.     dc.w    $e0e,$d0d,$c0c,$b0b,$a0a,$909,$808,$707,$606
  305.     dc.w    $505,$404,$303,$202,$101,$000
  306.     dc.w    $001,$002,$003,$004,$005,$006,$007,$008,$009,$00a
  307.     dc.w    $00b,$00c,$00d,$00e,$00f
  308.     dc.w    $01f,$02f,$03f,$04f,$05f
  309.     dc.w    $06f,$07f,$08f,$09f,$0af,$0bf,$0cf,$0df,$0ef,$0ff
  310.     dc.w    $0fe,$0fd,$0fc,$0fb,$0fa,$0f9,$0f8,$0f7,$0f6,$0f5
  311.     dc.w    $0f4,$0f3,$0f2,$0f1,$0f0,$1f0,$2f0,$3f0,$4f0,$5f0
  312.     dc.w    $6f0,$7f0,$8f0,$9f0,$af0,$bf0,$cf0,$df0,$ef0,$ff0
  313.     dc.w    $fe0,$fd0,$fc0,$fb0,$fa0,$f90,$f80,$f70,$f60,$f50
  314.     dc.w    $f40,$f30,$f20,$f10,$f00,$f01,$f02,$f03,$f04,$f05
  315.     dc.w    $f06,$f07,$f08,$f09,$f0a,$f0b,$f0c,$f0d,$f0e,$f0f
  316.     dc.w    $e0e,$d0d,$c0c,$b0b,$a0a,$909,$808,$707,$606
  317.     dc.w    $505,$404,$303,$202,$101,$000
  318.  
  319.  
  320. pointer1:
  321.     dcb.w    10,0
  322.  
  323. pointer2:
  324.     dcb.w    10,0
  325.  
  326. addtable:
  327.     dc.b    $c4,$a2,$44,$a0,$24,$42,$a0,$22,$a4,$c2
  328.  
  329. ; colorsequcolorend-colortable
  330.  
  331. numctab        equ    512
  332.  
  333.  
  334. stripe:
  335.     dc.w    numctab*4
  336.  
  337. ; La barra griagia che "attraversa" quelle colorate
  338.  
  339. stable:
  340.     dc.w    $000,$111,$222,$444,$555,$666,$777,$888,$888,$999,$999
  341.     dc.w    $aaa,$aaa,$bbb,$bbb,$ccc,$ccc,$ddd,$ddd,$eee,$eee,$eee
  342.     dc.w    $fff,$fff,$fff,$fff,$fff,$eee,$eee,$eee,$ddd,$ddd,$ccc
  343.     dc.w    $ccc,$bbb,$bbb,$aaa,$aaa,$999,$999,$888,$888,$777,$666
  344.     dc.w    $555,$444,$333,$222,$111,$000
  345. stend:
  346.  
  347. stlinee    equ    stend-stable
  348.  
  349. *****************************************************************************
  350. ;            Buffer vari
  351. *****************************************************************************
  352.  
  353.     section    bau1,bss
  354.  
  355. clsize        equ    2*xlinee*ylinee
  356.  
  357. colbuf:
  358.     ds.b    clsize
  359.  
  360.  
  361. *****************************************************************************
  362. ;            Copperlist
  363. *****************************************************************************
  364.  
  365.     section    bau2,bss_c
  366.  
  367. csize        equ    xlinee*ylinee*8+12
  368.  
  369. Copperlist:
  370.     ds.b    csize
  371.  
  372.     END
  373.  
  374. Non si direbbe che non ci sono bitplanes abilitati, eh!?
  375.  
  376.