Esempio n. 1
0
        private int GetOffsetFromPTable()
        {
            var pScreen = Owner.Pointers[Index];

            if (Level.Format.Uses24bitScreenPointers)
            {
                var bank = Owner.Pointers.GetBank(Index);
                return((int)Mmc3.GetBankOffset(bank) + ((int)pScreen & 0x1FFF)); //(int)Level.Rom.Banks[bank].ToOffset(pScreen);
            }
            else
            {
                return(Owner.DataBank.ToOffset(pScreen));
            }
        }
Esempio n. 2
0
        void ILevelDataSerializer.SerializeRoomTable(ref int offset)
        {
            if (Format.Uses24bitScreenPointers)
            {
                for (int i = 0; i < screens.Count; i++)
                {
                    var oScreenData = screens[i].Offset;
                    // Get bank/address
                    int screenBank  = Mmc3.GetBank((pRom)oScreenData);
                    var pScreenData = 0xA000 | (int)Mmc3.GetAddress8000((pRom)oScreenData);
                    Debug.WriteLine(screenBank.ToString("x2") + ":" + pScreenData.ToString("x4"));
                    if (screenBank == 0xe)
                    {
                    }
                    rom.data[offset] = (byte)screenBank;
                    offset++;
                    rom.WritePointer((pRom)offset, (pCpu)pScreenData);
                    offset += 2;
                }

                // FF FF FF terminator
                rom.data[offset]     = 0;
                rom.data[offset + 1] = 0;
                rom.data[offset + 2] = 0;
                offset += 3;
            }
            else
            {
                for (int i = 0; i < screens.Count; i++)
                {
                    var oScreenData = screens[i].Offset;
                    var pScreenData = screens.DataBank.ToPtr((pRom)oScreenData);

                    rom.WritePointer((pRom)offset, pScreenData);
                    offset += 2;
                }
                // Enhanced ROMs require FFFF terminator for room pointers
                if (rom.RomFormat == RomFormats.Enhanco)
                {
                    rom.WritePointer((pRom)offset, new pCpu(0xFFFF));
                    offset += 2;
                }
            }
        }