disbrowser/src/main/java/com/smallhacker/disbrowser/asm/Segment.kt

30 lines
1.2 KiB
Kotlin
Raw Normal View History

2019-01-07 18:19:37 +00:00
package com.smallhacker.disbrowser.asm
2019-01-11 16:35:35 +00:00
class Segment (val start: SnesAddress, val end: SegmentEnd, val instructions: List<Instruction>)
2019-01-07 18:19:37 +00:00
2019-01-11 16:35:35 +00:00
class SegmentEnd(val address: SnesAddress, val local: List<State> = emptyList(), val remote: List<State> = emptyList(), val returnAddress: SnesAddress? = null, val returning: Boolean = false)
2019-01-07 18:19:37 +00:00
2019-01-11 16:35:35 +00:00
fun stoppingSegmentEnd(address: SnesAddress)
2019-01-07 18:19:37 +00:00
= SegmentEnd(address)
2019-01-11 16:35:35 +00:00
fun branchingSegmentEnd(address: SnesAddress, continueState: State, branchState: State)
2019-01-07 18:19:37 +00:00
= SegmentEnd(address, local = listOf(continueState, branchState))
2019-01-11 16:35:35 +00:00
fun alwaysBranchingSegmentEnd(address: SnesAddress, branchState: State)
2019-01-07 18:19:37 +00:00
= SegmentEnd(address, local = listOf(branchState))
2019-01-11 16:35:35 +00:00
fun jumpSegmentEnd(address: SnesAddress, targetState: State)
2019-01-07 18:19:37 +00:00
= SegmentEnd(address, remote = listOf(targetState))
2019-01-11 16:35:35 +00:00
fun subroutineSegmentEnd(address: SnesAddress, targetState: State, returnAddress: SnesAddress)
2019-01-07 18:19:37 +00:00
= SegmentEnd(address, remote = listOf(targetState), returnAddress = returnAddress)
2019-01-11 16:35:35 +00:00
fun returnSegmentEnd(address: SnesAddress)
2019-01-07 18:19:37 +00:00
= SegmentEnd(address, returning = true)
fun continuationSegmentEnd(state: State)
= SegmentEnd(state.address, local = listOf(state))
fun Segment.toDisassembly() = Disassembly(instructions)