home *** CD-ROM | disk | FTP | other *** search
- BLTWAIT: MACRO
- BLTBUSY?0: BTST #6,$02(A5)
- BNE.S BLTBUSY?0
- ENDM
-
- OPENLIB: EQU -408
- ALLOCMEM: EQU -198
- FREEMEM: EQU -210
- MEMF_CHIP: EQU $10002
-
- BEGIN: MOVEM.L D0-D7/A0-A6,-(SP)
- MOVE.L $4.W,A6
- MOVE.L #COPSIZE+PICSIZE,D0
- MOVE.L #MEMF_CHIP,D1
- JSR ALLOCMEM(A6) ; Allokera copper &
- MOVE.L D0,NEWCOPPER ; bitplan i ChipMem
- BEQ.L ALLOCERROR ; Error?
- ADD.L #COPSIZE,D0
- MOVE.L D0,BPLPTR ; Pekare till BPL1
-
- INITBPL: SWAP D0 ; Ställ in bitplanspekare
- MOVE.W D0,BPL1H
- SWAP D0
- MOVE.W D0,BPL1L
- ADD.L #BPLSIZE,D0
- SWAP D0
- MOVE.W D0,BPL2H
- SWAP D0
- MOVE.W D0,BPL2L
-
- MOVE.L NEWCOPPER(PC),A0
- LEA.L COPPERLIST(PC),A1
- MOVE.W #COPSIZE/4-1,D7
- MOVETOCHIP: MOVE.L (A1)+,(A0)+ ; Flytta copper
- DBF D7,MOVETOCHIP ; till ChipMem
-
- LEA.L GFXNAME(PC),A1
- JSR OPENLIB(A6) ; Öppna gfx
- TST.L D0
- BEQ.L GFXERROR ; Error?
- MOVE.L D0,A0
- MOVE.L $26(A0),OLDCOPPER ; Spar gammal copper
- LEA.L $DFF000,A5 ; Pekare till $DFF000
- DISABLE: TST.B $06(A5) ; Vänta på rad 0
- BNE.S DISABLE
- MOVE.W #$4000,$9A(A5) ; Stäng av interrupt
- MOVE.W $02(A5),DMABITS ; Spar gammal DMA
- BSET #7,DMABITS
- MOVE.W #$7FFF,$96(A5) ; Stäng av all DMA
- MOVE.W #$83C0,$96(A5) ; Sätt på bpl+cop+blt
-
- MOVE.L NEWCOPPER(PC),$80(A5) ; Vår copperlista
- MOVE.L #$FFFFFFFF,$44(A5) ; Mask för A
- MOVE.L #$00240008,$60(A5) ; Modulo för C och B
- MOVE.W #$0008,$64(A5) ; Modulo för A
-
- MAIN: BTST #6,$BFE001 ; Vänster musknapp?
- BEQ.L EXIT
-
- SYNC: CMP.B #$C8,$06(A5) ; Vänta på rad $C8
- BNE.S SYNC
-
- MOVE.L #$01000000,$40(A5) ; D = 0
- CLR.W $66(A5) ; Modulo = 0
- MOVE.L BPLPTR(PC),$54(A5)
- MOVE.W #$40*2*200+20,$58(A5) ; Rensa båda bitplanen
- BltWait ; Vänta på blittern
- MOVE.W #$0024,$66(A5) ; Återställ modulo
-
- LEA.L BOBDATA(PC),A0 ; Datastruktur för bobs
- LEA.L SINTBL(PC),A1 ; Sinustabell
- MOVEQ #31,D7 ; 32 stycken bobs
- PUTBOBS: MOVE.L #BOBBPL1,D5 ; Normal boll
- MOVE.W 6(A0),D0 ; Sinusräknare
- ADDQ.B #1,7(A0) ; Öka sinusräknaren
- CMP.W #128,D0 ; Mer än 90°?
- BLS.S BELOW90
- NEG.W D0 ; Gå bakifrån i tabellen
- ADD.W #256,D0
- BELOW90: ADD.W D0,D0
- MOVEQ #0,D2
- MOVE.W (A0),D2 ; xposition
- ADD.W 2(A0),D2 ; Addera deltax
- BPL.S NOTLEFT ; Utanför skärmen?
- NEG.W 2(A0) ; Byt riktning
- CLR.W D2
- NOTLEFT: CMP.W #304,D2
- BLS.S NOTRIGHT ; Utanför skärmen?
- NEG.W 2(A0) ; Byt riktning
- MOVE.W #304,D2
- NOTRIGHT: MOVE.W D2,(A0) ; Spar ny position
- MOVE.W 4(A0),D3 ; Amplitud
- MULU $00(A1,D0.W),D3 ; Sinus för räknaren
- CMP.L #$3FFF,D3 ; Större än 1?
- BHI.S NOBOUNCE
- CMP.L #$1FFF,D3 ; Större än 0.5?
- BHI.S BOUNCE1
- BOUNCE2: MOVE.L #BOBBPL1+8,D5 ; Max komprimering
- BRA.S NOBOUNCE
- BOUNCE1: MOVE.L #BOBBPL1+4,D5 ; Mellan komprimering
- NOBOUNCE: MOVE.L D5,D6
- ADD.L #144,D6 ; Bobens andra bitplan
- ASL.L #2,D3
- SWAP D3
- SUB.W #188,D3
- NEG.W D3 ; 188-yposition
- MULU #40,D3 ; Skärmbredd
- MOVE.W D2,D4
- ROR.L #4,D2
- ADD.W D2,D2
- ADD.W D2,D3
- ADD.L BPLPTR(PC),D3 ; Adress för utritning
- SWAP D2
- MOVE.W D2,$42(A5) ; ___
- OR.W #$0FF2,D2 ; D = A(A+B)+C(A+B)
- MOVE.W D2,$40(A5)
- MOVE.L D3,$48(A5)
- MOVE.L D6,$4C(A5)
- MOVE.L D5,$50(A5)
- MOVE.L D3,$54(A5)
- MOVE.W #$40*12+2,$58(A5) ; 12 rader, 4 bytes
- BltWait ; Vänta på blittern
- AND.W #$F000,D2 ; ___
- OR.W #$0FCE,D2 ; D = B(A+B)+C(A+B)
- MOVE.W D2,$40(A5)
- ADD.L #BPLSIZE,D3 ; Skriv till BPL2
- MOVE.L D6,$4C(A5)
- MOVE.L D5,$50(A5)
- MOVE.L D3,$48(A5)
- MOVE.L D3,$54(A5)
- MOVE.W #$40*12+2,$58(A5) ; 12 rader, 4 bytes
- BltWait ; Vänta på blittern
- ADDQ.L #8,A0 ; Nästa bob
- DBF D7,PUTBOBS
- BRA.L MAIN
-
- EXIT: MOVE.L OLDCOPPER(PC),$80(A5) ; Återställ copper
- MOVE.W DMABITS(PC),$96(A5) ; Återställ DMA
- MOVE.W #$C000,$9A(A5) ; Sätt på interrupt
- GFXERROR: MOVE.L NEWCOPPER(PC),A1
- MOVE.L #COPSIZE+PICSIZE,D0
- JSR FREEMEM(A6) ; Deallokera
- ALLOCERROR: MOVEM.L (SP)+,D0-D7/A0-A6
- RTS
-
- OLDCOPPER: DC.L 0 ; Gammal copper pekare
- NEWCOPPER: DC.L 0 ; Vår copper pekare
- BPLPTR: DC.L 0 ; Pekare till bitplan 1
- DMABITS: DC.W 0 ; Gammal DMA
- GFXNAME: DC.B 'graphics.library',0
- EVEN
-
- COPPERLIST: DC.W $008E,$2C81 ; Rad $2C, kol. $81
- DC.W $0090,$F4C1 ; Rad $F4, kol. $C1
- DC.W $0092,$0038 ; Vmarg = $38
- DC.W $0094,$00D0 ; Hmarg = $D0
- DC.W $0100,$2000 ; 2 bitplan, LORES
- DC.W $0102,$0000 ; Scroll = 0
- DC.W $0104,$0000 ; Normal prioritet
- DC.W $0108,$0000 ; Udda modulo = 0
- DC.W $010A,$0000 ; Jämn modulo = 0
- DC.W $00E0 ; Bitplanspekare
- BPL1H: DC.W $0000 ; för bitplan 1
- DC.W $00E2
- BPL1L: DC.W $0000
- DC.W $00E4 ; Bitplanspekare
- BPL2H: DC.W $0000 ; för bitplan 2
- DC.W $00E6
- BPL2L: DC.W $0000
- COLORS: DC.W $0180,$000 ; Färgtabell
- DC.W $0182,$009
- DC.W $0184,$22C
- DC.W $0186,$44F
- DC.W $F407,$FFFE,$0180,$F00 ; Rött "golv"
- DC.W $F507,$FFFE,$0180,$000
- DC.W $FFFF,$FFFE ; Slut på copperlistan
- COPEND:
- COPSIZE: EQU COPEND-COPPERLIST
- BPLSIZE: EQU 320/8*200
- PICSIZE: EQU 2*BPLSIZE
-
- BOBDATA: DC.W 0,1,100,0 ; xposition, deltax,
- DC.W 10,3,40,5 ; amplitud, sinusräknare
- DC.W 20,0,20,10
- DC.W 30,-2,50,15
- DC.W 40,-1,150,20
- DC.W 50,0,80,25
- DC.W 60,4,120,30
- DC.W 70,-3,60,35
- DC.W 80,1,70,40
- DC.W 90,0,50,45
- DC.W 100,2,180,50
- DC.W 110,-2,20,55
- DC.W 120,-4,130,60
- DC.W 130,1,160,65
- DC.W 140,5,170,70
- DC.W 150,0,140,75
- DC.W 160,-4,30,80
- DC.W 170,-1,60,85
- DC.W 180,-3,130,90
- DC.W 190,2,50,95
- DC.W 200,4,80,100
- DC.W 210,-1,90,105
- DC.W 220,-3,120,110
- DC.W 230,0,110,115
- DC.W 240,2,40,120
- DC.W 250,-2,10,125
- DC.W 260,0,40,130
- DC.W 270,-4,50,135
- DC.W 280,-2,120,140
- DC.W 290,4,140,145
- DC.W 300,1,90,150
- DC.W 300,3,170,155
-
- SINTBL: DC.W $0000,$00C9,$0192,$025B,$0324,$03ED,$04B5,$057E
- DC.W $0646,$070E,$07D6,$089D,$0964,$0A2B,$0AF1,$0BB7
- DC.W $0C7C,$0D41,$0E06,$0ECA,$0F8D,$1050,$1112,$11D3
- DC.W $1294,$1354,$1413,$14D2,$1590,$164C,$1709,$17C4
- DC.W $187E,$1937,$19EF,$1AA7,$1B5D,$1C12,$1CC6,$1D79
- DC.W $1E2B,$1EDC,$1F8C,$203A,$20E7,$2193,$223D,$22E7
- DC.W $238E,$2435,$24DA,$257E,$2620,$26C1,$2760,$27FE
- DC.W $289A,$2935,$29CE,$2A65,$2AFB,$2B8F,$2C21,$2CB2
- DC.W $2D41,$2DCF,$2E5A,$2EE4,$2F6C,$2FF2,$3076,$30F8
- DC.W $3179,$31F8,$3274,$32EF,$3368,$33DF,$3453,$34C6
- DC.W $3537,$35A5,$3612,$367D,$36E5,$374B,$37B0,$3812
- DC.W $3871,$38CF,$392B,$3984,$39DB,$3A30,$3A82,$3AD3
- DC.W $3B21,$3B6D,$3BB6,$3BFD,$3C42,$3C85,$3CC5,$3D03
- DC.W $3D3F,$3D78,$3DAF,$3DE3,$3E15,$3E45,$3E72,$3E9D
- DC.W $3EC5,$3EEB,$3F0F,$3F30,$3F4F,$3F6B,$3F85,$3F9C
- DC.W $3FB1,$3FC4,$3FD4,$3FE1,$3FEC,$3FF5,$3FFB,$3FFF
- DC.W $4000
-
- BOBBPL1: DC.L $00000000,$00000000,$00000000
- DC.L $03C00000,$00000000,$00000000
- DC.L $0FF00000,$07E00000,$00000000
- DC.L $0FF00000,$1FF80000,$0FF00000
- DC.L $1FF80000,$1FF80000,$3FFC0000
- DC.L $1FF80000,$3FFC0000,$7FFE0000
- DC.L $1FF80000,$3FFC0000,$7FFE0000
- DC.L $1FF80000,$3FFC0000,$7FFE0000
- DC.L $0FF00000,$1FF80000,$7FFE0000
- DC.L $0FF00000,$1FF80000,$3FFC0000
- DC.L $03C00000,$07E00000,$0FF00000
- DC.L $00000000,$00000000,$00000000
- BOBBPL2: DC.L $03C00000,$00000000,$00000000
- DC.L $0C300000,$07E00000,$00000000
- DC.L $16080000,$18180000,$0FF00000
- DC.L $1E080000,$2C040000,$300C0000
- DC.L $2C0C0000,$3C040000,$58020000
- DC.L $200C0000,$58060000,$B0030000
- DC.L $201C0000,$40060000,$B0030000
- DC.L $201C0000,$400E0000,$80070000
- DC.L $10380000,$201C0000,$800F0000
- DC.L $10F80000,$207C0000,$403E0000
- DC.L $0FF00000,$1FF80000,$3FFC0000
- DC.L $03C00000,$07E00000,$0FF00000
-