text: # XXX - execute until line number/cursor
  # XXX - more memory printing he thumping
  
  from talon import Context, Module
  
  mod = Module()
  mod.tag("debugger", desc="Tag for enabling generic debugger commands")
  
  ctx = Context()
  ctx.matches = r"""
  tag: debugger
  """
  
  x86_registers = {
      "air": "eax",
      "bat": "ebx",
      "cap": "ecx",
      "drum": "edx",
      "source": "esi",
      "dest": "edi",
      "stack": "esp",
      "frame": "ebp",
      "instruction": "eip",
  }
  
  x64_registers = {
      # general purpose
      "air": "rax",
      "racks": "rax",
      "bat": "rbx",
      "cap": "rcx",
      "drum": "rdx",
      "source": "rsi",
      "dest": "rdi",
      "stack": "rsp",
      "stack pointer": "rsp",
      "frame": "rbp",
      "frame pointer": "rbp",
      "base": "rbp",
      "base pointer": "rbp",
      "eight": "r8",
      "nine": "r9",
      "ten": "r10",
      "eleven": "r11",
      "twelve": "r12",
      "thirteen": "r13",
      "fourteen": "r14",
      "fifteen": "r15",
      # pointers
      "instruction": "rip",
      "rip": "rip",
      # segment
  }
  
  # XXX - make this dynamic
  ctx.lists["self.registers"] = x64_registers
  
  # assembly_languages = {
  #    "x86": x86_registers,
  #    "x64": x64_registers,
  # }
  
  mod.list("registers", desc="Main architecture register set")
  
  
  @mod.capture(rule="{self.registers}")
  def registers(m) -> str:
      "Returns a register"
      return m.registers
  
  
  @mod.action_class
  class Actions:
      def debugger_step_into():
          """Step into an instruction in the debugger"""
  
      def debugger_step_over():
          """Step over an instruction in the debugger"""
  
      def debugger_step_line():
          """Step into a source line in the debugger"""
  
      def debugger_step_over_line():
          """Step over a source line in the debugger"""
  
      def debugger_step_out():
          """Step until function exit in the debugger"""
  
      def debugger_continue():
          """Continue execution in the debugger"""
  
      def debugger_restart():
          """Restart execution in the debugger"""
  
      def debugger_start():
          """Start debugging"""
  
      def debugger_stop():
          """Stop the debugger"""
  
      def debugger_exit():
          """Exit the debugger"""
  
      def debugger_detach():
          """Detach the debugger"""
  
      def debugger_backtrace():
          """Print a back trace in the debugger"""
  
      def debugger_get_register():
          """Print specific register in the debugger"""
  
      def debugger_set_register():
          """Set specific register in the debugger"""
  
      def debugger_show_registers():
          """Print the current registers in the debugger"""
  
      def debugger_break_now():
          """Break into the debugger"""
  
      def debugger_break_here():
          """Set a break on the current line"""
  
      def debugger_show_breakpoints():
          """Print the current breakpoints in the debugger"""
  
      def debugger_add_sw_breakpoint():
          """Add one software breakpoint in the debugger"""
  
      def debugger_add_hw_breakpoint():
          """Add one hardware breakpoint in the debugger"""
  
      def debugger_clear_all_breakpoints():
          """Clear all breakpoints in the debugger"""
  
      def debugger_clear_breakpoint():
          """Clear one breakpoint in the debugger"""
  
      def debugger_clear_breakpoint_id(number_small: int):
          """Clear one breakpoint id in the debugger"""
  
      def debugger_disable_breakpoint_id(number_small: int):
          """Disable one breakpoint id in the debugger"""
  
      def debugger_disable_breakpoint():
          """Disable one breakpoint in the debugger"""
  
      def debugger_disable_all_breakpoints():
          """Disable all breakpoints in the debugger"""
  
      def debugger_enable_breakpoint():
          """Enable one breakpoint in the debugger"""
  
      def debugger_enable_breakpoint_id(number_small: int):
          """Enable one breakpoint id in the debugger"""
  
      def debugger_enable_all_breakpoints():
          """Enable all breakpoints in the debugger"""
  
      def debugger_disassemble():
          """Preps the disassemble command in the debugger"""
  
      def debugger_disassemble_here():
          """Disassembles instructions at the current instruction pointer"""
  
      def debugger_disassemble_clipboard():
          """Disassemble instructions at an address in the clipboard"""
  
      def debugger_goto_address():
          """Jump to a specific address in the debugger"""
  
      def debugger_goto_clipboard():
          """Jump to a specific address stored in the clipboard"""
  
      def debugger_goto_highlighted():
          """Jump to a specific highlighted address in the debugger"""
  
      def debugger_dump_ascii_string():
          """Display as specific address as an ascii string in the debugger"""
  
      def debugger_dump_unicode_string():
          """Display as specific address as an unicode string in the debugger"""
  
      def debugger_dump_pointers():
          """Display as specific address as a list of pointers in the debugger"""
  
      def debugger_inspect_type():
          """Inspect a specific data type in the debugger"""
  
      def debugger_clear_line():
          """Clear unwanted data from the command line"""
  
      def debugger_list_modules():
          """List the loaded modules in the debuggee memory space"""
  