Okay, here it is. I have released the source code for my EMS Multi-ROM, but this text should help explain it. If you want to understand this concept further, please browse through my source code (assuming that you have an understanding of the C language). The 32M EMS carts have a total of 16 8-kilobyte SRAM banks. These 16 banks comprise the total 128KB (1Mbit) of SRAM that the cart has. Below, I will attempt to explain how I use these 16 banks. Note: I refer to these 16 banks as bank 0 through bank 15 (instead of 1-16) because that's how the hardware refers to them. At the time I created the Multi-ROM menu, most GameBoy ROMs either used 8k (one bank) or 32k (4 banks) of SRAM. Well, that is, if they use any at all. So, just understand that each ROM can use 0, 1, or 4 SRAM banks. Banks 0-3 (4 banks = 32k) of SRAM is used for the currently running ROM. This is because the ROMs on the GB(C) expect that the SRAM will start at bank 0, so we have to abide by that. Banks 4-14 are used for backing up the SRAM for each ROM. Bank 15 (the last bank) is where I put some EMS Multi-ROM data. Some of the important data here is the last run ROM and a list of the ROMs that are on the cart. To better understand this, I will go into some detail about how the Multi-ROM program saves SRAM. This is a simplified general overview, and is not exactlly how the Multi-ROM program handles it. If you want to load a ROM, the SRAM manager checks to see if it was the one you ran last time. If not, it saves the data in banks 0-3 to the appropriate slot in banks 4-14. Then, it finds the data that belongs to the ROM you are loading in banks 4-14 and copies it to banks 0-3. It is worth knowing that it will only copy the right number of banks for the ROM you're loading. If the ROM you're loading only needs 1 bank of SRAM, only 1 will be copied or backed up. So, here's how Banks 4-14 work. When the Multi-ROM is started, it searches through the cart to find which ROMs are on it. When it finds a ROM, it saves a bunch of information about that particular ROM. Part of this information is how many banks that ROM uses (can be 0, 1, or 4). Then, when it lays out SRAM, it just starts with the first ROM. The first ROM gets 0, 1, or 4 banks starting with bank 4. Then, the next ROMs get 0, 1, or 4 banks starting where the previous ROM left off. Here's an example. Assume we have the following ROMs loaded on the EMS cart. ROM 0: This will always be the EMS Multi-ROM program. ROM 1: Hockey (which uses 4 banks=32k SRAM) ROM 2: Soccer (which uses 1 bank=8k SRAM) ROM 3: Baseball (uses 0 banks [does not use SRAM] because baseball sucks :) ROM 4: Basketball (uses 1 bank=8k SRAM) Then the SRAM would look like this. SRAM Bank 0: Multi-ROM reserves this for current ROM SRAM Bank 1: Multi-ROM reserves this for current ROM SRAM Bank 2: Multi-ROM reserves this for current ROM SRAM Bank 3: Multi-ROM reserves this for current ROM SRAM Bank 4: Hockey SRAM Bank 5: Hockey SRAM Bank 6: Hockey SRAM Bank 7: Hockey SRAM Bank 8: Soccer SRAM Bank 9: Basketball SRAM Bks 10-14: Unused and untouched SRAM Bank 15: Multi-ROM uses this for storing infor about ROMs and SRAM useage If you wanted to play Hockey, the Multi-ROM would copy banks 4-7 to banks 0-3. Then, next time you turned on your Multi-ROM, if you played Soccer, the Multi-ROM would copy banks 0-3 back into 4-7. Then, it would load bank 8 into bank 0. Note: If, after playing soccer, you wanted to back up your SRAM to PC and break up the SRAM into parts, you would want to use bank 0 for soccer, and not bank 8, because bank 0 never got saved to bank 8. Bank 15 will store this information for anyone that would want to create a tool that would assemble/disassemble 128k SRAM files. Well, that's it. Pretty cool, huh? :) Flavor (http://flavor.8k.com/GameBoy/)