Advertisement
TheRetroGuy

Sonic 2's LoadTilesAsYouMove routine ported to S1

Dec 9th, 2018
1,504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ---------------------------------------------------------------------------
  2. ; Subroutine to display correct tiles as you move
  3. ; ---------------------------------------------------------------------------
  4.  
  5. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  6. ; loc_DA5C:
  7. LoadTilesAsYouMove:
  8.     lea ($C00004).l,a5
  9.     lea ($C00000).l,a6
  10.     lea ($FFFFFF32).w,a2
  11.     lea ($FFFFFF18).w,a3
  12.     lea ($FFFFA440).w,a4
  13.     move.w  #$6000,d2
  14.     bsr.w   sub_DBC2
  15.     lea ($FFFFFF34).w,a2
  16.     lea ($FFFFFF20).w,a3
  17.     bsr.w   sub_DC92
  18.     lea ($FFFFFF36).w,a2
  19.     lea ($FFFFFF28).w,a3
  20.     bsr.w   sub_DD82
  21. ;   jmp loc_DAAE                    ;   This code here is for 2P mode in S2.
  22.                                     ;   We don't need this since multiplayer
  23.                                     ;   mode doesn't exist in S1.
  24. ;   lea (Scroll_flags_copy_P2).w,a2
  25. ;   lea ($FFFFEE80).w,a3
  26. ;   lea ($FFFFA400).w,a4
  27. ;   move.w  #$6000,d2
  28. ;   bsr.w   sub_DB5C
  29.  
  30. ;loc_DAAE:
  31.     lea ($FFFFFF30).w,a2
  32.     lea ($FFFFFF10).w,a3
  33.     lea ($FFFFA400).w,a4
  34.     move.w  #$4000,d2
  35.     tst.b   ($FFFFF745).w
  36.  
  37.     ; comment out this line to disable blast processing
  38.     beq.s   Draw_FG
  39.  
  40.     move.b  #0,($FFFFF745).w
  41.     moveq   #-$10,d4
  42.     moveq   #$F,d6
  43. ; loc_DACE:
  44. Draw_All:
  45.     movem.l d4-d6,-(sp) ; This whole routine basically redraws the whole
  46.     moveq   #-$10,d5    ; area instead of merely a line of tiles
  47.     move.w  d4,d1
  48.     bsr.w   Calc_VRAM_Pos
  49.     move.w  d1,d4
  50.     moveq   #-$10,d5
  51.     bsr.w   DrawTiles_Vertical1
  52.     movem.l (sp)+,d4-d6
  53.     addi.w  #$10,d4
  54.     dbf d6,Draw_All
  55.     move.b  #0,($FFFFFF30).w
  56.     rts
  57. ; ===========================================================================
  58. ; loc_DAF6:
  59. Draw_FG:
  60.     tst.b   (a2)
  61.     beq.s   return_DB5A
  62.     bclr    #0,(a2)
  63.     beq.s   loc_DB10
  64.     moveq   #-$10,d4
  65.     moveq   #-$10,d5
  66.     bsr.w   Calc_VRAM_Pos
  67.     moveq   #-$10,d4
  68.     moveq   #-$10,d5
  69.     bsr.w   DrawTiles_Vertical1
  70.  
  71. loc_DB10:
  72.     bclr    #1,(a2)
  73.     beq.s   loc_DB2A
  74.     move.w  #$E0,d4
  75.     moveq   #$0,d5
  76.     bsr.w   Calc_VRAM_Pos
  77.     move.w  #$E0,d4
  78.     moveq   #$0,d5
  79.     bsr.w   DrawTiles_Vertical1
  80.  
  81. loc_DB2A:
  82.     bclr    #2,(a2)
  83.     beq.s   loc_DB40
  84.     moveq   #-$10,d4
  85.     moveq   #$0,d5
  86.     bsr.w   Calc_VRAM_Pos
  87.     moveq   #-$10,d4
  88.     moveq   #$0,d5
  89.     bsr.w   sub_DF04
  90.  
  91. loc_DB40:
  92.     bclr    #3,(a2)
  93.     beq.s   return_DB5A
  94.     moveq   #-$10,d4
  95.     move.w  #320,d5
  96.     bsr.w   Calc_VRAM_Pos
  97.     moveq   #-$10,d4
  98.     move.w  #320,d5
  99.     bsr.w   sub_DF04
  100.  
  101. return_DB5A:
  102.  
  103.     rts
  104.  
  105. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  106.  
  107.  
  108. sub_DB5C:
  109.     tst.b   (a2)
  110.     beq.s   return_DBC0
  111.     bclr    #0,(a2)
  112.     beq.s   loc_DB76
  113.     moveq   #-$10,d4
  114.     moveq   #-$10,d5
  115.     bsr.w   loc_E2C2
  116.     moveq   #-$10,d4
  117.     moveq   #-$10,d5
  118.     bsr.w   DrawTiles_Vertical1
  119.  
  120. loc_DB76:
  121.     bclr    #1,(a2)
  122.     beq.s   loc_DB90
  123.     move.w  #$E0,d4
  124.     moveq   #-$10,d5
  125.     bsr.w   loc_E2C2
  126.     move.w  #$E0,d4
  127.     moveq   #-$10,d5
  128.     bsr.w   DrawTiles_Vertical1
  129.  
  130. loc_DB90:
  131.     bclr    #2,(a2)
  132.     beq.s   loc_DBA6
  133.     moveq   #-$10,d4
  134.     moveq   #-$10,d5
  135.     bsr.w   loc_E2C2
  136.     moveq   #-$10,d4
  137.     moveq   #-$10,d5
  138.     bsr.w   sub_DF04
  139.  
  140. loc_DBA6:
  141.     bclr    #3,(a2)
  142.     beq.s   return_DBC0
  143.     moveq   #-$10,d4
  144.     move.w  #320,d5
  145.     bsr.w   loc_E2C2
  146.     moveq   #-$10,d4
  147.     move.w  #320,d5
  148.     bsr.w   sub_DF04
  149.  
  150. return_DBC0:
  151.     rts
  152. ; End of function sub_DB5C
  153.  
  154.  
  155. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  156.  
  157.  
  158. sub_DBC2:
  159.  
  160.     tst.b   (a2)
  161.     beq.w   return_DC90
  162.     bclr    #0,(a2)
  163.     beq.s   loc_DBDE
  164.     moveq   #-$10,d4
  165.     moveq   #-$10,d5
  166.     bsr.w   Calc_VRAM_Pos
  167.     moveq   #-$10,d4
  168.     moveq   #-$10,d5
  169.     bsr.w   DrawTiles_Vertical1
  170.  
  171. loc_DBDE:
  172.     bclr    #1,(a2)
  173.     beq.s   loc_DBF8
  174.     move.w  #$E0,d4
  175.     moveq   #-$10,d5
  176.     bsr.w   Calc_VRAM_Pos
  177.     move.w  #$E0,d4
  178.     moveq   #-$10,d5
  179.     bsr.w   DrawTiles_Vertical1
  180.  
  181. loc_DBF8:
  182.     bclr    #2,(a2)
  183.     beq.s   loc_DC0E
  184.     moveq   #-$10,d4
  185.     moveq   #-$10,d5
  186.     bsr.w   Calc_VRAM_Pos
  187.     moveq   #-$10,d4
  188.     moveq   #-$10,d5
  189.     bsr.w   sub_DF04
  190.  
  191. loc_DC0E:
  192.     bclr    #3,(a2)
  193.     beq.s   loc_DC28
  194.     moveq   #-$10,d4
  195.     move.w  #320,d5
  196.     bsr.w   Calc_VRAM_Pos
  197.     moveq   #-$10,d4
  198.     move.w  #320,d5
  199.     bsr.w   sub_DF04
  200.  
  201. loc_DC28:
  202.     bclr    #4,(a2)
  203.     beq.s   loc_DC40
  204.     moveq   #-$10,d4
  205.     moveq   #0,d5
  206.     bsr.w   loc_E288
  207.     moveq   #-$10,d4
  208.     moveq   #0,d5
  209.     moveq   #$1F,d6
  210.     bsr.w   DrawTiles_Vertical2
  211.  
  212. loc_DC40:
  213.     bclr    #5,(a2)
  214.     beq.s   loc_DC5C
  215.     move.w  #$E0,d4
  216.     moveq   #0,d5
  217.     bsr.w   loc_E288
  218.     move.w  #$E0,d4
  219.     moveq   #0,d5
  220.     moveq   #$1F,d6
  221.     bsr.w   DrawTiles_Vertical2
  222.  
  223. loc_DC5C:
  224.     bclr    #6,(a2)
  225.     beq.s   loc_DC74
  226.     moveq   #-$10,d4
  227.     moveq   #-$10,d5
  228.     bsr.w   Calc_VRAM_Pos
  229.     moveq   #-$10,d4
  230.     moveq   #-$10,d5
  231.     moveq   #$1F,d6
  232.     bsr.w   DrawTiles_Vertical
  233.  
  234. loc_DC74:
  235.     bclr    #7,(a2)
  236.     beq.s   return_DC90
  237.     move.w  #$E0,d4
  238.     moveq   #-$10,d5
  239.     bsr.w   Calc_VRAM_Pos
  240.     move.w  #$E0,d4
  241.     moveq   #-$10,d5
  242.     moveq   #$1F,d6
  243.     bsr.w   DrawTiles_Vertical
  244.  
  245. return_DC90:
  246.     rts
  247. ; End of function sub_DBC2
  248.  
  249.  
  250. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  251.  
  252.  
  253. sub_DC92:
  254.  
  255.     tst.b   (a2)
  256.     beq.w   return_DCD4
  257.     bclr    #0,(a2)
  258.     beq.s   loc_DCB4
  259.     move.w  #$70,d4
  260.     moveq   #-$10,d5
  261.     bsr.w   Calc_VRAM_Pos
  262.     move.w  #$70,d4
  263.     moveq   #-$10,d5
  264.     moveq   #2,d6
  265.     bsr.w   loc_DF06
  266.  
  267. loc_DCB4:
  268.     bclr    #1,(a2)
  269.     beq.s   return_DCD4
  270.     move.w  #$70,d4
  271.     move.w  #320,d5
  272.     bsr.w   Calc_VRAM_Pos
  273.     move.w  #$70,d4
  274.     move.w  #320,d5
  275.     moveq   #2,d6
  276.     bsr.w   loc_DF06
  277.  
  278. return_DCD4:
  279.     rts
  280. ; End of function sub_DC92
  281.  
  282. ; ===========================================================================
  283. byte_DCD6:
  284.     dc.b   0
  285. byte_DCD7:
  286.     dc.b   0
  287.     dc.b   0    ; 1
  288.     dc.b   0    ; 2
  289.     dc.b   0    ; 3
  290.     dc.b   6    ; 4
  291.     dc.b   6    ; 5
  292.     dc.b   6    ; 6
  293.     dc.b   6    ; 7
  294.     dc.b   6    ; 8
  295.     dc.b   6    ; 9
  296.     dc.b   6    ; 10
  297.     dc.b   6    ; 11
  298.     dc.b   6    ; 12
  299.     dc.b   6    ; 13
  300.     dc.b   4    ; 14
  301.     dc.b   4    ; 15
  302.     dc.b   4    ; 16
  303.     dc.b   4    ; 17
  304.     dc.b   4    ; 18
  305.     dc.b   4    ; 19
  306.     dc.b   4    ; 20
  307.     dc.b   2    ; 21
  308.     dc.b   2    ; 22
  309.     dc.b   2    ; 23
  310.     dc.b   2    ; 24
  311.     dc.b   2    ; 25
  312.     dc.b   2    ; 26
  313.     dc.b   2    ; 27
  314.     dc.b   2    ; 28
  315.     dc.b   2    ; 29
  316.     dc.b   2    ; 30
  317.     dc.b   2    ; 31
  318.     dc.b   0    ; 32
  319. ; ===========================================================================
  320.     moveq   #-$10,d4
  321.     bclr    #0,(a2)
  322.     bne.s   loc_DD0A
  323.     bclr    #1,(a2)
  324.     beq.s   loc_DD52
  325.     move.w  #$E0,d4
  326.  
  327. loc_DD0A:
  328.     lea byte_DCD7(pc),a0
  329.     move.w  ($FFFFF70C).w,d0
  330.     add.w   d4,d0
  331.     andi.w  #$1F0,d0
  332.     lsr.w   #4,d0
  333.     move.b  (a0,d0.w),d0
  334.     lea (word_DE7E).l,a3
  335.     movea.w (a3,d0.w),a3
  336.     beq.s   loc_DD3E
  337.     moveq   #-$10,d5
  338.     movem.l d4-d5,-(sp)
  339.     bsr.w   Calc_VRAM_Pos
  340.     movem.l (sp)+,d4-d5
  341.     bsr.w   DrawTiles_Vertical1
  342.     bra.s   loc_DD52
  343. ; ===========================================================================
  344.  
  345. loc_DD3E:
  346.     moveq   #0,d5
  347.     movem.l d4-d5,-(sp)
  348.     bsr.w   loc_E288
  349.     movem.l (sp)+,d4-d5
  350.     moveq   #$1F,d6
  351.     bsr.w   DrawTiles_Vertical2
  352.  
  353. loc_DD52:
  354.  
  355.     tst.b   (a2)
  356.     bne.s   loc_DD58
  357.     rts
  358. ; ===========================================================================
  359.  
  360. loc_DD58:
  361.     moveq   #-$10,d4
  362.     moveq   #-$10,d5
  363.     move.b  (a2),d0
  364.     andi.b  #-$58,d0
  365.     beq.s   loc_DD6C
  366.     lsr.b   #1,d0
  367.     move.b  d0,(a2)
  368.     move.w  #320,d5
  369.  
  370. loc_DD6C:
  371.     lea byte_DCD6(pc),a0
  372.     move.w  ($FFFFF70C).w,d0
  373.     andi.w  #$1F0,d0
  374.     lsr.w   #4,d0
  375.     lea (a0,d0.w),a0
  376.     bra.w   loc_DE86
  377.  
  378. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  379.  
  380.  
  381. sub_DD82:
  382.     tst.b   (a2)
  383.     beq.w   return_DDCE
  384.     cmpi.b  #$D,($FFFFFE10).w
  385.     beq.w   loc_DE12
  386.     bclr    #0,(a2)
  387.     beq.s   loc_DDAE
  388.     move.w  #$40,d4
  389.     moveq   #-$10,d5
  390.     bsr.w   Calc_VRAM_Pos
  391.     move.w  #$40,d4
  392.     moveq   #-$10,d5
  393.     moveq   #2,d6
  394.     bsr.w   loc_DF06
  395.  
  396. loc_DDAE:
  397.     bclr    #1,(a2)
  398.     beq.s   return_DDCE
  399.     move.w  #$40,d4
  400.     move.w  #320,d5
  401.     bsr.w   Calc_VRAM_Pos
  402.     move.w  #$40,d4
  403.     move.w  #320,d5
  404.     moveq   #2,d6
  405.     bsr.w   loc_DF06
  406.  
  407. return_DDCE:
  408.     rts
  409. ; ===========================================================================
  410. byte_DDD0:
  411.     dc.b 2
  412. byte_DDD1:
  413.     dc.b   2
  414.  
  415.     dc.b   2    ; 1
  416.     dc.b   2    ; 2
  417.     dc.b   2    ; 3
  418.     dc.b   2    ; 4
  419.     dc.b   2    ; 5
  420.     dc.b   2    ; 6
  421.     dc.b   2    ; 7
  422.     dc.b   2    ; 8
  423.     dc.b   2    ; 9
  424.     dc.b   2    ; 10
  425.     dc.b   2    ; 11
  426.     dc.b   2    ; 12
  427.     dc.b   2    ; 13
  428.     dc.b   2    ; 14
  429.     dc.b   2    ; 15
  430.     dc.b   2    ; 16
  431.     dc.b   2    ; 17
  432.     dc.b   2    ; 18
  433.     dc.b   4    ; 19
  434.     dc.b   4    ; 20
  435.     dc.b   4    ; 21
  436.     dc.b   4    ; 22
  437.     dc.b   4    ; 23
  438.     dc.b   4    ; 24
  439.     dc.b   4    ; 25
  440.     dc.b   4    ; 26
  441.     dc.b   4    ; 27
  442.     dc.b   4    ; 28
  443.     dc.b   4    ; 29
  444.     dc.b   4    ; 30
  445.     dc.b   4    ; 31
  446.     dc.b   4    ; 32
  447.     dc.b   4    ; 33
  448.     dc.b   4    ; 34
  449.     dc.b   4    ; 35
  450.     dc.b   4    ; 36
  451.     dc.b   4    ; 37
  452.     dc.b   4    ; 38
  453.     dc.b   4    ; 39
  454.     dc.b   4    ; 40
  455.     dc.b   4    ; 41
  456.     dc.b   4    ; 42
  457.     dc.b   4    ; 43
  458.     dc.b   4    ; 44
  459.     dc.b   4
  460.     dc.b   4    ; 1
  461.     dc.b   4    ; 2
  462.     dc.b   4    ; 3
  463.     dc.b   4    ; 4
  464.     dc.b   4    ; 5
  465.     dc.b   4    ; 6
  466.     dc.b   4    ; 7
  467.     dc.b   4    ; 8
  468.     dc.b   4    ; 9
  469.     dc.b   4    ; 10
  470.     dc.b   4    ; 11
  471.     dc.b   4    ; 12
  472.     dc.b   4    ; 13
  473.     dc.b   4    ; 14
  474.     dc.b   4    ; 15
  475.     dc.b   4    ; 16
  476.     dc.b   4    ; 17
  477.     dc.b   4    ; 18
  478.     dc.b   0    ; 19
  479. ; ===========================================================================
  480.  
  481. loc_DE12:
  482.     moveq   #-$10,d4
  483.     bclr    #0,(a2)
  484.     bne.s   loc_DE24
  485.     bclr    #1,(a2)
  486.     beq.s   loc_DE4E
  487.     move.w  #$E0,d4
  488.  
  489. loc_DE24:
  490.     lea byte_DDD1(pc),a0
  491.     move.w  ($FFFFF70C).w,d0
  492.     add.w   d4,d0
  493.     andi.w  #$3F0,d0
  494.     lsr.w   #4,d0
  495.     move.b  (a0,d0.w),d0
  496.     movea.w word_DE7E(pc,d0.w),a3
  497.     moveq   #-$10,d5
  498.     movem.l d4-d5,-(sp)
  499.     bsr.w   Calc_VRAM_Pos
  500.     movem.l (sp)+,d4-d5
  501.     bsr.w   DrawTiles_Vertical1
  502.  
  503. loc_DE4E:
  504.     tst.b   (a2)
  505.     bne.s   loc_DE54
  506.     rts
  507. ; ===========================================================================
  508.  
  509. loc_DE54:
  510.     moveq   #-$10,d4
  511.     moveq   #-$10,d5
  512.     move.b  (a2),d0
  513.     andi.b  #-$58,d0
  514.     beq.s   loc_DE68
  515.     lsr.b   #1,d0
  516.     move.b  d0,(a2)
  517.     move.w  #320,d5
  518.  
  519. loc_DE68:
  520.     lea byte_DDD0(pc),a0
  521.     move.w  ($FFFFF70C).w,d0
  522.     andi.w  #$7F0,d0
  523.     lsr.w   #4,d0
  524.     lea (a0,d0.w),a0
  525.     bra.w   loc_DE86
  526. ; ===========================================================================
  527. word_DE7E:
  528.     dc.w $FF18
  529.     dc.w $FF18  ; 1
  530.     dc.w $FF20  ; 2
  531.     dc.w $FF28  ; 3
  532. ; ===========================================================================
  533.  
  534. loc_DE86:
  535.  
  536. ;   tst.w   (Two_player_mode).w
  537. ;   bne.s   loc_DEC8
  538.     moveq   #$F,d6
  539.     move.l  #$800000,d7
  540.  
  541. loc_DE94:
  542.     moveq   #0,d0
  543.     move.b  (a0)+,d0
  544.     btst    d0,(a2)
  545.     beq.s   loc_DEBC
  546.     movea.w word_DE7E(pc,d0.w),a3
  547.     movem.l d4-d5/a0,-(sp)
  548.     movem.l d4-d5,-(sp)
  549.     bsr.w   sub_E244
  550.     movem.l (sp)+,d4-d5
  551.     bsr.w   Calc_VRAM_Pos
  552.     bsr.w   sub_E174
  553.     movem.l (sp)+,d4-d5/a0
  554.  
  555. loc_DEBC:
  556.     addi.w  #$10,d4
  557.     dbf d6,loc_DE94
  558.     clr.b   (a2)
  559.     rts
  560. ; ===========================================================================
  561.  
  562. loc_DEC8:
  563.     moveq   #$F,d6
  564.     move.l  #$800000,d7
  565.  
  566. loc_DED0:
  567.     moveq   #0,d0
  568.     move.b  (a0)+,d0
  569.     btst    d0,(a2)
  570.     beq.s   loc_DEF8
  571.     movea.w word_DE7E(pc,d0.w),a3
  572.     movem.l d4-d5/a0,-(sp)
  573.     movem.l d4-d5,-(sp)
  574.     bsr.w   sub_E244
  575.     movem.l (sp)+,d4-d5
  576.     bsr.w   Calc_VRAM_Pos
  577.     bsr.w   sub_E1FA
  578.     movem.l (sp)+,d4-d5/a0
  579.  
  580. loc_DEF8:
  581.     addi.w  #$10,d4
  582.     dbf d6,loc_DED0
  583.     clr.b   (a2)
  584.     rts
  585. ; End of function sub_DD82
  586.  
  587.  
  588. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  589.  
  590.  
  591. sub_DF04:
  592.  
  593.     moveq   #$F,d6
  594.  
  595. loc_DF06:
  596.     add.w   (a3),d5
  597.     add.w   4(a3),d4
  598.     move.l  #$800000,d7
  599.     move.l  d0,d1
  600.     bsr.w   sub_E09E
  601. ;   tst.w   (Two_player_mode).w
  602. ;   bne.s   loc_DF54
  603.  
  604. loc_DF1E:
  605.     move.w  (a0),d3
  606.     andi.w  #$3FF,d3
  607.     lsl.w   #3,d3
  608.     lea ($FFFFB000).w,a1
  609.     adda.w  d3,a1
  610.     move.l  d1,d0
  611.     bsr.w   sub_E174
  612.     adda.w  #$10,a0
  613.     addi.w  #$100,d1
  614.     andi.w  #$FFF,d1
  615.     addi.w  #$10,d4
  616.     move.w  d4,d0
  617.     andi.w  #$70,d0
  618.     bne.s   loc_DF4E
  619.     bsr.w   sub_E09E
  620.  
  621. loc_DF4E:
  622.     dbf d6,loc_DF1E
  623.     rts
  624. ; ===========================================================================
  625.  
  626. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  627.  
  628. ; sub_DF8A:
  629. DrawTiles_Vertical:
  630.     add.w   (a3),d5
  631.     add.w   4(a3),d4
  632.     bra.s   DrawTiles_Vertical3
  633. ; End of function DrawTiles_Vertical
  634.  
  635.  
  636. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  637.  
  638. ; sub_DF92:
  639. DrawTiles_Vertical1:
  640.     moveq   #$16,d6
  641.     add.w   (a3),d5
  642. ; loc_DF96:
  643. DrawTiles_Vertical2:
  644.     add.w   4(a3),d4
  645. ; loc_DF9A:
  646. DrawTiles_Vertical3:
  647. ;   tst.w   (Two_player_mode).w
  648. ;   bne.s   loc_E018
  649.     move.l  a2,-(sp)
  650.     move.w  d6,-(sp)
  651.     lea ($FFFFFF80).w,a2
  652.     move.l  d0,d1
  653.     or.w    d2,d1
  654.     swap    d1
  655.     move.l  d1,-(sp)
  656.     move.l  d1,(a5)
  657.     swap    d1
  658.     bsr.w   sub_E09E
  659.  
  660. loc_DFB8:
  661.     move.w  (a0),d3
  662.     andi.w  #$3FF,d3
  663.     lsl.w   #3,d3
  664.     lea ($FFFFB000).w,a1
  665.     adda.w  d3,a1
  666.     bsr.w   sub_E0D4
  667.     addq.w  #2,a0
  668.     addq.b  #4,d1
  669.     bpl.s   loc_DFDA
  670.     andi.b  #$7F,d1
  671.     swap    d1
  672.     move.l  d1,(a5)
  673.     swap    d1
  674.  
  675. loc_DFDA:
  676.     addi.w  #$10,d5
  677.     move.w  d5,d0
  678.     andi.w  #$70,d0
  679.     bne.s   loc_DFEA
  680.     bsr.w   sub_E09E
  681.  
  682. loc_DFEA:
  683.     dbf d6,loc_DFB8
  684.     move.l  (sp)+,d1
  685.     addi.l  #$800000,d1
  686.     lea ($FFFFFF80).w,a2
  687.     move.l  d1,(a5)
  688.     swap    d1
  689.     move.w  (sp)+,d6
  690.  
  691. loc_E000:
  692.     move.l  (a2)+,(a6)
  693.     addq.b  #4,d1
  694.     bmi.s   loc_E010
  695.     ori.b   #$80,d1
  696.     swap    d1
  697.     move.l  d1,(a5)
  698.     swap    d1
  699.  
  700. loc_E010:
  701.     dbf d6,loc_E000
  702.     movea.l (sp)+,a2
  703.     rts
  704. ; ===========================================================================
  705.  
  706. loc_E018:
  707.     move.l  d0,d1
  708.     or.w    d2,d1
  709.     swap    d1
  710.     move.l  d1,(a5)
  711.     swap    d1
  712.     tst.b   d1
  713.     bmi.s   loc_E062
  714.     bsr.w   sub_E09E
  715.  
  716. loc_E02A:
  717.     move.w  (a0),d3
  718.     andi.w  #$3FF,d3
  719.     lsl.w   #3,d3
  720.     lea ($FFFFB000).w,a1
  721.     adda.w  d3,a1
  722.     bsr.w   sub_E136
  723.     addq.w  #2,a0
  724.     addq.b  #4,d1
  725.     bpl.s   loc_E04C
  726.     andi.b  #$7F,d1
  727.     swap    d1
  728.     move.l  d1,(a5)
  729.     swap    d1
  730.  
  731. loc_E04C:
  732.     addi.w  #$10,d5
  733.     move.w  d5,d0
  734.     andi.w  #$70,d0
  735.     bne.s   loc_E05C
  736.     bsr.w   sub_E09E
  737.  
  738. loc_E05C:
  739.     dbf d6,loc_E02A
  740.     rts
  741. ; ===========================================================================
  742.  
  743. loc_E062:
  744.     bsr.w   sub_E09E
  745.  
  746. loc_E066:
  747.     move.w  (a0),d3
  748.     andi.w  #$3FF,d3
  749.     lsl.w   #3,d3
  750.     lea ($FFFFB000).w,a1
  751.     adda.w  d3,a1
  752.     bsr.w   sub_E136
  753.     addq.w  #2,a0
  754.     addq.b  #4,d1
  755.     bmi.s   loc_E088
  756.     ori.b   #$80,d1
  757.     swap    d1
  758.     move.l  d1,(a5)
  759.     swap    d1
  760.  
  761. loc_E088:
  762.     addi.w  #$10,d5
  763.     move.w  d5,d0
  764.     andi.w  #$70,d0
  765.     bne.s   loc_E098
  766.     bsr.w   sub_E09E
  767.  
  768. loc_E098:
  769.     dbf d6,loc_E066
  770.     rts
  771. ; End of function DrawTiles_Vertical1
  772.  
  773.  
  774. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  775.  
  776.  
  777. sub_E09E:
  778.     movem.l d4-d5,-(sp)
  779.     move.w  d4,d3
  780.     add.w   d3,d3
  781.     andi.w  #$F00,d3
  782.     lsr.w   #3,d5
  783.     move.w  d5,d0
  784.     lsr.w   #4,d0
  785.     andi.w  #$7F,d0
  786.     add.w   d3,d0
  787.     moveq   #-1,d3
  788.     clr.w   d3
  789.     move.b  (a4,d0.w),d3
  790.     lsl.w   #7,d3
  791.     andi.w  #$70,d4
  792.     andi.w  #$E,d5
  793.     add.w   d4,d3
  794.     add.w   d5,d3
  795.     movea.l d3,a0
  796.     movem.l (sp)+,d4-d5
  797.     rts
  798. ; End of function sub_E09E
  799.  
  800.  
  801. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  802.  
  803.  
  804. sub_E0D4:
  805.     btst    #3,(a0)
  806.     bne.s   loc_E100
  807.     btst    #2,(a0)
  808.     bne.s   loc_E0E6
  809.     move.l  (a1)+,(a6)
  810.     move.l  (a1)+,(a2)+
  811.     rts
  812. ; ===========================================================================
  813.  
  814. loc_E0E6:
  815.     move.l  (a1)+,d3
  816.     eori.l  #$8000800,d3
  817.     swap    d3
  818.     move.l  d3,(a6)
  819.     move.l  (a1)+,d3
  820.     eori.l  #$8000800,d3
  821.     swap    d3
  822.     move.l  d3,(a2)+
  823.     rts
  824. ; ===========================================================================
  825.  
  826. loc_E100:
  827.     btst    #2,(a0)
  828.     bne.s   loc_E11C
  829.     move.l  (a1)+,d0
  830.     move.l  (a1)+,d3
  831.     eori.l  #$10001000,d3
  832.     move.l  d3,(a6)
  833.     eori.l  #$10001000,d0
  834.     move.l  d0,(a2)+
  835.     rts
  836. ; ===========================================================================
  837.  
  838. loc_E11C:
  839.     move.l  (a1)+,d0
  840.     move.l  (a1)+,d3
  841.     eori.l  #$18001800,d3
  842.     swap    d3
  843.     move.l  d3,(a6)
  844.     eori.l  #$18001800,d0
  845.     swap    d0
  846.     move.l  d0,(a2)+
  847.     rts
  848. ; End of function sub_E0D4
  849.  
  850.  
  851. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  852.  
  853.  
  854. sub_E136:
  855.     btst    #3,(a0)
  856.     bne.s   loc_E154
  857.     btst    #2,(a0)
  858.     bne.s   loc_E146
  859.     move.l  (a1)+,(a6)
  860.     rts
  861. ; ===========================================================================
  862.  
  863. loc_E146:
  864.     move.l  (a1)+,d3
  865.     eori.l  #$8000800,d3
  866.     swap    d3
  867.     move.l  d3,(a6)
  868.     rts
  869. ; ===========================================================================
  870.  
  871. loc_E154:
  872.     btst    #2,(a0)
  873.     bne.s   loc_E166
  874.     move.l  (a1)+,d3
  875.     eori.l  #$10001000,d3
  876.     move.l  d3,(a6)
  877.     rts
  878. ; ===========================================================================
  879.  
  880. loc_E166:
  881.     move.l  (a1)+,d3
  882.     eori.l  #$18001800,d3
  883.     swap    d3
  884.     move.l  d3,(a6)
  885.     rts
  886. ; End of function sub_E136
  887.  
  888.  
  889. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  890.  
  891.  
  892. sub_E174:
  893.  
  894.     or.w    d2,d0
  895.     swap    d0
  896.     btst    #3,(a0)
  897.     bne.s   loc_E1B0
  898.     btst    #2,(a0)
  899.     bne.s   loc_E190
  900.     move.l  d0,(a5)
  901.     move.l  (a1)+,(a6)
  902.     add.l   d7,d0
  903.     move.l  d0,(a5)
  904.     move.l  (a1)+,(a6)
  905.     rts
  906. ; ===========================================================================
  907.  
  908. loc_E190:
  909.     move.l  d0,(a5)
  910.     move.l  (a1)+,d3
  911.     eori.l  #$8000800,d3
  912.     swap    d3
  913.     move.l  d3,(a6)
  914.     add.l   d7,d0
  915.     move.l  d0,(a5)
  916.     move.l  (a1)+,d3
  917.     eori.l  #$8000800,d3
  918.     swap    d3
  919.     move.l  d3,(a6)
  920.     rts
  921. ; ===========================================================================
  922.  
  923. loc_E1B0:
  924.     btst    #2,(a0)
  925.     bne.s   loc_E1D6
  926.     move.l  d5,-(sp)
  927.     move.l  d0,(a5)
  928.     move.l  (a1)+,d5
  929.     move.l  (a1)+,d3
  930.     eori.l  #$10001000,d3
  931.     move.l  d3,(a6)
  932.     add.l   d7,d0
  933.     move.l  d0,(a5)
  934.     eori.l  #$10001000,d5
  935.     move.l  d5,(a6)
  936.     move.l  (sp)+,d5
  937.     rts
  938. ; ===========================================================================
  939.  
  940. loc_E1D6:
  941.     move.l  d5,-(sp)
  942.     move.l  d0,(a5)
  943.     move.l  (a1)+,d5
  944.     move.l  (a1)+,d3
  945.     eori.l  #$18001800,d3
  946.     swap    d3
  947.     move.l  d3,(a6)
  948.     add.l   d7,d0
  949.     move.l  d0,(a5)
  950.     eori.l  #$18001800,d5
  951.     swap    d5
  952.     move.l  d5,(a6)
  953.     move.l  (sp)+,d5
  954.     rts
  955. ; End of function sub_E174
  956.  
  957.  
  958. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  959.  
  960.  
  961. sub_E1FA:
  962.  
  963.     or.w    d2,d0
  964.     swap    d0
  965.     btst    #3,(a0)
  966.     bne.s   loc_E220
  967.     btst    #2,(a0)
  968.     bne.s   loc_E210
  969.     move.l  d0,(a5)
  970.     move.l  (a1)+,(a6)
  971.     rts
  972. ; ===========================================================================
  973.  
  974. loc_E210:
  975.     move.l  d0,(a5)
  976.     move.l  (a1)+,d3
  977.     eori.l  #$8000800,d3
  978.     swap    d3
  979.     move.l  d3,(a6)
  980.     rts
  981. ; ===========================================================================
  982.  
  983. loc_E220:
  984.     btst    #2,(a0)
  985.     bne.s   loc_E234
  986.     move.l  d0,(a5)
  987.     move.l  (a1)+,d3
  988.     eori.l  #$10001000,d3
  989.     move.l  d3,(a6)
  990.     rts
  991. ; ===========================================================================
  992.  
  993. loc_E234:
  994.     move.l  d0,(a5)
  995.     move.l  (a1)+,d3
  996.     eori.l  #$18001800,d3
  997.     swap    d3
  998.     move.l  d3,(a6)
  999.     rts
  1000. ; End of function sub_E1FA
  1001.  
  1002.  
  1003. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  1004.  
  1005.  
  1006. sub_E244:
  1007.  
  1008.     add.w   (a3),d5
  1009.     add.w   4(a3),d4
  1010.     lea ($FFFFB000).w,a1
  1011.     move.w  d4,d3
  1012.     add.w   d3,d3
  1013.     andi.w  #$F00,d3
  1014.     lsr.w   #3,d5
  1015.     move.w  d5,d0
  1016.     lsr.w   #4,d0
  1017.     andi.w  #$7F,d0
  1018.     add.w   d3,d0
  1019.     moveq   #-1,d3
  1020.     clr.w   d3
  1021.     move.b  (a4,d0.w),d3
  1022.     lsl.w   #7,d3
  1023.     andi.w  #$70,d4
  1024.     andi.w  #$E,d5
  1025.     add.w   d4,d3
  1026.     add.w   d5,d3
  1027.     movea.l d3,a0
  1028.     move.w  (a0),d3
  1029.     andi.w  #$3FF,d3
  1030.     lsl.w   #3,d3
  1031.     adda.w  d3,a1
  1032.     rts
  1033. ; End of function sub_E244
  1034.  
  1035.  
  1036. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  1037.  
  1038. ; sub_E286:
  1039. Calc_VRAM_Pos:
  1040.  
  1041.     add.w   (a3),d5
  1042.  
  1043. loc_E288:
  1044. ;   tst.w   (Two_player_mode).w
  1045. ;   bne.s   loc_E2A8
  1046.     add.w   4(a3),d4
  1047.     andi.w  #$F0,d4
  1048.     andi.w  #$1F0,d5
  1049.     lsl.w   #4,d4
  1050.     lsr.w   #2,d5
  1051.     add.w   d5,d4
  1052.     moveq   #3,d0
  1053.     swap    d0
  1054.     move.w  d4,d0
  1055.     rts
  1056. ; ===========================================================================
  1057.  
  1058. loc_E2A8:
  1059.     add.w   4(a3),d4
  1060.  
  1061. loc_E2AC:
  1062.     andi.w  #$1F0,d4
  1063.     andi.w  #$1F0,d5
  1064.     lsl.w   #3,d4
  1065.     lsr.w   #2,d5
  1066.     add.w   d5,d4
  1067.     moveq   #3,d0
  1068.     swap    d0
  1069.     move.w  d4,d0
  1070.     rts
  1071. ; End of function Calc_VRAM_Pos
  1072.  
  1073.  
  1074. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  1075.  
  1076.  
  1077. loc_E2C2:
  1078. ;   tst.w   (Two_player_mode).w
  1079. ;   bne.s   loc_E2E4
  1080.     add.w   4(a3),d4
  1081.     add.w   (a3),d5
  1082.     andi.w  #$F0,d4
  1083.     andi.w  #$1F0,d5
  1084.     lsl.w   #4,d4
  1085.     lsr.w   #2,d5
  1086.     add.w   d5,d4
  1087.     moveq   #2,d0
  1088.     swap    d0
  1089.     move.w  d4,d0
  1090.     rts
  1091. ; ===========================================================================
  1092. ; interestingly, this subroutine was in the sonic 1 rom, unused
  1093. loc_E2E4:
  1094.     add.w   4(a3),d4
  1095.     add.w   (a3),d5
  1096.     andi.w  #$1F0,d4
  1097.     andi.w  #$1F0,d5
  1098.     lsl.w   #3,d4
  1099.     lsr.w   #2,d5
  1100.     add.w   d5,d4
  1101.     moveq   #2,d0
  1102.     swap    d0
  1103.     move.w  d4,d0
  1104.     rts
  1105. ; End of function k
  1106.  
  1107. ; ===========================================================================
  1108.  
  1109. ;loc_E300:
  1110. LoadTilesFromStart:
  1111.     lea ($C00004).l,a5
  1112.     lea ($C00000).l,a6
  1113.     lea ($FFFFF708).w,a3
  1114.     lea ($FFFFA440).w,a4
  1115.     move.w  #$6000,d2
  1116.     moveq   #0,d4
  1117.     cmpi.b  #$C,($FFFFFE10).w
  1118.     beq.w   loc_E338
  1119.     bsr.w   loc_E336
  1120.     cmpi.b  #$B,($FFFFFE10).w
  1121.     beq.w   loc_E396
  1122.  
  1123. loc_E336:
  1124.     moveq   #-$10,d4
  1125.  
  1126. loc_E338:
  1127.     moveq   #$F,d6
  1128.  
  1129. loc_E33A:
  1130.     movem.l d4-d6,-(sp)
  1131.     moveq   #0,d5
  1132.     move.w  d4,d1
  1133.     bsr.w   Calc_VRAM_Pos
  1134.     move.w  d1,d4
  1135.     moveq   #0,d5
  1136.     moveq   #$1F,d6
  1137.     move    #$2700,sr
  1138.     bsr.w   DrawTiles_Vertical
  1139.     move    #$2300,sr
  1140.     movem.l (sp)+,d4-d6
  1141.     addi.w  #$10,d4
  1142.     dbf d6,loc_E33A
  1143.     rts
  1144. ; ===========================================================================
  1145.     moveq   #-$10,d4
  1146.     moveq   #$F,d6
  1147.  
  1148. loc_E36A:
  1149.     movem.l d4-d6,-(sp)
  1150.     moveq   #0,d5
  1151.     move.w  d4,d1
  1152.     bsr.w   loc_E2C2
  1153.     move.w  d1,d4
  1154.     moveq   #0,d5
  1155.     moveq   #$1F,d6
  1156.     move    #$2700,sr
  1157.     bsr.w   DrawTiles_Vertical
  1158.     move    #$2300,sr
  1159.     movem.l (sp)+,d4-d6
  1160.     addi.w  #$10,d4
  1161.     dbf d6,loc_E36A
  1162.     rts
  1163. ; ===========================================================================
  1164.  
  1165. loc_E396:
  1166.     moveq   #0,d4
  1167.     moveq   #$1F,d6
  1168.  
  1169. loc_E39A:
  1170.     movem.l d4-d6,-(sp)
  1171.     moveq   #0,d5
  1172.     move.w  d4,d1
  1173.     bsr.w   loc_E2AC
  1174.     move.w  d1,d4
  1175.     moveq   #0,d5
  1176.     moveq   #$1F,d6
  1177.     move    #$2700,sr
  1178.     bsr.w   DrawTiles_Vertical3
  1179.     move    #$2300,sr
  1180.     movem.l (sp)+,d4-d6
  1181.     addi.w  #$10,d4
  1182.     dbf d6,loc_E39A
  1183.     rts
  1184. ; ===========================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement