示例#1
0
文件: Cartucho.cs 项目: vggonz/csgbe
        /// <summary>Crea un tipo especifico de cartucho</summary>
        /// <param name="nombreFichero">Ruta al fichero del cartucho</param>
        /// <returns>Cartucho listo para leer y escribir</returns>
        public static Cartucho cargarCartucho(string nombreFichero)
        {
            Cartucho cartucho;
            // Carga los primeros 16 kb del cartucho (tamanyo minimo) para conocer el tipo de cartucho
            FileStream fs = File.OpenRead(nombreFichero);
            byte[] rom = new byte[0x4000];
            fs.Read(rom, 0, 0x4000);
            fs.Close();

            switch(rom[0x0147]){
                case 0x00: cartucho = new CartuchoMBC0(nombreFichero); break; // ROM Only
                case 0x01: cartucho = new CartuchoMBC1(nombreFichero); break; // ROM + MBC1
                case 0x02: cartucho = new CartuchoMBC1(nombreFichero); break; // ROM + MBC1 + RAM
                case 0x03: cartucho = new CartuchoMBC1(nombreFichero); break; // ROM + MBC1 + RAM + BATTERY
            //				case 0x04:
                case 0x05: cartucho = new CartuchoMBC2(nombreFichero); break; // ROM + MBC2
                case 0x06: cartucho = new CartuchoMBC2(nombreFichero); break; // ROM + MBC2 + BATTERY
            //				case 0x07:
                case 0x08: cartucho = new CartuchoMBC0(nombreFichero); break; // ROM + RAM
                case 0x09: cartucho = new CartuchoMBC0(nombreFichero); break; // ROM + RAM + BATTERY
            //				case 0x0A:
            //				case 0x0B: cartucho = new CartuchoMBC0(nombreFichero); break; // ROM + MMM01
            //				case 0x0C: cartucho = new CartuchoMBC0(nombreFichero); break; // ROM + MMM01 + SRAM
            //				case 0x0D: cartucho = new CartuchoMBC0(nombreFichero); break; // ROM + MMM01 + SRAM + BATTERY
            //				case 0x0E:
            //				case 0x0F: cartucho = new CartuchoMBC3(nombreFichero); break; // ROM + MBC3 + TIMER + BATTERY
            //				case 0x10: cartucho = new CartuchoMBC3(nombreFichero); break; // ROM + MBC3 + TIMER + RAM + BATTERY
                case 0x11: cartucho = new CartuchoMBC3(nombreFichero); break; // ROM + MBC3
                case 0x12: cartucho = new CartuchoMBC3(nombreFichero); break; // ROM + MBC3 + RAM
                case 0x13: cartucho = new CartuchoMBC3(nombreFichero); break; // ROM + MBC3 + RAM + BATTERY
            //				case 0x14:
            //				case 0x15: cartucho = new CartuchoMBC4(nombreFichero); break; // ROM + MBC4
            //				case 0x16: cartucho = new CartuchoMBC4(nombreFichero); break; // ROM + MBC4 + RAM
            //				case 0x17: cartucho = new CartuchoMBC4(nombreFichero); break; // ROM + MBC4 + RAM + BATTERY
            //				case 0x18:
                case 0x19: cartucho = new CartuchoMBC5(nombreFichero); break; // ROM + MBC5
                case 0x1A: cartucho = new CartuchoMBC5(nombreFichero); break; // ROM + MBC5 + RAM
                case 0x1B: cartucho = new CartuchoMBC5(nombreFichero); break; // ROM + MBC5 + RAM + BATTERY
            //				case 0x1C: cartucho = new CartuchoMBC5(nombreFichero); break; // ROM + MBC5 + RUMBLE
            //				case 0x1D: cartucho = new CartuchoMBC5(nombreFichero); break; // ROM + MBC5 + RUMBLE + SRAM
            //				case 0x1E: cartucho = new CartuchoMBC5(nombreFichero); break; // ROM + MBC5 + RUMBLE + SRAM + BATTERY
            //				case 0x1F: cartucho = new CartuchoMBC0(nombreFichero); break; // POCKET CAMERA

            //				case 0xFD: cartucho = new CartuchoMBC0(nombreFichero); break; // BANDAI TAMA5
            //				case 0xFE: cartucho = new CartuchoMBC3(nombreFichero); break; // HUDSON HuC-3
            //				case 0xFF: cartucho = new CartuchoMBC1(nombreFichero); break; // HUDSON HuC-1

                default: throw new System.Exception("[ERROR] Tipo de cartucho " + rom[0x0147] + " desconocido");
            }

            if (rom[0x143] == 0x80) throw new System.Exception("[ERROR] GameBoy Color no soportada");
            //			if (rom[0x146] != 0x00) throw new System.Exception("[ERROR] SuperGameBoy no soportada");

            return cartucho;
        }
示例#2
0
        /// <summary>Crea un tipo especifico de cartucho</summary>
        /// <param name="nombreFichero">Ruta al fichero del cartucho</param>
        /// <returns>Cartucho listo para leer y escribir</returns>
        public static Cartucho cargarCartucho(string nombreFichero)
        {
            Cartucho cartucho;
            // Carga los primeros 16 kb del cartucho (tamanyo minimo) para conocer el tipo de cartucho
            FileStream fs = File.OpenRead(nombreFichero);

            byte[] rom = new byte[0x4000];
            fs.Read(rom, 0, 0x4000);
            fs.Close();

            switch (rom[0x0147])
            {
            case 0x00: cartucho = new CartuchoMBC0(nombreFichero); break;                     // ROM Only

            case 0x01: cartucho = new CartuchoMBC1(nombreFichero); break;                     // ROM + MBC1

            case 0x02: cartucho = new CartuchoMBC1(nombreFichero); break;                     // ROM + MBC1 + RAM

            case 0x03: cartucho = new CartuchoMBC1(nombreFichero); break;                     // ROM + MBC1 + RAM + BATTERY

//				case 0x04:
            case 0x05: cartucho = new CartuchoMBC2(nombreFichero); break;                     // ROM + MBC2

            case 0x06: cartucho = new CartuchoMBC2(nombreFichero); break;                     // ROM + MBC2 + BATTERY

//				case 0x07:
            case 0x08: cartucho = new CartuchoMBC0(nombreFichero); break;                     // ROM + RAM

            case 0x09: cartucho = new CartuchoMBC0(nombreFichero); break;                     // ROM + RAM + BATTERY

//				case 0x0A:
//				case 0x0B: cartucho = new CartuchoMBC0(nombreFichero); break; // ROM + MMM01
//				case 0x0C: cartucho = new CartuchoMBC0(nombreFichero); break; // ROM + MMM01 + SRAM
//				case 0x0D: cartucho = new CartuchoMBC0(nombreFichero); break; // ROM + MMM01 + SRAM + BATTERY
//				case 0x0E:
//				case 0x0F: cartucho = new CartuchoMBC3(nombreFichero); break; // ROM + MBC3 + TIMER + BATTERY
//				case 0x10: cartucho = new CartuchoMBC3(nombreFichero); break; // ROM + MBC3 + TIMER + RAM + BATTERY
            case 0x11: cartucho = new CartuchoMBC3(nombreFichero); break;                     // ROM + MBC3

            case 0x12: cartucho = new CartuchoMBC3(nombreFichero); break;                     // ROM + MBC3 + RAM

            case 0x13: cartucho = new CartuchoMBC3(nombreFichero); break;                     // ROM + MBC3 + RAM + BATTERY

//				case 0x14:
//				case 0x15: cartucho = new CartuchoMBC4(nombreFichero); break; // ROM + MBC4
//				case 0x16: cartucho = new CartuchoMBC4(nombreFichero); break; // ROM + MBC4 + RAM
//				case 0x17: cartucho = new CartuchoMBC4(nombreFichero); break; // ROM + MBC4 + RAM + BATTERY
//				case 0x18:
            case 0x19: cartucho = new CartuchoMBC5(nombreFichero); break;                     // ROM + MBC5

            case 0x1A: cartucho = new CartuchoMBC5(nombreFichero); break;                     // ROM + MBC5 + RAM

            case 0x1B: cartucho = new CartuchoMBC5(nombreFichero); break;                     // ROM + MBC5 + RAM + BATTERY
//				case 0x1C: cartucho = new CartuchoMBC5(nombreFichero); break; // ROM + MBC5 + RUMBLE
//				case 0x1D: cartucho = new CartuchoMBC5(nombreFichero); break; // ROM + MBC5 + RUMBLE + SRAM
//				case 0x1E: cartucho = new CartuchoMBC5(nombreFichero); break; // ROM + MBC5 + RUMBLE + SRAM + BATTERY
//				case 0x1F: cartucho = new CartuchoMBC0(nombreFichero); break; // POCKET CAMERA

//				case 0xFD: cartucho = new CartuchoMBC0(nombreFichero); break; // BANDAI TAMA5
//				case 0xFE: cartucho = new CartuchoMBC3(nombreFichero); break; // HUDSON HuC-3
//				case 0xFF: cartucho = new CartuchoMBC1(nombreFichero); break; // HUDSON HuC-1

            default: throw new System.Exception("[ERROR] Tipo de cartucho " + rom[0x0147] + " desconocido");
            }

            if (rom[0x143] == 0x80)
            {
                throw new System.Exception("[ERROR] GameBoy Color no soportada");
            }
//			if (rom[0x146] != 0x00) throw new System.Exception("[ERROR] SuperGameBoy no soportada");

            return(cartucho);
        }