mirror of
https://github.com/a2-4am/passport.py.git
synced 2024-12-28 02:32:02 +00:00
add SunburstPatcher
This commit is contained in:
parent
046902f1e3
commit
541ba512da
@ -6,12 +6,11 @@
|
|||||||
from passport import eddimage, wozardry, a2rimage
|
from passport import eddimage, wozardry, a2rimage
|
||||||
from passport import DefaultLogger, DebugLogger
|
from passport import DefaultLogger, DebugLogger
|
||||||
from passport import Crack, Verify, Convert
|
from passport import Crack, Verify, Convert
|
||||||
from passport.strings import STRINGS
|
from passport.strings import __date__, STRINGS
|
||||||
import argparse
|
import argparse
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
__version__ = "0.2" # https://semver.org/
|
__version__ = "0.2" # https://semver.org/
|
||||||
__date__ = "2019-01-29"
|
|
||||||
__progname__ = "passport"
|
__progname__ = "passport"
|
||||||
|
|
||||||
class BaseCommand:
|
class BaseCommand:
|
||||||
|
@ -586,7 +586,7 @@ class BasePassportProcessor: # base class
|
|||||||
self.patches_found = []
|
self.patches_found = []
|
||||||
self.patch_count = 0 # number of patches found across all tracks
|
self.patch_count = 0 # number of patches found across all tracks
|
||||||
self.patcher_classes = [
|
self.patcher_classes = [
|
||||||
#SunburstPatcher,
|
sunburst.SunburstPatcher,
|
||||||
#JMPBCF0Patcher,
|
#JMPBCF0Patcher,
|
||||||
#JMPBEB1Patcher,
|
#JMPBEB1Patcher,
|
||||||
#JMPBECAPatcher,
|
#JMPBECAPatcher,
|
||||||
|
@ -14,6 +14,7 @@ __all__ = [
|
|||||||
"mecc4",
|
"mecc4",
|
||||||
"microfun",
|
"microfun",
|
||||||
"rwts",
|
"rwts",
|
||||||
|
"sunburst",
|
||||||
"universale7",
|
"universale7",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -41,4 +42,3 @@ class Patcher: # base class
|
|||||||
def run(self, logical_sectors, track_num):
|
def run(self, logical_sectors, track_num):
|
||||||
"""returns list of Patch objects representing patches that could be applied to logical_sectors"""
|
"""returns list of Patch objects representing patches that could be applied to logical_sectors"""
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -22,4 +22,3 @@ tested on
|
|||||||
b'\xC9\xD5'
|
b'\xC9\xD5'
|
||||||
b'\xF0\x12'): return []
|
b'\xF0\x12'): return []
|
||||||
return [Patch(0, 3, 0x58, b'\xF0\x06')]
|
return [Patch(0, 3, 0x58, b'\xF0\x06')]
|
||||||
return patches
|
|
||||||
|
53
passport/patchers/sunburst.py
Normal file
53
passport/patchers/sunburst.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
from passport.patchers import Patch, Patcher
|
||||||
|
from passport.util import *
|
||||||
|
|
||||||
|
class SunburstPatcher(Patcher):
|
||||||
|
"""RWTS with track-based address and data prologue modifications
|
||||||
|
|
||||||
|
tested on
|
||||||
|
- Challenge Math
|
||||||
|
- Safari Search
|
||||||
|
- Ten Clues
|
||||||
|
- The Factory
|
||||||
|
- Trading Post
|
||||||
|
- Word Quest
|
||||||
|
"""
|
||||||
|
def should_run(self, track_num):
|
||||||
|
return self.g.is_rwts and (track_num == 0)
|
||||||
|
|
||||||
|
def run(self, logical_sectors, track_num):
|
||||||
|
if not find.at(0x40, logical_sectors[3], b'\xD0'): return []
|
||||||
|
if not find.at(0x9C, logical_sectors[3], b'\xF0'): return []
|
||||||
|
if not find.at(0x69, logical_sectors[4], bytes.fromhex(
|
||||||
|
"48"
|
||||||
|
"A5 2A"
|
||||||
|
"4A"
|
||||||
|
"A8"
|
||||||
|
"B9 29 BA"
|
||||||
|
"8D 6A B9"
|
||||||
|
"8D 84 BC"
|
||||||
|
"B9 34 BA"
|
||||||
|
"8D FC B8"
|
||||||
|
"8D 5D B8"
|
||||||
|
"C0 11"
|
||||||
|
"D0 03"
|
||||||
|
"A9 02"
|
||||||
|
"AC"
|
||||||
|
"A9 0E"
|
||||||
|
"8D C0 BF"
|
||||||
|
"68"
|
||||||
|
"69 00"
|
||||||
|
"48"
|
||||||
|
"AD 78 04"
|
||||||
|
"90 2B")): return []
|
||||||
|
if not find.at(0x69, logical_sectors[6], bytes.fromhex(
|
||||||
|
"4C B8 B6"
|
||||||
|
"EA"
|
||||||
|
"EA"
|
||||||
|
"EA")): return []
|
||||||
|
if not find.at(0x8C, logical_sectors[8], bytes.fromhex(
|
||||||
|
"69 BA")): return []
|
||||||
|
return [Patch(0, 3, 0x40, bytes.fromhex("F0")),
|
||||||
|
Patch(0, 3, 0x9C, bytes.fromhex("D0")),
|
||||||
|
Patch(0, 6, 0x69, bytes.fromhex("20 C3 BC 20 C3 BC")),
|
||||||
|
Patch(0, 8, 0x8C, bytes.fromhex("A0 B9"))]
|
@ -1,5 +1,7 @@
|
|||||||
|
__date__ = "2019-01-29"
|
||||||
|
|
||||||
STRINGS = {
|
STRINGS = {
|
||||||
"header": "Passport.py by 4am (2019-01-28)\n", # max 32 characters
|
"header": "Passport.py by 4am (" + __date__ + ")\n", # max 32 characters
|
||||||
"reading": "Reading from {filename}\n",
|
"reading": "Reading from {filename}\n",
|
||||||
"diskrwts": "Using disk's own RWTS\n",
|
"diskrwts": "Using disk's own RWTS\n",
|
||||||
"bb00": "T00,S05 Found $BB00 protection check\n"
|
"bb00": "T00,S05 Found $BB00 protection check\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user