home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 4: Demo 1 / almathera_demo1.bin / sourcecode / german / sprites.s < prev    next >
Text File  |  1995-03-17  |  12KB  |  492 lines

  1. ; Sprite Moving routine
  2. ; Modified for SEKA on 18-2-87
  3.  
  4. ; Special AMIGA Equates
  5.  
  6. MaxSndLen:  equ  14000
  7.  
  8. AbsExecBase:  equ  4   ; the only absolute address !
  9. Level3Int:  equ  $6c
  10. ScrPlane:  equ  $40000  ; $35000
  11. SndBuffer:  equ  $45000
  12. BPlane1:  equ  SndBuffer+MaxSndLen ; BPLANE MUST LAST DATA SEGMENT
  13. BPlane2:  equ  BPlane1+3440 ; 3440 = 80Bytes ; 43rows
  14. PField1:  equ  BPlane2+4000
  15. MusicBuffer: equ  PField1+7000
  16.  
  17. ; AMIGA Hardware Addresses
  18. JOY0DAT:   equ  $dff00a
  19. INTREQR:   equ  $dff01e  ; Interrupt request read
  20. DMACON:   equ  $dff096
  21. INTENA:   equ  $dff09a
  22. INTREQ:   equ  $dff09c
  23. AUD0LC:   equ  $dff0a0
  24. AUD0LEN:   equ  $dff0a4
  25. AUD0PER:   equ  $dff0a6
  26. AUD0VOL:   equ  $dff0a8
  27. AUD1LC:   equ  $dff0b0
  28. AUD1LEN:   equ  $dff0b4
  29. AUD1PER:   equ  $dff0b6
  30. AUD1VOL:   equ  $dff0b8
  31.  
  32. ; Exec Library Vector Offsets
  33. Alert:   equ  -108
  34. Permit:   equ  -138
  35. Forbid:  equ  -132
  36. OpenLibrary:  equ  -408
  37. CloseLibrary: equ  -414
  38.  
  39. ; Graphics Library Vector Offsets
  40. Text:   equ  -60
  41. SetFont:   equ  -66
  42. CloseFont:  equ  -78
  43. InitRastPort: equ  -198
  44. InitBitMap:  equ  -390
  45. SetDrMd:   equ  -354
  46. SetAPen:   equ  -342
  47. MovePen:   equ  -240
  48.  
  49. ; Diskfont Library Vectors
  50. OpenDiskFont: equ  -30
  51.  
  52. Open:   equ  -30
  53. Read:   equ  -42
  54. Close:   equ  -36
  55.   CODE
  56. ;  Initialize the Libraries needed!
  57. ;
  58.    move.l sp,initialSP  
  59.    move.l AbsExecBase,a6  ; ExecLib Base
  60.    lea  GfxName,a1   ; addr. of library name
  61.    jsr  OpenLibrary(a6)  ; open it
  62.    move.l d0,GfxBase   ; store base pointer for use
  63.    move.l d0,d6    ; save for use
  64.    beq  NoGfx    ; cannot open dos.lib
  65.  
  66.    lea  SndBuffer,a1
  67.    lea  Sprites,a0
  68.    move.l #S_end-Sprites,d0
  69. lok1:   move.b (a0)+,(a1)+
  70.    dbra d0,lok1
  71. ;
  72. ; setup the new copper list (will be performed in next VBlank)
  73. ;
  74.    move.l AbsExecBase,a6
  75.    jsr  Forbid(a6)   ; stop multitasking
  76.  
  77.    move.l GfxBase,a0
  78.    add.l #$32,a0    ; point to LOFlist in GfxBase
  79.  
  80.    move.w #0,index+6
  81.    move.w #21,index+4
  82.    move.w #14,index+2
  83.    move.w #7,index
  84.  
  85.    move.w #$4000,INTENA  ; Master Interrupt Enable OFF
  86.    move.l Level3Int,OldVector ; store old interrupt vector
  87.    move.l #Handler,Level3Int
  88.  
  89.    move.w #$c000,INTENA  ; 
  90.  
  91.    move.w #$0080,DMACON  ; stop Copper DMA
  92.    move.l (a0),OldCopper  ; pointer to old copper list
  93.    move.l #CopList,(a0)  ; my own Coppers..
  94.    move.w #$80A0,DMACON  ; 
  95. ;
  96. ;  Moving Main Routine
  97. ;
  98. mvrt:
  99.    move.b $bfe001,d0   ; wait until mouse button
  100.    and.l #$40,d0
  101.    bne  mvrt  
  102. ;
  103. ;  reset all resources used!
  104. ;
  105.    move.l GfxBase,a0
  106.    add.l #$32,a0    ; point to LOFlist in GfxBase
  107.  
  108.    move.w #$0080,DMACON  ; stop Copper and Sound
  109.    move.l OldCopper,(a0)  ; restore pointer
  110.    move.w #$8180,DMACON  ; start again ...
  111.  
  112.    move.w #$4000,INTENA  ; stop interrupts
  113.    move.l OldVector,Level3Int
  114.    move.w #$c000,INTENA  ; start again
  115.  
  116.    move.l AbsExecBase,a6
  117.    jsr  Permit(a6)   ; restart multitasking
  118. ;
  119. ;  Ready to give system back
  120. ;
  121.    move.l GfxBase,a1
  122.    jsr  CloseLibrary(a6)
  123.    move.l initialSP,sp
  124.    clr.l d0     ; E.T. phone home!!
  125. ILLEGAL
  126. ;   rts
  127. ;
  128. ;  Display System ALERT
  129. ;
  130. FontErr: move.l #$60000!$8022,d7
  131.    bra.s DoAlert 
  132. NoGfx:  move.l #$30000!$8002,d7 ; AG_OpenLib!AO_GfxLib
  133. DoAlert: jsr  Alert(a6)
  134.    move.l initialSP,sp
  135.    rts       ; try to escape (without hope!)
  136. ;
  137. ;  ---------------------------------------------
  138. ;  Level 3 Interrupt Handler for VBlank & Copper
  139. ;  ---------------------------------------------
  140. ;
  141. Handler: movem.l d0-d2/a0-a1,-(a7)
  142.    move SR,-(sp)   ; don't modify registers
  143.    move.w INTREQR,d0   ; get interrupts
  144.    btst #5,d0    ; test for VBlank Interrupt
  145.    bne.s VBlank    ; VBlank Handler
  146.    bra  EndHandler 
  147. ;
  148. ; VBlank Handler Fine Scrolling Routine
  149. ;
  150. VBlank:
  151.    clr.l d2
  152.    lea  xpos,a0
  153.    lea  SndBuffer,a1
  154. mvobj:
  155.    clr.l d0
  156.    move.w 0(a0,d2.w),d0
  157.    lsr.w #1,d0
  158.    bcs.s sethorz
  159.    bclr #0,3(a1)
  160.    bra.s lab1
  161. sethorz: bset #0,3(a1)
  162. lab1:
  163.    move.b d0,1(a1)
  164.  
  165.    move.b d0,73(a1)
  166.    move.w 8(a0,d2.w),d0
  167.    move.b d0,(a1)
  168.    add.w #17,d0
  169.    move.b d0,2(a1)
  170.  
  171.    add.l #148,a1    ; point to next Sprite Block
  172.    addq.w #2,d2    ; next sprite !
  173.    cmp.w #6,d2
  174.    bls  mvobj
  175.  
  176. ;
  177. ;  Move Sprites
  178. ;
  179.    movem.l a2-a3,-(sp)
  180.  
  181.    clr.l d2
  182.    lea  index,a0
  183.    lea  x_position,a1
  184.    lea  y_position,a2
  185.    lea  xpos,a3
  186. npos:
  187.    move.w 0(a0,d2.w),d0
  188.    cmp.w #256,d0
  189.    bcs.s lok2
  190.    clr.w d0
  191. lok2:  move.b 0(a1,d0.w),d1
  192.    and.w #$ff,d1
  193.    add.w #120,d1
  194.    move.w d1,0(a3,d2.w)
  195.  
  196.    move.b 0(a2,d0.w),d1
  197.    and.w #$ff,d1
  198.    add.w #44,d1
  199.    move.w d1,8(a3,d2.w)
  200.  
  201.    addq.w #1,d0
  202.    move.w d0,0(a0,d2.w)
  203.  
  204.    addq.w #2,d2
  205.    cmp.l #6,d2
  206.    bls  npos
  207.  
  208.    movem.l (sp)+,a2-a3
  209. ;
  210. ;  End of Vertical Blank Handler Routine
  211. ;
  212. EndHandler:
  213.    move (sp)+,SR
  214.    movem.l (sp)+,d0-d2/a0-a1
  215.    DC.W $4ef9
  216. OldVector: DC.L $0000
  217.  
  218. GfxName: DC.B 'graphics.library',0
  219.    even
  220.  
  221. Sprites:
  222. ;
  223. ;  Sprite Data 4
  224. ;
  225.    DC.W $6d60
  226.    DC.W $7e00
  227.    DC.W $00f8,$0000
  228.    DC.W $0108,$00f0
  229.    DC.W $02e8,$01f0
  230.    DC.W $05e8,$03f0
  231.    DC.W $0be8,$07f0
  232.    DC.W $1668,$0ff0
  233.    DC.W $2c68,$1ef0
  234.    DC.W $5868,$3cf0
  235.    DC.W $b868,$7cf0
  236.    DC.W $bfe2,$7ffc
  237.    DC.W $bffa,$7ffc
  238.    DC.W $8062,$7ffc
  239.    DC.W $ff6e,$00f0
  240.    DC.W $0168,$00f0
  241.    DC.W $0168,$00f0
  242.    DC.W $0108,$00f0
  243.    DC.W $01f8,$0000
  244.  
  245.    DC.W $c060,$d100  ; position control of Spr. Reuse
  246.    DC.W $00f8,$0000
  247.    DC.W $0108,$00f0
  248.    DC.W $02e8,$01f0
  249.    DC.W $05e8,$03f0
  250.    DC.W $0be8,$07f0
  251.    DC.W $1668,$0ff0
  252.    DC.W $2c68,$1ef0
  253.    DC.W $5868,$3cf0
  254.    DC.W $b868,$7cf0
  255.    DC.W $bfe2,$7ffc
  256.    DC.W $bffa,$7ffc
  257.    DC.W $8062,$7ffc
  258.    DC.W $ff6e,$00f0
  259.    DC.W $0168,$00f0
  260.    DC.W $0168,$00f0
  261.    DC.W $0108,$00f0
  262.    DC.W $01f8,$0000
  263.    DC.W $0000,$0000
  264. ;
  265. ;   Sprite Data 9
  266. ;
  267.    DC.W $6d60,$7e00
  268.    DC.W $1fe0,$0000
  269.    DC.W $2010,$1fe0
  270.    DC.W $5fe8,$3ff0
  271.    DC.W $b074,$7ff8
  272.    DC.W $b074,$78f8
  273.    DC.W $b074,$78f8
  274.    DC.W $b074,$78f8
  275.    DC.W $bff4,$7ff8
  276.    DC.W $5ff4,$3ff8
  277.    DC.W $2074,$1ff8
  278.    DC.W $1f74,$00f8
  279.    DC.W $f174,$00f8
  280.    DC.W $8f74,$70f8
  281.    DC.W $b074,$7ff8
  282.    DC.W $5fe8,$3ff0
  283.    DC.W $2010,$1fe0
  284.    Dc.W $1fe0,$0000
  285.  
  286.    DC.W $c060,$d100   ; position control
  287.    DC.W $1fe0,$0000
  288.    DC.W $2010,$1fe0
  289.    DC.W $5fe8,$3ff0
  290.    DC.W $b074,$7ff8
  291.    DC.W $b074,$78f8
  292.    DC.W $b074,$78f8
  293.    DC.W $b074,$78f8
  294.    DC.W $bff4,$7ff8
  295.    DC.W $5ff4,$3ff8
  296.    DC.W $2074,$1ff8
  297.    DC.W $1f74,$00f8
  298.    DC.W $f174,$00f8
  299.    DC.W $8f74,$70f8
  300.    DC.W $b074,$7ff8
  301.    DC.W $5fe8,$3ff0
  302.    DC.W $2010,$1fe0
  303.    Dc.W $1fe0,$0000
  304.    Dc.W $0000,$0000
  305.  
  306. ; Sprite Data 1   (times 2)
  307.  
  308.    DC.W $6d60,$7e00
  309.    DC.W $0fe0,$0000
  310.    DC.W $1020,$0fc0
  311.    DC.W $2fa0,$1fc0
  312.    DC.W $5fa0,$3fc0
  313.    DC.W $b3a0,$7fc0
  314.    DC.W $aba0,$77c0
  315.    DC.W $9ba0,$67c0
  316.    DC.W $eba0,$07c0
  317.    DC.W $0ba0,$07c0
  318.    DC.W $0ba0,$07c0
  319.    DC.W $0ba0,$07c0
  320.    DC.W $0ba0,$07c0
  321.    DC.W $0ba0,$07c0
  322.    DC.W $0ba0,$07c0
  323.    DC.W $0ba0,$07c0
  324.    DC.W $0820,$07c0
  325.    DC.W $0fe0,$0000
  326.  
  327.    DC.W $c060,$d100   ; position control
  328.    DC.W $0fe0,$0000
  329.    DC.W $1020,$0fc0
  330.    DC.W $2fa0,$1fc0
  331.    DC.W $5fa0,$3fc0
  332.    DC.W $b3a0,$7fc0
  333.    DC.W $aba0,$77c0
  334.    DC.W $9ba0,$67c0
  335.    DC.W $eba0,$07c0
  336.    DC.W $0ba0,$07c0
  337.    DC.W $0ba0,$07c0
  338.    DC.W $0ba0,$07c0
  339.    DC.W $0ba0,$07c0
  340.    DC.W $0ba0,$07c0
  341.    DC.W $0ba0,$07c0
  342.    DC.W $0ba0,$07c0
  343.    DC.W $0820,$07c0
  344.    DC.W $0fe0,$0000
  345.    DC.W $0000,$0000
  346. ;
  347. ;  last Sprite of 1 image
  348. ;
  349.    DC.W $6d60,$7e00
  350.    DC.W $0fe0,$0000
  351.    DC.W $1020,$0fc0
  352.    DC.W $2fa0,$1fc0
  353.    DC.W $5fa0,$3fc0
  354.    DC.W $b3a0,$7fc0
  355.    DC.W $aba0,$77c0
  356.    DC.W $9ba0,$67c0
  357.    DC.W $eba0,$07c0
  358.    DC.W $0ba0,$07c0
  359.    DC.W $0ba0,$07c0
  360.    DC.W $0ba0,$07c0
  361.    DC.W $0ba0,$07c0
  362.    DC.W $0ba0,$07c0
  363.    DC.W $0ba0,$07c0
  364.    DC.W $0ba0,$07c0
  365.    DC.W $0820,$07c0
  366.    DC.W $0fe0,$0000
  367.  
  368.    DC.W $c060,$d100   ; position control
  369.    DC.W $0fe0,$0000
  370.    DC.W $1020,$0fc0
  371.    DC.W $2fa0,$1fc0
  372.    DC.W $5fa0,$3fc0
  373.    DC.W $b3a0,$7fc0
  374.    DC.W $aba0,$77c0
  375.    DC.W $9ba0,$67c0
  376.    DC.W $eba0,$07c0
  377.    DC.W $0ba0,$07c0
  378.    DC.W $0ba0,$07c0
  379.    DC.W $0ba0,$07c0
  380.    DC.W $0ba0,$07c0
  381.    DC.W $0ba0,$07c0
  382.    DC.W $0ba0,$07c0
  383.    DC.W $0ba0,$07c0
  384.    DC.W $0820,$07c0
  385.    DC.W $0fe0,$0000
  386.    DC.W $0000,$0000
  387. S_end:  equ  *
  388. ;  -------------------------------------
  389. ;  DISPLAY COPROCCESSOR INSTRUCTION LIST
  390. ;  -------------------------------------
  391. ;
  392. CopList:
  393.   DC.W $008e,$2c81    ; DIW Start (3781)
  394.   DC.W $0090,$f4c1    ; DIW Stop (f6d1)
  395.   DC.W $0092,$38  ; DDF Start FETCH 22 WORDS ($28)
  396.   DC.W $0094,$d0  ; DDF Stop ($d8)
  397.   DC.W $00e0,BPlane1/$10000,$00e2
  398. LP1: DC.W [BPlane1&$ffff]+40
  399.   DC.W $00e4,BPlane2/$10000,$00e6
  400. LP2: DC.W [BPlane2&$ffff]+40
  401.   DC.W $0108,00  ; modulo odd planes (34)
  402.   DC.W $0100,$1200  ; 2 BitPlanes
  403.   DC.W $0102,$0000
  404.   DC.W $0104,$0024
  405.   DC.W $0180,$000  ; Background color
  406.   DC.W $0182,$000
  407.   DC.W $01a2,$00f
  408.   DC.W $01a4,$0af
  409.   DC.W $01a6,$0dd
  410.  
  411.   DC.W $01aa,$00f
  412.   DC.W $01ac,$0af
  413.   DC.W $01ae,$0dd
  414.  
  415.   DC.W $0120,$0004   ;[SndBuffer+148*2]/$10000
  416.   DC.W $0122,$5128   ;[SndBuffer+148*2]&$ffff
  417.  
  418.   DC.W $0124,$0004   ;[SndBuffer+148*1]/$10000
  419.   DC.W $0126,$5094   ;[SndBuffer+148*1]&$ffff
  420.  
  421.   DC.W $0128,$0004   ;SndBuffer/$10000
  422.   DC.W $012a,$5000   ;SndBuffer&$ffff
  423.  
  424.   DC.W $012c,$0004   ;[SndBuffer+148*3]/$10000
  425.   DC.W $012e,$51bc   ;[SndBuffer+148*3]&$ffff
  426. ;
  427. ; End of Copper List
  428. ;
  429.   DC.W $ffff,$fffe
  430.  
  431. ;
  432. ;  Sprite Moving Datas
  433. ;
  434. x_position:
  435.   DC.B $50,$50,$51,$53,$56,$5a,$5e,$63,$68,$6e,$74,$7b,$82
  436.   DC.B $89,$91,$98,$9f,$a7,$ad,$b4,$ba,$c0,$c5,$ca,$ce
  437.   DC.B $d1,$d4,$d6,$d7,$d8,$d8,$d8,$d6,$d5,$d2,$d0,$cd
  438.   DC.B $c9,$c5,$c1,$bd,$b9,$b5,$b1,$ad,$a9,$a6,$a2,$a0
  439.   DC.B $9d,$9b,$99,$98,$97,$97,$97,$97,$98,$99,$9b,$9c
  440.   DC.B $9e,$a0,$a2,$a4,$a6,$a8,$aa,$ab,$ac,$ad,$ae,$ae
  441.   Dc.B $ae,$ad,$ac,$aa,$a8,$a6,$a3,$a0,$9c,$98,$94,$8f
  442.   DC.B $8b,$86,$81,$7d,$78,$74,$70,$6c,$69,$66,$64,$62
  443.   DC.B $61,$61,$61,$62,$64,$66,$6a,$6d,$72,$77,$7d,$83
  444.   DC.B $89,$90,$97,$9f,$a6,$ae,$b6,$bd,$c4,$cb,$d1,$d7
  445.   DC.B $dd,$e2,$e6,$e9,$ec,$ee,$ef,$ef,$ee,$ed,$eb,$e8
  446.   DC.B $e4,$e0,$db,$d6,$d0,$ca,$c3,$bc,$b5,$ae,$a7,$a0
  447.   DC.B $9a,$93,$8d,$87,$82,$7d,$79,$76,$73,$70,$6f,$6e
  448.   DC.B $6d,$6d,$6e,$70,$71,$74,$76,$79,$7c,$80,$83,$87
  449.   DC.B $8b,$8e,$92,$95,$98,$9b,$9d,$9f,$a1,$a2,$a3,$a3
  450.   DC.B $a3,$a3,$a2,$a1,$a0,$9e,$9c,$9a,$98,$96,$94,$92
  451.   DC.B $90,$8e,$8d,$8b,$8b,$8a,$8a,$8b,$8b,$8d,$8f,$91
  452.   DC.B $94,$97,$9b,$9f,$a3,$a8,$ad,$b2,$b7,$bc,$c2,$c7
  453.   DC.B $cc,$d0,$d4,$d8,$dc,$de,$e1,$e2,$e3,$e3,$e3,$e1
  454.   DC.B $df,$dd,$d9,$d5,$d0,$cb,$c5,$be,$b7,$b0,$a9,$a1
  455.   DC.B $99,$91,$8a,$82,$7b,$74,$6e,$68,$63,$5e,$5a,$57
  456.   DC.B $54,$53,$52
  457.  
  458. y_position:
  459.   DC.B $56,$52,$4f,$4b,$48,$44,$41,$3e,$3c,$39,$37,$36
  460.   DC.B $35,$34,$33,$33,$33,$34,$35,$36,$37,$39,$3b,$3e
  461.   DC.B $40,$43,$45,$48,$4b,$4e,$51,$53,$56,$59,$5b,$5d
  462.   DC.B $5f,$61,$62,$63,$64,$65,$65,$66,$65,$65,$65,$64
  463.   DC.B $63,$62,$61,$60,$5f,$5e,$5c,$5b,$5a,$59,$58,$57
  464.   DC.B $57,$56,$56,$56,$56,$56,$57,$58,$58,$59,$5a,$5c
  465.   DC.B $5d,$5e,$60,$61,$63,$64,$65,$66,$67,$68,$69,$69
  466.   DC.B $69,$69,$69,$68,$67,$66,$64,$62,$60,$5e,$5c,$59
  467.   DC.B $56,$53,$50,$4d,$4a,$47,$44,$41,$3f,$3c,$3a,$38
  468.   DC.B $36,$34,$33,$32,$32,$32,$32,$32,$33,$35,$37,$39
  469.   DC.B $3b,$3e,$41,$44,$47,$4b,$4e,$52,$56,$59,$5d,$61
  470.   DC.B $64,$67,$6a,$6d,$6f,$72,$73,$75,$76,$77,$77,$77
  471.   DC.B $77,$77,$76,$74,$73,$71,$6f,$6d,$6b,$68,$66,$63
  472.   DC.B $60,$5e,$5b,$59,$56,$54,$52,$50,$4f,$4d,$4c,$4b
  473.   DC.B $4b,$4a,$4a,$4a,$4b,$4b,$4c,$4c,$4d,$4e,$4f,$50
  474.   DC.B $51,$52,$53,$54,$55,$56,$57,$57,$57,$57,$57,$57
  475.   DC.B $56,$56,$55,$54,$52,$51,$50,$4e,$4c,$4b,$49,$48
  476.   DC.B $46,$45,$43,$42,$41,$41,$40,$40,$40,$40,$41,$42
  477.   DC.B $43,$44,$46,$48,$4a,$4d,$50,$53,$56,$59,$5c,$5f
  478.   DC.B $62,$66,$69,$6c,$6f,$71,$74,$76,$78,$79,$7a,$7b
  479.   DC.B $7c,$7c,$7b,$7b,$79,$78,$76,$74,$72,$6f,$6c,$69
  480.   DC.B $65,$62,$5e,$5b
  481.  
  482.   DATA
  483. GfxBase: blk.l 1,0
  484. initialSP: blk.l 1,0
  485. OldCopper: blk.l 1,0
  486. Timer: blk.w 1,0
  487. xpos:  blk.w 4,0
  488. ypos:  blk.w 4,0
  489. index:  blk.w 4,0
  490.   END
  491.