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

  1.  
  2. ;  Lezione11l2.s - Si cambiano per ogni linea ben 3 colori su 4 (2 bitplanes).
  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. scr_bytes    = 40    ; Numero di bytes per ogni linea orizzontale.
  18.             ; Da questa si calcola la larghezza dello schermo,
  19.             ; moltiplicando i bytes per 8: schermo norm. 320/8=40
  20.             ; Es. per uno schermo largo 336 pixel, 336/8=42
  21.             ; larghezze esempio:
  22.             ; 264 pixel = 33 / 272 pixel = 34 / 280 pixel = 35
  23.             ; 360 pixel = 45 / 368 pixel = 46 / 376 pixel = 47
  24.             ; ... 640 pixel = 80 / 648 pixel = 81 ...
  25.  
  26. scr_h        = 256    ; Altezza dello schermo in linee
  27. scr_x        = $81    ; Inizio schermo, posizione XX (normale $xx81) (129)
  28. scr_y        = $2c    ; Inizio schermo, posizione YY (normale $2cxx) (44)
  29. scr_res        = 1    ; 2 = HighRes (640*xxx) / 1 = LowRes (320*xxx)
  30. scr_lace    = 0    ; 0 = non interlace (xxx*256) / 1 = interlace (xxx*512)
  31. ham        = 0    ; 0 = non ham / 1 = ham
  32. scr_bpl        = 2    ; Numero Bitplanes
  33.  
  34. ; parametri calcolati automaticamente
  35.  
  36. scr_w        = scr_bytes*8        ; larghezza dello schermo
  37. scr_size    = scr_bytes*scr_h    ; dimensione in bytes dello schermo
  38. BPLC0    = ((scr_res&2)<<14)+(scr_bpl<<12)+$200+(scr_lace<<2)+(ham<<11)
  39. DIWS    = (scr_y<<8)+scr_x
  40. DIWSt    = ((scr_y+scr_h/(scr_lace+1))&255)<<8+(scr_x+scr_w/scr_res)&255
  41. DDFS    = (scr_x-(16/scr_res+1))/2
  42. DDFSt    = DDFS+(8/scr_res)*(scr_bytes/2-scr_res)
  43.  
  44.  
  45. START:
  46.  
  47. ; Puntiamo i planes
  48.  
  49.     MOVE.L    #Bitplane1,d0
  50.     LEA    PLANES,a0
  51.     MOVEQ    #2-1,d7        ; 2 bitplanes
  52. PLOOP:
  53.     move.w    d0,6(a0)
  54.     swap    d0
  55.     move.w    d0,2(a0)
  56.     swap    d0
  57.     add.l    #40*256,d0
  58.     addq.w    #8,a0
  59.     dbra    d7,ploop
  60.  
  61.     lea    $dff000,a5
  62.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  63.                     ; e sprites.
  64.  
  65.     move.l    #LISTE,$80(a5)        ; Puntiamo la nostra COP
  66.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  67.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  68.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  69.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  70.  
  71.     bsr.s    CreaCopper    ; crea la copperlist
  72.  
  73.     LEA    TESTO(PC),A0    ; testo da stampare
  74.     LEA    BITPLANE1,A3    ; destinazione
  75.     bsr.w    print        ; Stampa
  76.  
  77.     LEA    TESTO2(PC),A0    ; testo da stampare
  78.     LEA    BITPLANE2,A3    ; destinazione
  79.     bsr.w    print        ; Stampa
  80.  
  81. mouse:
  82.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  83.     MOVE.L    #$12c00,d2    ; linea da aspettare = $12c
  84. Waity1:
  85.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  86.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  87.     CMPI.L    D2,D0        ; aspetta la linea $12c
  88.     BNE.S    Waity1
  89. Aspetta:
  90.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  91.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  92.     CMPI.L    D2,D0        ; aspetta la linea $12c
  93.     BEQ.S    Aspetta
  94.  
  95.     BSR.w    RASTERMAGIC    ; copia da tabelle in copperlist
  96.     BSR.w    CYCLEBLU    ; cicla la tab del blu (verso il basso)
  97.     BSR.w    CYCLERED    ; cicla la tab del rosso (verso l'alto)
  98.     BSR.w    CYCLEGREEN    ; cicla la tab del verde (verso l'alto)
  99.  
  100.     btst.b    #6,$bfe001    ; mouse premuto?
  101.     bne.s    mouse
  102.     rts
  103.  
  104. *****************************************************************************
  105. ; Questa routine crea la copperlist
  106. *****************************************************************************
  107.  
  108. ;                _____
  109. ;               /   _/
  110. ;              /_____\
  111. ;     _        \ o.O /
  112. ;    / )________\_-_/_________
  113. ;    \__/      _  Y  _       /__
  114. ;     _/______/   :   \_____/__ \
  115. ;           _/    :    \_  .--(_/
  116. ;           \_____:_____/.
  117. ;           /    ___   :\ :
  118. ;          /      |   :..:
  119. ;        _/       |       \
  120. ;       _\________|        \_
  121. ;      (__________l_________/_ _ _
  122. ;                 (___________))
  123.  
  124. CreaCopper:
  125.     LEA    CopperEffyz,A1
  126.     MOVE.l    #$180,d2    ; col 0
  127.     MOVE.l    #$182,d3    ; col 1
  128.     MOVE.l    #$186,d4    ; col 3
  129.     MOVEQ    #-2,D5        ; $FFFE    ; wait command
  130.     MOVE.W    #$0100,d6    ; WAIT ADD: 0107FFFE, 0207FFFE....
  131.     MOVE.W    #$2C07,D1    ; start line
  132.     MOVEQ    #7-1,D7        ; Num. loops
  133. AGAIN:
  134.     LEA    ColTabBlu(PC),A0
  135.     LEA    ColTabRosso(PC),A2
  136.     LEA    ColTabVerde(PC),A3
  137.  
  138.     REPT    28        ; num of lines: 28*d7
  139.     MOVE.W    D1,(A1)+    ; line to wait...
  140.     MOVE.W    d5,(A1)+    ; $FFFE wait command
  141.     MOVE.W    d2,(A1)+    ; col register 0
  142.     MOVE.W    (A0)+,(A1)+    ; col value da tab blu
  143.     MOVE.W    d3,(A1)+    ; col register 1
  144.     MOVE.W    (A2)+,(A1)+    ; col value da tab rossa
  145.     MOVE.W    d4,(A1)+    ; col register 3
  146.     MOVE.W    (A3)+,(A1)+    ; col value da tab Verde
  147.     ADD.W    d6,D1        ; Fai waitare una linea sotto
  148.     ENDR
  149.  
  150.     DBRA    D7,AGAIN
  151.     RTS
  152.  
  153. *****************************************************************************
  154.  
  155. ;                  __ ___
  156. ;             (______)
  157. ;            __||||||__
  158. ;           (__________)
  159. ;             |      |
  160. ;             _ __   |
  161. ;            (.(._) (((
  162. ;           (__ __   __)
  163. ;           ./    \  |
  164. ;    magico!       `----( \ |
  165. ;          __ \____/ /\__
  166. ;         /  /__\___/__\ \
  167. ;        /   __   o  __   ì g®m
  168.  
  169.  
  170. RASTERMAGIC:
  171.     LEA    CopperEffyz,A1
  172.     MOVEQ    #7-1,D7        ; Num. loops
  173. AGAIN2:
  174.     LEA    ColTabBlu(PC),A0
  175.     LEA    ColTabRosso(PC),A2
  176.     LEA    ColTabVerde(PC),A3
  177.  
  178.     REPT    28        ; num of lines: 28*d7
  179.     addq.w    #2+4,a1        ; salta il wait e il col register 0
  180.     MOVE.W    (A0)+,(A1)+    ; col value da tab blu
  181.     addq.w    #2,a1        ; salta il col register 1
  182.     MOVE.W    (A2)+,(A1)+    ; col value da tab rossa
  183.     addq.w    #2,a1        ; salta il col register 3
  184.     MOVE.W    (A3)+,(A1)+    ; col value da tab Verde
  185.     ADD.W    d6,D1        ; Fai waitare una linea sotto
  186.     ENDR
  187.  
  188.     DBRA    D7,AGAIN2
  189.     RTS
  190.  
  191. *****************************************************************************
  192.  
  193. ;        _))_
  194. ;      ./    \.
  195. ;      |      |
  196. ;     \_ __/  |
  197. ;     (-(--)  |
  198. ;    (__ __  (((
  199. ;     /__  \  __)
  200. ;  Ue'..  __)  \ | g®m
  201. ;     (_____/ |
  202.  
  203. CYCLEBLU:
  204.     LEA    ColTabBlu+54(PC),A0
  205.     LEA    ColTabBlu+52(PC),A1
  206.     MOVE.W    ColTabBlu+54(PC),D1    ; salva l'ultimo colore
  207.  
  208.     REPT    27
  209.     MOVE.W    (A1),(A0)    ; cycle2
  210.     SUBQ.W     #2,A0
  211.     SUBQ.W    #2,A1
  212.     ENDR
  213.  
  214.     MOVE.W    D1,ColTabBlu    ; Rimetti l'ultimo 
  215.     RTS
  216.  
  217. *****************************************************************************
  218.  
  219. CYCLERED:
  220.      LEA    ColTabRosso(PC),A0
  221.     LEA    ColTabRosso+2(PC),A1
  222.     MOVE.W    (A0),56(A0)
  223.  
  224.     REPT    29        ; cycle 2
  225.     MOVE.W    (A1)+,(A0)+
  226.     ENDR
  227.  
  228.     RTS
  229.         
  230. CYCLEGREEN:
  231.      LEA    ColTabVerde(PC),A0
  232.     LEA    ColTabVerde+2(PC),A1
  233.     MOVE.W    (A0),56(A0)
  234.  
  235.     REPT    29        ; cycle 3
  236.     MOVE.W    (A1)+,(A0)+
  237.     ENDR
  238.  
  239.     RTS        
  240.  
  241. ColTabBlu:
  242.     DC.W    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
  243.     DC.W    15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,0,0
  244.  
  245. ColTabRosso:
  246.     DC.W    $100,$200,$300,$400,$500,$600,$700,$800,$900
  247.     DC.W    $A00,$B00,$C00,$D00,$E00,$F00,$F00,$E00,$C00
  248.     DC.W    $B00,$A00,$900,$800,$700,$600,$500,$400,$300
  249.     DC.W    $200,$100,0,0,0,0
  250.  
  251. ColTabVerde:
  252.     DC.W    $010,$020,$030,$040,$050,$060,$070,$080,$090
  253.     DC.W    $0A0,$0B0,$0C0,$0D0,$0E0,$0F0,$0F0,$0E0,$0D0,$0C0
  254.     DC.W    $0B0,$0A0,$090,$080,$070,$060,$050,$040,$030,$020
  255.     DC.W    $010,0,0,0,0
  256.  
  257.  
  258. *****************************************************************************
  259. ;    Routine che stampa caratteri larghi 8x8 pixel
  260. *****************************************************************************
  261.  
  262. PRINT:
  263.     MOVEQ    #23-1,D3    ; NUMERO RIGHE DA STAMPARE: 23
  264. PRINTRIGA:
  265.     MOVEQ    #40-1,D0    ; NUMERO COLONNE PER RIGA: 40
  266. PRINTCHAR2:
  267.     MOVEQ    #0,D2        ; Pulisci d2
  268.     MOVE.B    (A0)+,D2    ; Prossimo carattere in d2
  269.     SUB.B    #$20,D2        ; TOGLI 32 AL VALORE ASCII DEL CARATTERE
  270.     LSL.W    #3,D2        ; MOLTIPLICA PER 8 IL NUMERO PRECEDENTE
  271.     MOVE.L    D2,A2
  272.     ADD.L    #FONT,A2    ; TROVA IL CARATTERE DESIDERATO NEL FONT...
  273.     MOVE.B    (A2)+,(A3)    ; stampa LA LINEA 1 del carattere
  274.     MOVE.B    (A2)+,40(A3)    ; stampa LA LINEA 2  " "
  275.     MOVE.B    (A2)+,40*2(A3)    ; stampa LA LINEA 3  " "
  276.     MOVE.B    (A2)+,40*3(A3)    ; stampa LA LINEA 4  " "
  277.     MOVE.B    (A2)+,40*4(A3)    ; stampa LA LINEA 5  " "
  278.     MOVE.B    (A2)+,40*5(A3)    ; stampa LA LINEA 6  " "
  279.     MOVE.B    (A2)+,40*6(A3)    ; stampa LA LINEA 7  " "
  280.     MOVE.B    (A2)+,40*7(A3)    ; stampa LA LINEA 8  " "
  281.  
  282.     ADDQ.w    #1,A3        ; A1+1, avanziamo di 8 bit (PROSSIMO CARATTERE)
  283.  
  284.     DBRA    D0,PRINTCHAR2    ; STAMPIAMO D0 (40) CARATTERI PER RIGA
  285.  
  286.     ADD.W    #40*7,A3    ; ANDIAMO A CAPO
  287.  
  288.     DBRA    D3,PRINTRIGA    ; FACCIAMO D3 RIGHE
  289.  
  290.     RTS
  291.  
  292.  
  293.         ; numero caratteri per linea: 40
  294. TESTO:         ;          1111111111222222222233333333334
  295.          ;     1234567890123456789012345678901234567890
  296.     dc.b    '   PRIMA RIGA (solo in testo1)          ' ; 1
  297.     dc.b    '                                        ' ; 2
  298.     dc.b    '     /\  /          # #                 ' ; 3
  299.     dc.b    '    /  \/           # #                 ' ; 4
  300.     dc.b    '                    # #                 ' ; 5
  301.     dc.b    '        SESTA RIGA (entrambi i bitplane)' ; 6
  302.     dc.b    '                                        ' ; 7
  303.     dc.b    '                                        ' ; 8
  304.     dc.b    'FABIO CIUCCI               INTERNATIONAL' ; 9
  305.     dc.b    '                                        ' ; 10
  306.     dc.b    '   1  4 6 89  !@ $ ^& () +| =- ]{       ' ; 11
  307.     dc.b    '                                        ' ; 12
  308.     dc.b    '     LA  A I G N T C  OBLITERAZIONE     ' ; 15
  309.     dc.b    '                                        ' ; 25
  310.     dc.b    '                                        ' ; 16
  311.     dc.b    '  Nel mezzo del cammin di nostra vita   ' ; 17
  312.     dc.b    '                                        ' ; 18
  313.     dc.b    '    Mi RitRoVaI pEr UnA sELva oScuRa    ' ; 19
  314.     dc.b    '                                        ' ; 20
  315.     dc.b    '    CHE LA DIRITTA VIA ERA              ' ; 21
  316.     dc.b    '                                        ' ; 22
  317.     dc.b    '  AHI Quanto a DIR QUAL ERA...          ' ; 23
  318.     dc.b    '                                        ' ; 24
  319.     dc.b    '                                        ' ; 25
  320.     dc.b    '                                        ' ; 26
  321.     dc.b    '                                        ' ; 27
  322.  
  323.     EVEN
  324.  
  325.         ; numero caratteri per linea: 40
  326. TESTO2:         ;          1111111111222222222233333333334
  327.          ;     1234567890123456789012345678901234567890
  328.     dc.b    '                                        ' ; 1
  329.     dc.b    '  SECONDA RIGA (solo in testo2)         ' ; 2
  330.     dc.b    '     /\  /          ##                  ' ; 3
  331.     dc.b    '    /  \/           ##                  ' ; 4
  332.     dc.b    '                    ##                  ' ; 5
  333.     dc.b    '        SESTA RIGA (entrambi i bitplane)' ; 6
  334.     dc.b    '                                        ' ; 7
  335.     dc.b    '                                        ' ; 8
  336.     dc.b    'FABIO        COMMUNICATION INTERNATIONAL' ; 9
  337.     dc.b    '                                        ' ; 10
  338.     dc.b    '   1234567 90  @#$%^&*( _+|\=-[]{}      ' ; 11
  339.     dc.b    '                                        ' ; 12
  340.     dc.b    '     LA PALINGENETICA  B I E A I N      ' ; 15
  341.     dc.b    '                                        ' ; 25
  342.     dc.b    '                                        ' ; 16
  343.     dc.b    '  Nel       del cammin di        vita   ' ; 17
  344.     dc.b    '                                        ' ; 18
  345.     dc.b    '    Mi          pEr UnA       oScuRa    ' ; 19
  346.     dc.b    '                                        ' ; 20
  347.     dc.b    '    CHE LA         VIA ERA SMARRITA     ' ; 21
  348.     dc.b    '                                        ' ; 22
  349.     dc.b    '  AHI Quanto a     QUAL ERA...          ' ; 23
  350.     dc.b    '                                        ' ; 24
  351.     dc.b    '                                        ' ; 25
  352.     dc.b    '                                        ' ; 26
  353.     dc.b    '                                        ' ; 27
  354.  
  355.     EVEN
  356.  
  357. ;    Il FONT caratteri 8x8 copiato in CHIP dalla CPU e non dal blitter,
  358. ;    per cui puo' stare anche in fast ram. Anzi sarebbe meglio!
  359.  
  360. FONT:
  361.     incbin    "assembler2:sorgenti4/nice.fnt"
  362.  
  363. *****************************************************************************
  364.  
  365.     SECTION    COP,DATA_C
  366.  
  367. LISTE:
  368.     dc.w    $8e,DIWS    ; DiwStrt
  369.     dc.w    $90,DIWSt    ; DiwStop
  370.     dc.w    $92,DDFS    ; DdfStart
  371.     dc.w    $94,DDFSt    ; DdfStop
  372.  
  373.     dc.w    $102,$0        ; Bplcon1
  374.     dc.w    $104,$0        ; Bplcon2
  375.     dc.w    $108,$0        ; Bpl1mod
  376.     dc.w    $10a,$0        ; Bpl2mod
  377. PLANES:
  378.     DC.W    $E0,0,$E2,0,$E4,0,$E6,0
  379.     dc.w    $100,BPLC0    ; Bplcon0 - 2 bitplanes lowres
  380.     DC.W    $184,$fff    ; color2 giallo (quello fisso)
  381. CopperEffyz:
  382.     DCB.W    28*8*7        ; Spazio per l'effetto
  383.     DC.W    $FFFF,$FFFE
  384.  
  385. *****************************************************************************
  386.  
  387.     SECTION    BPLBUF,BSS_C
  388.  
  389. Bitplane1:
  390.     ds.b    40*256
  391. Bitplane2:
  392.     ds.b    40*256
  393.  
  394.     END
  395.  
  396. Avete notato la bandierina italiana?? Mettiamo sempre un riconoscimento per
  397. gli stranieri! Ci fanno un baffo!
  398.  
  399.