Exemplo n.º 1
0
        private void UpdateF37F90(AsmFile fileObj)
        {
            uint jr = 0x03E00008;
            uint cmd;

            if (fileObj.Id == (int)_levelID.CC)
            {
                cmd = ASM.GetCommand(_F37F90, 0x5DA20);
                UpdateJAL(_F37F90, cmd, 0x5DA20);
            }


            for (int j = 0; j < C.AsmGlobalsFuncsOffsets.afo[fileObj.Id].Length; j++)
            {
                int pos = C.AsmGlobalsFuncsOffsets.afo[fileObj.Id][j];

                // Step thru all commands in subroutine and check for JALs. 
                while (ASM.GetCommand(_F37F90, pos) != jr)
                {
                    cmd = ASM.GetCommand(_F37F90, pos);
                    if (ASM.GetOpcode(cmd) == C.JALCMD)
                        UpdateJAL(_F37F90, cmd, pos);
                            
                        pos += 4;
                    }
                }
        }
Exemplo n.º 2
0
        // Constructor.
        public Globalizer(uint baseRam, uint baseRom, byte[] romFile)
        {
            _decompressor.SetGame(GE.GECompression.BANJOKAZOOIE);
            this._baseRam = baseRam;
            this._baseRom = baseRom;

            foreach (int id in _levelIDArray)
            {
                // Instantiate Level File Objects
                _asmFiles.Enqueue(new AsmFile(id, C.LevelAsmAddress.laa[id], C.LevelObjectsAddress.loa[id]));
                _objectsFiles.Enqueue(new ObjectsFile(id, C.LevelObjectsAddress.loa[id], C.LevelObjectsAddress.loa[id + 1]));

                // Instantiate Object Variable Arrays.
                _variableSpaceArrays.Enqueue(C.VariableSpaceConstants.vsc[id]);
            }

            // Copy romFile contents to class _rom field.
            _rom = new byte[romFile.Length];

            for (int i = 0; i < romFile.Length; i++)
            {
                _rom[i] = romFile[i];
            }

            // Setup buffer for F37F90 file.
            var globalsAsm = new AsmFile(1, 0xF37F90, 0xFA3FD0);
            byte[] temp = DecompressFile(globalsAsm);
            _F37F90 = new byte[temp.Length];

            for (int i = 0; i < temp.Length; i++)
            {
                _F37F90[i] = temp[i];
            }
        }
Exemplo n.º 3
0
        private void UpdateAsmFile(AsmFile fileObj)
        {
            // Local Variables
            var objectsFile = (ObjectsFile)_objectsFiles.Peek();


            // Update current offset.
            AsmFile.CurrentFileOffset = RomFile.TotalOffset;
            _subOffArray.Add((uint)(RomFile.TotalOffset + _subOffsets[fileObj.Id] + _baseRam));

            // Create a local byte[] and pass it decompressed file info.
            byte[] asmFile = DecompressFile(fileObj);

            // Get _upperRAM value
            byte[] objFile = DecompressFile(objectsFile);
            _upperRAM = (uint)(_BASERAM + asmFile.Length + objFile.Length + objectsFile.ReservedLength);

            // Update JAL and LUI commands.
            ProcessCommands(asmFile);

            // Update F39F90 JALs
            UpdateF37F90(fileObj);

            RomFile.UpdateTotalsOffset(asmFile.Length, 0);

            // Update file buffer.
            _fileBuffer.Add(asmFile);
        }