예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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());
        }