From 3322f2460fd33f48107ca93860a721c4dd5a70f3 Mon Sep 17 00:00:00 2001 From: Smallhacker Date: Mon, 14 Jan 2019 00:23:19 -0500 Subject: [PATCH] Fixed pointer table commenting --- .../java/com/smallhacker/disbrowser/Grid.kt | 14 ++++++------- .../com/smallhacker/disbrowser/Service.kt | 6 +++--- .../smallhacker/disbrowser/asm/Instruction.kt | 21 +++++++++++-------- .../disbrowser/disassembler/Disassembler.kt | 2 +- .../smallhacker/disbrowser/game/GameData.kt | 1 + 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/smallhacker/disbrowser/Grid.kt b/src/main/java/com/smallhacker/disbrowser/Grid.kt index 84f3c00..b6e751c 100644 --- a/src/main/java/com/smallhacker/disbrowser/Grid.kt +++ b/src/main/java/com/smallhacker/disbrowser/Grid.kt @@ -2,7 +2,6 @@ package com.smallhacker.disbrowser import com.smallhacker.disbrowser.asm.* import com.smallhacker.disbrowser.game.Game -import com.smallhacker.disbrowser.game.GameData class Grid { private val arrowCells = HashMap, HtmlNode?>() @@ -61,18 +60,19 @@ class Grid { } fun add(ins: CodeUnit, game: Game, disassembly: Disassembly) { - val presentedAddress = ins.presentedAddress + val sortedAddress = ins.sortedAddress + val indicativeAddress = ins.indicativeAddress val gameData = game.gameData if (nextAddress != null) { - if (presentedAddress != nextAddress) { + if (sortedAddress != nextAddress) { addDummy() } } - nextAddress = ins.nextPresentedAddress + nextAddress = ins.nextSortedAddress val y = (height++) - addresses[presentedAddress] = y + addresses[sortedAddress] = y val (address, bytes, label, primaryMnemonic, secondaryMnemonic, suffix, operands, state, comment, labelAddress) = ins.print(gameData) @@ -80,7 +80,7 @@ class Grid { add(y, ins.address, text(address ?: ""), text(bytes), - editableField(game, presentedAddress, "label", label), + editableField(game, indicativeAddress, "label", label), fragment { if (secondaryMnemonic == null) { text(primaryMnemonic) @@ -113,7 +113,7 @@ class Grid { } }, text(state ?: ""), - editableField(game, presentedAddress, "comment", comment) + editableField(game, indicativeAddress, "comment", comment) ) if (ins.opcode.continuation == Continuation.NO) { diff --git a/src/main/java/com/smallhacker/disbrowser/Service.kt b/src/main/java/com/smallhacker/disbrowser/Service.kt index ffbe44a..ea5f349 100644 --- a/src/main/java/com/smallhacker/disbrowser/Service.kt +++ b/src/main/java/com/smallhacker/disbrowser/Service.kt @@ -48,10 +48,10 @@ object Service { grid.add(it, game, disassembly) } disassembly.asSequence() - .mapNotNull { - it.linkedState + .mapNotNull {ins -> + ins.linkedState ?.let { link -> - it.presentedAddress to link.address + ins.sortedAddress to link.address } } .sortedBy { it.first distanceTo it.second } diff --git a/src/main/java/com/smallhacker/disbrowser/asm/Instruction.kt b/src/main/java/com/smallhacker/disbrowser/asm/Instruction.kt index 5353ef4..1de63dd 100644 --- a/src/main/java/com/smallhacker/disbrowser/asm/Instruction.kt +++ b/src/main/java/com/smallhacker/disbrowser/asm/Instruction.kt @@ -6,8 +6,9 @@ import com.smallhacker.disbrowser.util.* interface CodeUnit { val address: SnesAddress? val relativeAddress: SnesAddress - val presentedAddress: SnesAddress - val nextPresentedAddress: SnesAddress + val indicativeAddress: SnesAddress + val sortedAddress: SnesAddress + val nextSortedAddress: SnesAddress val linkedState: State? val preState: State? @@ -55,13 +56,14 @@ interface CodeUnit { class DataBlock( override val opcode: Opcode, override val bytes: ValidMemorySpace, - override val presentedAddress: SnesAddress, + override val indicativeAddress: SnesAddress, + override val sortedAddress: SnesAddress, override val relativeAddress: SnesAddress, override val linkedState: State?, override val memory: SnesMemory ) : CodeUnit { - override val nextPresentedAddress: SnesAddress - get() = presentedAddress + operandLength.toInt() + override val nextSortedAddress: SnesAddress + get() = sortedAddress + operandLength.toInt() override val operandLength get() = bytes.size override val address: SnesAddress? = null @@ -73,9 +75,10 @@ class DataBlock( class Instruction(override val bytes: ValidMemorySpace, override val opcode: Opcode, override val preState: State) : CodeUnit { override val memory = preState.memory override val address: SnesAddress get() = preState.address + override val indicativeAddress get() = address override val relativeAddress get() = address - override val presentedAddress get() = address - override val nextPresentedAddress get() = postState.address + override val sortedAddress get() = address + override val nextSortedAddress get() = postState.address override val postState = opcode.mutate(this) .mutateAddress { it + bytes.size.toInt() } @@ -136,8 +139,8 @@ fun CodeUnit.print(gameData: GameData? = null): PrintedCodeUnit { } val state = postState?.toString() - val label = address?.let { gameData?.get(it)?.label } - val comment = address?.let { gameData?.get(it)?.comment } + val label = gameData?.get(indicativeAddress)?.label + val comment = gameData?.get(indicativeAddress)?.comment val formattedAddress = address?.toFormattedString() val bytes = bytesToString() diff --git a/src/main/java/com/smallhacker/disbrowser/disassembler/Disassembler.kt b/src/main/java/com/smallhacker/disbrowser/disassembler/Disassembler.kt index 2f0bdb3..d5f101c 100644 --- a/src/main/java/com/smallhacker/disbrowser/disassembler/Disassembler.kt +++ b/src/main/java/com/smallhacker/disbrowser/disassembler/Disassembler.kt @@ -78,7 +78,7 @@ object Disassembler { } val instructionList = instructions - .sortedBy { it.presentedAddress } + .sortedBy { it.sortedAddress } .toList() return Disassembly(instructionList) diff --git a/src/main/java/com/smallhacker/disbrowser/game/GameData.kt b/src/main/java/com/smallhacker/disbrowser/game/GameData.kt index 07a0eb7..3612375 100644 --- a/src/main/java/com/smallhacker/disbrowser/game/GameData.kt +++ b/src/main/java/com/smallhacker/disbrowser/game/GameData.kt @@ -104,6 +104,7 @@ class JmpIndirectLongInterleavedTable @JsonCreator constructor( DataBlock( Opcode.CODE_POINTER_LONG, table.range(offset, 3u), + start + offset.toInt(), jumpInstruction.postState.address + offset.toInt(), jumpInstruction.relativeAddress, jumpInstruction.opcode.mutate(jumpInstruction)