IPB

Welcome Guest ( Log In | Register )


 

Recent Changes | Random | Help | Special Pages | Upload
home | info | forums | svn | irc | podcast | about

Due to our recent technical difficulties, we only have OVER NINE THOUSAAAAAAAAAAND of our images and files working. The Sonic Retro staff is working as fast as they can to restore these documents. Please do not report broken links at this time.

SCHG:How-to:Expand the music index to start at $00 instead of $80

From Sonic Retro

(Original guide by HPZMan)

Here's a easy way on how to use all slots from $00 to $FF on the Sonic 1 M68K Sound Driver.

Some notes:

After the changes, the addresses $FFFFFFFC and $FFFFFFFD will be used. Technically, it aren't new slots. Instead of this, it is a duplication from the slots $80 using a unique different index.

Contents

Slots $00 to $7F

Make a search for PlaySound:. You will see this:

PlaySound:
		move.b	d0,($FFFFF00A).w
		rts


Change to this:

PlaySound:
		cmpi.b  #$7F,d0
		ble.s   ChkSounds00to7F
		jmp	 NormalSoundRequest
ChkSounds00to7F:
		cmpi.b  #$01,d0
		bge.s   LoadSlots00to7F
		jmp	 NormalSoundRequest
LoadSlots00to7F:
		add.b   #$80,d0; Add $80 to get slot to starts at $81			
		move.b  #$01,($FFFFFFFC).w; Move $01 to $FFFFFC to make sound driver to load the secound index
NormalSoundRequest:
		move.b	d0,($FFFFF00A).w
		rts


Make a search for PlaySound_Special: You can see this:

PlaySound_Special:
		move.b	d0,($FFFFF00B).w
		rts


Change to this:

PlaySound_Special:
		cmpi.b  #$7F,d0
		ble.s   ChkSounds00to7F_Special
		jmp	 NormalSoundRequest_Special
ChkSounds00to7F_Special:
 
		cmpi.b  #$01,d0
		bge.s   LoadSlots00to7F_Special
		jmp	 NormalSoundRequest_Special
LoadSlots00to7F_Special:
		add.b   #$80,d0; Add $80 to get slot to starts at $81			
		move.b  #$01,($FFFFFFFC).w; Move $01 to $FFFFFC to make the sound driver to load the secound index
NormalSoundRequest_Special:
		move.b	d0,($FFFFF00B).w
		rts


Search for loc_7202C:, you will see this:

loc_7202C:
		jsr	sub_725CA(pc)
		movea.l	(off_719A0).l,a4
		subi.b	#$81,d7
		move.b	(a4,d7.w),$29(a6)
		movea.l	(Go_MusicIndex).l,a4


Change to this:

loc_7202C:
		jsr	sub_725CA(pc)
		movea.l	(off_719A0).l,a4
		subi.b	#$81,d7
		move.b	(a4,d7.w),$29(a6)
		movea.l	(Go_MusicIndex).l,a4
		cmpi.b  #$01,($FFFFFFFD).w
		bne.s   CheckSounds00to80
		movea.l	(Go_MusicIndexFF).l,a4
		jmp	 NormalIndexLoad
CheckSounds00to80:
		cmpi.b  #$01,($FFFFFFFC).w
		bne.s   NormalIndexLoad
		movea.l	(Go_MusicIndex00).l,a4		
NormalIndexLoad:
		clr.w   ($FFFFFFFC).w


Search for Go_MusicIndex:, you can see this:

Go_MusicIndex:	dc.l MusicIndex; XREF: Sound_81to9F


Below from the thing you found, add this:

Go_MusicIndex00:	dc.l MusicIndex00
Go_MusicIndexFF:	dc.l MusicIndexFF


Slots $E5 to $FF

Search for Sound_ChkValue:, you will see this:

Sound_ChkValue:; XREF: sub_71B4C
		moveq	#0,d7
		move.b	9(a6),d7
		beq.w	Sound_E4
		bpl.s	locret_71F8C
		move.b	#$80,9(a6); reset	music flag
		cmpi.b	#$9F,d7
		bls.w	Sound_81to9F; music	$81-$9F
		cmpi.b	#$A0,d7
		bcs.w	locret_71F8C
		cmpi.b	#$CF,d7
		bls.w	Sound_A0toCF; sound	$A0-$CF
		cmpi.b	#$D0,d7
		bcs.w	locret_71F8C
		cmpi.b	#$E0,d7
		bcs.w	Sound_D0toDF; sound	$D0-$DF
		cmpi.b	#$E4,d7
		bls.s	Sound_E0toE4; sound	$E0-$E4
 
locret_71F8C:
		rts


Change to this:

Sound_ChkValue:; XREF: sub_71B4C
		moveq	#0,d7
		move.b	9(a6),d7
		beq.w	Sound_E4
		bpl.s	locret_71F8C
		move.b	#$80,9(a6); reset	music flag
		cmpi.b  #$01,($FFFFFFFC).w
		bne.s   Load81to9F
		jmp	 Sound_ChkValueFor00
Load81to9F:
		cmpi.b	#$9F,d7
		bls.w	Sound_81to9F; music	$81-$9F
ContinueSound_ChkValue:
		cmpi.b	#$A0,d7
		bcs.w	locret_71F8C
		cmpi.b	#$CF,d7
		bls.w	Sound_A0toCF; sound	$A0-$CF
		cmpi.b	#$D0,d7
		bcs.w	locret_71F8C
		cmpi.b	#$E0,d7
		bcs.w	Sound_D0toDF; sound	$D0-$DF
		cmpi.b	#$E4,d7
		bls.s	Sound_E0toE4; sound	$E0-$E4
		cmpi.b  #$FF,d7
		bls.w   Sound_E5toFF
 
locret_71F8C:
		rts


Search for Sound_81to9F: and above the thing you found, add this:

Sound_ChkValueFor00:
		cmpi.b  #$FF,d7; $FF = Last slot for musics in index $00 - $7F ($FF = $7F)
		bls.w   Sound_81to9F
		rts
 
Sound_E5toFF:
		move.b  #$01,($FFFFFFFD).w
		sub.b   #$64,d7


Inserting new songs

Now you just need to create the pointers for the songs at the index, and include them! To do it for the songs $01 to $7F, create in some place a index called MusicIndex00:. The index have to work like this:

MusicIndex00:
		dc.l	Music01; Music for slot $01
		dc.l	Music02; Music for slot $02
......


To the songs $E5 to $FF, create in some place a index called MusicIndexFF. The index have to work like this:

MusicIndexFF:
		dc.l	MusicE5; Music for slot $E5
		dc.l	MusicE6; Music for slot $E6
......


Making the Sound Test values to start at $00

Search for loc_3550:, you will see this:

		addi.w	#$80,d0

Remove or comment this line.


Make a search for LevelSelect:, below from this you can see:

		addi.w	#$80,d0

Remove or comment this line.


Search for LevSel_Right:, above it you will see this:

		bcc.s	LevSel_Right
		moveq	#$4F,d0; if sound test	moves below 0, set to $4F

Change or comment these lines.


Search for LevSel_Refresh2:, above it you will see this:

		cmpi.w	#$50,d0
		bcs.s	LevSel_Refresh2
		moveq	#0,d0; if sound test	moves above $4F, set to	0

Remove or comment these lines.


Fixing possible problems with sound effects and songs

Go to SoundTypes:, you can see this:

SoundTypes:	dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$80
		dc.b $70, $70, $70, $70, $70, $70, $70,	$70, $70, $68, $70, $70, $70, $60, $70,	$70
		dc.b $60, $70, $60, $70, $70, $70, $70,	$70, $70, $70, $70, $70, $70, $70, $7F,	$60
		dc.b $70, $70, $70, $70, $70, $70, $70,	$70, $70, $70, $70, $70, $70, $70, $70,	$80
		dc.b $80, $80, $80, $80, $80, $80, $80,	$80, $80, $80, $80, $80, $80, $80, $80,	$90
		dc.b $90, $90, $90, $90


Change to this:

SoundTypes:	dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90,	$90
		dc.b $90, $90, $90, $90, $90, $90, $90,	$90, $90, $90, $90, $90, $90, $90, $90, $90


It should fix possible problems on play songs/sound effects and will not interfere the original songs and sound effects.

Optional - Putting the default Sonic 1 songs at the $0X slots index

Go to the index for songs $8X, MusicIndex.

Copy the pointers from it, remove them and paste it at the begin from the $0X slot index MusicIndex00.

Done.