Actions

SCHG How-to

Port Sonic 3's Sound Driver to Sonic 1

From Sonic Retro

Revision as of 05:20, 4 March 2011 by Kram1024 (talk | contribs) (Preparing to use Sonic 3/K/3K sound system)

(Original guide by Kram1024)
Updated by Kram1024

You probably saw a quick and dirty way to do this on SSRG, but lets do it the proper way, the way that sonic team would do it.

Overview

First off, Sonic 3's sound driver has the V_Int reloader built into it so it is not needed, some routines need replacement, sounds need fixing, and we need to replace the sounds and music. We will be using the hivebrain version, if you wish to do it via svn version, I am sure you can come up with a way that works by seeing what changes I made in the hivebrain version.

Preparing to use Sonic 3/K/3K sound system

The Vertical Interrupt and Horizontal Interrupt need to be fixed, since the sonic 1/2 system uses them but the Sonic 3/K/3K system doesn't.

Removal of master V_Int branch to s1driver point

first we will fix the vertical interrupt, by changing: <asm> loc_B5E: ; XREF: loc_B88 jsr (sub_71B4C).l </asm>

to: <asm> loc_B5E: ; XREF: loc_B88 nop </asm>

Removal of H_Int branch point to s1driver

Now we locate: <asm> loc_119E: ; XREF: PalToCRAM clr.b ($FFFFF64F).w movem.l d0-a6,-(sp) bsr.w Demo_Time jsr (sub_71B4C).l movem.l (sp)+,d0-a6 rte

End of function PalToCRAM

</asm> See another familiar line? Yes, you've got it, do the same thing to it: <asm> loc_119E: ; XREF: PalToCRAM clr.b ($FFFFF64F).w movem.l d0-a6,-(sp) bsr.w Demo_Time nop movem.l (sp)+,d0-a6 rte

End of function PalToCRAM

</asm> That effectively disables the sonic1 style v_int and h_int driver reloading that we will not need and prevents a nasty error down the road.

Upgrading the Load Driver Routine