Added first-diff.py
This commit is contained in:
parent
cdaafadde3
commit
dc794624b7
5
Makefile
5
Makefile
|
|
@ -105,6 +105,11 @@ distclean: clean
|
||||||
|
|
||||||
setup: clean distclean split
|
setup: clean distclean split
|
||||||
|
|
||||||
|
diff-init: all
|
||||||
|
$(RM) -rf expected/
|
||||||
|
mkdir -p expected/
|
||||||
|
cp -r $(BUILD_DIR) expected/$(BUILD_DIR)
|
||||||
|
|
||||||
split:
|
split:
|
||||||
$(V)$(SPLAT)
|
$(V)$(SPLAT)
|
||||||
@touch $(SPLAT_TIMESTAMP)
|
@touch $(SPLAT_TIMESTAMP)
|
||||||
|
|
|
||||||
38
splat.yaml
38
splat.yaml
|
|
@ -5,7 +5,7 @@ options:
|
||||||
target_path: baserom.z64
|
target_path: baserom.z64
|
||||||
base_path: .
|
base_path: .
|
||||||
compiler: GCC
|
compiler: GCC
|
||||||
find_file_boundaries: True
|
find_file_boundaries: False
|
||||||
header_encoding: ASCII
|
header_encoding: ASCII
|
||||||
platform: n64
|
platform: n64
|
||||||
asm_inc_header: ""
|
asm_inc_header: ""
|
||||||
|
|
@ -39,7 +39,7 @@ segments:
|
||||||
start: 0x1000
|
start: 0x1000
|
||||||
vram: 0x80070C00
|
vram: 0x80070C00
|
||||||
subsegments:
|
subsegments:
|
||||||
- [0x1000, asm, entry]
|
- [0x1000, asm, "entry_code"]
|
||||||
|
|
||||||
- name: main
|
- name: main
|
||||||
type: code
|
type: code
|
||||||
|
|
@ -60,6 +60,7 @@ segments:
|
||||||
- [0xFF10, asm]
|
- [0xFF10, asm]
|
||||||
- [0x10110, asm]
|
- [0x10110, asm]
|
||||||
- [0x10190, asm]
|
- [0x10190, asm]
|
||||||
|
- [0x10190, asm]
|
||||||
- [0x10250, asm]
|
- [0x10250, asm]
|
||||||
- [0x102E0, asm]
|
- [0x102E0, asm]
|
||||||
- [0x10340, asm]
|
- [0x10340, asm]
|
||||||
|
|
@ -408,6 +409,7 @@ segments:
|
||||||
- { start: 0x66E10, type: bss, vram: 0x80190F10 }
|
- { start: 0x66E10, type: bss, vram: 0x80190F10 }
|
||||||
|
|
||||||
- [0x66E10, bin]
|
- [0x66E10, bin]
|
||||||
|
|
||||||
# __SOME_OVERLAY_TABLE[0]
|
# __SOME_OVERLAY_TABLE[0]
|
||||||
# - type: code
|
# - type: code
|
||||||
# dir: overlay_66E10
|
# dir: overlay_66E10
|
||||||
|
|
@ -462,24 +464,24 @@ segments:
|
||||||
|
|
||||||
# - { start: 0x71280, type: bss, vram: 0x8019A790 }
|
# - { start: 0x71280, type: bss, vram: 0x8019A790 }
|
||||||
|
|
||||||
# - type: code
|
- type: code
|
||||||
# dir: overlay_71280
|
dir: overlay_71280
|
||||||
# start: 0x71280
|
start: 0x71280
|
||||||
# vram: 0x8019A7A0
|
vram: 0x8019A7A0
|
||||||
# bss_size: 0x40
|
bss_size: 0x40
|
||||||
# symbol_name_format: overlay_71280_$VRAM_$ROM
|
symbol_name_format: overlay_71280_$VRAM_$ROM
|
||||||
# exclusive_ram_id: test_overlapping
|
exclusive_ram_id: test_overlapping
|
||||||
# subsegments:
|
subsegments:
|
||||||
# - [0x71280, asm]
|
- [0x71280, asm]
|
||||||
|
|
||||||
# - [0x783A0, rodata]
|
- [0x783A0, rodata, "71280"]
|
||||||
# - [0x78410, rodata]
|
- [0x78410, rodata]
|
||||||
# - [0x785D0, rodata]
|
- [0x785D0, rodata]
|
||||||
# - [0x790F0, rodata]
|
- [0x790F0, rodata]
|
||||||
# - [0x79160, rodata]
|
- [0x79160, rodata]
|
||||||
# - [0x793F0, rodata]
|
- [0x793F0, rodata]
|
||||||
|
|
||||||
# - { start: 0x79730, type: bss, vram: 0x8019A790 }
|
# - { start: 0x79730, type: bss, vram: 0x801A2C50 }
|
||||||
|
|
||||||
- type: code
|
- type: code
|
||||||
dir: overlay_79730
|
dir: overlay_79730
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ __OVERLAY_INFO_71280_65CA0 = 0x8018FDA0;
|
||||||
__setup_overlay_71280_51940 = 0x8017BA40; // rom:0x51940
|
__setup_overlay_71280_51940 = 0x8017BA40; // rom:0x51940
|
||||||
|
|
||||||
__OVERLAY_INFO_71280_65C8C = 0x8018FD8C;
|
__OVERLAY_INFO_71280_65C8C = 0x8018FD8C;
|
||||||
|
__get_overlay_info_71280_65C8C = 0x8017B5E0;
|
||||||
|
|
||||||
__setup_overlay_71280_51674 = 0x8017B774; // rom:0x51674
|
__setup_overlay_71280_51674 = 0x8017B774; // rom:0x51674
|
||||||
|
|
||||||
__OVERLAY_INFO_8018FAE4 = 0x8018FAE4;
|
__OVERLAY_INFO_8018FAE4 = 0x8018FAE4;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# SPDX-FileCopyrightText: © 2022 AngheloAlf
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import mapfile_parser
|
||||||
|
from pathlib import Path
|
||||||
|
import rabbitizer
|
||||||
|
|
||||||
|
|
||||||
|
def decodeInstruction(bytesDiff: bytes, mapFile: mapfile_parser.MapFile) -> str:
|
||||||
|
word = (bytesDiff[0] << 24) | (bytesDiff[1] << 16) | (bytesDiff[2] << 8) | (bytesDiff[3] << 0)
|
||||||
|
instr = rabbitizer.Instruction(word)
|
||||||
|
immOverride = None
|
||||||
|
|
||||||
|
if instr.isJumpWithAddress():
|
||||||
|
# Instruction is a function call (jal)
|
||||||
|
|
||||||
|
# Get the embedded address of the function call
|
||||||
|
symAddress = instr.getInstrIndexAsVram()
|
||||||
|
|
||||||
|
# Search for the address in the mapfile
|
||||||
|
symInfo = mapFile.findSymbolByVramOrVrom(symAddress)
|
||||||
|
if symInfo is not None:
|
||||||
|
# Use the symbol from the mapfile instead of a raw value
|
||||||
|
immOverride = symInfo.symbol.name
|
||||||
|
|
||||||
|
return instr.disassemble(immOverride=immOverride, extraLJust=-20)
|
||||||
|
|
||||||
|
def firstDiffMain():
|
||||||
|
parser = argparse.ArgumentParser(description="Find the first difference(s) between the built ROM and the base ROM.")
|
||||||
|
|
||||||
|
parser.add_argument("-c", "--count", type=int, default=5, help="find up to this many instruction difference(s)")
|
||||||
|
# parser.add_argument("-v", "--version", help="Which version should be processed", default="us")
|
||||||
|
parser.add_argument("-a", "--add-colons", action='store_true', help="Add colon between bytes" )
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
buildFolder = Path("build")
|
||||||
|
|
||||||
|
BUILTROM = buildFolder / f"ogrebattle64.z64"
|
||||||
|
BUILTMAP = buildFolder / f"ogrebattle64.map"
|
||||||
|
|
||||||
|
EXPECTEDROM = "expected" / BUILTROM
|
||||||
|
EXPECTEDMAP = "expected" / BUILTMAP
|
||||||
|
|
||||||
|
mapfile_parser.frontends.first_diff.doFirstDiff(BUILTMAP, EXPECTEDMAP, BUILTROM, EXPECTEDROM, args.count, mismatchSize=True, addColons=args.add_colons, bytesConverterCallback=decodeInstruction)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
firstDiffMain()
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit c6e925fc9b610a4b0a76f16773595ccaa67d2ffe
|
Subproject commit e0fb79806748ef400c225b6841403078df5b9986
|
||||||
Loading…
Reference in New Issue