Coverage for MC6809/core/memory_info.py: 10%

39 statements  

« prev     ^ index     » next       coverage.py v7.2.1, created at 2023-03-06 19:50 +0100

1#!/usr/bin/env python 

2 

3""" 

4 DragonPy - base memory info 

5 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

6 

7 :created: 2013 by Jens Diemer - www.jensdiemer.de 

8 :copyleft: 2013 by the MC6809 team, see AUTHORS for more details. 

9 :license: GNU GPL v3 or above, see LICENSE for more details. 

10""" 

11 

12 

13import sys 

14 

15 

16class BaseMemoryInfo: 

17 def __init__(self, out_func): 

18 self.out_func = out_func 

19 

20 def get_shortest(self, addr): 

21 shortest = None 

22 size = sys.maxsize 

23 for start, end, txt in self.MEM_INFO: 

24 if not start <= addr <= end: 

25 continue 

26 

27 current_size = abs(end - start) 

28 if current_size < size: 

29 size = current_size 

30 shortest = start, end, txt 

31 

32 if shortest is None: 

33 return f"${addr:x}: UNKNOWN" 

34 

35 start, end, txt = shortest 

36 if start == end: 

37 return f"${addr:x}: {txt}" 

38 else: 

39 return f"${addr:x}: ${start:x}-${end:x} - {txt}" 

40 

41 def __call__(self, addr, info="", shortest=True): 

42 if shortest: 

43 mem_info = self.get_shortest(addr) 

44 if info: 

45 self.out_func(f"{info}: {mem_info}") 

46 else: 

47 self.out_func(mem_info) 

48 return 

49 

50 mem_info = [] 

51 for start, end, txt in self.MEM_INFO: 

52 if start <= addr <= end: 

53 mem_info.append( 

54 (start, end, txt) 

55 ) 

56 

57 if not mem_info: 

58 self.out_func(f"{info} ${addr:x}: UNKNOWN") 

59 else: 

60 self.out_func(f"{info} ${addr:x}:") 

61 for start, end, txt in mem_info: 

62 if start == end: 

63 self.out_func(f" * ${start:x} - {txt}") 

64 else: 

65 self.out_func(f" * ${start:x}-${end:x} - {txt}")