Coverage for MC6809/core/configs.py: 45%

55 statements  

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

1""" 

2 MC6809 - 6809 CPU emulator in Python 

3 ======================================= 

4 

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

6 :copyleft: 2013-2014 by the MC6809 team, see AUTHORS for more details. 

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

8""" 

9 

10 

11import inspect 

12import logging 

13 

14 

15log = logging.getLogger("MC6809") 

16 

17 

18class DummyMemInfo: 

19 def get_shortest(self, *args): 

20 return ">>mem info not active<<" 

21 

22 def __call__(self, *args): 

23 return ">>mem info not active<<" 

24 

25 

26class AddressAreas(dict): 

27 """ 

28 Hold information about memory address areas which accessed via bus. 

29 e.g.: 

30 Interrupt vectors 

31 Text screen 

32 Serial/parallel devices 

33 """ 

34 

35 def __init__(self, areas): 

36 super().__init__() 

37 for start_addr, end_addr, txt in areas: 

38 self.add_area(start_addr, end_addr, txt) 

39 

40 def add_area(self, start_addr, end_addr, txt): 

41 for addr in range(start_addr, end_addr + 1): 

42 dict.__setitem__(self, addr, txt) 

43 

44 

45class BaseConfig: 

46 # # http address/port number for the CPU control server 

47 # CPU_CONTROL_ADDR = "127.0.0.1" 

48 # CPU_CONTROL_PORT = 6809 

49 

50 # How many ops should be execute before make a control server update cycle? 

51 BURST_COUNT = 10000 

52 

53 DEFAULT_ROMS = {} 

54 

55 def __init__(self, cfg_dict): 

56 self.cfg_dict = cfg_dict 

57 self.cfg_dict["cfg_module"] = self.__module__ # FIXME: ! 

58 

59 log.debug("cfg_dict: %s", repr(cfg_dict)) 

60 

61# # socket address for internal bus I/O: 

62# if cfg_dict["bus_socket_host"] and cfg_dict["bus_socket_port"]: 

63# self.bus = True 

64# self.bus_socket_host = cfg_dict["bus_socket_host"] 

65# self.bus_socket_port = cfg_dict["bus_socket_port"] 

66# else: 

67# self.bus = None # Will be set in cpu6809.start_CPU() 

68 

69 assert not hasattr( 

70 cfg_dict, "ram"), f"cfg_dict.ram is deprecated! Remove it from: {self.cfg_dict.__class__.__name__}" 

71 

72# if cfg_dict["rom"]: 

73# raw_rom_cfg = cfg_dict["rom"] 

74# raise NotImplementedError("TODO: create rom cfg!") 

75# else: 

76 self.rom_cfg = self.DEFAULT_ROMS 

77 

78 if cfg_dict["trace"]: 78 ↛ 79line 78 didn't jump to line 79, because the condition on line 78 was never true

79 self.trace = True 

80 else: 

81 self.trace = False 

82 

83 self.verbosity = cfg_dict["verbosity"] 

84 

85 self.mem_info = DummyMemInfo() 

86 self.memory_byte_middlewares = {} 

87 self.memory_word_middlewares = {} 

88 

89 def _get_initial_Memory(self, size): 

90 return [0x00] * size 

91 

92 def get_initial_RAM(self): 

93 return self._get_initial_Memory(self.RAM_SIZE) 

94 

95 def get_initial_ROM(self): 

96 return self._get_initial_Memory(self.ROM_SIZE) 

97 

98# def get_initial_ROM(self): 

99# start=cfg.ROM_START, size=cfg.ROM_SIZE 

100# self.start = start 

101# self.end = start + size 

102# self._mem = [0x00] * size 

103 

104 def print_debug_info(self): 

105 print(f"Config: '{self.__class__.__name__}'") 

106 

107 for name, value in inspect.getmembers(self): # , inspect.isdatadescriptor): 

108 if name.startswith("_"): 

109 continue 

110# print name, type(value) 

111 if not isinstance(value, (int, str, list, tuple, dict)): 

112 continue 

113 if isinstance(value, int): 

114 print(f"{name:>20} = {value:<6} in hex: {hex(value):>7}") 

115 else: 

116 print(f"{name:>20} = {value}") 

117 

118 

119def test_run(): 

120 import os 

121 import subprocess 

122 import sys 

123 cmd_args = [sys.executable, 

124 os.path.join("..", "..", "DragonPy_CLI.py"), 

125 

126 # "--verbosity=5", 

127 "--verbosity=10", # DEBUG 

128 # "--verbosity=20", # INFO 

129 # "--verbosity=30", # WARNING 

130 # "--verbosity=40", # ERROR 

131 # "--verbosity=50", # CRITICAL/FATAL 

132 

133 # "--machine=Simple6809", 

134 "--machine=sbc09", 

135 ] 

136 print(f"Startup CLI with: {' '.join(cmd_args[1:])}") 

137 subprocess.Popen(cmd_args, cwd=".").wait() 

138 

139 

140if __name__ == "__main__": 

141 test_run()