Advertisement
Leo40Bin

Vint_S2SS

May 25th, 2019
2,416
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ========================================================================>>>
  2. ;VintSubA
  3. Vint_S2SS:
  4.     stopZ80
  5.  
  6.     bsr.w   ReadJoypads
  7.     bsr.w   SSSet_VScroll
  8.  
  9.     dma68kToVDP Normal_palette,$0000,palette_line_size*4,CRAM
  10.     dma68kToVDP SS_Sprite_Table,VRAM_SS_Sprite_Attribute_Table,VRAM_SS_Sprite_Attribute_Table_Size,VRAM
  11.  
  12.     tst.b   (SS_Alternate_HorizScroll_Buf).w
  13.     beq.s   loc_906
  14.  
  15.     dma68kToVDP SS_Horiz_Scroll_Buf_2,VRAM_SS_Horiz_Scroll_Table,VRAM_SS_Horiz_Scroll_Table_Size,VRAM
  16.     bra.s   loc_92A
  17. ; ---------------------------------------------------------------------------
  18.  
  19. loc_906:
  20.     dma68kToVDP SS_Horiz_Scroll_Buf_1,VRAM_SS_Horiz_Scroll_Table,VRAM_SS_Horiz_Scroll_Table_Size,VRAM
  21.  
  22. loc_92A:
  23.     tst.b   (SSTrack_Orientation).w         ; Is the current track frame flipped?
  24.     beq.s   ++                              ; Branch if not
  25.     moveq   #0,d0
  26.     move.b  (SSTrack_drawing_index).w,d0    ; Get drawing position
  27.     cmpi.b  #4,d0                           ; Have we finished drawing and streaming track frame?
  28.     bge.s   ++                              ; Branch if yes (nothing to draw)
  29.     add.b   d0,d0                           ; Convert to index
  30.     tst.b   (SS_Alternate_PNT).w            ; [(SSTrack_drawing_index) * 2] = subroutine
  31.     beq.s   +                               ; Branch if not using the alternate Plane A name table
  32.     addi_.w #8,d0                           ; ([(SSTrack_drawing_index) * 2] + 8) = subroutine
  33. +
  34.     move.w  SS_PNTA_Transfer_Table(pc,d0.w),d0
  35.     jsr SS_PNTA_Transfer_Table(pc,d0.w)
  36. +
  37.     bsr.w   SSRun_Animation_Timers
  38.     addi_.b #1,(SSTrack_drawing_index).w    ; Run track timer
  39.     move.b  (SSTrack_drawing_index).w,d0    ; Get new timer value
  40.     cmp.b   d1,d0                           ; Is it less than the player animation timer?
  41.     blt.s   +++                             ; Branch if so
  42.     move.b  #0,(SSTrack_drawing_index).w    ; Start drawing new frame
  43.     lea (VDP_control_port).l,a6
  44.     tst.b   (SS_Alternate_PNT).w            ; Are we using the alternate address for plane A?
  45.     beq.s   +                               ; Branch if not
  46.     move.w  #$8200|(VRAM_SS_Plane_A_Name_Table1/$400),(a6)  ; Set PNT A base to $C000
  47.     bra.s   ++
  48. ; ===========================================================================
  49. ;off_97A
  50. SS_PNTA_Transfer_Table: offsetTable
  51.         offsetTableEntry.w loc_A50  ; 0
  52.         offsetTableEntry.w loc_A76  ; 1
  53.         offsetTableEntry.w loc_A9C  ; 2
  54.         offsetTableEntry.w loc_AC2  ; 3
  55.         offsetTableEntry.w loc_9B8  ; 4
  56.         offsetTableEntry.w loc_9DE  ; 5
  57.         offsetTableEntry.w loc_A04  ; 6
  58.         offsetTableEntry.w loc_A2A  ; 7
  59. ; ===========================================================================
  60. +
  61.     move.w  #$8200|(VRAM_SS_Plane_A_Name_Table2/$400),(a6)  ; Set PNT A base to $8000
  62. +
  63.     eori.b  #1,(SS_Alternate_PNT).w         ; Toggle flag
  64. +
  65.     bsr.w   ProcessDMAQueue
  66.  
  67.     startZ80
  68.  
  69.     bsr.w   ProcessDPLC2
  70.     tst.w   (Demo_Time_left).w
  71.     beq.w   +   ; rts
  72.     subq.w  #1,(Demo_Time_left).w
  73. +
  74.     rts
  75. ; ---------------------------------------------------------------------------
  76. ; (!)
  77. ; Each of these functions copies one fourth of pattern name table A into VRAM
  78. ; from a buffer in main RAM. $700 bytes are copied each frame, with the target
  79. ; are in VRAM depending on the current drawing position.
  80. loc_9B8:
  81.     dma68kToVDP PNT_Buffer,VRAM_SS_Plane_A_Name_Table1 + 0 * (PNT_Buffer_End-PNT_Buffer),PNT_Buffer_End-PNT_Buffer,VRAM
  82.     rts
  83. ; ---------------------------------------------------------------------------
  84. loc_9DE:
  85.     dma68kToVDP PNT_Buffer,VRAM_SS_Plane_A_Name_Table1 + 1 * (PNT_Buffer_End-PNT_Buffer),PNT_Buffer_End-PNT_Buffer,VRAM
  86.     rts
  87. ; ---------------------------------------------------------------------------
  88. loc_A04:
  89.     dma68kToVDP PNT_Buffer,VRAM_SS_Plane_A_Name_Table1 + 2 * (PNT_Buffer_End-PNT_Buffer),PNT_Buffer_End-PNT_Buffer,VRAM
  90.     rts
  91. ; ---------------------------------------------------------------------------
  92. loc_A2A:
  93.     dma68kToVDP PNT_Buffer,VRAM_SS_Plane_A_Name_Table1 + 3 * (PNT_Buffer_End-PNT_Buffer),PNT_Buffer_End-PNT_Buffer,VRAM
  94.     rts
  95. ; ---------------------------------------------------------------------------
  96. loc_A50:
  97.     dma68kToVDP PNT_Buffer,VRAM_SS_Plane_A_Name_Table2 + 0 * (PNT_Buffer_End-PNT_Buffer),PNT_Buffer_End-PNT_Buffer,VRAM
  98.     rts
  99. ; ---------------------------------------------------------------------------
  100. loc_A76:
  101.     dma68kToVDP PNT_Buffer,VRAM_SS_Plane_A_Name_Table2 + 1 * (PNT_Buffer_End-PNT_Buffer),PNT_Buffer_End-PNT_Buffer,VRAM
  102.     rts
  103. ; ---------------------------------------------------------------------------
  104. loc_A9C:
  105.     dma68kToVDP PNT_Buffer,VRAM_SS_Plane_A_Name_Table2 + 2 * (PNT_Buffer_End-PNT_Buffer),PNT_Buffer_End-PNT_Buffer,VRAM
  106.     rts
  107. ; ---------------------------------------------------------------------------
  108. loc_AC2:
  109.     dma68kToVDP PNT_Buffer,VRAM_SS_Plane_A_Name_Table2 + 3 * (PNT_Buffer_End-PNT_Buffer),PNT_Buffer_End-PNT_Buffer,VRAM
  110.     rts
  111. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  112.  
  113. ;sub_AE8
  114. SSSet_VScroll:
  115.     move.w  (VDP_control_port).l,d0
  116.     move.l  #vdpComm($0000,VSRAM,WRITE),(VDP_control_port).l
  117.     move.l  (Vscroll_Factor).w,(VDP_data_port).l
  118.     rts
  119. ; End of function SSSet_VScroll
  120.  
  121.  
  122. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  123.  
  124. ;sub_B02
  125. SSRun_Animation_Timers:
  126.     move.w  (SS_Cur_Speed_Factor).w,d0      ; Get current speed factor
  127.     cmp.w   (SS_New_Speed_Factor).w,d0      ; Has the speed factor changed?
  128.     beq.s   +                               ; Branch if yes
  129.     move.l  (SS_New_Speed_Factor).w,(SS_Cur_Speed_Factor).w ; Save new speed factor
  130.     move.b  #0,(SSTrack_duration_timer).w   ; Reset timer
  131. +
  132.     subi_.b #1,(SSTrack_duration_timer).w   ; Run track timer
  133.     bgt.s   +                               ; Branch if not expired yet
  134.     lea (SSAnim_Base_Duration).l,a0
  135.     move.w  (SS_Cur_Speed_Factor).w,d0      ; The current speed factor is an index
  136.     lsr.w   #1,d0
  137.     move.b  (a0,d0.w),d1
  138.     move.b  d1,(SS_player_anim_frame_timer).w   ; New player animation length (later halved)
  139.     move.b  d1,(SSTrack_duration_timer).w       ; New track timer
  140.     subq.b  #1,(SS_player_anim_frame_timer).w   ; Subtract one
  141.     rts
  142. ; ---------------------------------------------------------------------------
  143. +
  144.     move.b  (SS_player_anim_frame_timer).w,d1   ; Get current player animatino length
  145.     addq.b  #1,d1       ; Increase it
  146.     rts
  147. ; End of function SSRun_Animation_Timers
  148.  
  149. ; ===========================================================================
  150. ;byte_B46
  151. SSAnim_Base_Duration:
  152.     dc.b 60
  153.     dc.b 30 ; 1
  154.     dc.b 15 ; 2
  155.     dc.b 10 ; 3
  156.     dc.b  8 ; 4
  157.     dc.b  6 ; 5
  158.     dc.b  5 ; 6
  159.     dc.b  0 ; 7
  160. ; ===========================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement