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
« 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 =======================================
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"""
11import inspect
12import logging
15log = logging.getLogger("MC6809")
18class DummyMemInfo:
19 def get_shortest(self, *args):
20 return ">>mem info not active<<"
22 def __call__(self, *args):
23 return ">>mem info not active<<"
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 """
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)
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)
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
50 # How many ops should be execute before make a control server update cycle?
51 BURST_COUNT = 10000
53 DEFAULT_ROMS = {}
55 def __init__(self, cfg_dict):
56 self.cfg_dict = cfg_dict
57 self.cfg_dict["cfg_module"] = self.__module__ # FIXME: !
59 log.debug("cfg_dict: %s", repr(cfg_dict))
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()
69 assert not hasattr(
70 cfg_dict, "ram"), f"cfg_dict.ram is deprecated! Remove it from: {self.cfg_dict.__class__.__name__}"
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
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
83 self.verbosity = cfg_dict["verbosity"]
85 self.mem_info = DummyMemInfo()
86 self.memory_byte_middlewares = {}
87 self.memory_word_middlewares = {}
89 def _get_initial_Memory(self, size):
90 return [0x00] * size
92 def get_initial_RAM(self):
93 return self._get_initial_Memory(self.RAM_SIZE)
95 def get_initial_ROM(self):
96 return self._get_initial_Memory(self.ROM_SIZE)
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
104 def print_debug_info(self):
105 print(f"Config: '{self.__class__.__name__}'")
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}")
119def test_run():
120 import os
121 import subprocess
122 import sys
123 cmd_args = [sys.executable,
124 os.path.join("..", "..", "DragonPy_CLI.py"),
126 # "--verbosity=5",
127 "--verbosity=10", # DEBUG
128 # "--verbosity=20", # INFO
129 # "--verbosity=30", # WARNING
130 # "--verbosity=40", # ERROR
131 # "--verbosity=50", # CRITICAL/FATAL
133 # "--machine=Simple6809",
134 "--machine=sbc09",
135 ]
136 print(f"Startup CLI with: {' '.join(cmd_args[1:])}")
137 subprocess.Popen(cmd_args, cwd=".").wait()
140if __name__ == "__main__":
141 test_run()