Advertisement
TheBlad768

Scrolling BG (AE2)

Jun 8th, 2018
488
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ===========================================================================
  2. ; Scrolling BG from the Aero the Acro-Bat 2.
  3. ; Ripped by TheBlad768.
  4. ; The code in the Aero the Acro-Bat is the same.
  5. ; ===========================================================================
  6.  
  7. ; RAM Address
  8. long_464A:                  = RAM+$00       ; 4 bytes
  9. long_464E:                  = RAM+$04       ; 4 bytes
  10. word_4652:                  = RAM+$08       ; 2 bytes
  11. word_4654:                  = RAM+$0A       ; 2 bytes
  12. word_4656:                  = RAM+$0C       ; 2 bytes
  13. word_4658:                  = RAM+$0E       ; 2 bytes
  14.  
  15. ; =============== S U B R O U T I N E =======================================
  16.  
  17. Scrolling_BG_Init:
  18.         move.w  #1,(word_4656).w        ; set X move
  19.         move.w  #1,(word_4658).w        ; set Y move
  20.         clr.w   (word_4652).w
  21.         clr.w   (word_4654).w
  22.         rts
  23. ; End of function Scrolling_BG_Init
  24.  
  25. ; =============== S U B R O U T I N E =======================================
  26.  
  27. Scrolling_BG:
  28.         tst.w   (word_4652).w
  29.         bmi.s   loc_2FD6
  30.         cmpi.w  #512,(word_4652).w
  31.         bhi.s   loc_2FE6
  32.         bra.s   loc_3014
  33. ; ---------------------------------------------------------------------------
  34.  
  35. loc_2FD6:
  36.         cmpi.w  #-512,(word_4652).w
  37.         blt.s       loc_2FE6
  38.         bra.s   loc_3014
  39. ; ---------------------------------------------------------------------------
  40.  
  41. loc_2FE6:
  42.         neg.w   (word_4656).w
  43.         move.w  (word_4656).w,d0
  44.         add.w   d0,(word_4652).w
  45.         bsr.w   Random_Number
  46.         andi.w  #7,d0
  47.         addq.w  #1,d0
  48.         tst.w (word_4656).w
  49.         bpl.s   +
  50.         neg.w   d0
  51. +       move.w  d0,(word_4656).w
  52.  
  53. loc_3014:
  54.         move.w  (word_4656).w,d0
  55.         add.w   d0,(word_4652).w
  56.         move.w  (word_4652).w,d0
  57.         ext.l   d0
  58.         lsl.l   #8,d0
  59.         add.l   d0,(long_464A).w
  60.         tst.w   (word_4654).w
  61.         bmi.s   loc_304A
  62.         cmpi.w  #512,(word_4654).w
  63.         bhi.s   loc_305A
  64.         bra.s   loc_3088
  65. ; ---------------------------------------------------------------------------
  66.  
  67. loc_304A:
  68.         cmpi.w  #-512,(word_4654).w
  69.         blt.s       loc_305A
  70.         bra.s   loc_3088
  71. ; ---------------------------------------------------------------------------
  72.  
  73. loc_305A:
  74.         neg.w   (word_4658).w
  75.         move.w  (word_4658).w,d0
  76.         add.w   d0,(word_4654).w
  77.         bsr.s   Random_Number
  78.         andi.w  #7,d0
  79.         addq.w  #1,d0
  80.         tst.w   (word_4658).w
  81.         bpl.s   +
  82.         neg.w   d0
  83. +       move.w  d0,(word_4658).w
  84.  
  85. loc_3088:
  86.         move.w  (word_4658).w,d0
  87.         add.w   d0,(word_4654).w
  88.         move.w  (word_4654).w,d0
  89.         ext.l   d0
  90.         lsl.l   #8,d0
  91.         add.l   d0,(long_464E).w
  92.         move.w  (long_464A).w,(H_scroll_buffer+2).w
  93.         move.w  (long_464E).w,(V_scroll_value+2).w
  94.         rts
  95. ; End of function Scrolling_BG
  96. ; ---------------------------------------------------------------------------
  97. ; Generates a pseudo-random number in d0
  98. ; ---------------------------------------------------------------------------
  99.  
  100. byte_CE54:                  = RAM+$10       ; 1 byte
  101. byte_CE55:                  = RAM+$11       ; 1 byte
  102.  
  103. ; =============== S U B R O U T I N E =======================================
  104.  
  105. Random_Number:
  106.         movem.l d1-d2/a0,-(sp)
  107.         move.w  (V_int_run_count).w,d2
  108.         move.w  d2,d1
  109.         andi.w  #$FF,d2
  110.         lsr.w   #8,d1
  111.         move.b  (byte_CE55).w,d0
  112.         eor.b   d0,d2
  113.         move.b  (byte_CE54).w,d0
  114.         eor.b   d0,d1
  115.         moveq   #0,d0
  116.         move.w  d1,d0
  117.         lsl.w   #8,d0
  118.         or.b    d2,d0
  119.         add.l   d0,d0
  120.         movea.l d0,a0
  121.         moveq   #0,d0
  122.         move.w  (a0),d0
  123.         sub.w   d0,d2
  124.         sub.w   d0,d1
  125.         ror.b   #1,d2
  126.         rol.b   #1,d1
  127.         add.b   d1,(byte_CE55).w
  128.         add.b   d2,(byte_CE54).w
  129.         eor.b   d2,d0
  130.         lsl.w   #8,d1
  131.         eor.b   d1,d0
  132.         movem.l (sp)+,d1-d2/a0
  133.         rts
  134. ; End of function Random_Number
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement