home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Assembler / dse-src6.dms / in.adf / DMZ.LZH / PRG14.1 < prev    next >
Encoding:
Text File  |  1999-10-02  |  7.2 KB  |  257 lines

  1. BLTWAIT:    MACRO
  2. BLTBUSY?0:    BTST    #6,$02(A5)
  3.         BNE.S    BLTBUSY?0
  4.         ENDM
  5.  
  6. OPENLIB:    EQU    -408
  7. ALLOCMEM:    EQU    -198
  8. FREEMEM:    EQU    -210
  9. MEMF_CHIP:    EQU    $10002
  10.  
  11. BEGIN:        MOVEM.L    D0-D7/A0-A6,-(SP)
  12.         MOVE.L    $4.W,A6
  13.         MOVE.L    #COPSIZE+PICSIZE,D0
  14.         MOVE.L    #MEMF_CHIP,D1
  15.         JSR    ALLOCMEM(A6)        ; Allokera copper &
  16.         MOVE.L    D0,NEWCOPPER        ; bitplan i ChipMem
  17.         BEQ.L    ALLOCERROR        ; Error?
  18.         ADD.L    #COPSIZE,D0
  19.         MOVE.L    D0,BPLPTR        ; Pekare till BPL1
  20.  
  21. INITBPL:    SWAP    D0            ; Ställ in bitplanspekare
  22.         MOVE.W    D0,BPL1H
  23.         SWAP    D0
  24.         MOVE.W    D0,BPL1L
  25.         ADD.L    #BPLSIZE,D0
  26.         SWAP    D0
  27.         MOVE.W    D0,BPL2H
  28.         SWAP    D0
  29.         MOVE.W    D0,BPL2L
  30.  
  31.         MOVE.L    NEWCOPPER(PC),A0
  32.         LEA.L    COPPERLIST(PC),A1
  33.         MOVE.W    #COPSIZE/4-1,D7
  34. MOVETOCHIP:    MOVE.L    (A1)+,(A0)+        ; Flytta copper
  35.         DBF    D7,MOVETOCHIP        ; till ChipMem
  36.  
  37.         LEA.L    GFXNAME(PC),A1
  38.         JSR    OPENLIB(A6)        ; Öppna gfx
  39.         TST.L    D0
  40.         BEQ.L    GFXERROR        ; Error?
  41.         MOVE.L    D0,A0
  42.         MOVE.L    $26(A0),OLDCOPPER    ; Spar gammal copper
  43.         LEA.L    $DFF000,A5        ; Pekare till $DFF000
  44. DISABLE:    TST.B    $06(A5)            ; Vänta på rad 0
  45.         BNE.S    DISABLE
  46.         MOVE.W    #$4000,$9A(A5)        ; Stäng av interrupt
  47.         MOVE.W    $02(A5),DMABITS        ; Spar gammal DMA
  48.         BSET    #7,DMABITS
  49.         MOVE.W    #$7FFF,$96(A5)        ; Stäng av all DMA
  50.         MOVE.W    #$83C0,$96(A5)        ; Sätt på bpl+cop+blt
  51.  
  52.         MOVE.L    NEWCOPPER(PC),$80(A5)    ; Vår copperlista
  53.         MOVE.L    #$FFFFFFFF,$44(A5)    ; Mask för A
  54.         MOVE.L    #$00240008,$60(A5)    ; Modulo för C och B
  55.         MOVE.W    #$0008,$64(A5)        ; Modulo för A
  56.  
  57. MAIN:        BTST    #6,$BFE001        ; Vänster musknapp?
  58.         BEQ.L    EXIT
  59.  
  60. SYNC:        CMP.B    #$C8,$06(A5)        ; Vänta på rad $C8
  61.         BNE.S    SYNC
  62.  
  63.         MOVE.L    #$01000000,$40(A5)    ; D = 0
  64.         CLR.W    $66(A5)            ; Modulo = 0
  65.         MOVE.L    BPLPTR(PC),$54(A5)
  66.         MOVE.W    #$40*2*200+20,$58(A5)    ; Rensa båda bitplanen
  67.         BltWait                ; Vänta på blittern
  68.         MOVE.W    #$0024,$66(A5)        ; Återställ modulo
  69.  
  70.         LEA.L    BOBDATA(PC),A0        ; Datastruktur för bobs
  71.         LEA.L    SINTBL(PC),A1        ; Sinustabell
  72.         MOVEQ    #31,D7            ; 32 stycken bobs
  73. PUTBOBS:    MOVE.L    #BOBBPL1,D5        ; Normal boll
  74.         MOVE.W    6(A0),D0        ; Sinusräknare
  75.         ADDQ.B    #1,7(A0)        ; Öka sinusräknaren
  76.         CMP.W    #128,D0            ; Mer än 90°?
  77.         BLS.S    BELOW90
  78.         NEG.W    D0            ; Gå bakifrån i tabellen
  79.         ADD.W    #256,D0
  80. BELOW90:    ADD.W    D0,D0
  81.         MOVEQ    #0,D2
  82.         MOVE.W    (A0),D2            ; xposition
  83.         ADD.W    2(A0),D2        ; Addera deltax
  84.         BPL.S    NOTLEFT            ; Utanför skärmen?
  85.         NEG.W    2(A0)            ; Byt riktning
  86.         CLR.W    D2
  87. NOTLEFT:    CMP.W    #304,D2
  88.         BLS.S    NOTRIGHT        ; Utanför skärmen?
  89.         NEG.W    2(A0)            ; Byt riktning
  90.         MOVE.W    #304,D2
  91. NOTRIGHT:    MOVE.W    D2,(A0)            ; Spar ny position
  92.         MOVE.W    4(A0),D3        ; Amplitud
  93.         MULU    $00(A1,D0.W),D3        ; Sinus för räknaren
  94.         CMP.L    #$3FFF,D3        ; Större än 1?
  95.         BHI.S    NOBOUNCE
  96.         CMP.L    #$1FFF,D3        ; Större än 0.5?
  97.         BHI.S    BOUNCE1
  98. BOUNCE2:    MOVE.L    #BOBBPL1+8,D5        ; Max komprimering
  99.         BRA.S    NOBOUNCE
  100. BOUNCE1:    MOVE.L    #BOBBPL1+4,D5        ; Mellan komprimering
  101. NOBOUNCE:    MOVE.L    D5,D6
  102.         ADD.L    #144,D6            ; Bobens andra bitplan
  103.         ASL.L    #2,D3
  104.         SWAP    D3
  105.         SUB.W    #188,D3
  106.         NEG.W    D3            ; 188-yposition
  107.         MULU    #40,D3            ; Skärmbredd
  108.         MOVE.W    D2,D4
  109.         ROR.L    #4,D2
  110.         ADD.W    D2,D2
  111.         ADD.W    D2,D3
  112.         ADD.L    BPLPTR(PC),D3        ; Adress för utritning
  113.         SWAP    D2
  114.         MOVE.W    D2,$42(A5)        ;              ___
  115.         OR.W    #$0FF2,D2        ; D = A(A+B)+C(A+B)
  116.         MOVE.W    D2,$40(A5)
  117.         MOVE.L    D3,$48(A5)
  118.         MOVE.L    D6,$4C(A5)
  119.         MOVE.L    D5,$50(A5)
  120.         MOVE.L    D3,$54(A5)
  121.         MOVE.W    #$40*12+2,$58(A5)    ; 12 rader, 4 bytes
  122.         BltWait                ; Vänta på blittern
  123.         AND.W    #$F000,D2        ;              ___
  124.         OR.W    #$0FCE,D2        ; D = B(A+B)+C(A+B)
  125.         MOVE.W    D2,$40(A5)
  126.         ADD.L    #BPLSIZE,D3        ; Skriv till BPL2
  127.         MOVE.L    D6,$4C(A5)
  128.         MOVE.L    D5,$50(A5)
  129.         MOVE.L    D3,$48(A5)
  130.         MOVE.L    D3,$54(A5)
  131.         MOVE.W    #$40*12+2,$58(A5)    ; 12 rader, 4 bytes
  132.         BltWait                ; Vänta på blittern
  133.         ADDQ.L    #8,A0            ; Nästa bob
  134.         DBF    D7,PUTBOBS
  135.         BRA.L    MAIN
  136.  
  137. EXIT:        MOVE.L    OLDCOPPER(PC),$80(A5)    ; Återställ copper
  138.         MOVE.W    DMABITS(PC),$96(A5)    ; Återställ DMA
  139.         MOVE.W    #$C000,$9A(A5)        ; Sätt på interrupt
  140. GFXERROR:    MOVE.L    NEWCOPPER(PC),A1
  141.         MOVE.L    #COPSIZE+PICSIZE,D0
  142.         JSR    FREEMEM(A6)        ; Deallokera
  143. ALLOCERROR:    MOVEM.L    (SP)+,D0-D7/A0-A6
  144.         RTS
  145.  
  146. OLDCOPPER:    DC.L    0            ; Gammal copper pekare
  147. NEWCOPPER:    DC.L    0            ; Vår copper pekare
  148. BPLPTR:        DC.L    0            ; Pekare till bitplan 1
  149. DMABITS:    DC.W    0            ; Gammal DMA
  150. GFXNAME:    DC.B    'graphics.library',0
  151. EVEN
  152.  
  153. COPPERLIST:    DC.W    $008E,$2C81        ; Rad $2C, kol. $81
  154.         DC.W    $0090,$F4C1        ; Rad $F4, kol. $C1
  155.         DC.W    $0092,$0038        ; Vmarg = $38
  156.         DC.W    $0094,$00D0        ; Hmarg = $D0
  157.         DC.W    $0100,$2000        ; 2 bitplan, LORES
  158.         DC.W    $0102,$0000        ; Scroll = 0
  159.         DC.W    $0104,$0000        ; Normal prioritet
  160.         DC.W    $0108,$0000        ; Udda modulo = 0
  161.         DC.W    $010A,$0000        ; Jämn modulo = 0
  162.         DC.W    $00E0            ; Bitplanspekare
  163. BPL1H:        DC.W    $0000            ; för bitplan 1
  164.         DC.W    $00E2
  165. BPL1L:        DC.W    $0000
  166.         DC.W    $00E4            ; Bitplanspekare
  167. BPL2H:        DC.W    $0000            ; för bitplan 2
  168.         DC.W    $00E6
  169. BPL2L:        DC.W    $0000
  170. COLORS:        DC.W    $0180,$000        ; Färgtabell
  171.         DC.W    $0182,$009
  172.         DC.W    $0184,$22C
  173.         DC.W    $0186,$44F
  174.         DC.W    $F407,$FFFE,$0180,$F00    ; Rött "golv"
  175.         DC.W    $F507,$FFFE,$0180,$000
  176.         DC.W    $FFFF,$FFFE        ; Slut på copperlistan
  177. COPEND:
  178. COPSIZE:    EQU    COPEND-COPPERLIST
  179. BPLSIZE:    EQU    320/8*200
  180. PICSIZE:    EQU    2*BPLSIZE
  181.  
  182. BOBDATA:    DC.W    0,1,100,0        ; xposition, deltax,
  183.         DC.W    10,3,40,5        ; amplitud, sinusräknare
  184.         DC.W    20,0,20,10
  185.         DC.W    30,-2,50,15
  186.         DC.W    40,-1,150,20
  187.         DC.W    50,0,80,25
  188.         DC.W    60,4,120,30
  189.         DC.W    70,-3,60,35
  190.         DC.W    80,1,70,40
  191.         DC.W    90,0,50,45
  192.         DC.W    100,2,180,50
  193.         DC.W    110,-2,20,55
  194.         DC.W    120,-4,130,60
  195.         DC.W    130,1,160,65
  196.         DC.W    140,5,170,70
  197.         DC.W    150,0,140,75
  198.         DC.W    160,-4,30,80
  199.         DC.W    170,-1,60,85
  200.         DC.W    180,-3,130,90
  201.         DC.W    190,2,50,95
  202.         DC.W    200,4,80,100
  203.         DC.W    210,-1,90,105
  204.         DC.W    220,-3,120,110
  205.         DC.W    230,0,110,115
  206.         DC.W    240,2,40,120
  207.         DC.W    250,-2,10,125
  208.         DC.W    260,0,40,130
  209.         DC.W    270,-4,50,135
  210.         DC.W    280,-2,120,140
  211.         DC.W    290,4,140,145
  212.         DC.W    300,1,90,150
  213.         DC.W    300,3,170,155
  214.  
  215. SINTBL:        DC.W    $0000,$00C9,$0192,$025B,$0324,$03ED,$04B5,$057E
  216.         DC.W    $0646,$070E,$07D6,$089D,$0964,$0A2B,$0AF1,$0BB7
  217.         DC.W    $0C7C,$0D41,$0E06,$0ECA,$0F8D,$1050,$1112,$11D3
  218.         DC.W    $1294,$1354,$1413,$14D2,$1590,$164C,$1709,$17C4
  219.         DC.W    $187E,$1937,$19EF,$1AA7,$1B5D,$1C12,$1CC6,$1D79
  220.         DC.W    $1E2B,$1EDC,$1F8C,$203A,$20E7,$2193,$223D,$22E7
  221.         DC.W    $238E,$2435,$24DA,$257E,$2620,$26C1,$2760,$27FE
  222.         DC.W    $289A,$2935,$29CE,$2A65,$2AFB,$2B8F,$2C21,$2CB2
  223.         DC.W    $2D41,$2DCF,$2E5A,$2EE4,$2F6C,$2FF2,$3076,$30F8
  224.         DC.W    $3179,$31F8,$3274,$32EF,$3368,$33DF,$3453,$34C6
  225.         DC.W    $3537,$35A5,$3612,$367D,$36E5,$374B,$37B0,$3812
  226.         DC.W    $3871,$38CF,$392B,$3984,$39DB,$3A30,$3A82,$3AD3
  227.         DC.W    $3B21,$3B6D,$3BB6,$3BFD,$3C42,$3C85,$3CC5,$3D03
  228.         DC.W    $3D3F,$3D78,$3DAF,$3DE3,$3E15,$3E45,$3E72,$3E9D
  229.         DC.W    $3EC5,$3EEB,$3F0F,$3F30,$3F4F,$3F6B,$3F85,$3F9C
  230.         DC.W    $3FB1,$3FC4,$3FD4,$3FE1,$3FEC,$3FF5,$3FFB,$3FFF
  231.         DC.W    $4000
  232.  
  233. BOBBPL1:    DC.L    $00000000,$00000000,$00000000
  234.         DC.L    $03C00000,$00000000,$00000000
  235.         DC.L    $0FF00000,$07E00000,$00000000
  236.         DC.L    $0FF00000,$1FF80000,$0FF00000
  237.         DC.L    $1FF80000,$1FF80000,$3FFC0000
  238.         DC.L    $1FF80000,$3FFC0000,$7FFE0000
  239.         DC.L    $1FF80000,$3FFC0000,$7FFE0000
  240.         DC.L    $1FF80000,$3FFC0000,$7FFE0000
  241.         DC.L    $0FF00000,$1FF80000,$7FFE0000
  242.         DC.L    $0FF00000,$1FF80000,$3FFC0000
  243.         DC.L    $03C00000,$07E00000,$0FF00000
  244.         DC.L    $00000000,$00000000,$00000000
  245. BOBBPL2:    DC.L    $03C00000,$00000000,$00000000
  246.         DC.L    $0C300000,$07E00000,$00000000
  247.         DC.L    $16080000,$18180000,$0FF00000
  248.         DC.L    $1E080000,$2C040000,$300C0000
  249.         DC.L    $2C0C0000,$3C040000,$58020000
  250.         DC.L    $200C0000,$58060000,$B0030000
  251.         DC.L    $201C0000,$40060000,$B0030000
  252.         DC.L    $201C0000,$400E0000,$80070000
  253.         DC.L    $10380000,$201C0000,$800F0000
  254.         DC.L    $10F80000,$207C0000,$403E0000
  255.         DC.L    $0FF00000,$1FF80000,$3FFC0000
  256.         DC.L    $03C00000,$07E00000,$0FF00000
  257.