コード例 #1
0
def assert_differing_address(manager: ConstraintManager, rom: RomVariant,
                             local_address: int, virtual_address: int) -> None:
    if local_address != -1:
        assert virtual_address == manager.to_virtual(rom, local_address)
    assert local_address == manager.to_local(rom, virtual_address)
コード例 #2
0
ファイル: __init__.py プロジェクト: octorock/the-little-hat
    def process(self) -> None:
        print('Start processing')

        progress = 0

        # Test using a constraint manager with all variations
        manager = ConstraintManager({
            RomVariant.USA, RomVariant.JP, RomVariant.EU, RomVariant.DEMO,
            RomVariant.DEMO_JP
        })
        constraint_database = get_constraint_database()
        constraints = constraint_database.get_constraints()

        i = 0
        count = len(constraints)

        for constraint in constraints:
            if not constraint.enabled:
                i = i + 1
                continue

            # test if constraint is redundant
            va_a = manager.to_virtual(constraint.romA, constraint.addressA)
            va_b = manager.to_virtual(constraint.romB, constraint.addressB)
            if va_a == va_b:
                print(f'Disable {constraint}')
                constraint.enabled = False
            else:
                #print(f'Keep {constraint}')
                manager.add_constraint(constraint)
                try:
                    manager.rebuild_relations()
                except InvalidConstraintError as e:
                    print(e)
                    print(constraint)
                    self.signal_fail.emit()
                    return

            i = i + 1
            new_progress = (i * 50) // count
            if new_progress != progress:
                progress = new_progress
                self.signal_progress.emit(new_progress)

        self.signal_progress.emit(50)

        i = 0
        # Test that there are no disabled constraints that are still needed
        for constraint in constraints:
            if constraint.enabled:
                i = i + 1
                continue

            # test if constraint is redundant
            va_a = manager.to_virtual(constraint.romA, constraint.addressA)
            va_b = manager.to_virtual(constraint.romB, constraint.addressB)
            if va_a != va_b:
                print(f'Need to reenable {constraint}')
                constraint.enabled = True
                manager.add_constraint(constraint)
                try:
                    manager.rebuild_relations()
                except InvalidConstraintError as e:
                    print(e)
                    print(constraint)
                    self.signal_fail.emit()
                    return

            i = i + 1
            new_progress = (i * 50) // count + 50
            if new_progress != progress:
                progress = new_progress
                self.signal_progress.emit(new_progress)

        constraint_database._write_constraints(
        )  # TODO add a public method to update changed constraints in the database?
        constraint_database.constraints_changed.emit()

        self.signal_done.emit()
コード例 #3
0
def assert_same_address(manager: ConstraintManager, rom: RomVariant,
                        address: int) -> None:
    assert address == manager.to_virtual(rom, address)
    assert address == manager.to_local(rom, address)