public async Task Setup() { mem = _serviceProvider.GetService <IAddressMap>(); mem.Install(new Ram(0x0000, 0x10000)); _display = _serviceProvider.GetService <IMemoryMappedDisplay>(); _display.Locate(DISPLAY_BASE_ADDR, DISPLAY_SIZE); mem.Install(_display); _keyboard = _serviceProvider.GetService <IMemoryMappedKeyboard>(); _keyboard.StartAddress = KEYBOARD_BASE_ADDR; mem.Install((IAddressAssignment)_keyboard); await mem.Initialise(); _display.Clear(); _cpu = (CPU6502)_serviceProvider.GetService <IDebuggableCpu>(); _cpu.LogLevel = LogLevel.Trace; _keyboard.RequestInterrupt += async(s, e) => { await _cpu.Interrupt(s, e); }; mem.WriteWord(_cpu.RESET_VECTOR, PROG_START); mem.Labels.Add("DISPLAY_CONTROL_ADDR", MemoryMappedDisplay.DISPLAY_CONTROL_BLOCK_ADDR); mem.Labels.Add("DISPLAY_BASE_ADDR", DISPLAY_BASE_ADDR); mem.Labels.Add("DISPLAY_SIZE", DISPLAY_SIZE); mem.Labels.Add("KEYBOARD_STATUS_REGISTER", MemoryMappedKeyboard.STATUS_REGISTER + KEYBOARD_BASE_ADDR); mem.Labels.Add("KEYBOARD_CONTROL_REGISTER", MemoryMappedKeyboard.CONTROL_REGISTER + KEYBOARD_BASE_ADDR); mem.Labels.Add("KEYBOARD_DATA_REGISTER", MemoryMappedKeyboard.DATA_REGISTER + KEYBOARD_BASE_ADDR); mem.Labels.Add("KEYBOARD_SCAN_CODE_REGISTER", MemoryMappedKeyboard.SCAN_CODE_REGISTER + KEYBOARD_BASE_ADDR); mem.Labels.Add("RESET_VECTOR", _cpu.RESET_VECTOR); mem.Labels.Add("IRQ_VECTOR", _cpu.IRQ_VECTOR); mem.Labels.Add("NMI_VECTOR", _cpu.NMI_VECTOR); }
public ReplHost( ILabelMap labels, CancellationTokenWrapper cancellationToken, // CpuHoldEvent debuggerSyncEvent, IDebuggableCpu cpu, IAddressMap addressMap, IMemoryMappedKeyboard keyboard, IMemoryMappedDisplay memoryMappedDisplay) { Labels = labels; _cancellationToken = cancellationToken; // _debuggerSyncEvent = debuggerSyncEvent; _cpu = (CPU6502)cpu; mem = addressMap; _keyboard = keyboard; _display = memoryMappedDisplay; }
public DisplayHub(IMemoryMappedKeyboard keyboard) { _keyboard = keyboard; }