home *** CD-ROM | disk | FTP | other *** search
- OPENLIB: EQU -408
- ALLOCMEM: EQU -198
- FREEMEM: EQU -210
- MEMF_CHIP: EQU $10002
-
- SPRGFX: MACRO ; Macro för sprite-
- DC.L $908CA000 ; grafik
- DC.W $0000,$07E0
- DC.W $0000,$1FF8
- DC.W $0000,$3FFC
- DC.W $0C00,$7FFE
- DC.W $1C00,$7FFE
- DC.W $1801,$FFFE
- DC.W $0001,$FFFE
- DC.W $0001,$FFFE
- DC.W $0003,$FFFC
- DC.W $0003,$FFFC
- DC.W $0007,$FFF8
- DC.W $0006,$7FF8
- DC.W $000E,$7FF0
- DC.W $003C,$3FC0
- DC.W $00F8,$1F00
- DC.W $07E0,$0000
- DC.L $00000000
- ENDM
-
- BEGIN: MOVEM.L D0-D7/A0-A6,-(SP)
- MOVE.L $4.W,A6
- MOVE.L #COPSIZE+SPRSIZE,D0
- MOVE.L #MEMF_CHIP,D1
- JSR ALLOCMEM(A6) ; Allokera copper &
- MOVE.L D0,NEWCOPPER ; sprites i ChipMem
- BEQ.L ALLOCERROR ; Error?
- ADD.L #COPSIZE,D0
- MOVE.L D0,SPRPTR ; Pekare till SPR0
-
- LEA.L SPR0PTR+2(PC),A0
- MOVE.L D0,D7
- MOVEQ #7,D6
- INITSPR: SWAP D7 ; Ställ in sprite-
- MOVE.W D7,(A0) ; pekare
- SWAP D7
- MOVE.W D7,4(A0)
- ADDQ.L #8,A0
- ADD.L #4+64+4,D7
- DBF D6,INITSPR
-
- MOVE.L NEWCOPPER(PC),A0
- LEA.L COPPERLIST(PC),A1
- MOVE.W #COPSIZE+SPRSIZE-1,D7
- MOVETOCHIP: MOVE.B (A1)+,(A0)+ ; Flytta copper och
- DBF D7,MOVETOCHIP ; sprites 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
- MOVE.W #$4000,$DFF09A ; Stäng av irq
- DISABLE: TST.B $DFF006 ; Vänta på rad 0
- BNE.S DISABLE
- MOVE.W $DFF002,DMABITS ; Spar gammal DMA
- BSET #7,DMABITS
- MOVE.W #$7FFF,$DFF096 ; Stäng av all DMA
- MOVE.W #$83A0,$DFF096 ; Sätt på sprite+cop
-
- MOVE.L NEWCOPPER(PC),$DFF080 ; Vår copperlista
- MOVE.W $DFF00A,OLDMOUSE ; Initiera musposition
-
- MAIN: BTST #6,$BFE001 ; Vänster musknapp?
- BEQ.L EXIT
- SYNC: CMP.B #$FF,$DFF006 ; Synkronisera
- BNE.S SYNC
-
- MOVE.W $DFF00A,NEWMOUSE ; Ny musposition
- MOVE.B NEWMOUSE(PC),D0
- SUB.B OLDMOUSE(PC),D0
- ADD.B D0,NEWPOS ; Nytt y-värde
- MOVE.B NEWMOUSE+1(PC),D0
- SUB.B OLDMOUSE+1(PC),D0
- ADD.B D0,NEWPOS+1 ; Nytt x-värde
- MOVE.W NEWMOUSE(PC),OLDMOUSE
-
- CMP.B #$30,NEWPOS ; Gränsvärde uppåt?
- BCC.S TOPOK
- MOVE.B #$30,NEWPOS
- TOPOK: CMP.B #$F0,NEWPOS ; Gränsvärde nedåt?
- BCS.S BOTTOMOK
- MOVE.B #$F0,NEWPOS
- BOTTOMOK: CMP.B #$50,NEWPOS+1 ; Gränsvärde vänster?
- BCC.S LEFTOK
- MOVE.B #$50,NEWPOS+1
- LEFTOK: CMP.B #$C8,NEWPOS+1 ; Gränsvärde höger?
- BCS.S RIGHTOK
- MOVE.B #$C8,NEWPOS+1
- RIGHTOK:
- LEA.L POSTBL(PC),A0
- MOVEQ #31,D7
- SCROLLTBL: MOVE.W 2(A0),(A0)+ ; Scrolla positions-
- DBF D7,SCROLLTBL ; tabellen
-
- LEA.L NEWPOS(PC),A0
- MOVE.L SPRPTR(PC),A1
- MOVEQ #7,D7
- REFRESHPOS: MOVE.W (A0),(A1) ; Ställ in nya
- MOVE.B (A1),2(A1) ; positioner
- ADD.B #16,2(A1)
- SUBQ.L #8,A0
- ADD.L #4+64+4,A1
- DBF D7,REFRESHPOS
-
- BRA.L MAIN
-
-
- EXIT: MOVE.L OLDCOPPER(PC),$DFF080 ; Återställ copper
- MOVE.W #$7FFF,$DFF096
- MOVE.W DMABITS(PC),$DFF096 ; Återställ DMA
- MOVE.W #$C000,$DFF09A ; Sätt på irq
- GFXERROR: MOVE.L NEWCOPPER(PC),A1
- MOVE.L #COPSIZE+SPRSIZE,D0
- JSR FREEMEM(A6) ; Deallokera
- ALLOCERROR: MOVEM.L (SP)+,D0-D7/A0-A6
- RTS
-
-
- OLDCOPPER: DC.L 0
- NEWCOPPER: DC.L 0
- SPRPTR: DC.L 0
- DMABITS: DC.W 0
- OLDMOUSE: DC.W 0
- NEWMOUSE: DC.W 0
- POSTBL: DC.W $908C,$908C,$908C,$908C
- DC.W $908C,$908C,$908C,$908C
- DC.W $908C,$908C,$908C,$908C
- DC.W $908C,$908C,$908C,$908C
- DC.W $908C,$908C,$908C,$908C
- DC.W $908C,$908C,$908C,$908C
- DC.W $908C,$908C,$908C,$908C
- DC.W $908C,$908C,$908C,$908C
- NEWPOS: DC.W $908C
- GFXNAME: DC.B 'graphics.library',0
- EVEN
-
- COPPERLIST: DC.W $008E,$30A1 ; Rad $30, kol. $A1
- DC.W $0090,$00A1 ; Rad $100, kol. $1A1
- DC.W $0092,$0048 ; Vmarg = $38
- DC.W $0094,$00C0 ; Hmarg = $D0
- DC.W $0100,$1000 ; 1 bitplan
- DC.W $0102,$0000 ; Scrollvärden = 0
- DC.W $0104,$003F ; Sprite prioritet
- DC.W $0108,$0000 ; Udda modulo = 0
- DC.W $010A,$0000 ; Jämn modulo = 0
-
- SPR0PTR: DC.W $0120,$0000 ; Pekare för sprite 0
- DC.W $0122,$0000
- SPR1PTR: DC.W $0124,$0000 ; Pekare för sprite 1
- DC.W $0126,$0000
- SPR2PTR: DC.W $0128,$0000 ; Pekare för sprite 2
- DC.W $012A,$0000
- SPR3PTR: DC.W $012C,$0000 ; Pekare för sprite 3
- DC.W $012E,$0000
- SPR4PTR: DC.W $0130,$0000 ; Pekare för sprite 4
- DC.W $0132,$0000
- SPR5PTR: DC.W $0134,$0000 ; Pekare för sprite 5
- DC.W $0136,$0000
- SPR6PTR: DC.W $0138,$0000 ; Pekare för sprite 6
- DC.W $013A,$0000
- SPR7PTR: DC.W $013C,$0000 ; Pekare för sprite 7
- DC.W $013E,$0000
-
- DC.W $0180,$000 ; Färginställningar
- DC.W $0182,$000
- DC.W $01A2,$900
- DC.W $01A4,$C00
- DC.W $01A6,$F00
- DC.W $01AA,$770
- DC.W $01AC,$AA0
- DC.W $01AE,$DD0
- DC.W $01B2,$050
- DC.W $01B4,$080
- DC.W $01B6,$0B0
- DC.W $01BA,$003
- DC.W $01BC,$006
- DC.W $01BE,$009
-
- DC.W $FFFF,$FFFE ; Slut på copperlistan
- COPEND:
- COPSIZE: EQU COPEND-COPPERLIST
- SPRSIZE: EQU 8*[4+64+4]
-
- SPRITES: SprGfx
- SprGfx
- SprGfx
- SprGfx
- SprGfx
- SprGfx
- SprGfx
- SprGfx