private void UpdateItemLinkedList() { int dist = itemData.DataMoveDist; var pointerToData = Expander.pointers.ItemData.AsPRom(level); // Offset of program pointer to first item var itemPointer = new pCpu(newRomData, pointerToData); // Address of first item var dataOffset = itemPointer.AsPRom(level); // Offset of first item bool done = false; while (!done) { var OffsetOfpNext = dataOffset + 1; pCpu pNext = new pCpu(newRomData, OffsetOfpNext); done |= pNext.Value == 0xFFFF; if (!done) { // Update pointer to next item to where item data will be moved to pCpu updatedPNext = pNext + dist; updatedPNext.Write(newRomData, OffsetOfpNext); // Update dataOffset to point to next item dataOffset = pNext.AsPRom(level); } } }
private void UpdatePointers(int moveIndex) { var move = moveQueue[moveIndex]; // Update pointers int offsetDiff = move.pDest - move.pSource; for (int iPointer = 0; iPointer < move.ptableCount; iPointer++) { var pointerOffset = move.pPTable + 2 * iPointer; var pointerValue = new pCpu(newRomData, (int)pointerOffset); pointerValue += offsetDiff; pointerValue.Write(newRomData, pointerOffset); } }
void enhanced_SetPtr(int bankOffset, pCpu location, pCpu value) { int offset = bankOffset + (location.Value & 0x3FFF); value.Write(enhancedRomData, offset); }