Unfortunately, I'm not really aware of any comprehensive tutorial on changing mappers (although honestly I haven't really looked for one). The concept is simple, but it does require a bit of understanding of some NES architecture as well as at least the basics of 6502 assembly, and arguably is at least an intermediate level task. That's not to say you can't do it as a beginner, but it'll be confusing and difficult, and it'll take you a bit of time to learn everything you need to know in order to pull it off. But I think even attempting it is a valuable learning experience, so I don't want to discourage you.
Conceptually, you need to do the following:
- Figure out how the old mapper (534) works
- Figure out how the new mapper (52) works
- Find all the code in the original ROM that interacts with the mapper -- and replace it with new code that does the same thing, but using the new mapper instead
- If necessary, cut into the ROM's bootup code and do any necessary prep to configure the new mapper
For a simple example... let's look at some more typical mappers. Say you want to convert a mapper 1 (MMC1) game to a mapper 4 (MMC3) game. One of the most common things a mapper does is PRG swapping. Mapper 1 games will swap out the $8000-BFFF memory region by performing 5 writes to the $E000-FFFF range. So a typical swap will look like so:
; Typical MMC1 swap routine
; Assuming the desired page is already in A, MMC1 requires regs be written 1 bit at a time (5 writes total)
STA $FFF9 ; write low bit to mapper register
LSR A ; shift
STA $FFF9 ; write next bit
LSR A ; repeat until all 5 bits written
STA $FFF9
LSR A
STA $FFF9
LSR A
STA $FFF9
To contrast, to swap on MMC3, you need to write a sort of 'command' to $8000, then write the desired page to $8001. Additionally, MMC3 swaps the $8000-9FFF and $A000-BFFF ranges independently, so in order to swap the full $8000-BFFF range the same way MMC1 does, you will have to actually do 2 swaps on the MMC3. ALSO, MMC1 operates on 16K page sizes and MMC3 operates on 8K page sizes, so you'll have to double the page number.
So the MMC3 code that does the same thing might look something like so:
ASL A ; double the page number to transform it form a 16K page to an 8K page
LDX #$06 ; write '6' to $8000, telling MMC3 we want to swap the $8000-9FFF range
STX $8000
STA $8001 ; write page number to $8001, performing the swap
INX ; +1 to X
STX $8000 ; write '7' to $8000, telling MMC3 we want to swap the $A000-BFFF range
CLC
ADC #$01 ; +1 to A, increasing the desired page number (2nd 8K page in the desired 16K block)
STA $8001 ; perform the swap
A full mapper conversion involves finding EVERY instance of mapper interaction in the ROM and doing this kind of translation. And while that might sound like a lot, most mapper stuff is usually confined to a small handful of routines. IE, whenever the game wants to swap, it will jump to a common subroutine --- so you really only need to change that one subroutine in order to change swapping for the entire game.
But now for some GOOD NEWS. Since you just want to do a multicart conversion, you probably don't need to worry about individual page swapping, or even very much mapper interaction at all. The individual games are all using MMC3 stuff in both the new and old mappers, so you won't have to find or translate any of that. All you'll need to worry about is the multicart game selection stuff, which there is going to be MUCH LESS of. AND it's all very likely going to be clumped together in one area of the ROM and accessed once or twice very shortly after bootup and game selection, and then never touched again. (Once a multicart picks a game, it generally stays in that game permanently)
So a multicart conversion is simpler, but the concept is the same:
- Figure out how the old mapper selects its games
- Figure out how the new mapper selects its games
- Do the translation