Copies the cleaned-up zvm source (ruff-compliant, ty-clean) back into the zmachine module. Adds __init__.py with proper exports and updates .gitignore for debug.log/disasm.log.
46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
#
|
|
# Logging assistance. This provides a logging facility for the rest of
|
|
# the Z-Machine. As a Z-Machine is inherently I/O intensive, dumb screen
|
|
# dumping is no longer adequate. This logging facility, based on
|
|
# python's logging module, provides file logging.
|
|
#
|
|
|
|
import logging
|
|
|
|
# Top-level initialization
|
|
logging.getLogger().setLevel(logging.DEBUG)
|
|
|
|
# Create the logging objects regardless. If debugmode is False, then
|
|
# they won't actually do anything when used.
|
|
mainlog_handler = logging.FileHandler("debug.log", "a")
|
|
mainlog_handler.setLevel(logging.DEBUG)
|
|
mainlog_handler.setFormatter(logging.Formatter("%(asctime)s: %(message)s"))
|
|
logging.getLogger("mainlog").addHandler(mainlog_handler)
|
|
|
|
# We'll store the disassembly in a separate file, for better
|
|
# readability.
|
|
disasm_handler = logging.FileHandler("disasm.log", "a")
|
|
disasm_handler.setLevel(logging.DEBUG)
|
|
disasm_handler.setFormatter(logging.Formatter("%(message)s"))
|
|
logging.getLogger("disasm").addHandler(disasm_handler)
|
|
|
|
mainlog = logging.getLogger("mainlog")
|
|
mainlog.info("*** Log reopened ***")
|
|
disasm = logging.getLogger("disasm")
|
|
disasm.info("*** Log reopened ***")
|
|
|
|
|
|
# Pubilc routines used by other modules
|
|
def set_debug(state):
|
|
if state:
|
|
logging.getLogger().setLevel(logging.DEBUG)
|
|
else:
|
|
logging.getLogger().setLevel(logging.CRITICAL)
|
|
|
|
|
|
def log(msg):
|
|
mainlog.debug(msg)
|
|
|
|
|
|
def log_disasm(pc, opcode_type, opcode_num, opcode_name, args):
|
|
disasm.debug(f"{pc:06x} {opcode_type}:{opcode_num:02x} {opcode_name} {args}")
|