Clownacy, on 29 May 2015 - 08:10 PM, said:
A lot of changes? For LoadTilesAsYouMove/LoadTilesFromStart, I only changed GetBlockAddr and GetBlockPtr (Git labels) to make them read the new format. I also had to move a4 to the stack to avoid having it modified in GetBlockAddr.
Sorry , I am using different version, but I think with code you can figure compatible routines in your asm.
If you want I can provide full source code.
For A4 only Ram Address is changed in Sonic 2 Delta code.
Level_Map_Pointers equ $FFFF8000 ; Novo <<<-
Level_Map_Data equ Level_Map_Pointers
; Fg_Mem_Start_Address equ $FFFF8000 ; Remover <<<-
Level_Foreground_Index equ Level_Map_Pointers+$0008
; Bg_Mem_Start_Address equ $FFFF8080 ; Remover <<<-
Level_Background_Index equ Level_Map_Pointers+$000A
LoadTilesAsYouMove: ; Offset_0x00DA14
lea (VDP_Control_Port), A5 ; $00C00004
lea (VDP_Data_Port), A6 ; $00C00000
lea ($FFFFEEA2).w, A2
lea ($FFFFEE68).w, A3
; lea (Bg_Mem_Start_Address).w, A4 ; $FFFF8080
lea (Level_Background_Index).w, A4
move.w #$6000, D2
bsr Offset_0x00DB7A
lea ($FFFFEEA4).w, A2
lea ($FFFFEE70).w, A3
bsr Offset_0x00DC4A
lea ($FFFFEEA6).w, A2
lea ($FFFFEE78).w, A3
bsr Offset_0x00DD3E
tst.w (Two_Player_Flag).w ; $FFFFFFB8
beq.s Offset_0x00DA66
lea ($FFFFEEA8).w, A2
lea ($FFFFEE80).w, A3
; lea (Fg_Mem_Start_Address).w, A4 ; $FFFF8000
lea (Level_Foreground_Index).w, A4
move.w #$6000, D2
bsr Offset_0x00DB14
Offset_0x00DA66:
lea ($FFFFEEA0).w, A2
lea ($FFFFEE60).w, A3
; lea (Fg_Mem_Start_Address).w, A4 ; $FFFF8000
lea (Level_Foreground_Index).w, A4
move.w #$4000, D2
tst.b (Refresh_Level_Layout).w ; $FFFFF72C
beq.s Draw_FG ; Offset_0x00DAAE
move.b #$00, (Refresh_Level_Layout).w ; $FFFFF72C
moveq #$FFFFFFF0, D4
moveq #$0F, D6
Draw_All:
And
Calc_Chunk_RAM_Pos: ; Offset_0x00E05E
movem.l D4/D5, -(A7)
move.w D4, D3
; add.w D3, D3 ; Neto - Sonic 2 Delta
; andi.w #$0F00, D3 ; Neto - Sonic 2 Delta
;-------------------------------------------------------------------------------
; Neto - Sonic 2 Delta ->>>
andi.w #$0780, D3 ; Y Wrap
lsr.w #$05, D3
lea (A4, D3), A0
movea.w (A0), A0
; Neto - Sonic 2 Delta <<<-
;-------------------------------------------------------------------------------
lsr.w #$03, D5
move.w D5, D0
lsr.w #$04, D0
andi.w #$007F, D0
; add.w D3, D0 ; Neto - Sonic 2 Delta
moveq #$FFFFFFFF, D3
clr.w D3
; move.b $00(A4, D0), D3 ; Neto - Sonic 2 Delta
;-------------------------------------------------------------------------------
; Neto - Sonic 2 Delta ->>>
move.b $00(A0, D0), D3
; Neto - Sonic 2 Delta <<<-
;-------------------------------------------------------------------------------
lsl.w #$07, D3
andi.w #$0070, D4
andi.w #$000E, D5
add.w D4, D3
add.w D5, D3
move.l D3, A0
movem.l (A7)+, D4/D5
rts
and
;===============================================================================
; Sub Rotina Draw_Blocks - Rotina para desenhar os blocos
; [ Início ]
;===============================================================================
Draw_Blocks: ; Offset_0x00E204
add.w (A3), D5
add.w $0004(A3), D4
lea (Blocks_Mem_Address).w, A1 ; $FFFF9000
move.w D4, D3 ; Neto - Sonic 2 Delta
; add.w D3, D3 ; Neto - Sonic 2 Delta
; andi.w #$0F00, D3
;-------------------------------------------------------------------------------
; Neto - Sonic 2 Delta ->>>
andi.w #$0780, D3 ; Y Wrap
lsr.w #$05, D3
lea (A4, D3), A0
movea.w (A0), A0
; Neto - Sonic 2 Delta <<<-
;-------------------------------------------------------------------------------
lsr.w #$03, D5
move.w D5, D0
lsr.w #$04, D0
andi.w #$007F, D0
; add.w D3, D0
moveq #$FFFFFFFF, D3
clr.w D3
; move.b $00(A4, D0), D3 ; Chunk 128x128 a ser desenhado
;-------------------------------------------------------------------------------
; Neto - Sonic 2 Delta ->>>
move.b $00(A0, D0), D3
; Neto - Sonic 2 Delta <<<-
;-------------------------------------------------------------------------------
lsl.w #$07, D3
andi.w #$0070, D4
andi.w #$000E, D5
add.w D4, D3
add.w D5, D3
move.l D3, A0
move.w (A0), D3
andi.w #$03FF, D3
lsl.w #$03, D3
adda.w D3, A1
rts
;===============================================================================
; Sub Rotina Draw_Blocks - Rotina para desenhar os blocos
; [ Término ]
;===============================================================================
Load_Tiles_From_Start: ; Offset_0x00E2C0
lea (VDP_Control_Port), A5 ; $00C00004
lea (VDP_Data_Port), A6 ; $00C00000
;===============================================================================
; Carrega os Tiles durante o Início da Fase ; Neto - Sonic 2D
; Usado na seqüência do final
; [ Início ]
;===============================================================================
tst.w (End_Sequence_Flag).w
bpl.s No_Credits_Running
Credits_Running:
lea ($FFFFEE00).w, A3
; lea (Fg_Mem_Start_Address).w, A4 ; FFFF8000
;-------------------------------------------------------------------------------
; Neto - Sonic 2 Delta ->>>
lea (Level_Foreground_Index).w, A4
; Neto - Sonic 2 Delta <<<-
;-------------------------------------------------------------------------------
move.w #$4000, D2
bsr.s Draw_Bg
No_Credits_Running:
;===============================================================================
; Carrega os Tiles durante o Início da Fase ; Neto - Sonic 2D
; Usado na seqüência do final
; [ Término ]
;===============================================================================
lea ($FFFFEE08).w, A3
; lea (Bg_Mem_Start_Address).w, A4 ; $FFFF8080
;-------------------------------------------------------------------------------
; Neto - Sonic 2 Delta ->>>
lea (Level_Background_Index).w, A4
; Neto - Sonic 2 Delta <<<-
;-------------------------------------------------------------------------------
move.w #$6000, D2
moveq #$00, D4
cmpi.b #$0C, (Level_Id).w ; $FFFFFE10
beq Draw_CNz_Bg ; Offset_0x00E2F8
tst.w (Two_Player_Flag).w ; $FFFFFFB8
beq Draw_Bg ; Offset_0x00E2F6
cmpi.b #$0B, (Level_Id).w ; $FFFFFE10
beq Draw_MCz_2P_Bg ; Offset_0x00E356
Draw_Bg: ; Offset_0x00E2F6
moveq #$FFFFFFF0, D4
Draw_CNz_Bg: