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

📄 rainbow.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 5 页
字号:
   {   "ri_m01.rom", 0x00080000, 0xb76c9168, 0, 0, 0, },   {   "ri_m02.rom", 0x00080000, 0x1b87ecf0, 0, 0, 0, },   {   "ri_m03.rom", 0x00020000, 0x3ebb0fb8, 0, 0, 0, },   {   "ri_m04.rom", 0x00020000, 0x91625e7f, 0, 0, 0, },   {       "b22-14", 0x00010000, 0x113c1a5b, 0, 0, 0, },   {       "b22-13", 0x00010000, 0x2fda099f, 0, 0, 0, },   {       "b22-12", 0x00010000, 0x67a76dc6, 0, 0, 0, },   {    "ri_04.rom", 0x00010000, 0x4caa53bd, 0, 0, 0, },   {    "ri_03.rom", 0x00010000, 0x4a4cb785, 0, 0, 0, },   {    "ri_02.rom", 0x00010000, 0x4dead71f, 0, 0, 0, },   {    "ri_01.rom", 0x00010000, 0x50690880, 0, 0, 0, },   {      "jb1_f89", 0x00010000, 0x0810d327, 0, 0, 0, },   {           NULL,          0,          0, 0, 0, 0, },};struct GAME_MAIN game_rainbow_islands_extra ={   rainbow_islands_extra_dirs,   rainbow_islands_extra_roms,   rainbow_islands_inputs,   rainbow_islands_dsw,   rainbow_islands_romsw,   LoadRainbowE,   ClearRainbow,   &rainbow_islands_video,   ExecuteRainbowFrame,   "rainbowe",   "Rainbow Islands (extra)",   "儗僀儞儃乕傾僀儔儞僪僄僉僗僩儔",   COMPANY_ID_TAITO,   "B22",   1988,   taito_ym2151_sound,   GAME_PLATFORM,};#if 0static mapper_direct *col_mapper[3] ={   &Map_15bit_xBGR,		// Original   &Map_15bit_xBGR,		// Extra   //&Map_12bit_xBGR_Rev,		// Bootleg};#endifstatic UINT8 *RAM_VIDEO;static UINT8 *RAM_SCROLL;static UINT8 *RAM_OBJECT;static UINT8 *GFX_BG0;static UINT8 *GFX_BG0_SOLID;static UINT8 *GFX_SPR;static UINT8 *GFX_SPR_SOLID;static int romset;      // 0=ORIGINAL; 1=EXTRA; 2=JUMPINGstatic int subset;static UINT16 JumpingRead_b800(UINT16 offset);static void Jumpingsound_w(UINT32 offset,UINT8 data);static UINT8 *CBANK[8];static int CChip_Bank=0;static int CChip_ID=0x01;static int CChipReadB(UINT32 address){   int i;   i=address&0x0FFF;   switch(i){      case 0x803:         return(CChip_ID);      break;      case 0xC01:         return(CChip_Bank);      break;      default:#ifdef RAINE_DEBUG	if(i>0x20){	  print_debug("CCRB[%02x][%03x](%02x)\n",CChip_Bank,i,CBANK[CChip_Bank][i]);	  print_ingame(60,"CCRB[%02x][%03x](%02x)",CChip_Bank,i,CBANK[CChip_Bank][i]);	}#endif         return(CBANK[CChip_Bank][i]);      break;   }}static int CChipReadW(UINT32 address){   return(CChipReadB(address+1));}static void CChipWriteB(UINT32 address, int data){   int i;   i=address&0x0FFF;   switch(i){      case 0x11:                                // cchip[0][0x011]: COIN LEDS         CBANK[CChip_Bank][i]=data;         switch_led(0,(data>>4)&1);             // Coin A [Coin Inserted]         switch_led(1,(data>>5)&1);             // Coin B [Coin Inserted]         switch_led(2,((data>>6)&1)^1);         // Coin A [Ready for coins]         //switch_led(3,((data>>7)&1)^1);       // Coin B [Ready for coins]      break;      case 0x803:      break;      case 0xC01:         CChip_Bank=data&7;      break;      case 0x283:         CBANK[0][i]=data;      break;      case 0x201:      switch(CBANK[0][0x283]){         case 0x00: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x00; CBANK[1][0x28b]=0x00; break;         case 0x01: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x03; CBANK[1][0x28b]=0x60; break;         case 0x02: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x07; CBANK[1][0x28b]=0x98; break;         case 0x03: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x0C; CBANK[1][0x28b]=0xA8; break;         case 0x04: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x11; CBANK[1][0x28b]=0xB8; break;         case 0x05: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x15; CBANK[1][0x28b]=0xF0; break;         case 0x06: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x1B; CBANK[1][0x28b]=0x00; break;         case 0x07: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x21; CBANK[1][0x28b]=0xC0; break;         case 0x08: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x25; CBANK[1][0x28b]=0xB8; break;         case 0x09: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x28; CBANK[1][0x28b]=0xF0; break;         case 0x0A: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x2C; CBANK[1][0x28b]=0x00; break;         case 0x0B: CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x30; CBANK[1][0x28b]=0xC0; break;         default:   CBANK[1][0x285]=0x00; CBANK[1][0x287]=0x03; CBANK[1][0x289]=0x40; CBANK[1][0x28b]=0x00; break;      }      switch(CBANK[0][0x283]){         case 0x00: CBANK[1][0x005]=0x02; CBANK[1][0x003]=0xDC; break;         case 0x01: CBANK[1][0x005]=0x03; CBANK[1][0x003]=0xB4; break;         case 0x02: CBANK[1][0x005]=0x04; CBANK[1][0x003]=0x44; break;         case 0x03: CBANK[1][0x005]=0x04; CBANK[1][0x003]=0xFC; break;         case 0x04: CBANK[1][0x005]=0x03; CBANK[1][0x003]=0x7C; break;         case 0x05: CBANK[1][0x005]=0x04; CBANK[1][0x003]=0x8C; break;         case 0x06: CBANK[1][0x005]=0x06; CBANK[1][0x003]=0x3C; break;         case 0x07: CBANK[1][0x005]=0x03; CBANK[1][0x003]=0x74; break;         default:   CBANK[1][0x005]=0x02; CBANK[1][0x003]=0xDC; break;      }      CBANK[1][0x201]=0xFF;      break;      default:      break;   }}static void CChipWriteW(UINT32 address, int data){   CChipWriteB(address+1,data&0xFF);}/*0 - Insect1 - Combat2 - Monster3 - Toy4 - Doh5 - Robot6 - Dragon7 - Magical8 - Darius9 - Bubble*/static UINT8 rmap[40] ={   (8*4)+0,(8*4)+1,(8*4)+2,(8*4)+3,   (7*4)+0,(7*4)+1,(7*4)+2,(7*4)+3,   (6*4)+0,(6*4)+1,(6*4)+2,(6*4)+3,   (5*4)+0,(5*4)+1,(5*4)+2,(5*4)+3,   (4*4)+0,(4*4)+1,(4*4)+2,(4*4)+3,   (3*4)+0,(3*4)+1,(3*4)+2,(3*4)+3,   (2*4)+0,(2*4)+1,(2*4)+2,(2*4)+3,   (1*4)+0,(1*4)+1,(1*4)+2,(1*4)+3,   (0*4)+0,(0*4)+1,(0*4)+2,(0*4)+3,   (9*4)+0,(9*4)+1,(9*4)+2,(9*4)+3,};static UINT8 rmap_mask[16] ={   0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0};static void LoadActual(void){   int ta,tb,tc;   UINT8 *TMP;   RAMSize=0x34000;   if(!(ROM=AllocateMem(0xA0000))) return;   if(!(RAM=AllocateMem(RAMSize))) return;      // $1B004   if(!(GFX=AllocateMem(0x240000))) return;   GFX_SPR      = GFX+0x000000;   GFX_BG0      = GFX+0x140000;   CBANK[0]=RAM+0x20000;   CBANK[1]=RAM+0x20800;   CBANK[2]=RAM+0x21000;   CBANK[3]=RAM+0x21800;   CBANK[4]=RAM+0x22000;   CBANK[5]=RAM+0x22800;   CBANK[6]=RAM+0x23000;   CBANK[7]=RAM+0x23800;   if(romset==2){       // Bootleg      Z80ROM=RAM+0x24000;      if(!load_rom("jb1_cd67", Z80ROM, 0x10000)) return;               // Z80 SOUND ROM      Z80ROM[0x186]=0xC3;       // JP 0068h      Z80ROM[0x187]=0x68;       //      Z80ROM[0x188]=0x00;       //      Z80ROM[0x068]=0xF3;       // DI      Z80ROM[0x069]=0xCD;       // CALL 02B6h      Z80ROM[0x06A]=0xB6;       //      Z80ROM[0x06B]=0x02;       //      Z80ROM[0x06C]=0xFB;       // EI      Z80ROM[0x06D]=0xCD;       // CALL 1C8Fh      Z80ROM[0x06E]=0x8F;       //      Z80ROM[0x06F]=0x1C;       //      Z80ROM[0x070]=0xCD;       // CALL 04DCh      Z80ROM[0x071]=0xDC;       //      Z80ROM[0x072]=0x04;       //      Z80ROM[0x073]=0xD3;       // OUTA (AAh)      Z80ROM[0x074]=0xAA;       //      Z80ROM[0x075]=0xCD;       // CALL 1C8Fh      Z80ROM[0x076]=0x8F;       //      Z80ROM[0x077]=0x1C;       //      Z80ROM[0x078]=0xCD;       // CALL 04DCh      Z80ROM[0x079]=0xDC;       //      Z80ROM[0x07A]=0x04;       //      Z80ROM[0x07B]=0xD3;       // OUTA (AAh)      Z80ROM[0x07C]=0xAA;       //      Z80ROM[0x07D]=0xCD;       // CALL 1C8Fh      Z80ROM[0x07E]=0x8F;       //      Z80ROM[0x07F]=0x1C;       //      Z80ROM[0x080]=0xCD;       // CALL 04DCh      Z80ROM[0x081]=0xDC;       //      Z80ROM[0x082]=0x04;       //      Z80ROM[0x083]=0xD3;       // OUTA (AAh)      Z80ROM[0x084]=0xAA;       //      Z80ROM[0x085]=0xC3;       // JP 0068h      Z80ROM[0x086]=0x68;       //      Z80ROM[0x087]=0x00;       //   AddZ80AROMBase(Z80ROM, 0x0038, 0x0066);   AddZ80AReadByte(0xB000, 0xB001, YM2203AReadZ80,              NULL);   AddZ80AReadByte(0xB400, 0xB401, YM2203BReadZ80,              NULL);   AddZ80AReadByte(0xB800, 0xB800, JumpingRead_b800,            NULL);   AddZ80AReadByte(0x0000, 0xFFFF, NULL,                        Z80ROM+0x0000); // Z80 ROM/RAM   AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80,               NULL);   AddZ80AReadByte(    -1,     -1, NULL,                        NULL);   AddZ80AWriteByte(0xB000, 0xB001, YM2203AWriteZ80,            NULL);   AddZ80AWriteByte(0xB400, 0xB401, YM2203BWriteZ80,            NULL);   AddZ80AWriteByte(0x0000, 0xFFFF, NULL,                       Z80ROM+0x0000); // Z80 RAM   AddZ80AWriteByte(0x0000, 0xFFFF, DefBadWriteZ80,             NULL);   AddZ80AWriteByte(    -1,     -1, NULL,                       NULL);   AddZ80AReadPort(0x00, 0xFF, DefBadReadZ80,           NULL);   AddZ80AReadPort(  -1,   -1, NULL,                    NULL);   AddZ80AWritePort(0xAA, 0xAA, StopZ80,                NULL);  // Trap Idle Z80   AddZ80AWritePort(0x00, 0xFF, DefBadWriteZ80,         NULL);   AddZ80AWritePort(  -1,   -1, NULL,                   NULL);   AddZ80AInit();   }   else{                // Original/Extra   /*-----[Sound Setup]-----*/   Z80ROM=RAM+0x24000;   if(!load_rom("b22-14", Z80ROM, 0x10000)) return;         // Z80 SOUND ROM/*   Z80ROM[0x0268]=0x00;         // Fix timers causing sound drops   Z80ROM[0x0269]=0x00;   Z80ROM[0x026C]=0x00;   Z80ROM[0x026D]=0x00;   Z80ROM[0x0076]=0x00;   Z80ROM[0x0077]=0x00;*/   AddTaitoYM2151(0x0259, 0x01E8, 0x10000, NULL, NULL);   /*-----------------------*/   }   if(romset==1){   if(!load_rom("ri_m01.rom", ROM, 0x80000)) return;   tb=0;   for(ta=0;ta<0x80000;ta+=2){      GFX_BG0[tb++]=ROM[ta+1]>>4;      GFX_BG0[tb++]=ROM[ta+1]&15;      GFX_BG0[tb++]=ROM[ta+0]>>4;      GFX_BG0[tb++]=ROM[ta+0]&15;   }   if(!load_rom("ri_m02.rom", ROM, 0x80000)) return;   tb=0;   for(ta=0;ta<0x80000;ta+=2){      GFX_SPR[tb++]=ROM[ta+1]>>4;      GFX_SPR[tb++]=ROM[ta+1]&15;      GFX_SPR[tb++]=ROM[ta+0]>>4;      GFX_SPR[tb++]=ROM[ta+0]&15;   }   if(!load_rom("b22-12",ROM+0x00000,0x10000)) return;   if(!load_rom("b22-13",ROM+0x10000,0x10000)) return;   for(ta=0;ta<0x10000;ta++){      GFX_SPR[tb++]=ROM[ta+0x10000]>>4;      GFX_SPR[tb++]=ROM[ta+0x10000]&15;      GFX_SPR[tb++]=ROM[ta]>>4;      GFX_SPR[tb++]=ROM[ta]&15;   }   if(!load_rom("ri_01.rom", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("ri_02.rom", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   if(!load_rom("ri_03.rom", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20000]=RAM[ta];   }   if(!load_rom("ri_04.rom", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20001]=RAM[ta];   }   if(!load_rom("ri_m03.rom", RAM, 0x20000)) return;   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta+0x40000]=RAM[ta];   }   if(!load_rom("ri_m04.rom", RAM, 0x20000)) return;   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta+0x40001]=RAM[ta];   }   if(!load_rom("jb1_f89", RAM, 0x10000)) return;             // BOOTLEG C-CHIP   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x80000]=0;      ROM[ta+ta+0x80001]=RAM[ta];   }   for(tc=0;tc<40;tc++){   for(ta=0;ta<0x10;ta++){      if(rmap_mask[ta]!=0){         tb=ta+0x4950;         ROM[tb+tb+0x80000+(tc<<5)]=0;         ROM[tb+tb+0x80001+(tc<<5)]=RAM[tb+(rmap[tc]<<4)];      }   }   }   }   if(romset==0){   if(!load_rom("ri_m01.rom", ROM, 0x80000)) return;   // Came From Extra   tb=0;   for(ta=0;ta<0x80000;ta+=2){      GFX_BG0[tb++]=ROM[ta+1]>>4;      GFX_BG0[tb++]=ROM[ta+1]&15;      GFX_BG0[tb++]=ROM[ta+0]>>4;      GFX_BG0[tb++]=ROM[ta+0]&15;   }   if(!load_rom("ri_m02.rom", ROM, 0x80000)) return;   // Came From Extra

⌨️ 快捷键说明

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