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

📄 gcpball.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   if(!load_rom("u56", PCMROM+0x080000, 0x200000)) return;		// M6585   ADPCMSetBuffers(((struct ADPCMinterface*)&m6295_interface),PCMROM,0x40000);      m6585_romlist_chip_a[0].data = PCMROM+0x080000;   m6585_romlist_chip_a[1].data = PCMROM+0x180000;   if(!load_rom("u43.2", ROM+0x000000, 0x80000)) return;	// BASE ROM   memset(ROM+0x080000,0x00,0x080000);				// EMPTY ROM   if(!load_rom("u45.3", ROM+0x100000, 0x80000)) return;	// DATA ROM   if(!load_rom("u46.4", ROM+0x180000, 0x80000)) return;	// DATA ROM   ByteSwap(ROM,0x200000);   memset(RAM+0x00000,0x00,RAMSize);   memset(RAM+0x16000,0xFF,0x00200);   // eeprom save   WriteLong68k(&ROM[0x31DD6],0x00BB0000);   WriteLong68k(&ROM[0x31DDA],0x701F22D8);   WriteLong68k(&ROM[0x31DDE],0x51C8FFFC);   WriteWord68k(&ROM[0x31DE2],0x4E75);   // eeprom load   WriteLong68k(&ROM[0x31E2E],0x00BB0000);   WriteLong68k(&ROM[0x31E32],0x701F20D9);   WriteLong68k(&ROM[0x31E36],0x51C8FFFC);   WriteWord68k(&ROM[0x31E3A],0x4E75);   // speed hack   WriteLong68k(&ROM[0x02A00],0x4EF80100);   WriteLong68k(&ROM[0x00100],0x1200C239);   WriteLong68k(&ROM[0x00104],0x00FF22EC);   WriteLong68k(&ROM[0x00108],0xB101C200);   WriteWord68k(&ROM[0x0010C],0x6606);   WriteLong68k(&ROM[0x0010E],0x4CDF0003);   WriteWord68k(&ROM[0x00112],0x4E75);   WriteLong68k(&ROM[0x00114],0x13FC0000);   WriteLong68k(&ROM[0x00118],0x00AA0000);   WriteLong68k(&ROM[0x0011C],0x4EF80100);   // scroll sync   WriteLong68k(&ROM[0x00A9E],0x00000180);   WriteLong68k(&ROM[0x00180],0x13FC0000);   WriteLong68k(&ROM[0x00184],0x00AA0000);   WriteLong68k(&ROM[0x00188],0x4EF824AA);   // skip cpu idling on sound writes   WriteWord68k(&ROM[0x0BF7C],0x4E75);   set_colour_mapper(&col_Map_15bit_RRRRGGGGBBBBRGBx);   InitPaletteMap(RAM+0x15000, 0x80, 0x10, 0x8000);   EEPROM=RAM+0x16100;   add_eeprom(EEPROM, 0x80, EPR_INVALIDATE_ON_ROM_CHANGE);   ta = load_eeprom();   if(!ta) memset(EEPROM, 0x55, 0x80);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x200000);   ByteSwap(RAM,RAMSize);   AddMemFetch(0x000000, 0x1FFFFF, ROM+0x000000-0x000000);              // 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x1FFFFF, NULL, ROM+0x000000);                 // 68000 ROM   AddReadByte(0xFF0000, 0xFFFFFF, NULL, RAM+0x000000);                 // 68000 RAM   AddReadByte(0xC00000, 0xC03FFF, NULL, RAM+0x010000);                 // BG0/BG1/FG0 RAM   AddReadByte(0xC80000, 0xC80FFF, NULL, RAM+0x014000);                 // ? RAM   AddReadByte(0xD00000, 0xD00FFF, NULL, RAM+0x015000);                 // COLOR RAM   AddReadByte(0xD80000, 0xD800FF, grand_cross_pinball_ioc_rb, NULL);   // I/O   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x1FFFFF, NULL, ROM+0x000000);                 // 68000 ROM   AddReadWord(0xFF0000, 0xFFFFFF, NULL, RAM+0x000000);                 // 68000 RAM   AddReadWord(0xC00000, 0xC03FFF, NULL, RAM+0x010000);                 // BG0/BG1/FG0 RAM   AddReadWord(0xC80000, 0xC80FFF, NULL, RAM+0x014000);                 // ? RAM   AddReadWord(0xD00000, 0xD00FFF, NULL, RAM+0x015000);                 // COLOR RAM   AddReadWord(0xD80000, 0xD800FF, grand_cross_pinball_ioc_rw, NULL);   // I/O   AddReadWord(0xBB0000, 0xBB007F, NULL, EEPROM);                       // EEPROM FAKE   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0xFF0000, 0xFFFFFF, NULL, RAM+0x000000);                // 68000 RAM   AddWriteByte(0xC00000, 0xC03FFF, NULL, RAM+0x010000);                // BG0/BG1/FG0 RAM   AddWriteByte(0xC80000, 0xC80FFF, NULL, RAM+0x014000);                // ? RAM   AddWriteByte(0xD00000, 0xD00FFF, NULL, RAM+0x015000);                // COLOR RAM   AddWriteByte(0xD80000, 0xD800FF, grand_cross_pinball_ioc_wb, NULL);	// I/O   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0xFF0000, 0xFFFFFF, NULL, RAM+0x000000);                // 68000 RAM   AddWriteWord(0xC00000, 0xC03FFF, NULL, RAM+0x010000);                // BG0/BG1/FG0 RAM   AddWriteWord(0xC80000, 0xC80FFF, NULL, RAM+0x014000);                // ? RAM   AddWriteWord(0xD00000, 0xD00FFF, NULL, RAM+0x015000);                // COLOR RAM   AddWriteWord(0xD80000, 0xD800FF, grand_cross_pinball_ioc_ww, NULL);	// I/O   AddWriteWord(0xBB0000, 0xBB007F, NULL, EEPROM);                      // EEPROM FAKE   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();     // Set Starscream mem pointers...}void clear_grand_cross_pinball(void){   save_eeprom();   #ifdef RAINE_DEBUG   //save_debug("RAM.bin",RAM,RAMSize,1);   #endif}void execute_grand_cross_pinball_frame(void){   if(!M6585buffer_status(0))      cpu_interrupt(CPU_68K_0, 3);   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(16,60));	// M68000 16MHz (60fps)   cpu_interrupt(CPU_68K_0, 1);   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(1,60));	// Scroll Sync   cpu_interrupt(CPU_68K_0, 4);}static void draw_grand_cross_pinball_object(void){   int rx;   int x,y,zz;   int ta;   UINT8 *map;   UINT8 *RAM_BG;   // OBJECT      RAM_BG = RAM + 0x14000;      for(zz=0;zz<0x1000;zz+=0x10){         if(!(RAM_BG[zz+14]&0x80)){         x = (16 + ((RAM_BG[zz+6]<<8) | (RAM_BG[zz+4]<<0)))&0x7FFF;         y = ((320 + 16) - ((RAM_BG[zz+2]<<8) | (RAM_BG[zz+0]<<0)))&0x7FFF;            ta = ((RAM_BG[zz+12]<<8) | (RAM_BG[zz+10]<<0))&0x3FFF;            MAP_PALETTE_MAPPED_NEW(               (RAM_BG[zz+14]&0x0F) | 0x60,               16,               map            );            rx = (RAM_BG[zz+8]&0x07)+1;            switch(RAM_BG[zz+8]&0x18){            case 0x08:               do{                  if((x>16)&&(y>16)&&(x<224+32)&&(y<320+32)){                  if(GFX_SPR_SOLID[ta]!=0){                  if(GFX_SPR_SOLID[ta]==1)                     Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],320+48-y,x,map);                  else                     Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],320+48-y,x,map);                  }                  }                  ta++;                  x = (x+16)&0x7FFF;               }while(--rx);            break;            case 0x18:               x += ((rx-1)<<4);               x &= 0x7FFF;               do{                  if((x>16)&&(y>16)&&(x<224+32)&&(y<320+32)){                  if(GFX_SPR_SOLID[ta]!=0){                  if(GFX_SPR_SOLID[ta]==1)                     Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],320+48-y,x,map);                  else                     Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],320+48-y,x,map);                  }                  }                  ta++;                  x = (x-16)&0x7FFF;               }while(--rx);            break;            case 0x00:               //y -= ((rx-1)<<4);               //y &= 0x7FFF;               do{                  if((x>16)&&(y>16)&&(x<224+32)&&(y<320+32)){                  if(GFX_SPR_SOLID[ta]!=0){                  if(GFX_SPR_SOLID[ta]==1)                     Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],320+48-y,x,map);                  else                     Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],320+48-y,x,map);                  }                  }                  ta++;                  y = (y-16)&0x7FFF;               }while(--rx);            break;            case 0x10:               do{                  if((x>16)&&(y>16)&&(x<224+32)&&(y<320+32)){                  if(GFX_SPR_SOLID[ta]!=0){                  if(GFX_SPR_SOLID[ta]==1)                     Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],320+48-y,x,map);                  else                     Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],320+48-y,x,map);                  }                  }                  ta++;                  y = (y-16)&0x7FFF;               }while(--rx);            break;            }         }      }}void draw_grand_cross_pinball(void){   int x16,y16;   int x,y,zz,zzz,zzzz;   int ta;   UINT8 *map;   UINT8 *GFX_BG;   UINT8 *MSK_BG;   UINT8 *RAM_BG;   ClearPaletteMap();   // BG0   //if(bg0){      RAM_BG = RAM + 0x10000;      if(!(ReadWord(&RAM[0x16088])&0x0400)){         GFX_BG = GFX_BG0+0x000000;         MSK_BG = GFX_BG0_SOLID+0x0000;      }      else{         GFX_BG = GFX_BG0+0x100000;         MSK_BG = GFX_BG0_SOLID+0x1000;      }      MAKE_SCROLL_512x512_4_16(         ReadWord(&RAM[0x16014]),         ReadWord(&RAM[0x16016])+0x10      );      START_SCROLL_512x512_4_16(32,32,320,224);      ta=ReadWord(&RAM_BG[zz+0])&0x0FFF;      MAP_PALETTE_MAPPED_NEW(         (ReadWord(&RAM_BG[zz+2])&0x1F)+0x00,         16,         map      );      switch(ReadWord(&RAM_BG[zz+2])&0x0300){      case 0x0000: Draw16x16_Mapped_Rot(&GFX_BG[ta<<8],x,y,map); break;      case 0x0100: Draw16x16_Mapped_FlipY_Rot(&GFX_BG[ta<<8],x,y,map); break;      case 0x0200: Draw16x16_Mapped_FlipX_Rot(&GFX_BG[ta<<8],x,y,map); break;      case 0x0300: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG[ta<<8],x,y,map); break;      }      END_SCROLL_512x512_4_16();   //}   if(!(ReadWord(&RAM[0x16068])&0x8800))      draw_grand_cross_pinball_object();   // BG1   //if(bg1){      RAM_BG = RAM + 0x11000;      if(!(ReadWord(&RAM[0x16088])&0x0800)){         GFX_BG = GFX_BG0+0x200000;         MSK_BG = GFX_BG0_SOLID+0x2000;      }      else{         GFX_BG = GFX_BG0+0x300000;         MSK_BG = GFX_BG0_SOLID+0x3000;      }      MAKE_SCROLL_512x512_4_16(         ReadWord(&RAM[0x16018]),         ReadWord(&RAM[0x1601A])+0x10      );      START_SCROLL_512x512_4_16(32,32,320,224);      ta=ReadWord(&RAM_BG[zz+0])&0x0FFF;      if(MSK_BG[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            (ReadWord(&RAM_BG[zz+2])&0x1F)+0x30,            16,            map         );         if(MSK_BG[ta]==1){			// Some pixels; trans            switch(ReadWord(&RAM_BG[zz+2])&0x0300){            case 0x0000: Draw16x16_Trans_Mapped_Rot(&GFX_BG[ta<<8],x,y,map); break;            case 0x0100: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_BG[ta<<8],x,y,map); break;            case 0x0200: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_BG[ta<<8],x,y,map); break;            case 0x0300: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_BG[ta<<8],x,y,map); break;            }         }         else{					// all pixels; solid            switch(ReadWord(&RAM_BG[zz+2])&0x0300){            case 0x0000: Draw16x16_Mapped_Rot(&GFX_BG[ta<<8],x,y,map); break;            case 0x0100: Draw16x16_Mapped_FlipY_Rot(&GFX_BG[ta<<8],x,y,map); break;            case 0x0200: Draw16x16_Mapped_FlipX_Rot(&GFX_BG[ta<<8],x,y,map); break;            case 0x0300: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG[ta<<8],x,y,map); break;            }         }      }      END_SCROLL_512x512_4_16();   //}   if((ReadWord(&RAM[0x16068])&0x8800))      draw_grand_cross_pinball_object();   // FG0   //if(bg2){      RAM_BG = RAM + 0x12000;      MAKE_SCROLL_512x512_2_8(         ReadWord(&RAM[0x1601C]),         ReadWord(&RAM[0x1601E])+0x10      );      START_SCROLL_512x512_2_8(32,32,320,224);      ta=ReadWord(&RAM_BG[zz])&0x0FFF;      if(GFX_FG0_SOLID[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            (ReadWord(&RAM_BG[zz])>>12) | 0x70,            16,            map         );         if(GFX_FG0_SOLID[ta]==1)		// Some pixels; trans            Draw8x8_Trans_Mapped_Rot(&GFX_FG0[ta<<6],x,y,map);         else					// all pixels; solid            Draw8x8_Mapped_Rot(&GFX_FG0[ta<<6],x,y,map);      }      END_SCROLL_512x512_2_8();   //}}/*EXCELLENT SYSTEM - OBJECT RAM-----------------------------Byte | Bit(s) | Use-----+76543210+-----------------  0  |xxxxxxxx| X (low)  2  |xxxxxxxx| X (high)  4  |xxxxxxxx| Y (low)  6  |xxxxxxxx| Y (high)  E  |...x....| Flip X  E  |....x...| Flip Y  E  |.....xxx| Chain  A  |xxxxxxxx| Tile (low)  C  |xxxxxxxx| Tile (high)  E  |x.......| Disable  E  |....xxxx| Colour Bank*/

⌨️ 快捷键说明

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