예제 #1
0
 public void LoadCartridge(ICartridge cartridge)
 {
     if (!_turnedOn)
     {
         Mmu.LoadCartridge(cartridge);
         CartridgeLoaded = true;
     }
 }
예제 #2
0
파일: Memory.cs 프로젝트: jarkkopa/GeemuBoy
        public Memory(byte[]?cartridge = null, byte[]?bootRom = null)
        {
            this.bootRom   = bootRom;
            this.cartridge = CartridgeCreator.GetCartridge(cartridge);

            RomMapMode = bootRom != null ? MapMode.Boot : MapMode.Cartridge;

            CreateIOMasks();
        }
예제 #3
0
파일: Device.cs 프로젝트: kosinw/Castor
 public Device()
 {
     CPU       = new Z80(this);
     DMA       = new DMAController(this);
     MMU       = new MemoryMapper(this);
     Cartridge = null;
     GPU       = new VideoController(this);
     IRQ       = new InterruptController();
     TIM       = new TimerController(this);
     JOYP      = new InputController(this);
 }
예제 #4
0
 public GameBoy(ICartridge cartridge)
 {
     Cartridge = cartridge;
     Memory    = new GameBoyMemory(this);
     Cpu       = new GameBoyCpu(this);
     Gpu       = new GameBoyGpu(this);
     Spu       = new GameBoySpu(this);
     KeyPad    = new GameBoyPad(this);
     Timer     = new GameBoyTimer(this);
     Reset();
     IsPoweredOn = true;
 }
예제 #5
0
        public void WriteByteTest(ushort address, byte value, byte expected)
        {
            var data = new byte[0x8000];

            _cartridge = new Cartridge(data);


            _cartridge.WriteByte(address, value);


            Assert.Equal(expected, _cartridge.ReadByte(address));
        }
예제 #6
0
        /// <summary>
        /// Load cartridge to emulator
        /// </summary>
        /// <param name="cartridge">NES cartridge</param>
        public void InsertCartridge(ICartridge cartridge)
        {
            _cartridge = cartridge;

            //_ram.Reset();
            _ram.Map(0x4021, 0x5FFF, cartridge.ReadExpansion, cartridge.WriteExpansion);
            _ram.Map(0x6000, 0x7FFF, cartridge.ReadSram, cartridge.WriteSram);
            _ram.Map(0x8000, 0xFFFF, cartridge.ReadPrg, cartridge.WritePrg);

            _vram.Map(0x0000, 0x2000, cartridge.ReadChr, cartridge.WriteChr);
            throw new NotImplementedException();
        }
예제 #7
0
        public void ReadByteTest(ushort address, byte expected)
        {
            var data = new byte[0x8000];

            if (address < data.Length)
            {
                data[address] = expected;
            }

            _cartridge = new Cartridge(data);

            Assert.Equal(expected, _cartridge.ReadByte(address));
        }
예제 #8
0
파일: GameBoy.cs 프로젝트: lukehorak/Emux
        public GameBoy(ICartridge cartridge, IClock clock, bool preferGbcMode)
        {
            GbcMode = preferGbcMode && (cartridge.GameBoyColorFlag & GameBoyColorFlag.SupportsColor) != 0;

            _clock = clock;

            Components = new List <IGameBoyComponent>
            {
                (Cartridge = cartridge),
                (Memory = new GameBoyMemory(this)),
                (Cpu = new GameBoyCpu(this, clock)),
                (Gpu = new GameBoyGpu(this)),
                (Spu = new GameBoySpu(this)),
                (KeyPad = new GameBoyPad(this)),
                (Timer = new GameBoyTimer(this))
            }.AsReadOnly();

            foreach (var component in Components)
            {
                component.Initialize();
            }

            Reset();
            IsPoweredOn = true;

            _clock.Tick += NextFrame;
            new Thread(CpuLoop)
            {
                Name         = "Z80CPULOOP",
                IsBackground = true
            }.Start();


            _lastFrameTime     = DateTime.Now;
            Gpu.VBlankStarted += (_, __) =>
            {
                _framesCount++;

                FrameDelta     = DateTime.Now - _lastFrameTime;
                _lastFrameTime = DateTime.Now;
            };
        }
        private ICartridge LoadCartridge()
        {
            ICartridge cartridge = null;

            try
            {
#if WINDOWS || LINUX
                string cartridgeFileName = CommandLine.Length > 0 ? CommandLine[0] : String.Empty;
                using (FileStream stream = File.OpenRead(cartridgeFileName))
                {
                    LnxRomImageFileFormat romImage = new LnxRomImageFileFormat();
                    cartridge = romImage.LoadCart(stream);
                }
#endif
            }
            catch (Exception)
            {
                cartridge = new FaultyCart();
            }
            return(cartridge);
        }
예제 #10
0
        public DrawableGameboy(ICartridge cart)
        {
            AutoSizeAxes = Axes.Both;
            Masking      = true;
            CornerRadius = 5;

            cartridge = cart;

            InternalChildren = new Drawable[]
            {
                clock  = new DrawableGameboyClock(),
                screen = new DrawableGameboyScreen
                {
                    Size   = new osuTK.Vector2(160, 144),
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre
                },
                crashScreenCover = new CrashScreenCover
                {
                    Alpha = 0
                }
            };
        }
예제 #11
0
파일: GameBoy.cs 프로젝트: luqide/Emux
        public GameBoy(ICartridge cartridge, IClock clock, bool preferGbcMode)
        {
            GbcMode = preferGbcMode && (cartridge.GameBoyColorFlag & GameBoyColorFlag.SupportsColor) != 0;

            Components = new List <IGameBoyComponent>
            {
                (Cartridge = cartridge),
                (Memory = new GameBoyMemory(this)),
                (Cpu = new GameBoyCpu(this, clock)),
                (Gpu = new GameBoyGpu(this)),
                (Spu = new GameBoySpu(this)),
                (KeyPad = new GameBoyPad(this)),
                (Timer = new GameBoyTimer(this))
            }.AsReadOnly();

            foreach (var component in Components)
            {
                component.Initialize();
            }

            Reset();
            IsPoweredOn = true;
        }
예제 #12
0
        public Game(byte[] fileData, ISaveMemory saveMemory)
        {
            this.saveMemory  = saveMemory;
            title            = ExtractGameTitle(fileData);
            gameBoyColorGame = fileData [0x0143] == 0x80;
            licenseCode      = (((int)fileData [0x0144]) << 4) | fileData [0x0145];
            gameBoy          = fileData [0x0146] == 0x00;
            romType          = (RomType)fileData [0x0147];

            switch (fileData [0x0148])
            {
            case 0x00:
                romSize  = 32 * 1024;
                romBanks = 2;
                break;

            case 0x01:
                romSize  = 64 * 1024;
                romBanks = 4;
                break;

            case 0x02:
                romSize  = 128 * 1024;
                romBanks = 8;
                break;

            case 0x03:
                romSize  = 256 * 1024;
                romBanks = 16;
                break;

            case 0x04:
                romSize  = 512 * 1024;
                romBanks = 32;
                break;

            case 0x05:
                romSize  = 1024 * 1024;
                romBanks = 64;
                break;

            case 0x06:
                romSize  = 2 * 1024 * 1024;
                romBanks = 128;
                break;

            case 0x52:
                romSize  = 1179648;
                romBanks = 72;
                break;

            case 0x53:
                romSize  = 1310720;
                romBanks = 80;
                break;

            case 0x54:
                romSize  = 1572864;
                romBanks = 96;
                break;
            }

            switch (fileData [0x0149])
            {
            case 0x00:
                ramSize  = 0;
                ramBanks = 0;
                break;

            case 0x01:
                ramSize  = 2 * 1024;
                ramBanks = 1;
                break;

            case 0x02:
                ramSize  = 8 * 1024;
                ramBanks = 1;
                break;

            case 0x03:
                ramSize  = 32 * 1024;
                ramBanks = 4;
                break;

            case 0x04:
                ramSize  = 128 * 1024;
                ramBanks = 16;
                break;
            }

            japanese       = fileData [0x014A] == 0x00;
            oldLicenseCode = fileData [0x014B];
            maskRomVersion = fileData [0x014C];

            headerChecksum = fileData [0x014D];
            for (int i = 0x0134; i <= 0x014C; i++)
            {
                actualHeaderChecksum = actualHeaderChecksum - fileData [i] - 1;
            }
            actualHeaderChecksum &= 0xFF;

            checksum = (((int)fileData [0x014E]) << 8) | fileData [0x014F];
            for (int i = 0; i < fileData.Length; i++)
            {
                if (i != 0x014E && i != 0x014F)
                {
                    actualChecksum += fileData [i];
                }
            }
            actualChecksum &= 0xFFFF;

            noVerticalBlankInterruptHandler            = fileData [0x0040] == 0xD9;
            noLCDCStatusInterruptHandler               = fileData [0x0048] == 0xD9;
            noTimerOverflowInterruptHandler            = fileData [0x0050] == 0xD9;
            noSerialTransferCompletionInterruptHandler = fileData [0x0058] == 0xD9;
            noHighToLowOfP10ToP13InterruptHandler      = fileData [0x0060] == 0xD9;

            byte[] savedData = null;
            if (saveMemory != null)
            {
                savedData = saveMemory.Load(title);
            }

            switch (romType)
            {
            case RomType.ROM:
                cartridge = new ROM(fileData);
                break;

            case RomType.ROM_MBC1:
            case RomType.ROM_MBC1_RAM:
            case RomType.ROM_MBC1_RAM_BATT:
                cartridge = new MBC1(fileData, savedData, romType, romSize, romBanks);
                break;

            case RomType.ROM_MBC2:
            case RomType.ROM_MBC2_BATTERY:
                cartridge = new MBC2(fileData, savedData, romType, romSize, romBanks);
                break;

            case RomType.ROM_MBC3:
            case RomType.ROM_MBC3_RAM:
            case RomType.ROM_MBC3_RAM_BATT:
            case RomType.ROM_MBC3_TIMER_BATT:
            case RomType.ROM_MBC3_TIMER_RAM_BATT:
            case RomType.ROM_MBC5:
            case RomType.ROM_MBC5_RAM:
            case RomType.ROM_MBC5_RAM_BATT:

                cartridge = new MBC3(fileData, savedData, romType, romSize, romBanks);
                break;

            default:
                throw new Exception(string.Format("Cannot emulate cartridge type {0}.", romType));
            }
        }
예제 #13
0
 public void LoadCartridge(ICartridge cartridge) => _cartridge = cartridge;
예제 #14
0
 public GameBoy(ICpu cpu, IMmu mmu, ICartridge cartridge) : this(cpu, mmu)
 {
     Cartridge = cartridge;
     Mmu       = mmu;
 }
예제 #15
0
 public void InsertCartridge(ICartridge cartridge)
 {
     _cartridge = cartridge;
 }
예제 #16
0
 public void SetCartridge(ICartridge cartridge)
 {
 }
예제 #17
0
파일: Emulator.cs 프로젝트: Dervall/LeetNES
 public void LoadCartridge(ICartridge cartridge)
 {
     memory.SetCartridge(cartridge);
 }
예제 #18
0
파일: Memory.cs 프로젝트: Cyberlane/LeetNES
 public void SetCartridge(ICartridge cartridge)
 {
     this.cartridge = cartridge;
 }
예제 #19
0
파일: MMU.cs 프로젝트: Strimy/GBEmulator
 public void SetCartridge(ICartridge cartridge)
 {
     _cartridge = cartridge;
 }
예제 #20
0
파일: ROM.cs 프로젝트: GodLesZ/svn-dump
		public Game( byte[] fileData ) {
			title = ExtractGameTitle( fileData );
			gameBoyColorGame = fileData[ 0x0143 ] == 0x80;
			licenseCode = ( ( (int)fileData[ 0x0144 ] ) << 4 ) | fileData[ 0x0145 ];
			gameBoy = fileData[ 0x0146 ] == 0x00;
			romType = (RomType)fileData[ 0x0147 ];

			switch( fileData[ 0x0148 ] ) {
				case 0x00:
					romSize = 32 * 1024;
					romBanks = 2;
					break;
				case 0x01:
					romSize = 64 * 1024;
					romBanks = 4;
					break;
				case 0x02:
					romSize = 128 * 1024;
					romBanks = 8;
					break;
				case 0x03:
					romSize = 256 * 1024;
					romBanks = 16;
					break;
				case 0x04:
					romSize = 512 * 1024;
					romBanks = 32;
					break;
				case 0x05:
					romSize = 1024 * 1024;
					romBanks = 64;
					break;
				case 0x06:
					romSize = 2 * 1024 * 1024;
					romBanks = 128;
					break;
				case 0x52:
					romSize = 1179648;
					romBanks = 72;
					break;
				case 0x53:
					romSize = 1310720;
					romBanks = 80;
					break;
				case 0x54:
					romSize = 1572864;
					romBanks = 96;
					break;
			}

			switch( fileData[ 0x0149 ] ) {
				case 0x00:
					ramSize = 0;
					ramBanks = 0;
					break;
				case 0x01:
					ramSize = 2 * 1024;
					ramBanks = 1;
					break;
				case 0x02:
					ramSize = 8 * 1024;
					ramBanks = 1;
					break;
				case 0x03:
					ramSize = 32 * 1024;
					ramBanks = 4;
					break;
				case 0x04:
					ramSize = 128 * 1024;
					ramBanks = 16;
					break;
			}

			japanese = fileData[ 0x014A ] == 0x00;
			oldLicenseCode = fileData[ 0x014B ];
			maskRomVersion = fileData[ 0x014C ];

			headerChecksum = fileData[ 0x014D ];
			for( int i = 0x0134; i <= 0x014C; i++ ) {
				actualHeaderChecksum = actualHeaderChecksum - fileData[ i ] - 1;
			}
			actualHeaderChecksum &= 0xFF;

			checksum = ( ( (int)fileData[ 0x014E ] ) << 8 ) | fileData[ 0x014F ];
			for( int i = 0; i < fileData.Length; i++ ) {
				if( i != 0x014E && i != 0x014F ) {
					actualChecksum += fileData[ i ];
				}
			}
			actualChecksum &= 0xFFFF;

			noVerticalBlankInterruptHandler = fileData[ 0x0040 ] == 0xD9;
			noLCDCStatusInterruptHandler = fileData[ 0x0048 ] == 0xD9;
			noTimerOverflowInterruptHandler = fileData[ 0x0050 ] == 0xD9;
			noSerialTransferCompletionInterruptHandler = fileData[ 0x0058 ] == 0xD9;
			noHighToLowOfP10ToP13InterruptHandler = fileData[ 0x0060 ] == 0xD9;

			switch( romType ) {
				case RomType.ROM:
					cartridge = new ROM( fileData );
					break;
				case RomType.ROM_MBC1:
				case RomType.ROM_MBC1_RAM:
				case RomType.ROM_MBC1_RAM_BATT:
					cartridge = new MBC1( fileData, romType, romSize, romBanks );
					break;
				case RomType.ROM_MBC2:
				case RomType.ROM_MBC2_BATTERY:
					cartridge = new MBC2( fileData, romType, romSize, romBanks );
					break;
				default:
					throw new Exception( string.Format( "Cannot emulate cartridge type {0}.", romType ) );
			}
		}
예제 #21
0
        public Game(byte[] fileData)
        {
            Title            = ExtractGameTitle(fileData);
            GameBoyColorGame = fileData[0x0143] == 0x80;
            LicenseCode      = (((int)fileData[0x0144]) << 4) | fileData[0x0145];
            GameBoy          = fileData[0x0146] == 0x00;
            RomType          = (RomType)fileData[0x0147];

            switch (fileData[0x0148])
            {
            case 0x00:
                RomSize  = 32 * 1024;
                RomBanks = 2;
                break;

            case 0x01:
                RomSize  = 64 * 1024;
                RomBanks = 4;
                break;

            case 0x02:
                RomSize  = 128 * 1024;
                RomBanks = 8;
                break;

            case 0x03:
                RomSize  = 256 * 1024;
                RomBanks = 16;
                break;

            case 0x04:
                RomSize  = 512 * 1024;
                RomBanks = 32;
                break;

            case 0x05:
                RomSize  = 1024 * 1024;
                RomBanks = 64;
                break;

            case 0x06:
                RomSize  = 2 * 1024 * 1024;
                RomBanks = 128;
                break;

            case 0x52:
                RomSize  = 1179648;
                RomBanks = 72;
                break;

            case 0x53:
                RomSize  = 1310720;
                RomBanks = 80;
                break;

            case 0x54:
                RomSize  = 1572864;
                RomBanks = 96;
                break;
            }

            switch (fileData[0x0149])
            {
            case 0x00:
                RamSize  = 0;
                RamBanks = 0;
                break;

            case 0x01:
                RamSize  = 2 * 1024;
                RamBanks = 1;
                break;

            case 0x02:
                RamSize  = 8 * 1024;
                RamBanks = 1;
                break;

            case 0x03:
                RamSize  = 32 * 1024;
                RamBanks = 4;
                break;

            case 0x04:
                RamSize  = 128 * 1024;
                RamBanks = 16;
                break;
            }

            Japanese       = fileData[0x014A] == 0x00;
            OldLicenseCode = fileData[0x014B];
            MaskRomVersion = fileData[0x014C];

            HeaderChecksum = fileData[0x014D];
            for (int i = 0x0134; i <= 0x014C; i++)
            {
                ActualHeaderChecksum = ActualHeaderChecksum - fileData[i] - 1;
            }
            ActualHeaderChecksum &= 0xFF;

            Checksum = (((int)fileData[0x014E]) << 8) | fileData[0x014F];
            for (int i = 0; i < fileData.Length; i++)
            {
                if (i != 0x014E && i != 0x014F)
                {
                    ActualChecksum += fileData[i];
                }
            }
            ActualChecksum &= 0xFFFF;

            NoVerticalBlankInterruptHandler            = fileData[0x0040] == 0xD9;
            NoLcdcStatusInterruptHandler               = fileData[0x0048] == 0xD9;
            NoTimerOverflowInterruptHandler            = fileData[0x0050] == 0xD9;
            NoSerialTransferCompletionInterruptHandler = fileData[0x0058] == 0xD9;
            NoHighToLowOfP10ToP13InterruptHandler      = fileData[0x0060] == 0xD9;

            switch (RomType)
            {
            case RomType.Rom:
                Cartridge = new Rom(fileData);
                break;

            case RomType.RomMbc1:
            case RomType.RomMbc1Ram:
            case RomType.RomMbc1RamBatt:
                Cartridge = new Mbc1(fileData, RomType, RomSize, RomBanks);
                break;

            case RomType.RomMbc2:
            case RomType.RomMbc2Battery:
                Cartridge = new Mbc2(fileData, RomType, RomSize, RomBanks);
                break;

            default:
                throw new Exception($"Cannot emulate cartridge type {RomType}.");
            }
        }
예제 #22
0
파일: Mmu.cs 프로젝트: josh-perry/gbboi-emu
 private void InitializeCartridge(ICartridge cartridge)
 {
     cartridge.Bytes.CopyTo(Rom.Bytes, 0);
 }
예제 #23
0
파일: Mmu.cs 프로젝트: josh-perry/gbboi-emu
 public void Initialize(ICartridge cartridge)
 {
     InitializeBootloader();
     InitializeCartridge(cartridge);
     InitializeMemory();
 }
예제 #24
0
 public MemoryMap(ICartridge cartridge)
 {
     _cartridge = cartridge;
 }
예제 #25
0
 protected Mmu(SerializationInfo info, StreamingContext ctx)
 {
     _memory    = (byte[])info.GetValue("Memory", typeof(byte[]));
     _cartridge = (ICartridge)info.GetValue("Cartridge", typeof(ICartridge));
 }
예제 #26
0
 public GameplaySubScreen(ICartridge cart)
 {
     cartridge = cart;
 }
예제 #27
0
파일: Device.cs 프로젝트: kosinw/Castor
 public void LoadROM(byte[] bytecode)
 {
     Cartridge = CartridgeFactory.CreateCartridge(bytecode);
 }
예제 #28
0
 public void LoadCartridge(ICartridge cartridge)
 {
     if (!_turnedOn)
     {
         Mmu.LoadCartridge(cartridge);
         CartridgeLoaded = true;
     }
 }
예제 #29
0
 protected Mmu(SerializationInfo info, StreamingContext ctx)
 {
     _memory = (byte[])info.GetValue("Memory", typeof(byte[]));
     _cartridge = (ICartridge)info.GetValue("Cartridge", typeof(ICartridge));
 }
예제 #30
0
 public GameBoyGPU(ICartridge memory)
 {
     Memory = memory;
     Reset();
 }
예제 #31
0
 public void LoadCartridge(ICartridge cartridge) => _cartridge = cartridge;
예제 #32
0
 public void LoadCartridge(byte[] data)
 {
     Cartridge = new Cartridge(data);
 }
예제 #33
0
 public GB(ICartridge cartridge)
 {
     _memory = new MemoryMap(cartridge);
 }
예제 #34
0
파일: Z80.cs 프로젝트: CyberSys/SharpDMG
 public Z80(ICartridge game)
 {
     cartridge = game;
     Reset();
 }
예제 #35
0
        //private static TraceSwitch GeneralSwitch = new TraceSwitch("General", "General trace switch", "Error");

        public void InsertCartridge(ICartridge cartridge)
        {
            this.Cartridge = cartridge;
        }