The "music
bank list" (1 byte per song) is not the "music
pointer list" (2 bytes per song). You confused both, so it can not work.
I will just quote part of a past IRC conversation and add in some information.
Quote:
(14:16:50) GamingGardevoir: I want to use smps2mid to convert the songs from the Sonic 3 November 1993 prototype
(14:16:57) ValleyBell: ah, okay
(14:20:00) ValleyBell: SMPS Type: Sonic 3K and later
(14:20:00) ValleyBell: Pointer List: 0x0E16A0
(14:20:00) ValleyBell: Base Offset: 0x0B0000
(14:20:15) ValleyBell: [Add to List]
(14:20:30) ValleyBell: This adds the first 6 songs to the list.
(14:20:45) ValleyBell: That is how many songs are stored in the first music bank.
(14:21:54) ValleyBell: You then need to increase the "Pointer List" value by (6*2) = 0C (0E16A0 + 0C = 0E16AC),
(14:21:54) ValleyBell: increase the "Base Offset" by adding 0x008000 [example: 0x0B0000 -> 0x0B8000 -> 0x0C0000 -> etc.]
(14:21:54) ValleyBell: and press the button again
[Then you repeat this more music banks. How much the "Pointer List" value has to be increased depends on the number of songs added.]
(14:22:34) ValleyBell: In case you want to know how many songs are in each bank, the Bank List is at ROM offset 0E08DD.
(14:23:58) ValleyBell: and the "Base Offset" for each song is calculated by taking the value fom the Bank List, adding 0x10 to it and multiplying the result by 0x8000.
(14:23:58) ValleyBell: e.g. for the first song: (0x06 + 0x10) = 0x16, 0x16 * 0x8000 = 0x0B0000
(14:39:20) ValleyBell: The value of the pointer list always has to be increased by ([number of songs added] * 2)
(14:39:38) ValleyBell: (6 songs in the first bank, I think it's more in the second bank)
(15:05:56) ValleyBell: the bank list is in the ROM at 0E08DD
(15:06:33) ValleyBell: and it goes from 06 (equals ROM bank 0B0000) to 0B (ROM bank 0D8000)
That above was for the Sonic 3 prototype 1993-11. For the Sonic 3C prototype 1994-05-17, the offsets are a bit different, but the same concepts apply.
- Music Pointer List: 0E761A
- Music Bank List: 0E6B48
- First music bank: 0C8000 (value "09")
The music bank numbers are not monotonically increasing though and some songs (e.g. the credits theme) use different banks than you would get with the "normal" method.
Thus you have to add the entry for these songs separately.
What you have to do:
- figure out the song number
- calculate the correct location of the 2-byte music pointer: 0x0E761A + 2 * (songID-1) -> value for "Pointer List"
- calculate the correct location of the 1-byte music bank: 0x0E6B48 + 1 * (songID-1)
- read the byte there, then calculate: ([music bank] + 0x10) * 0x8000 -> value for "Base Offset"
- then press the "Add to List" button to add that song (and maybe additional garbage pointers) to the list