splat64 0.35.2__py3-none-any.whl → 0.36.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- splat/__init__.py +1 -1
- splat/disassembler/spimdisasm_disassembler.py +1 -1
- splat/scripts/create_config.py +5 -0
- splat/segtypes/common/textbin.py +55 -30
- splat/segtypes/linker_entry.py +4 -2
- splat/segtypes/n64/i1.py +9 -9
- splat/util/file_presets.py +127 -88
- splat/util/options.py +26 -0
- splat/util/symbols.py +28 -0
- {splat64-0.35.2.dist-info → splat64-0.36.1.dist-info}/METADATA +4 -4
- {splat64-0.35.2.dist-info → splat64-0.36.1.dist-info}/RECORD +14 -14
- {splat64-0.35.2.dist-info → splat64-0.36.1.dist-info}/WHEEL +0 -0
- {splat64-0.35.2.dist-info → splat64-0.36.1.dist-info}/entry_points.txt +0 -0
- {splat64-0.35.2.dist-info → splat64-0.36.1.dist-info}/licenses/LICENSE +0 -0
splat/__init__.py
CHANGED
|
@@ -7,7 +7,7 @@ from typing import Set
|
|
|
7
7
|
|
|
8
8
|
class SpimdisasmDisassembler(disassembler.Disassembler):
|
|
9
9
|
# This value should be kept in sync with the version listed on requirements.txt and pyproject.toml
|
|
10
|
-
SPIMDISASM_MIN = (1, 36,
|
|
10
|
+
SPIMDISASM_MIN = (1, 36, 1)
|
|
11
11
|
|
|
12
12
|
def configure(self):
|
|
13
13
|
# Configure spimdisasm
|
splat/scripts/create_config.py
CHANGED
|
@@ -286,6 +286,7 @@ options:
|
|
|
286
286
|
|
|
287
287
|
find_file_boundaries: False
|
|
288
288
|
gp_value: 0x{exe.initial_gp:08X}
|
|
289
|
+
# ld_gp_expression: main_SCOMMON_START + 0x7FF0
|
|
289
290
|
|
|
290
291
|
o_as_suffix: True
|
|
291
292
|
use_legacy_include_asm: False
|
|
@@ -309,6 +310,10 @@ options:
|
|
|
309
310
|
data_string_encoding: ASCII
|
|
310
311
|
rodata_string_guesser_level: 2
|
|
311
312
|
data_string_guesser_level: 2
|
|
313
|
+
|
|
314
|
+
# Uncomment this line if you need to use the maspsx reorder workaround hack
|
|
315
|
+
# https://github.com/mkst/maspsx?tab=readme-ov-file#include_asm-reordering-workaround-hack
|
|
316
|
+
# include_asm_macro_style: maspsx_hack
|
|
312
317
|
"""
|
|
313
318
|
|
|
314
319
|
segments = f"""\
|
splat/segtypes/common/textbin.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
|
+
import re
|
|
2
3
|
from typing import Optional, TextIO
|
|
3
4
|
|
|
4
5
|
from ...util import log, options
|
|
@@ -75,45 +76,66 @@ class CommonSegTextbin(CommonSegment):
|
|
|
75
76
|
|
|
76
77
|
f.write(f"{self.get_section_asm_line()}\n\n")
|
|
77
78
|
|
|
79
|
+
sym_name = None
|
|
80
|
+
sym_name_end = None
|
|
81
|
+
sym_size_matches = None
|
|
82
|
+
|
|
78
83
|
# Check if there's a symbol at this address
|
|
79
|
-
sym = None
|
|
80
84
|
vram = self.rom_to_ram(self.rom_start)
|
|
81
85
|
if vram is not None:
|
|
82
86
|
sym = self.get_symbol(vram, in_segment=True)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
if sym is not None:
|
|
88
|
+
sym.defined = True
|
|
89
|
+
sym_name = sym.name
|
|
90
|
+
sym_name_end = sym.given_name_end
|
|
91
|
+
if (
|
|
92
|
+
sym.given_size is None
|
|
93
|
+
or sym.given_size == self.rom_end - self.rom_start
|
|
94
|
+
):
|
|
95
|
+
sym_size_matches = self.rom_end - self.rom_start
|
|
96
|
+
|
|
97
|
+
if sym_name is None:
|
|
98
|
+
# Normalize stuff like slashes and such.
|
|
99
|
+
n = regex_sym_name_normalizer.sub("_", self.name)
|
|
100
|
+
if self.is_text():
|
|
101
|
+
suffix = "textbin"
|
|
102
|
+
elif self.is_data():
|
|
103
|
+
suffix = "databin"
|
|
104
|
+
elif self.is_rodata():
|
|
105
|
+
suffix = "rodatabin"
|
|
106
|
+
else:
|
|
107
|
+
suffix = "incbin"
|
|
108
|
+
sym_name = f"__{n}_{suffix}"
|
|
109
|
+
|
|
110
|
+
if options.opts.asm_nonmatching_label_macro != "":
|
|
111
|
+
siz = f", 0x{sym_size_matches:X}" if sym_size_matches is not None else ""
|
|
112
|
+
f.write(f"{options.opts.asm_nonmatching_label_macro} {sym_name}{siz}\n\n")
|
|
113
|
+
|
|
114
|
+
f.write(f"{asm_label} {sym_name}\n")
|
|
115
|
+
if asm_label == ".globl":
|
|
116
|
+
if self.is_text():
|
|
117
|
+
f.write(f".ent {sym_name}\n")
|
|
118
|
+
f.write(f"{sym_name}:\n")
|
|
91
119
|
|
|
92
120
|
f.write(f'.incbin "{binpath.as_posix()}"\n')
|
|
93
121
|
|
|
94
|
-
if
|
|
95
|
-
|
|
96
|
-
f.write(f".size {sym.name}, . - {sym.name}\n")
|
|
122
|
+
if options.opts.asm_emit_size_directive:
|
|
123
|
+
f.write(f".size {sym_name}, . - {sym_name}\n")
|
|
97
124
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
125
|
+
if self.is_text() and options.opts.asm_end_label != "":
|
|
126
|
+
f.write(f"{options.opts.asm_end_label} {sym_name}\n")
|
|
127
|
+
elif options.opts.asm_data_end_label != "":
|
|
128
|
+
f.write(f"{options.opts.asm_data_end_label} {sym_name}\n")
|
|
102
129
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
f.write(f"{options.opts.asm_end_label} {sym.given_name_end}\n")
|
|
113
|
-
elif self.is_data() and options.opts.asm_data_end_label != "":
|
|
114
|
-
f.write(
|
|
115
|
-
f"{options.opts.asm_data_end_label} {sym.given_name_end}\n"
|
|
116
|
-
)
|
|
130
|
+
if sym_name_end is not None and sym_size_matches is not None:
|
|
131
|
+
f.write(f"{asm_label} {sym_name_end}\n")
|
|
132
|
+
if asm_label == ".globl":
|
|
133
|
+
f.write(f"{sym_name_end}:\n")
|
|
134
|
+
|
|
135
|
+
if self.is_text() and options.opts.asm_end_label != "":
|
|
136
|
+
f.write(f"{options.opts.asm_end_label} {sym_name_end}\n")
|
|
137
|
+
elif options.opts.asm_data_end_label != "":
|
|
138
|
+
f.write(f"{options.opts.asm_data_end_label} {sym_name_end}\n")
|
|
117
139
|
|
|
118
140
|
def split(self, rom_bytes):
|
|
119
141
|
if self.rom_end is None:
|
|
@@ -159,3 +181,6 @@ class CommonSegTextbin(CommonSegment):
|
|
|
159
181
|
return (
|
|
160
182
|
self.extract and self.should_scan()
|
|
161
183
|
) # only split if the segment was scanned first
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
regex_sym_name_normalizer = re.compile(r"[^0-9a-zA-Z_]")
|
splat/segtypes/linker_entry.py
CHANGED
|
@@ -204,8 +204,10 @@ class LinkerWriter:
|
|
|
204
204
|
if not self.is_partial:
|
|
205
205
|
self._writeln(f"__romPos = {options.opts.ld_rom_start};")
|
|
206
206
|
|
|
207
|
-
if options.opts.
|
|
208
|
-
self._writeln("_gp =
|
|
207
|
+
if options.opts.ld_gp_expression is not None:
|
|
208
|
+
self._writeln(f"_gp = {options.opts.ld_gp_expression};")
|
|
209
|
+
elif options.opts.gp is not None:
|
|
210
|
+
self._writeln(f"_gp = 0x{options.opts.gp:X};")
|
|
209
211
|
|
|
210
212
|
# Write a series of statements which compute a symbol that represents the highest address among a list of segments' end addresses
|
|
211
213
|
def write_max_vram_end_sym(self, symbol: str, overlays: List[Segment]):
|
splat/segtypes/n64/i1.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import n64img.image
|
|
2
|
-
|
|
3
|
-
from .img import N64SegImg
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class N64SegI1(N64SegImg):
|
|
7
|
-
def __init__(self, *args, **kwargs):
|
|
8
|
-
kwargs["img_cls"] = n64img.image.I1
|
|
9
|
-
super().__init__(*args, **kwargs)
|
|
1
|
+
import n64img.image
|
|
2
|
+
|
|
3
|
+
from .img import N64SegImg
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class N64SegI1(N64SegImg):
|
|
7
|
+
def __init__(self, *args, **kwargs):
|
|
8
|
+
kwargs["img_cls"] = n64img.image.I1
|
|
9
|
+
super().__init__(*args, **kwargs)
|
splat/util/file_presets.py
CHANGED
|
@@ -24,6 +24,12 @@ def write_all_files():
|
|
|
24
24
|
def _write(filepath: str, contents: str):
|
|
25
25
|
p = Path(os.path.normpath(options.opts.base_path / filepath))
|
|
26
26
|
p.parent.mkdir(parents=True, exist_ok=True)
|
|
27
|
+
|
|
28
|
+
if p.exists():
|
|
29
|
+
with p.open("r", encoding="UTF-8") as f:
|
|
30
|
+
existing_contents = f.read()
|
|
31
|
+
if existing_contents == contents:
|
|
32
|
+
return
|
|
27
33
|
with p.open("w", encoding="UTF-8", newline="\n") as f:
|
|
28
34
|
f.write(contents)
|
|
29
35
|
|
|
@@ -33,13 +39,23 @@ def write_include_asm_h():
|
|
|
33
39
|
# These compilers do not use the `INCLUDE_ASM` macro.
|
|
34
40
|
return
|
|
35
41
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
#define
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
#
|
|
42
|
+
if options.opts.include_asm_macro_style == "maspsx_hack":
|
|
43
|
+
include_asm_macro = """\
|
|
44
|
+
#define INCLUDE_ASM(FOLDER, NAME) \\
|
|
45
|
+
void __maspsx_include_asm_hack_##NAME() { \\
|
|
46
|
+
__asm__( \\
|
|
47
|
+
".text # maspsx-keep \\n" \\
|
|
48
|
+
" .align 2 # maspsx-keep\\n" \\
|
|
49
|
+
" .set noat # maspsx-keep\\n" \\
|
|
50
|
+
" .set noreorder # maspsx-keep\\n" \\
|
|
51
|
+
" .include \\"" FOLDER "/" #NAME ".s\\" # maspsx-keep\\n" \\
|
|
52
|
+
" .set reorder # maspsx-keep\\n" \\
|
|
53
|
+
" .set at # maspsx-keep\\n" \\
|
|
54
|
+
); \\
|
|
55
|
+
}
|
|
56
|
+
"""
|
|
57
|
+
else: # default
|
|
58
|
+
include_asm_macro = """\
|
|
43
59
|
#define INCLUDE_ASM(FOLDER, NAME) \\
|
|
44
60
|
__asm__( \\
|
|
45
61
|
".section .text\\n" \\
|
|
@@ -49,14 +65,28 @@ def write_include_asm_h():
|
|
|
49
65
|
" .set reorder\\n" \\
|
|
50
66
|
" .set at\\n" \\
|
|
51
67
|
)
|
|
52
|
-
|
|
53
|
-
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
include_rodata_macro = """\
|
|
54
71
|
#define INCLUDE_RODATA(FOLDER, NAME) \\
|
|
55
72
|
__asm__( \\
|
|
56
73
|
".section .rodata\\n" \\
|
|
57
74
|
" .include \\"" FOLDER "/" #NAME ".s\\"\\n" \\
|
|
58
75
|
".section .text" \\
|
|
59
76
|
)
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
file_data = f"""\
|
|
80
|
+
#ifndef INCLUDE_ASM_H
|
|
81
|
+
#define INCLUDE_ASM_H
|
|
82
|
+
|
|
83
|
+
#if !defined(M2CTX) && !defined(PERMUTER)
|
|
84
|
+
|
|
85
|
+
#ifndef INCLUDE_ASM
|
|
86
|
+
{include_asm_macro}\
|
|
87
|
+
#endif
|
|
88
|
+
#ifndef INCLUDE_RODATA
|
|
89
|
+
{include_rodata_macro}\
|
|
60
90
|
#endif
|
|
61
91
|
__asm__(".include \\"include/labels.inc\\"\\n");
|
|
62
92
|
|
|
@@ -315,92 +345,99 @@ def write_gte_macros():
|
|
|
315
345
|
# Taken directly from https://github.com/Decompollaborate/rabbitizer/blob/develop/docs/r3000gte/gte_macros.s
|
|
316
346
|
# Please try to upstream any fix/update done here.
|
|
317
347
|
gte_macros = """
|
|
318
|
-
|
|
319
|
-
|
|
348
|
+
.ifndef .L_GTE_MACRO_INC
|
|
349
|
+
.L_GTE_MACRO_INC:
|
|
350
|
+
|
|
351
|
+
## GTE instruction macros
|
|
352
|
+
## These are meant for use with GAS and replace DMPSX
|
|
353
|
+
|
|
354
|
+
.macro cop2op pseudo, op, sf = 1, mx = 0, v = 0, cv = 0, lm = 0
|
|
355
|
+
cop2 \\pseudo << 20 | \\sf << 19 | \\mx << 17 | \\v << 15 | \\cv << 13 | \\lm << 10 | \\op
|
|
356
|
+
.endm
|
|
320
357
|
|
|
321
358
|
/* RTPS 15 0x4A180001 Perspective transform */
|
|
322
359
|
.macro rtps
|
|
323
|
-
|
|
360
|
+
cop2op 0x01, 0x01
|
|
324
361
|
.endm
|
|
325
362
|
|
|
326
363
|
/* RTPT 23 0x4A280030 Perspective transform on 3 points */
|
|
327
364
|
.macro rtpt
|
|
328
|
-
|
|
365
|
+
cop2op 0x02, 0x30
|
|
329
366
|
.endm
|
|
330
367
|
|
|
331
368
|
/* DPCL 8 0x4A680029 Depth Cue Color light */
|
|
332
369
|
.macro dpcl
|
|
333
|
-
|
|
370
|
+
cop2op 0x06, 0x29
|
|
334
371
|
.endm
|
|
335
372
|
|
|
336
373
|
/* DPCS 8 0x4A780010 Depth Cueing */
|
|
337
374
|
.macro dpcs
|
|
338
|
-
|
|
375
|
+
cop2op 0x07, 0x10
|
|
339
376
|
.endm
|
|
340
377
|
|
|
341
|
-
/* DPCT 17
|
|
378
|
+
/* DPCT 17 0x4A88002A Depth cue color RGB0,RGB1,RGB2 */
|
|
342
379
|
.macro dpct
|
|
343
|
-
|
|
380
|
+
cop2op 0x08, 0x2A
|
|
344
381
|
.endm
|
|
345
382
|
|
|
346
383
|
/* INTPL 8 0x4A980011 Interpolation of vector and far color */
|
|
347
384
|
.macro intpl
|
|
348
|
-
|
|
385
|
+
cop2op 0x09, 0x11
|
|
349
386
|
.endm
|
|
350
387
|
|
|
351
388
|
/* NCS 14 0x4AC8041E Normal color v0 */
|
|
352
389
|
.macro ncs
|
|
353
|
-
|
|
390
|
+
cop2op 0x0C, 0x1E, lm = 1
|
|
354
391
|
.endm
|
|
355
392
|
|
|
356
393
|
/* NCT 30 0x4AD80420 Normal color v0, v1, v2 */
|
|
357
394
|
.macro nct
|
|
358
|
-
|
|
395
|
+
cop2op 0x0D, 0x20, lm = 1
|
|
359
396
|
.endm
|
|
360
397
|
|
|
361
398
|
/* NCDS 19 0x4AE80413 Normal color depth cuev0 */
|
|
362
399
|
.macro ncds
|
|
363
|
-
|
|
400
|
+
cop2op 0x0E, 0x13, lm = 1
|
|
364
401
|
.endm
|
|
365
402
|
|
|
366
403
|
/* NCDT 44 0x4AF80416 Normal color depth cue v0, v1, v2 */
|
|
367
404
|
.macro ncdt
|
|
368
|
-
|
|
405
|
+
cop2op 0x0F, 0x16, lm = 1
|
|
369
406
|
.endm
|
|
370
407
|
|
|
371
408
|
/* NCCS 17 0x4B08041B Normal color col. v0 */
|
|
372
409
|
.macro nccs
|
|
373
|
-
|
|
410
|
+
cop2op 0x10, 0x1B, lm = 1
|
|
374
411
|
.endm
|
|
375
412
|
|
|
376
413
|
/* NCCT 39 0x4B18043F Normal color col.v0, v1, v2 */
|
|
377
414
|
.macro ncct
|
|
378
|
-
|
|
415
|
+
cop2op 0x11, 0x3F, lm = 1
|
|
379
416
|
.endm
|
|
380
417
|
|
|
381
418
|
/* CDP 13 0x4B280414 Color Depth Queue */
|
|
382
419
|
.macro cdp
|
|
383
|
-
|
|
420
|
+
cop2op 0x12, 0x14, lm = 1
|
|
384
421
|
.endm
|
|
385
422
|
|
|
386
423
|
/* CC 11 0x4B38041C Color Col. */
|
|
387
424
|
.macro cc
|
|
388
|
-
|
|
425
|
+
cop2op 0x13, 0x1C, lm = 1
|
|
389
426
|
.endm
|
|
390
427
|
|
|
391
428
|
/* NCLIP 8 0x4B400006 Normal clipping */
|
|
392
429
|
.macro nclip
|
|
393
|
-
|
|
430
|
+
cop2op 0x14, 0x06, sf = 0
|
|
394
431
|
.endm
|
|
395
432
|
|
|
396
433
|
/* AVSZ3 5 0x4B58002D Average of three Z values */
|
|
397
434
|
.macro avsz3
|
|
398
|
-
|
|
435
|
+
cop2op 0x15, 0x2D
|
|
399
436
|
.endm
|
|
400
437
|
|
|
401
438
|
/* AVSZ4 6 0x4B68002E Average of four Z values */
|
|
402
439
|
.macro avsz4
|
|
403
|
-
|
|
440
|
+
cop2op 0x16, 0x2E
|
|
404
441
|
.endm
|
|
405
442
|
|
|
406
443
|
|
|
@@ -411,29 +448,29 @@ def write_gte_macros():
|
|
|
411
448
|
# cv : arg is 2 bit wide
|
|
412
449
|
# lm : arg is 1 bit wide
|
|
413
450
|
|
|
414
|
-
/*
|
|
451
|
+
/* mvmva 8 0x4A4nnn12 Multiply vector by matrix and vector addition. */
|
|
415
452
|
.macro mvmva sf, mx, v, cv, lm
|
|
416
|
-
|
|
453
|
+
cop2op 0x04, 0x12, sf = \\sf, mx = \\mx, v = \\v, cv = \\cv, lm = \\lm
|
|
417
454
|
.endm
|
|
418
455
|
|
|
419
|
-
/* SQR 5
|
|
456
|
+
/* SQR 5 0x4AAn0428 Square of vector */
|
|
420
457
|
.macro sqr sf
|
|
421
|
-
|
|
458
|
+
cop2op 0x0A, 0x28, sf = \\sf, lm = 1
|
|
422
459
|
.endm
|
|
423
460
|
|
|
424
|
-
/* OP 6
|
|
461
|
+
/* OP 6 0x4B7n000C Outer Product */
|
|
425
462
|
.macro op sf
|
|
426
|
-
|
|
463
|
+
cop2op 0x17, 0x0C, sf = \\sf
|
|
427
464
|
.endm
|
|
428
465
|
|
|
429
|
-
/* GPF 6
|
|
466
|
+
/* GPF 6 0x4B9n003D General purpose interpolation */
|
|
430
467
|
.macro gpf sf
|
|
431
|
-
|
|
468
|
+
cop2op 0x19, 0x3D, sf = \\sf
|
|
432
469
|
.endm
|
|
433
470
|
|
|
434
|
-
/* GPL 5
|
|
471
|
+
/* GPL 5 0x4BAn003E general purpose interpolation */
|
|
435
472
|
.macro gpl sf
|
|
436
|
-
|
|
473
|
+
cop2op 0x1A, 0x3E, sf = \\sf
|
|
437
474
|
.endm
|
|
438
475
|
|
|
439
476
|
|
|
@@ -442,284 +479,286 @@ def write_gte_macros():
|
|
|
442
479
|
/* rtv0 - 0x4A486012 v0 * rotmatrix */
|
|
443
480
|
.macro rtv0
|
|
444
481
|
# .word 0x4A486012
|
|
445
|
-
|
|
482
|
+
mvmva 1, 0, 0, 3, 0
|
|
446
483
|
.endm
|
|
447
484
|
|
|
448
485
|
/* rtv1 - 0x4A48E012 v1 * rotmatrix */
|
|
449
486
|
.macro rtv1
|
|
450
487
|
# .word 0x4A48E012
|
|
451
|
-
|
|
488
|
+
mvmva 1, 0, 1, 3, 0
|
|
452
489
|
.endm
|
|
453
490
|
|
|
454
491
|
/* rtv2 - 0x4A496012 v2 * rotmatrix */
|
|
455
492
|
.macro rtv2
|
|
456
493
|
# .word 0x4A496012
|
|
457
|
-
|
|
494
|
+
mvmva 1, 0, 2, 3, 0
|
|
458
495
|
.endm
|
|
459
496
|
|
|
460
497
|
/* rtir12 - 0x4A49E012 ir * rotmatrix */
|
|
461
498
|
.macro rtir12
|
|
462
499
|
# .word 0x4A49E012
|
|
463
|
-
|
|
500
|
+
mvmva 1, 0, 3, 3, 0
|
|
464
501
|
.endm
|
|
465
502
|
|
|
466
503
|
/* rtir0 - 0x4A41E012 ir * rotmatrix */
|
|
467
504
|
.macro rtir0
|
|
468
505
|
# .word 0x4A41E012
|
|
469
|
-
|
|
506
|
+
mvmva 0, 0, 3, 3, 0
|
|
470
507
|
.endm
|
|
471
508
|
|
|
472
509
|
/* rtv0tr - 0x4A480012 v0 * rotmatrix + tr vector */
|
|
473
510
|
.macro rtv0tr
|
|
474
511
|
# .word 0x4A480012
|
|
475
|
-
|
|
512
|
+
mvmva 1, 0, 0, 0, 0
|
|
476
513
|
.endm
|
|
477
514
|
|
|
478
515
|
/* rtv1tr - 0x4A488012 v1 * rotmatrix + tr vector */
|
|
479
516
|
.macro rtv1tr
|
|
480
517
|
# .word 0x4A488012
|
|
481
|
-
|
|
518
|
+
mvmva 1, 0, 1, 0, 0
|
|
482
519
|
.endm
|
|
483
520
|
|
|
484
521
|
/* rtv2tr - 0x4A490012 v2 * rotmatrix + tr vector */
|
|
485
522
|
.macro rtv2tr
|
|
486
523
|
# .word 0x4A490012
|
|
487
|
-
|
|
524
|
+
mvmva 1, 0, 2, 0, 0
|
|
488
525
|
.endm
|
|
489
526
|
|
|
490
527
|
/* rtirtr - 0x4A498012 ir * rotmatrix + tr vector */
|
|
491
528
|
.macro rtirtr
|
|
492
529
|
# .word 0x4A498012
|
|
493
|
-
|
|
530
|
+
mvmva 1, 0, 3, 0, 0
|
|
494
531
|
.endm
|
|
495
532
|
|
|
496
533
|
/* rtv0bk - 0x4A482012 v0 * rotmatrix + bk vector */
|
|
497
534
|
.macro rtv0bk
|
|
498
535
|
# .word 0x4A482012
|
|
499
|
-
|
|
536
|
+
mvmva 1, 0, 0, 1, 0
|
|
500
537
|
.endm
|
|
501
538
|
|
|
502
539
|
/* rtv1bk - 0x4A48A012 v1 * rotmatrix + bk vector */
|
|
503
540
|
.macro rtv1bk
|
|
504
541
|
# .word 0x4A48A012
|
|
505
|
-
|
|
542
|
+
mvmva 1, 0, 1, 1, 0
|
|
506
543
|
.endm
|
|
507
544
|
|
|
508
545
|
/* rtv2bk - 0x4A492012 v2 * rotmatrix + bk vector */
|
|
509
546
|
.macro rtv2bk
|
|
510
547
|
# .word 0x4A492012
|
|
511
|
-
|
|
548
|
+
mvmva 1, 0, 2, 1, 0
|
|
512
549
|
.endm
|
|
513
550
|
|
|
514
551
|
/* rtirbk - 0x4A49A012 ir * rotmatrix + bk vector */
|
|
515
552
|
.macro rtirbk
|
|
516
553
|
# .word 0x4A49A012
|
|
517
|
-
|
|
554
|
+
mvmva 1, 0, 3, 1, 0
|
|
518
555
|
.endm
|
|
519
556
|
|
|
520
557
|
/* ll - 0x4A4A6412 v0 * light matrix. Lower limit result to 0 */
|
|
521
558
|
.macro ll
|
|
522
559
|
# .word 0x4A4A6412
|
|
523
|
-
|
|
560
|
+
mvmva 1, 1, 0, 3, 1
|
|
524
561
|
.endm
|
|
525
562
|
|
|
526
563
|
/* llv0 - 0x4A4A6012 v0 * light matrix */
|
|
527
564
|
.macro llv0
|
|
528
565
|
# .word 0x4A4A6012
|
|
529
|
-
|
|
566
|
+
mvmva 1, 1, 0, 3, 0
|
|
530
567
|
.endm
|
|
531
568
|
|
|
532
569
|
/* llv1 - 0x4A4AE012 v1 * light matrix */
|
|
533
570
|
.macro llv1
|
|
534
571
|
# .word 0x4A4AE012
|
|
535
|
-
|
|
572
|
+
mvmva 1, 1, 1, 3, 0
|
|
536
573
|
.endm
|
|
537
574
|
|
|
538
575
|
/* llv2 - 0x4A4B6012 v2 * light matrix */
|
|
539
576
|
.macro llv2
|
|
540
577
|
# .word 0x4A4B6012
|
|
541
|
-
|
|
578
|
+
mvmva 1, 1, 2, 3, 0
|
|
542
579
|
.endm
|
|
543
580
|
|
|
544
581
|
/* llvir - 0x4A4BE012 ir * light matrix */
|
|
545
582
|
.macro llvir
|
|
546
583
|
# .word 0x4A4BE012
|
|
547
|
-
|
|
584
|
+
mvmva 1, 1, 3, 3, 0
|
|
548
585
|
.endm
|
|
549
586
|
|
|
550
587
|
/* llv0tr - 0x4A4A0012 v0 * light matrix + tr vector */
|
|
551
588
|
.macro llv0tr
|
|
552
589
|
# .word 0x4A4A0012
|
|
553
|
-
|
|
590
|
+
mvmva 1, 1, 0, 0, 0
|
|
554
591
|
.endm
|
|
555
592
|
|
|
556
593
|
/* llv1tr - 0x4A4A8012 v1 * light matrix + tr vector */
|
|
557
594
|
.macro llv1tr
|
|
558
595
|
# .word 0x4A4A8012
|
|
559
|
-
|
|
596
|
+
mvmva 1, 1, 1, 0, 0
|
|
560
597
|
.endm
|
|
561
598
|
|
|
562
599
|
/* llv2tr - 0x4A4B0012 v2 * light matrix + tr vector */
|
|
563
600
|
.macro llv2tr
|
|
564
601
|
# .word 0x4A4B0012
|
|
565
|
-
|
|
602
|
+
mvmva 1, 1, 2, 0, 0
|
|
566
603
|
.endm
|
|
567
604
|
|
|
568
605
|
/* llirtr - 0x4A4B8012 ir * light matrix + tr vector */
|
|
569
606
|
.macro llirtr
|
|
570
607
|
# .word 0x4A4B8012
|
|
571
|
-
|
|
608
|
+
mvmva 1, 1, 3, 0, 0
|
|
572
609
|
.endm
|
|
573
610
|
|
|
574
611
|
/* llv0bk - 0x4A4A2012 v0 * light matrix + bk vector */
|
|
575
612
|
.macro llv0bk
|
|
576
613
|
# .word 0x4A4A2012
|
|
577
|
-
|
|
614
|
+
mvmva 1, 1, 0, 1, 0
|
|
578
615
|
.endm
|
|
579
616
|
|
|
580
617
|
/* llv1bk - 0x4A4AA012 v1 * light matrix + bk vector */
|
|
581
618
|
.macro llv1bk
|
|
582
619
|
# .word 0x4A4AA012
|
|
583
|
-
|
|
620
|
+
mvmva 1, 1, 1, 1, 0
|
|
584
621
|
.endm
|
|
585
622
|
|
|
586
623
|
/* llv2bk - 0x4A4B2012 v2 * light matrix + bk vector */
|
|
587
624
|
.macro llv2bk
|
|
588
625
|
# .word 0x4A4B2012
|
|
589
|
-
|
|
626
|
+
mvmva 1, 1, 2, 1, 0
|
|
590
627
|
.endm
|
|
591
628
|
|
|
592
629
|
/* llirbk - 0x4A4BA012 ir * light matrix + bk vector */
|
|
593
630
|
.macro llirbk
|
|
594
631
|
# .word 0x4A4BA012
|
|
595
|
-
|
|
632
|
+
mvmva 1, 1, 3, 1, 0
|
|
596
633
|
.endm
|
|
597
634
|
|
|
598
635
|
/* lc - 0x4A4DA412 v0 * color matrix, Lower limit clamped to 0 */
|
|
599
636
|
.macro lc
|
|
600
637
|
# .word 0x4A4DA412
|
|
601
|
-
|
|
638
|
+
mvmva 1, 2, 3, 1, 1
|
|
602
639
|
.endm
|
|
603
640
|
|
|
604
641
|
/* lcv0 - 0x4A4C6012 v0 * color matrix */
|
|
605
642
|
.macro lcv0
|
|
606
643
|
# .word 0x4A4C6012
|
|
607
|
-
|
|
644
|
+
mvmva 1, 2, 0, 3, 0
|
|
608
645
|
.endm
|
|
609
646
|
|
|
610
647
|
/* lcv1 - 0x4A4CE012 v1 * color matrix */
|
|
611
648
|
.macro lcv1
|
|
612
649
|
# .word 0x4A4CE012
|
|
613
|
-
|
|
650
|
+
mvmva 1, 2, 1, 3, 0
|
|
614
651
|
.endm
|
|
615
652
|
|
|
616
653
|
/* lcv2 - 0x4A4D6012 v2 * color matrix */
|
|
617
654
|
.macro lcv2
|
|
618
655
|
# .word 0x4A4D6012
|
|
619
|
-
|
|
656
|
+
mvmva 1, 2, 2, 3, 0
|
|
620
657
|
.endm
|
|
621
658
|
|
|
622
659
|
/* lcvir - 0x4A4DE012 ir * color matrix */
|
|
623
660
|
.macro lcvir
|
|
624
661
|
# .word 0x4A4DE012
|
|
625
|
-
|
|
662
|
+
mvmva 1, 2, 3, 3, 0
|
|
626
663
|
.endm
|
|
627
664
|
|
|
628
665
|
/* lcv0tr - 0x4A4C0012 v0 * color matrix + tr vector */
|
|
629
666
|
.macro lcv0tr
|
|
630
667
|
# .word 0x4A4C0012
|
|
631
|
-
|
|
668
|
+
mvmva 1, 2, 0, 0, 0
|
|
632
669
|
.endm
|
|
633
670
|
|
|
634
671
|
/* lcv1tr - 0x4A4C8012 v1 * color matrix + tr vector */
|
|
635
672
|
.macro lcv1tr
|
|
636
673
|
# .word 0x4A4C8012
|
|
637
|
-
|
|
674
|
+
mvmva 1, 2, 1, 0, 0
|
|
638
675
|
.endm
|
|
639
676
|
|
|
640
677
|
/* lcv2tr - 0x4A4D0012 v2 * color matrix + tr vector */
|
|
641
678
|
.macro lcv2tr
|
|
642
679
|
# .word 0x4A4D0012
|
|
643
|
-
|
|
680
|
+
mvmva 1, 2, 2, 0, 0
|
|
644
681
|
.endm
|
|
645
682
|
|
|
646
683
|
/* lcirtr - 0x4A4D8012 ir * color matrix + tr vector */
|
|
647
684
|
.macro lcirtr
|
|
648
685
|
# .word 0x4A4D8012
|
|
649
|
-
|
|
686
|
+
mvmva 1, 2, 3, 0, 0
|
|
650
687
|
.endm
|
|
651
688
|
|
|
652
689
|
/* lev0bk - 0x4A4C2012 v0 * color matrix + bk vector */
|
|
653
690
|
.macro lev0bk
|
|
654
691
|
# .word 0x4A4C2012
|
|
655
|
-
|
|
692
|
+
mvmva 1, 2, 0, 1, 0
|
|
656
693
|
.endm
|
|
657
694
|
|
|
658
695
|
/* lev1bk - 0x4A4CA012 v1 * color matrix + bk vector */
|
|
659
696
|
.macro lev1bk
|
|
660
697
|
# .word 0x4A4CA012
|
|
661
|
-
|
|
698
|
+
mvmva 1, 2, 1, 1, 0
|
|
662
699
|
.endm
|
|
663
700
|
|
|
664
701
|
/* lev2bk - 0x4A4D2012 v2 * color matrix + bk vector */
|
|
665
702
|
.macro lev2bk
|
|
666
703
|
# .word 0x4A4D2012
|
|
667
|
-
|
|
704
|
+
mvmva 1, 2, 2, 1, 0
|
|
668
705
|
.endm
|
|
669
706
|
|
|
670
707
|
/* leirbk - 0x4A4DA012 ir * color matrix + bk vector */
|
|
671
708
|
.macro leirbk
|
|
672
709
|
# .word 0x4A4DA012
|
|
673
|
-
|
|
710
|
+
mvmva 1, 2, 3, 1, 0
|
|
674
711
|
.endm
|
|
675
712
|
|
|
676
713
|
/* sqr12 - 0x4AA80428 square of ir 1,19,12 */
|
|
677
714
|
# .macro sqr12
|
|
678
715
|
# # .word 0x4AA80428
|
|
679
|
-
#
|
|
716
|
+
# sqr 1
|
|
680
717
|
# .endm
|
|
681
718
|
|
|
682
|
-
/* sqr0 -
|
|
719
|
+
/* sqr0 - 0x4AA00428 square of ir 1,31, 0 */
|
|
683
720
|
# .macro sqr0
|
|
684
|
-
# # .word
|
|
685
|
-
#
|
|
721
|
+
# # .word 0x4AA00428
|
|
722
|
+
# sqr 0
|
|
686
723
|
# .endm
|
|
687
724
|
|
|
688
725
|
/* op12 - 0x4B78000C outer product 1,19,12 */
|
|
689
726
|
.macro op12
|
|
690
727
|
# .word 0x4B78000C
|
|
691
|
-
|
|
728
|
+
op 1
|
|
692
729
|
.endm
|
|
693
730
|
|
|
694
731
|
/* op0 - 0x4B70000C outer product 1,31, 0 */
|
|
695
732
|
.macro op0
|
|
696
733
|
# .word 0x4B70000C
|
|
697
|
-
|
|
734
|
+
op 0
|
|
698
735
|
.endm
|
|
699
736
|
|
|
700
737
|
/* gpf12 - 0x4B98003D general purpose interpolation 1,19,12 */
|
|
701
738
|
.macro gpf12
|
|
702
739
|
# .word 0x4B98003D
|
|
703
|
-
|
|
740
|
+
gpf 1
|
|
704
741
|
.endm
|
|
705
742
|
|
|
706
743
|
/* gpf0 - 0x4B90003D general purpose interpolation 1,31, 0 */
|
|
707
744
|
.macro gpf0
|
|
708
745
|
# .word 0x4B90003D
|
|
709
|
-
|
|
746
|
+
gpf 0
|
|
710
747
|
.endm
|
|
711
748
|
|
|
712
749
|
/* gpl12 - 0x4BA8003E general purpose interpolation 1,19,12 */
|
|
713
750
|
.macro gpl12
|
|
714
751
|
# .word 0x4BA8003E
|
|
715
|
-
|
|
752
|
+
gpl 1
|
|
716
753
|
.endm
|
|
717
754
|
|
|
718
755
|
/* gpl0 - 0x4BA0003E general purpose interpolation 1,31, 0 */
|
|
719
756
|
.macro gpl0
|
|
720
757
|
# .word 0x4BA0003E
|
|
721
|
-
|
|
758
|
+
gpl 0
|
|
722
759
|
.endm
|
|
760
|
+
|
|
761
|
+
.endif
|
|
723
762
|
"""
|
|
724
763
|
|
|
725
764
|
_write("include/gte_macros.inc", gte_macros)
|
splat/util/options.py
CHANGED
|
@@ -37,7 +37,12 @@ class SplatOpts:
|
|
|
37
37
|
generated_s_preamble: str
|
|
38
38
|
# Determines any extra content to be added in the generated macro.inc file
|
|
39
39
|
generated_macro_inc_content: Optional[str]
|
|
40
|
+
# Determines if files related to assembly macros should be regenerated by splat
|
|
40
41
|
generate_asm_macros_files: bool
|
|
42
|
+
# Changes the definition of the generated `INCLUDE_ASM`.
|
|
43
|
+
# default: The default one.
|
|
44
|
+
# maspsx_hack: Use the maspsx hack workaround definition https://github.com/mkst/maspsx?tab=readme-ov-file#include_asm-reordering-workaround-hack
|
|
45
|
+
include_asm_macro_style: Literal["default", "maspsx_hack"]
|
|
41
46
|
# Determines whether to use .o as the suffix for all binary files?... TODO document
|
|
42
47
|
use_o_as_suffix: bool
|
|
43
48
|
# the value of the $gp register to correctly calculate offset to %gp_rel relocs
|
|
@@ -150,6 +155,8 @@ class SplatOpts:
|
|
|
150
155
|
ld_generate_symbol_per_data_segment: bool
|
|
151
156
|
# Sets the default option for the `bss_contains_common` attribute of all segments.
|
|
152
157
|
ld_bss_contains_common: bool
|
|
158
|
+
# Specify an expression to be used for the `_gp` symbol in the generated linker script instead of a hardcoded value.
|
|
159
|
+
ld_gp_expression: Optional[str]
|
|
153
160
|
|
|
154
161
|
################################################################################
|
|
155
162
|
# C file options
|
|
@@ -400,6 +407,21 @@ def _parse_yaml(
|
|
|
400
407
|
else:
|
|
401
408
|
raise ValueError(f"Invalid endianness: {endianness}")
|
|
402
409
|
|
|
410
|
+
def parse_include_asm_macro_style() -> Literal["default", "maspsx_hack"]:
|
|
411
|
+
include_asm_macro_style = p.parse_opt_within(
|
|
412
|
+
"include_asm_macro_style",
|
|
413
|
+
str,
|
|
414
|
+
["default", "maspsx_hack"],
|
|
415
|
+
"default",
|
|
416
|
+
)
|
|
417
|
+
|
|
418
|
+
if include_asm_macro_style == "default":
|
|
419
|
+
return "default"
|
|
420
|
+
elif include_asm_macro_style == "maspsx_hack":
|
|
421
|
+
return "maspsx_hack"
|
|
422
|
+
else:
|
|
423
|
+
raise ValueError(f"Invalid endianness: {include_asm_macro_style}")
|
|
424
|
+
|
|
403
425
|
default_ld_bss_is_noload = True
|
|
404
426
|
if platform == "psx":
|
|
405
427
|
default_ld_bss_is_noload = False
|
|
@@ -431,6 +453,7 @@ def _parse_yaml(
|
|
|
431
453
|
"generated_macro_inc_content", str
|
|
432
454
|
),
|
|
433
455
|
generate_asm_macros_files=p.parse_opt("generate_asm_macros_files", bool, True),
|
|
456
|
+
include_asm_macro_style=parse_include_asm_macro_style(),
|
|
434
457
|
use_o_as_suffix=p.parse_opt("o_as_suffix", bool, False),
|
|
435
458
|
gp=p.parse_optional_opt("gp_value", int),
|
|
436
459
|
check_consecutive_segment_types=p.parse_opt(
|
|
@@ -507,6 +530,9 @@ def _parse_yaml(
|
|
|
507
530
|
"ld_generate_symbol_per_data_segment", bool, False
|
|
508
531
|
),
|
|
509
532
|
ld_bss_contains_common=p.parse_opt("ld_bss_contains_common", bool, False),
|
|
533
|
+
ld_gp_expression=p.parse_optional_opt_with_default(
|
|
534
|
+
"ld_gp_expression", str, None
|
|
535
|
+
),
|
|
510
536
|
create_c_files=p.parse_opt("create_c_files", bool, True),
|
|
511
537
|
auto_decompile_empty_functions=p.parse_opt(
|
|
512
538
|
"auto_decompile_empty_functions", bool, True
|
splat/util/symbols.py
CHANGED
|
@@ -192,6 +192,28 @@ def handle_sym_addrs(
|
|
|
192
192
|
if attr_name == "function_owner":
|
|
193
193
|
sym.function_owner = attr_val
|
|
194
194
|
continue
|
|
195
|
+
if attr_name == "align":
|
|
196
|
+
align = int(attr_val, 0)
|
|
197
|
+
|
|
198
|
+
if align < 0:
|
|
199
|
+
log.parsing_error_preamble(path, line_num, line)
|
|
200
|
+
log.error(
|
|
201
|
+
f"The given alignment for '{sym.name}' (0x{sym.vram_start:08X}) is negative."
|
|
202
|
+
)
|
|
203
|
+
align_shift = (align & (-align)).bit_length() - 1
|
|
204
|
+
if (1 << align_shift) != align:
|
|
205
|
+
log.parsing_error_preamble(path, line_num, line)
|
|
206
|
+
log.error(
|
|
207
|
+
f"The given alignment '0x{align:X}' for symbol '{sym.name}' (0x{sym.vram_start:08X}) is not a power of two."
|
|
208
|
+
)
|
|
209
|
+
if sym.vram_start % align != 0:
|
|
210
|
+
log.parsing_error_preamble(path, line_num, line)
|
|
211
|
+
log.error(
|
|
212
|
+
f"The symbol '{sym.name}' (0x{sym.vram_start:08X}) is not aligned already to the given alignment '0x{align:X}'."
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
sym.given_align = align
|
|
216
|
+
continue
|
|
195
217
|
except:
|
|
196
218
|
log.parsing_error_preamble(path, line_num, line)
|
|
197
219
|
log.write(
|
|
@@ -520,6 +542,8 @@ def add_symbol_to_spim_segment(
|
|
|
520
542
|
context_sym.nameEnd = sym.given_name_end
|
|
521
543
|
if sym.given_visibility:
|
|
522
544
|
context_sym.visibility = sym.given_visibility
|
|
545
|
+
if sym.given_align:
|
|
546
|
+
context_sym.setAlignment(sym.given_align)
|
|
523
547
|
|
|
524
548
|
return context_sym
|
|
525
549
|
|
|
@@ -568,6 +592,8 @@ def add_symbol_to_spim_section(
|
|
|
568
592
|
context_sym.nameEnd = sym.given_name_end
|
|
569
593
|
if sym.given_visibility:
|
|
570
594
|
context_sym.visibility = sym.given_visibility
|
|
595
|
+
if sym.given_align:
|
|
596
|
+
context_sym.setAlignment(sym.given_align)
|
|
571
597
|
|
|
572
598
|
return context_sym
|
|
573
599
|
|
|
@@ -667,6 +693,8 @@ class Symbol:
|
|
|
667
693
|
given_filename: Optional[str] = None
|
|
668
694
|
given_visibility: Optional[str] = None
|
|
669
695
|
|
|
696
|
+
given_align: Optional[int] = None
|
|
697
|
+
|
|
670
698
|
_generated_default_name: Optional[str] = None
|
|
671
699
|
_last_type: Optional[str] = None
|
|
672
700
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: splat64
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.36.1
|
|
4
4
|
Summary: A binary splitting tool to assist with decompilation and modding projects
|
|
5
5
|
Project-URL: Repository, https://github.com/ethteck/splat
|
|
6
6
|
Project-URL: Issues, https://github.com/ethteck/splat/issues
|
|
@@ -42,7 +42,7 @@ Requires-Dist: mypy; extra == 'dev'
|
|
|
42
42
|
Requires-Dist: n64img>=0.3.3; extra == 'dev'
|
|
43
43
|
Requires-Dist: pygfxd; extra == 'dev'
|
|
44
44
|
Requires-Dist: rabbitizer<2.0.0,>=1.12.0; extra == 'dev'
|
|
45
|
-
Requires-Dist: spimdisasm<2.0.0,>=1.36.
|
|
45
|
+
Requires-Dist: spimdisasm<2.0.0,>=1.36.1; extra == 'dev'
|
|
46
46
|
Requires-Dist: types-colorama; extra == 'dev'
|
|
47
47
|
Requires-Dist: types-pyyaml; extra == 'dev'
|
|
48
48
|
Provides-Extra: mips
|
|
@@ -50,7 +50,7 @@ Requires-Dist: crunch64<1.0.0,>=0.5.1; extra == 'mips'
|
|
|
50
50
|
Requires-Dist: n64img>=0.3.3; extra == 'mips'
|
|
51
51
|
Requires-Dist: pygfxd; extra == 'mips'
|
|
52
52
|
Requires-Dist: rabbitizer<2.0.0,>=1.12.0; extra == 'mips'
|
|
53
|
-
Requires-Dist: spimdisasm<2.0.0,>=1.36.
|
|
53
|
+
Requires-Dist: spimdisasm<2.0.0,>=1.36.1; extra == 'mips'
|
|
54
54
|
Description-Content-Type: text/markdown
|
|
55
55
|
|
|
56
56
|
# splat
|
|
@@ -76,7 +76,7 @@ The brackets corresponds to the optional dependencies to install while installin
|
|
|
76
76
|
If you use a `requirements.txt` file in your repository, then you can add this library with the following line:
|
|
77
77
|
|
|
78
78
|
```txt
|
|
79
|
-
splat64[mips]>=0.
|
|
79
|
+
splat64[mips]>=0.36.1,<1.0.0
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
### Optional dependencies
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
splat/__init__.py,sha256=
|
|
1
|
+
splat/__init__.py,sha256=DNgsNxB7n0GQjvlsa29pMAyW2yISvkOzadiTCjitUhg,291
|
|
2
2
|
splat/__main__.py,sha256=T333dHDgr-2HYYhtARnYMEjdECnYiNIKfcXDD99o22A,732
|
|
3
3
|
splat/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
splat/disassembler/__init__.py,sha256=IubLMnm_F5cZ7WUPBfk1VJ7vdj6i1if5GG6RBvEoBEA,226
|
|
@@ -6,7 +6,7 @@ splat/disassembler/disassembler.py,sha256=2ynehZRz1P6UnaBk6DWRy4c3ynRnnWApMhf0K9
|
|
|
6
6
|
splat/disassembler/disassembler_instance.py,sha256=09GW7QYoNolgE2wnO7ALngw_CxgF-mfyLiXBsyv22jA,916
|
|
7
7
|
splat/disassembler/disassembler_section.py,sha256=J9jtplQVDVeGBmyEOcMpC3Hv3DyecqaNjlYc7zqEqDI,7459
|
|
8
8
|
splat/disassembler/null_disassembler.py,sha256=jYuDMtfPiBifwz0H-ZHLMWtpGa19X_iLgy4K-dQhPYY,328
|
|
9
|
-
splat/disassembler/spimdisasm_disassembler.py,sha256=
|
|
9
|
+
splat/disassembler/spimdisasm_disassembler.py,sha256=BPeWrTIla14DtkDl3apHxoMkd26mhkJPJndwSX-MpF0,5920
|
|
10
10
|
splat/platforms/__init__.py,sha256=qjqKi63k5N3DUdILNfuk6qpJJkVeAWpjAs36L97vvP4,100
|
|
11
11
|
splat/platforms/n64.py,sha256=kgWr6nesGC0X-qVydmu8tSq48NbqVf9mF6EyqvUuoUM,421
|
|
12
12
|
splat/platforms/ps2.py,sha256=QI_8Ve43LZeNqpuk8_CFxIqsNJpMTacRHXdZVh3iY6c,336
|
|
@@ -14,10 +14,10 @@ splat/platforms/psp.py,sha256=rCr_uf1SuHNaMUXjIC0GyoA_463OQZv0se2KMarWry0,125
|
|
|
14
14
|
splat/platforms/psx.py,sha256=YxQERdOBr4p3ab9Wk80FNhVYi-uvmh7p_jeykSFp23M,40
|
|
15
15
|
splat/scripts/__init__.py,sha256=OY0nHg6a7JB437Sb96qLbZ_7ByVsal1gStj35wJAI_Y,101
|
|
16
16
|
splat/scripts/capy.py,sha256=svbOfLO34-QN3xLiBy9vk2RGs_To8TWMWEKBw6yx2xQ,3674
|
|
17
|
-
splat/scripts/create_config.py,sha256=
|
|
17
|
+
splat/scripts/create_config.py,sha256=ZQrqdewjR2poVhlvoa0CVZMfr9vnupYGouaAn2MLph4,11783
|
|
18
18
|
splat/scripts/split.py,sha256=081pZYN34iriEhMmDBDxxLrDkSKkAksHJydzQ0VAEGk,21933
|
|
19
19
|
splat/segtypes/__init__.py,sha256=-upUw_4JGQtvyp6IfTMzOq_CK3xvVaT_0K0_EipHyOo,208
|
|
20
|
-
splat/segtypes/linker_entry.py,sha256=
|
|
20
|
+
splat/segtypes/linker_entry.py,sha256=oTpt9Iw9ybrmwrkacyH5RYzj01wGTT7vjeE3xE1Og38,24908
|
|
21
21
|
splat/segtypes/segment.py,sha256=-wc5xpWMN8AO8S3rrtibJgw0MMk2Dm1lZSI8dQj-H20,30625
|
|
22
22
|
splat/segtypes/common/__init__.py,sha256=mnq0acScilSCCo6q2PvkDk0Or3V8qitA7I8QMVw8haI,631
|
|
23
23
|
splat/segtypes/common/asm.py,sha256=k3p4vgbQJP40iyTgQkIci1j3CpKkWksqoWBx2Pb2oh8,703
|
|
@@ -44,7 +44,7 @@ splat/segtypes/common/rodatabin.py,sha256=uqp60QuwHwvlMwHq0nZrU3y3yYcHbv2twT0PID
|
|
|
44
44
|
splat/segtypes/common/sbss.py,sha256=blIEuVYie4qNEOYMmlSdltn5f4MvgJu3AV8vqVD8Nh4,131
|
|
45
45
|
splat/segtypes/common/sdata.py,sha256=dnLzNSNtSyclLZiNUmFTv0e0BWN8glxB1km1MSRq6xY,136
|
|
46
46
|
splat/segtypes/common/segment.py,sha256=vVFyFjs-gS5qIWO8Pd0pMJYxboP-iBRKvxcDV8YxdYM,94
|
|
47
|
-
splat/segtypes/common/textbin.py,sha256=
|
|
47
|
+
splat/segtypes/common/textbin.py,sha256=PXEb1JQB2NEqVDLg5KW2vI0NLSqrROJvCOifxB0NUms,5994
|
|
48
48
|
splat/segtypes/n64/__init__.py,sha256=tf2yWlijeKmOp1OhEEL-aW88mU-mWQRC2lSjQ5Ww1eI,569
|
|
49
49
|
splat/segtypes/n64/ci.py,sha256=An7wIHcoZ89KiGCKpCRbM7IrmDNYBidXT-6kjKn2vH0,2400
|
|
50
50
|
splat/segtypes/n64/ci4.py,sha256=ZP8e12CpV8U7r8oLnb9uHc-MkmBbxjXBbJxROFvOjiM,184
|
|
@@ -52,7 +52,7 @@ splat/segtypes/n64/ci8.py,sha256=tS4USmp0LuJnP-UlgaOYoxvYxBKgE67wYCz-KeRLlFk,184
|
|
|
52
52
|
splat/segtypes/n64/decompressor.py,sha256=YuKo-PS_S2-Ow1Zw8QTO70NWlSYTY79JZN0kUQB7T0U,1779
|
|
53
53
|
splat/segtypes/n64/gfx.py,sha256=f22_P8aXjQ0PiWf3iLztfERfmvRfDBcA00CBIwKutvw,8395
|
|
54
54
|
splat/segtypes/n64/header.py,sha256=7Ubmvs49FTK1h4GX58XHOa922bbmjpOJCY3QXvd9078,2018
|
|
55
|
-
splat/segtypes/n64/i1.py,sha256=
|
|
55
|
+
splat/segtypes/n64/i1.py,sha256=Mr7YRdKpvuTGu7P5QZPo6PF1XOcVy4W6_zthcRkLKps,204
|
|
56
56
|
splat/segtypes/n64/i4.py,sha256=wPYCGNa4dQHKf8lbDijSD80_yOt9kQIgOQO6ZOB_pGA,204
|
|
57
57
|
splat/segtypes/n64/i8.py,sha256=5zqYmpmuXprEzwidVQTknSKqMuu0C1Izk4t5ILoTPf4,204
|
|
58
58
|
splat/segtypes/n64/ia16.py,sha256=y1uLVuh72HTmyAEK90R67vftp-X4LDgRxgJyU8EAnH0,208
|
|
@@ -80,14 +80,14 @@ splat/util/cache_handler.py,sha256=N0SggmvYwh0k-0fngHXoHG1CosC2rCsnlCTDsG8z5aE,1
|
|
|
80
80
|
splat/util/color.py,sha256=FSmy0dAQJ9FzRBc99Yt4kBEyB62MC_YiVkqoWgPMsRU,371
|
|
81
81
|
splat/util/compiler.py,sha256=uXShMm49380ENecSFlsi75LWI45yakWkExZX8NT5pOU,1778
|
|
82
82
|
splat/util/conf.py,sha256=aM6O2QikosjL95pCxI2FcCxrwDsLP8T8sRf2Uev_Pac,3236
|
|
83
|
-
splat/util/file_presets.py,sha256=
|
|
83
|
+
splat/util/file_presets.py,sha256=ufSZdeYi3uXos363FmzLfzNMNiTgJq_yMTZAcgRdjw8,18540
|
|
84
84
|
splat/util/log.py,sha256=aJA1rg8IirJu1wGzjNuATHvepYvD3k5CtEyMasyJWxI,1193
|
|
85
|
-
splat/util/options.py,sha256=
|
|
85
|
+
splat/util/options.py,sha256=bXFruGE-tcqsdM0nYNqf_IQIiqxFCxn7NWEo_igOZIc,31252
|
|
86
86
|
splat/util/palettes.py,sha256=d3KoZnwt-zunI9eNwb3txysXg4DY3xnF0O5aQRxM4so,2920
|
|
87
87
|
splat/util/progress_bar.py,sha256=41VehpIFK1cphENaXV_Aq6_3mFx25eQ8V7Z51SKFPeM,166
|
|
88
88
|
splat/util/relocs.py,sha256=rVkPGUXzGZUyY_z7oaCTUxaZH1-lPxxiZwSJvLA0JB0,4156
|
|
89
89
|
splat/util/statistics.py,sha256=8C88vLW8q4Xd4i1Crz8X24NLoraLyKd0lw3ebbeonSo,1906
|
|
90
|
-
splat/util/symbols.py,sha256=
|
|
90
|
+
splat/util/symbols.py,sha256=VNTTTLKQFMx6y1XfmK95cwUzKuAtFPTh-MjxfXbV-aw,31270
|
|
91
91
|
splat/util/utils.py,sha256=EtuU2f7S3vI8kH9C9KaIpjANsUCUkoFz4VBNLWK9lQY,187
|
|
92
92
|
splat/util/vram_classes.py,sha256=UH4rkugEwoec_-alJ4smNOcnU51G-V5OG7Pfsj47eaM,3491
|
|
93
93
|
splat/util/n64/__init__.py,sha256=hsBkPh6NUz-bW7HVspcNZ0mCxBhdfcPC07_7gbga95o,84
|
|
@@ -95,8 +95,8 @@ splat/util/n64/find_code_length.py,sha256=uUoPoUORAjsAvH8oGqwnGvw6j8I_NnSrZtA-x9
|
|
|
95
95
|
splat/util/n64/rominfo.py,sha256=s13r4pDPH9Mc43ZGpomPnLZPWchhbv0kIjDoM0B3Ong,16963
|
|
96
96
|
splat/util/psx/__init__.py,sha256=kCCaR-KB1mNlIcXB4OuuSQ2zVLbWg_SnIZIUeyjeBBI,39
|
|
97
97
|
splat/util/psx/psxexeinfo.py,sha256=MrxY28nes0uzpFmCz0o9JFbF8s1eQRQNOpC_82wsMVI,5725
|
|
98
|
-
splat64-0.
|
|
99
|
-
splat64-0.
|
|
100
|
-
splat64-0.
|
|
101
|
-
splat64-0.
|
|
102
|
-
splat64-0.
|
|
98
|
+
splat64-0.36.1.dist-info/METADATA,sha256=KinjZck6hH8X_-gX2ZlaaFPquW5GdObwaPS2ltPMNdc,3830
|
|
99
|
+
splat64-0.36.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
100
|
+
splat64-0.36.1.dist-info/entry_points.txt,sha256=O7Xy-qNOHcI87-OQrWJ-OhRDws74SuwVb_4rtnp0eLo,52
|
|
101
|
+
splat64-0.36.1.dist-info/licenses/LICENSE,sha256=97VMVzjG8yQvsf8NG2M9IFSbh7R8cifJnc6QK1cZqj8,1070
|
|
102
|
+
splat64-0.36.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|