public TI83(CoreComm comm, GameInfo game, byte[] rom, object settings) { var ser = new BasicServiceProvider(this); ServiceProvider = ser; PutSettings((TI83Settings)settings ?? new TI83Settings()); CoreComm = comm; _cpu.FetchMemory = ReadMemory; _cpu.ReadMemory = ReadMemory; _cpu.WriteMemory = WriteMemory; _cpu.ReadHardware = ReadHardware; _cpu.WriteHardware = WriteHardware; _cpu.IRQCallback = IRQCallback; _cpu.NMICallback = NMICallback; _cpu.MemoryCallbacks = MemoryCallbacks; _rom = rom; LinkPort = new TI83LinkPort(this); HardReset(); SetupMemoryDomains(); _tracer = new TraceBuffer { Header = _cpu.TraceHeader }; ser.Register <ITraceable>(_tracer); ser.Register <IDisassemblable>(_cpu); }
public TI83(CoreLoadParameters <TI83Settings, object> lp) { var ser = new BasicServiceProvider(this); ServiceProvider = ser; PutSettings(lp.Settings ?? new TI83Settings()); _cpu.FetchMemory = ReadMemory; _cpu.ReadMemory = ReadMemory; _cpu.WriteMemory = WriteMemory; _cpu.ReadHardware = ReadHardware; _cpu.WriteHardware = WriteHardware; _cpu.IRQCallback = IRQCallback; _cpu.NMICallback = NMICallback; _cpu.MemoryCallbacks = MemoryCallbacks; _rom = lp.Comm.CoreFileProvider.GetFirmwareOrThrow(new("TI83", "Rom")); LinkPort = new TI83LinkPort(this); HardReset(); SetupMemoryDomains(); _tracer = new TraceBuffer(_cpu.TraceHeader); ser.Register <ITraceable>(_tracer); ser.Register <IDisassemblable>(_cpu); ser.Register <IStatable>(new StateSerializer(SyncState)); LinkPort.SendFileToCalc(new MemoryStream(lp.Roms[0].RomData, false), false); }
public TI83(CoreComm comm, GameInfo game, byte[] rom, object Settings) { ServiceProvider = new BasicServiceProvider(this); InputCallbacks = new InputCallbackSystem(); MemoryCallbacks = new MemoryCallbackSystem(); PutSettings((TI83Settings)Settings ?? new TI83Settings()); CoreComm = comm; Cpu.ReadMemory = ReadMemory; Cpu.WriteMemory = WriteMemory; Cpu.ReadHardware = ReadHardware; Cpu.WriteHardware = WriteHardware; Cpu.IRQCallback = IRQCallback; Cpu.NMICallback = NMICallback; Cpu.MemoryCallbacks = MemoryCallbacks; Rom = rom; LinkPort = new TI83LinkPort(this); // different calculators (different revisions?) have different initPC. we track this in the game database by rom hash // if( *(unsigned long *)(m_pRom + 0x6ce) == 0x04D3163E ) m_Regs.PC.W = 0x6ce; //KNOWN // else if( *(unsigned long *)(m_pRom + 0x6f6) == 0x04D3163E ) m_Regs.PC.W = 0x6f6; //UNKNOWN if (game["initPC"]) { startPC = ushort.Parse(game.OptionValue("initPC"), NumberStyles.HexNumber); } HardReset(); SetupMemoryDomains(); (ServiceProvider as BasicServiceProvider).Register <IDisassemblable>(new Disassembler()); }