Esempio n. 1
0
  def __init__(self, raw_mem, cpu, path_mgr):
    self.raw_mem = raw_mem
    self.ram_size = raw_mem.ram_size
    self.cpu = cpu
    self.path_mgr = path_mgr

    # create a label manager and error tracker
    self.label_mgr = LabelManager()
    self.error_tracker = ErrorTracker(cpu, self.label_mgr)
    self.label_mgr.error_tracker = self.error_tracker

    # set a label for first two dwords
    label = LabelRange("zero_page",0,8)
    self.label_mgr.add_label(label)
    
    # create memory access
    self.mem = MainMemory(self.raw_mem, self.error_tracker)
    self.mem.ctx = self

    # create memory allocator
    self.mem_begin = 0x1000
    self.alloc = MemoryAlloc(self.mem, 0, self.ram_size, self.mem_begin, self.label_mgr)
    
    # create segment loader
    self.seg_loader = SegmentLoader( self.mem, self.alloc, self.label_mgr, self.path_mgr )

    # lib manager
    self.lib_mgr = LibManager( self.label_mgr )
    
    # no current process right now
    self.process = None
    self.proc_list = []
    self.tr_list = []
Esempio n. 2
0
    def __init__(self, raw_mem, cpu, traps, cfg):
        self.raw_mem = raw_mem
        self.ram_size = raw_mem.get_ram_size() * 1024  # in bytes
        self.cpu = cpu
        self.cpu_type = cfg.cpu
        self.traps = traps
        self.cfg = cfg
        #sys.settrace(Tracer().traceit)

        # too much RAM requested?
        # our "custom chips" start at $BFxxxx so we allow RAM only to be below
        if self.ram_size >= 0xbf0000 and self.cfg.hw_access != "disable":
            raise VamosConfigError(
                "Too much RAM configured! Only up to $BF0000 allowed.")

        # setup custom chips
        if self.cfg.hw_access != "disable":
            self.hw_access = HardwareAccess(raw_mem)
            self._setup_hw_access()

        # path manager
        self.path_mgr = PathManager(cfg)

        # create a label manager and error tracker
        if self.cfg.label_mgr != "disable":
            self.label_mgr = LabelManager()
        else:
            self.label_mgr = None
        self.error_tracker = ErrorTracker(cpu, self.label_mgr)
        if self.label_mgr != None:
            self.label_mgr.error_tracker = self.error_tracker

        # set a label for first two dwords
        if self.label_mgr != None:
            label = LabelRange("zero_page", 0, 8)
            self.label_mgr.add_label(label)

        # create memory access
        self.mem = MainMemory(raw_mem, self.error_tracker)
        self.mem.ctx = self
        self._setup_memory(raw_mem)

        # create memory allocator
        self.mem_begin = 0x1000
        self.alloc = MemoryAlloc(self.mem, 0, self.ram_size, self.mem_begin,
                                 self.label_mgr)

        # create segment loader
        self.seg_loader = SegmentLoader(self.mem, self.alloc, self.label_mgr,
                                        self.path_mgr)

        # lib manager
        self.lib_mgr = LibManager(self.label_mgr, cfg)

        # no current process right now
        self.process = None
        self.proc_list = []
Esempio n. 3
0
    def __init__(self, raw_mem, cpu, traps, cfg):
        self.raw_mem = raw_mem
        self.ram_size = raw_mem.get_ram_size_kib() * 1024  # in bytes
        self.cpu = cpu
        self.cpu_type = cfg.cpu
        self.traps = traps
        self.cfg = cfg

        # too much RAM requested?
        # our "custom chips" start at $BFxxxx so we allow RAM only to be below
        if self.ram_size >= 0xbf0000 and self.cfg.hw_access != "disable":
            raise VamosConfigError(
                "Too much RAM configured! Only up to $BF0000 allowed.")

        # setup custom chips
        if self.cfg.hw_access != "disable":
            self.hw_access = HardwareAccess(raw_mem)
            self._setup_hw_access()

        # path manager
        self.path_mgr = PathManager(cfg)

        def terminate_func():
            self.raw_mem.set_all_to_end()

        # create a label manager and error tracker
        self.label_mgr = LabelManager()
        self.error_tracker = ErrorTracker(cpu, self.label_mgr, terminate_func)
        self.label_mgr.error_tracker = self.error_tracker

        # set a label for first region
        label = LabelRange("zero_page", 0, 0x400)
        self.label_mgr.add_label(label)

        # shutdown range
        label = LabelRange("shutdown", 0x400, 0x800)
        self.label_mgr.add_label(label)

        # create memory access
        self.trace_mgr = TraceManager(cpu, self.label_mgr)
        if cfg.internal_memory_trace:
            self.mem = TraceMemory(raw_mem, self.trace_mgr)
            if not log_mem_int.isEnabledFor(logging.INFO):
                log_mem_int.setLevel(logging.INFO)
        else:
            self.mem = raw_mem
        self._setup_memory(raw_mem)

        # create memory allocator
        self.mem_begin = 0x1000
        self.mem_size = self.ram_size - self.mem_begin
        self.alloc = MemoryAlloc(self.mem, self.mem_begin, self.mem_size,
                                 self.label_mgr)

        # create segment loader
        self.seg_loader = SegmentLoader(self.mem, self.alloc)

        # setup lib context
        ctx_map = LibCtxMap()
        self.exec_ctx = ExecLibCtx(self.cpu, self.mem, self.cpu_type,
                                   self.ram_size, self.label_mgr, self.alloc,
                                   self.traps, self.seg_loader, self.path_mgr)
        self.dos_ctx = DosLibCtx(self.cpu, self.mem, self.alloc, self.path_mgr,
                                 self.seg_loader, self.run_command,
                                 self.start_sub_process)
        ctx_map.set_default_ctx(LibCtx(self.cpu, self.mem))
        ctx_map.add_ctx('exec.library', self.exec_ctx)
        ctx_map.add_ctx('dos.library', self.dos_ctx)

        # lib manager
        self.lib_reg = LibRegistry()
        self.lib_mgr = LibManager(self.label_mgr, self.lib_reg, ctx_map, cfg,
                                  self.error_tracker)
        self.exec_ctx.set_lib_mgr(self.lib_mgr)

        # no current process right now
        self.process = None
        self.proc_list = []