⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cabal.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   if(!load_rom("cabal_01.bin",&RAM[0x30000],0x10000)) return;	// SPR GFX   if(!load_rom("cabal_02.bin",&RAM[0x20000],0x10000)) return;	// SPR GFX   if(!load_rom("cabal_03.bin",&RAM[0x10000],0x10000)) return;	// SPR GFX   if(!load_rom("cabal_04.bin",&RAM[0x00000],0x10000)) return;	// SPR GFX   if(!load_rom("cabal_08.bin",&RAM[0x70000],0x10000)) return;	// SPR GFX   if(!load_rom("cabal_07.bin",&RAM[0x60000],0x10000)) return;	// SPR GFX   if(!load_rom("cabal_06.bin",&RAM[0x50000],0x10000)) return;	// SPR GFX   if(!load_rom("cabal_05.bin",&RAM[0x40000],0x10000)) return;	// SPR GFX   tb=0x10000;   for(ta=0;ta<0x40000;ta++){      tc=RAM[ta];      GFX[tb+3]=((tc&0x80)>>7)<<1;      GFX[tb+2]=((tc&0x40)>>6)<<1;      GFX[tb+1]=((tc&0x20)>>5)<<1;      GFX[tb+0]=((tc&0x10)>>4)<<1;      GFX[tb+3]|=((tc&0x08)>>3)<<0;      GFX[tb+2]|=((tc&0x04)>>2)<<0;      GFX[tb+1]|=((tc&0x02)>>1)<<0;      GFX[tb+0]|=((tc&0x01)>>0)<<0;      tc=RAM[ta+0x40000];      GFX[tb+3]|=((tc&0x80)>>7)<<3;      GFX[tb+2]|=((tc&0x40)>>6)<<3;      GFX[tb+1]|=((tc&0x20)>>5)<<3;      GFX[tb+0]|=((tc&0x10)>>4)<<3;      GFX[tb+3]|=((tc&0x08)>>3)<<2;      GFX[tb+2]|=((tc&0x04)>>2)<<2;      GFX[tb+1]|=((tc&0x02)>>1)<<2;      GFX[tb+0]|=((tc&0x01)>>0)<<2;      tb+=4;   }   if(!load_rom("cabal_12.bin",&RAM[0x20000],0x10000)) return;	// BG0 GFX   if(!load_rom("cabal_13.bin",&RAM[0x30000],0x10000)) return;	// BG0 GFX   if(!load_rom("cabal_14.bin",&RAM[0x10000],0x10000)) return;	// BG0 GFX   if(!load_rom("cabal_15.bin",&RAM[0x00000],0x10000)) return;	// BG0 GFX   if(!load_rom("cabal_18.bin",&RAM[0x60000],0x10000)) return;	// BG0 GFX   if(!load_rom("cabal_19.bin",&RAM[0x70000],0x10000)) return;	// BG0 GFX   if(!load_rom("cabal_16.bin",&RAM[0x50000],0x10000)) return;	// BG0 GFX   if(!load_rom("cabal_17.bin",&RAM[0x40000],0x10000)) return;	// BG0 GFX   tb=0x110000;   for(ta=0;ta<0x40000;ta+=2){      tc=RAM[ta];      GFX[tb+3]=((tc&0x80)>>7)<<1;      GFX[tb+2]=((tc&0x40)>>6)<<1;      GFX[tb+1]=((tc&0x20)>>5)<<1;      GFX[tb+0]=((tc&0x10)>>4)<<1;      GFX[tb+3]|=((tc&0x08)>>3)<<0;      GFX[tb+2]|=((tc&0x04)>>2)<<0;      GFX[tb+1]|=((tc&0x02)>>1)<<0;      GFX[tb+0]|=((tc&0x01)>>0)<<0;      tc=RAM[ta+0x40000];      GFX[tb+3]|=((tc&0x80)>>7)<<3;      GFX[tb+2]|=((tc&0x40)>>6)<<3;      GFX[tb+1]|=((tc&0x20)>>5)<<3;      GFX[tb+0]|=((tc&0x10)>>4)<<3;      GFX[tb+3]|=((tc&0x08)>>3)<<2;      GFX[tb+2]|=((tc&0x04)>>2)<<2;      GFX[tb+1]|=((tc&0x02)>>1)<<2;      GFX[tb+0]|=((tc&0x01)>>0)<<2;      tb+=4;      tc=RAM[ta+1];      GFX[tb+3]=((tc&0x80)>>7)<<1;      GFX[tb+2]=((tc&0x40)>>6)<<1;      GFX[tb+1]=((tc&0x20)>>5)<<1;      GFX[tb+0]=((tc&0x10)>>4)<<1;      GFX[tb+3]|=((tc&0x08)>>3)<<0;      GFX[tb+2]|=((tc&0x04)>>2)<<0;      GFX[tb+1]|=((tc&0x02)>>1)<<0;      GFX[tb+0]|=((tc&0x01)>>0)<<0;      tc=RAM[ta+0x40001];      GFX[tb+3]|=((tc&0x80)>>7)<<3;      GFX[tb+2]|=((tc&0x40)>>6)<<3;      GFX[tb+1]|=((tc&0x20)>>5)<<3;      GFX[tb+0]|=((tc&0x10)>>4)<<3;      GFX[tb+3]|=((tc&0x08)>>3)<<2;      GFX[tb+2]|=((tc&0x04)>>2)<<2;      GFX[tb+1]|=((tc&0x02)>>1)<<2;      GFX[tb+0]|=((tc&0x01)>>0)<<2;      tb+=12;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=8;}}   }   for(ta=0;ta<0x210000;ta++){      GFX[ta]^=15;   }   if(!load_rom("cabal_24.bin", RAM, 0x10000)) return;	// MAIN 68000   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("cabal_22.bin", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   if(!load_rom("cabal_23.bin", RAM, 0x10000)) return;	// MAIN 68000   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20000]=RAM[ta];   }   if(!load_rom("cabal_21.bin", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20001]=RAM[ta];   }   /*-------[SOUND SYSTEM INIT]-------*/   Z80ROM=RAM+0x20000;   if(!load_rom("cabal_11.bin", Z80ROM, 0x10000)) return;	// Z80 SOUND ROM   // Apply Speed Patch   // -----------------   Z80ROM[0x0120]=0xD3;	// OUTA (AAh)   Z80ROM[0x0121]=0xAA;	//   SetStopZ80Mode2(0x0110);   // Setup Z80 memory map   // --------------------   AddZ80AROMBase(Z80ROM, 0x0038, 0x0066);   AddZ80AReadByte(0x0000, 0x27FF, NULL,                  	Z80ROM+0x0000);	// Z80 ROM/RAM   AddZ80AReadByte(0x400E, 0x400F, YM2151ReadZ80,         	NULL);		// YM2151 I/O   AddZ80AReadByte(0x4000, 0x400D, CabalSoundReadZ80,     	NULL);		// 68000 + OTHER I/O   AddZ80AReadByte(0x8000, 0xFFFF, NULL,			Z80ROM+0x8000);	// MORE ROM   AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80,		NULL);		// <bad reads>   AddZ80AReadByte(-1, -1, NULL, NULL);   AddZ80AWriteByte(0x2000, 0x27FF, NULL,                   	Z80ROM+0x2000);	// Z80 RAM   AddZ80AWriteByte(0x400E, 0x400F, YM2151WriteZ80,         	NULL);		// YM2151 I/O   AddZ80AWriteByte(0x4000, 0x400D, CabalSoundWriteZ80,     	NULL);		// 68000 + OTHER I/O   AddZ80AWriteByte(0x0000, 0xFFFF, DefBadWriteZ80,		NULL);		// <bad writes>   AddZ80AWriteByte(-1, -1, NULL, NULL);   AddZ80AReadPort(0x00, 0xFF, DefBadReadZ80,           NULL);   AddZ80AReadPort(  -1,   -1, NULL,                    NULL);   AddZ80AWritePort(0xAA, 0xAA, StopZ80Mode2,           NULL);   AddZ80AWritePort(0x00, 0xFF, DefBadWriteZ80,         NULL);   AddZ80AWritePort(  -1,   -1, NULL,                   NULL);   AddZ80AInit();   if(!(PCMROM = AllocateMem(0x20000))) return;   if(!load_rom("cabal_09.bin", PCMROM+0x00000, 0x10000)) return;   if(!load_rom("cabal_10.bin", PCMROM+0x10000, 0x10000)) return;     tc = 0x102;     for(ta=0;ta<5;ta++,tc+=2){        tb = ReadWord(&PCMROM[tc+0x00000]);        smp16_romlist_chip_a[ta].data = PCMROM+0x00000+(tb+2);        smp16_romlist_chip_a[ta].size = ReadWord68k(&PCMROM[tb+0x00000]);        smp16_romlist_chip_a[ta].type = 0;     }     tc = 0x102;     for(ta=0;ta<7;ta++,tc+=2){        tb = ReadWord(&PCMROM[tc+0x10000]);        smp16_romlist_chip_b[ta].data = PCMROM+0x10000+(tb+2);        smp16_romlist_chip_b[ta].size = ReadWord68k(&PCMROM[tb+0x10000]);        smp16_romlist_chip_b[ta].type = 0;     }   /*-----------------------*/   memset(RAM+0x00000,0x00,0x20000);   memset(RAM+0x05400,0xFF,0x00100);   RAMSize=0x30000;   set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr_rev);   InitPaletteMap(RAM+0x4C00, 0x40, 0x10, 0x1000);   // 68000 Speed hack   // ----------------   WriteWord68k(&ROM[0x04FE],0x4EF9);   WriteLong68k(&ROM[0x0500],0x00000300);   WriteWord68k(&ROM[0x0300],0x5279);   WriteLong68k(&ROM[0x0302],0x0004003E);   WriteLong68k(&ROM[0x0306],0x13FC0000);	// move.b #$00,$AA0000   WriteLong68k(&ROM[0x030A],0x00AA0000);	//   WriteWord68k(&ROM[0x030E],0x6100-16);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x40000);   ByteSwap(RAM,0x20000);   AddMemFetch(0x000000, 0x03FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x040000, 0x043FFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadByte(0x060000, 0x0607FF, NULL, RAM+0x004000);			// FG0 RAM   AddReadByte(0x0E8000, 0x0E800F, CabalSoundRead68k, NULL);		// COIN RAM   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x040000, 0x043FFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadWord(0x060000, 0x0607FF, NULL, RAM+0x004000);			// FG0 RAM   AddReadWord(0x0A0000, 0x0A001F, NULL, RAM+0x005410);			// INPUT RAM   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x040000, 0x043FFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteByte(0x060000, 0x0607FF, NULL, RAM+0x004000);		// FG0 RAM   AddWriteByte(0x0E8000, 0x0E800F, CabalSoundWrite68k, NULL);		// SOUND COMM   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x040000, 0x043FFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteWord(0x060000, 0x0607FF, NULL, RAM+0x004000);		// FG0 RAM   AddWriteWord(0x080000, 0x0803FF, NULL, RAM+0x004800);		// BG0 RAM   AddWriteWord(0x0E0000, 0x0E07FF, NULL, RAM+0x004C00);		// COLOR RAM   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers... }void ClearCabal(void){   /*#ifdef RAINE_DEBUG      save_debug("ROM.bin",ROM,0x040000,1);      save_debug("RAM.bin",RAM,0x040000,1);      //save_debug("GFX.bin",GFX,0x210000,0);   #endif*/}void ExecuteCabalFrame(void){   static int coin_toggle;   if((RAM[0x5404]&0x07)!=7){      if(coin_toggle==0){         coin_toggle=1;      }      else{         RAM[0x5404]|=0x07;      }   }   else{      coin_toggle=0;   }   // Main 68000 (8MHz)   // -----------------   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60));	// M68000 12MHz (60fps)   cpu_interrupt(CPU_68K_0, 1);   // Sound Z80 (4MHz)   // ----------------   cpu_execute_cycles(CPU_Z80_0, 4000000/60);		// Sound Z80   /*#ifdef RAINE_DEBUG      print_debug("Z80PC0:%04x\n",z80pc);   #endif*/   cpu_interrupt(CPU_Z80_0, 0x38);   cpu_int_nmi(CPU_Z80_0);}void DrawCabal(void){   int x,y,x16,y16;   int zz,zzzz,ta;   UINT8 *MAP;   ClearPaletteMap();   x16=16;   y16=16;   zzzz=0x20;   zzzz=zzzz&0x3FF;   for(y=(16+y16);y<(224+32);y+=16){   zz=zzzz;   for(x=(16+x16);x<(256+32);x+=16){      MAP_PALETTE_MAPPED_NEW(               (ReadWord(&RAM[0x4800+zz])>>12)|0x20,  // 0x20 o 0x30 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -