From a347c33a4883737ca8fc122fc20e523975980007 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Thu, 20 Apr 2023 17:58:49 -0300 Subject: [PATCH] PhoenixAnalyzer: Fix register extraction corner case for 4.04 --- biostools/analyzers.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/biostools/analyzers.py b/biostools/analyzers.py index 3642315..bb9e7ba 100644 --- a/biostools/analyzers.py +++ b/biostools/analyzers.py @@ -2757,7 +2757,7 @@ class PhoenixAnalyzer(Analyzer): bcpsegment_offset = match.start(0) self.debug_print('Probing BCPSEGMENT at', hex(bcpsegment_offset)) offset = bcpsegment_offset + 0x0a - # Sometimes there's no BCP immediately after BCPSEGMENT (Micronics M54LI) + # Sometimes there's no BCP immediately after BCPSEGMENT (Micronics M54Li) # BCP can be way ahead (366 bytes on DEC Venturis FX) - old 256-byte check didn't cut it if virtual_mem[offset:offset + 3] != b'BCP': next_bcp_offset = virtual_mem[offset:offset + 1024].find(b'BCP') @@ -2947,8 +2947,10 @@ class PhoenixAnalyzer(Analyzer): regtable_segment = code_segment else: code_segment = dmi_segment = regtable_segment - elif bcpsys.version_maj == 1 and bcpsys.version_min >= 5 and data_size >= 0x6d: - regtable_start, regtable_end, code_segment = struct.unpack('= 5 and data_size >= 0x6b: + regtable_start, regtable_end = struct.unpack('= 0x6d: # data can end without this value (BCPSYS 1.5 on Micronics M54Li 07) + code_segment, = struct.unpack('> 4) & 0xf000 # not always F000 due to inverted BIOSes else: regtable_segment = None