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; } } }
// 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]; } }
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); }