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

  1. OPENLIB:    EQU    -408
  2. ALLOCMEM:    EQU    -198
  3. FREEMEM:    EQU    -210
  4. MEMF_CHIP:    EQU    $10002
  5.  
  6. SPRGFX:        MACRO                ; Macro för sprite-
  7.         DC.L    $908CA000        ; grafik
  8.         DC.W    $0000,$07E0
  9.         DC.W    $0000,$1FF8
  10.         DC.W    $0000,$3FFC
  11.         DC.W    $0C00,$7FFE
  12.         DC.W    $1C00,$7FFE
  13.         DC.W    $1801,$FFFE
  14.         DC.W    $0001,$FFFE
  15.         DC.W    $0001,$FFFE
  16.         DC.W    $0003,$FFFC
  17.         DC.W    $0003,$FFFC
  18.         DC.W    $0007,$FFF8
  19.         DC.W    $0006,$7FF8
  20.         DC.W    $000E,$7FF0
  21.         DC.W    $003C,$3FC0
  22.         DC.W    $00F8,$1F00
  23.         DC.W    $07E0,$0000
  24.         DC.L    $00000000
  25.         ENDM
  26.  
  27. BEGIN:        MOVEM.L    D0-D7/A0-A6,-(SP)
  28.         MOVE.L    $4.W,A6
  29.         MOVE.L    #COPSIZE+SPRSIZE,D0
  30.         MOVE.L    #MEMF_CHIP,D1
  31.         JSR    ALLOCMEM(A6)        ; Allokera copper &
  32.         MOVE.L    D0,NEWCOPPER        ; sprites i ChipMem
  33.         BEQ.L    ALLOCERROR        ; Error?
  34.         ADD.L    #COPSIZE,D0
  35.         MOVE.L    D0,SPRPTR        ; Pekare till SPR0
  36.  
  37.         LEA.L    SPR0PTR+2(PC),A0
  38.         MOVE.L    D0,D7
  39.         MOVEQ    #7,D6
  40. INITSPR:    SWAP    D7            ; Ställ in sprite-
  41.         MOVE.W    D7,(A0)            ; pekare
  42.         SWAP    D7
  43.         MOVE.W    D7,4(A0)
  44.         ADDQ.L    #8,A0
  45.         ADD.L    #4+64+4,D7
  46.         DBF    D6,INITSPR
  47.  
  48.         MOVE.L    NEWCOPPER(PC),A0
  49.         LEA.L    COPPERLIST(PC),A1
  50.         MOVE.W    #COPSIZE+SPRSIZE-1,D7
  51. MOVETOCHIP:    MOVE.B    (A1)+,(A0)+        ; Flytta copper och
  52.         DBF    D7,MOVETOCHIP        ; sprites till ChipMem
  53.  
  54.         LEA.L    GFXNAME(PC),A1
  55.         JSR    OPENLIB(A6)        ; Öppna gfx
  56.         TST.L    D0
  57.         BEQ.L    GFXERROR        ; Error?
  58.         MOVE.L    D0,A0
  59.         MOVE.L    $26(A0),OLDCOPPER    ; Spar gammal copper
  60.         MOVE.W    #$4000,$DFF09A        ; Stäng av irq
  61. DISABLE:    TST.B    $DFF006            ; Vänta på rad 0
  62.         BNE.S    DISABLE
  63.         MOVE.W    $DFF002,DMABITS        ; Spar gammal DMA
  64.         BSET    #7,DMABITS
  65.         MOVE.W    #$7FFF,$DFF096        ; Stäng av all DMA
  66.         MOVE.W    #$83A0,$DFF096        ; Sätt på sprite+cop
  67.  
  68.         MOVE.L    NEWCOPPER(PC),$DFF080    ; Vår copperlista
  69.         MOVE.W    $DFF00A,OLDMOUSE    ; Initiera musposition
  70.  
  71. MAIN:        BTST    #6,$BFE001        ; Vänster musknapp?
  72.         BEQ.L    EXIT
  73. SYNC:        CMP.B    #$FF,$DFF006        ; Synkronisera
  74.         BNE.S    SYNC
  75.  
  76.         MOVE.W    $DFF00A,NEWMOUSE    ; Ny musposition
  77.         MOVE.B    NEWMOUSE(PC),D0
  78.         SUB.B    OLDMOUSE(PC),D0
  79.         ADD.B    D0,NEWPOS        ; Nytt y-värde
  80.         MOVE.B    NEWMOUSE+1(PC),D0
  81.         SUB.B    OLDMOUSE+1(PC),D0
  82.         ADD.B    D0,NEWPOS+1        ; Nytt x-värde
  83.         MOVE.W    NEWMOUSE(PC),OLDMOUSE
  84.  
  85.         CMP.B    #$30,NEWPOS        ; Gränsvärde uppåt?
  86.         BCC.S    TOPOK
  87.         MOVE.B    #$30,NEWPOS
  88. TOPOK:        CMP.B    #$F0,NEWPOS        ; Gränsvärde nedåt?
  89.         BCS.S    BOTTOMOK
  90.         MOVE.B    #$F0,NEWPOS
  91. BOTTOMOK:    CMP.B    #$50,NEWPOS+1        ; Gränsvärde vänster? 
  92.         BCC.S    LEFTOK
  93.         MOVE.B    #$50,NEWPOS+1
  94. LEFTOK:        CMP.B    #$C8,NEWPOS+1        ; Gränsvärde höger?
  95.         BCS.S    RIGHTOK
  96.         MOVE.B    #$C8,NEWPOS+1
  97. RIGHTOK:
  98.         LEA.L    POSTBL(PC),A0
  99.         MOVEQ    #31,D7
  100. SCROLLTBL:    MOVE.W    2(A0),(A0)+        ; Scrolla positions-
  101.         DBF    D7,SCROLLTBL        ; tabellen
  102.  
  103.         LEA.L    NEWPOS(PC),A0
  104.         MOVE.L    SPRPTR(PC),A1
  105.         MOVEQ    #7,D7
  106. REFRESHPOS:    MOVE.W    (A0),(A1)        ; Ställ in nya
  107.         MOVE.B    (A1),2(A1)        ; positioner
  108.         ADD.B    #16,2(A1)
  109.         SUBQ.L    #8,A0
  110.         ADD.L    #4+64+4,A1
  111.         DBF    D7,REFRESHPOS
  112.  
  113.         BRA.L    MAIN
  114.  
  115.  
  116. EXIT:        MOVE.L    OLDCOPPER(PC),$DFF080    ; Återställ copper
  117.         MOVE.W    #$7FFF,$DFF096
  118.         MOVE.W    DMABITS(PC),$DFF096    ; Återställ DMA
  119.         MOVE.W    #$C000,$DFF09A        ; Sätt på irq
  120. GFXERROR:    MOVE.L    NEWCOPPER(PC),A1
  121.         MOVE.L    #COPSIZE+SPRSIZE,D0
  122.         JSR    FREEMEM(A6)        ; Deallokera
  123. ALLOCERROR:    MOVEM.L    (SP)+,D0-D7/A0-A6
  124.         RTS
  125.  
  126.  
  127. OLDCOPPER:    DC.L    0
  128. NEWCOPPER:    DC.L    0
  129. SPRPTR:        DC.L    0
  130. DMABITS:    DC.W    0
  131. OLDMOUSE:    DC.W    0
  132. NEWMOUSE:    DC.W    0
  133. POSTBL:        DC.W    $908C,$908C,$908C,$908C
  134.         DC.W    $908C,$908C,$908C,$908C
  135.         DC.W    $908C,$908C,$908C,$908C
  136.         DC.W    $908C,$908C,$908C,$908C
  137.         DC.W    $908C,$908C,$908C,$908C
  138.         DC.W    $908C,$908C,$908C,$908C
  139.         DC.W    $908C,$908C,$908C,$908C
  140.         DC.W    $908C,$908C,$908C,$908C
  141. NEWPOS:        DC.W    $908C
  142. GFXNAME:    DC.B    'graphics.library',0
  143. EVEN
  144.  
  145. COPPERLIST:    DC.W    $008E,$30A1        ; Rad $30, kol. $A1
  146.         DC.W    $0090,$00A1        ; Rad $100, kol. $1A1
  147.         DC.W    $0092,$0048        ; Vmarg = $38
  148.         DC.W    $0094,$00C0        ; Hmarg = $D0
  149.         DC.W    $0100,$1000        ; 1 bitplan
  150.         DC.W    $0102,$0000        ; Scrollvärden = 0
  151.         DC.W    $0104,$003F        ; Sprite prioritet
  152.         DC.W    $0108,$0000        ; Udda modulo = 0
  153.         DC.W    $010A,$0000        ; Jämn modulo = 0
  154.  
  155. SPR0PTR:    DC.W    $0120,$0000        ; Pekare för sprite 0
  156.         DC.W    $0122,$0000
  157. SPR1PTR:    DC.W    $0124,$0000        ; Pekare för sprite 1
  158.         DC.W    $0126,$0000
  159. SPR2PTR:    DC.W    $0128,$0000        ; Pekare för sprite 2
  160.         DC.W    $012A,$0000
  161. SPR3PTR:    DC.W    $012C,$0000        ; Pekare för sprite 3
  162.         DC.W    $012E,$0000
  163. SPR4PTR:    DC.W    $0130,$0000        ; Pekare för sprite 4
  164.         DC.W    $0132,$0000
  165. SPR5PTR:    DC.W    $0134,$0000        ; Pekare för sprite 5
  166.         DC.W    $0136,$0000
  167. SPR6PTR:    DC.W    $0138,$0000        ; Pekare för sprite 6
  168.         DC.W    $013A,$0000
  169. SPR7PTR:    DC.W    $013C,$0000        ; Pekare för sprite 7
  170.         DC.W    $013E,$0000
  171.  
  172.         DC.W    $0180,$000        ; Färginställningar
  173.         DC.W    $0182,$000
  174.         DC.W    $01A2,$900
  175.         DC.W    $01A4,$C00
  176.         DC.W    $01A6,$F00
  177.         DC.W    $01AA,$770
  178.         DC.W    $01AC,$AA0
  179.         DC.W    $01AE,$DD0
  180.         DC.W    $01B2,$050
  181.         DC.W    $01B4,$080
  182.         DC.W    $01B6,$0B0
  183.         DC.W    $01BA,$003
  184.         DC.W    $01BC,$006
  185.         DC.W    $01BE,$009
  186.  
  187.         DC.W    $FFFF,$FFFE        ; Slut på copperlistan
  188. COPEND:
  189. COPSIZE:    EQU    COPEND-COPPERLIST
  190. SPRSIZE:    EQU    8*[4+64+4]
  191.  
  192. SPRITES:    SprGfx
  193.         SprGfx
  194.         SprGfx
  195.         SprGfx
  196.         SprGfx
  197.         SprGfx
  198.         SprGfx
  199.         SprGfx
  200.