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

📄 opwolf.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
      ROM[ta+ta+0x20001]=RAM[ta];   }   if(!load_rom("operwolf.09", Z80ROM2, 0x8000)) return;	// Z80 C-CHIP ROM   }   else{	// ORIGINAL   tb=0;   if(!load_rom("opwlf.13", RAM, 0x80000)) return;		// 8x8 TILES   for(ta=0;ta<0x80000;ta+=2){      GFX[tb++]=RAM[ta+1]>>4;      GFX[tb++]=RAM[ta+1]&15;      GFX[tb++]=RAM[ta+0]>>4;      GFX[tb++]=RAM[ta+0]&15;   }   if(!load_rom("opwlf.72", RAM, 0x80000)) return;		// 16x16 TILES   for(ta=0;ta<0x80000;ta+=2){      GFX[tb++]=RAM[ta+1]>>4;      GFX[tb++]=RAM[ta+1]&15;      GFX[tb++]=RAM[ta+0]>>4;      GFX[tb++]=RAM[ta+0]&15;   }   if(!load_rom("opwlf.40", RAM, 0x10000)) return;		// 68000 ROM   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("opwlf.30", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   if(!load_rom("opwlf.39", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20000]=RAM[ta];   }   if(!load_rom("opwlf.29", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20001]=RAM[ta];   }   if(!load_rom("operwolf.09", Z80ROM2, 0x8000)) return;	// Z80 C-CHIP ROM   }   /*--------[C-Chip Z80]---------*/   Z80ROM2[0x19B]=0xC3;   Z80ROM2[0x19C]=0x80;   Z80ROM2[0x19D]=0x00;   Z80ROM2[0x080]=0x21;   Z80ROM2[0x081]=0x1B;   Z80ROM2[0x082]=0xC0;   Z80ROM2[0x083]=0xD3;  // OUTA (AAh)   Z80ROM2[0x084]=0xAA;  //   Z80ROM2[0x0570]=0x18;   Z80ROM2[0x059E]=0x18;   SetStopZ80BMode2(0x019E);   memset(Z80ROM2+0x8000,0x00,0x8000);   AddZ80BROMBase(Z80ROM2, 0x0038, 0x0066);   AddZ80BReadByte(0x0000, 0xFFFF, NULL,                        Z80ROM2+0x0000); // Z80 ROM/RAM   AddZ80BReadByte(0x0000, 0xFFFF, DefBadReadZ80,               NULL);   AddZ80BReadByte(    -1,     -1, NULL,                        NULL);   AddZ80BWriteByte(0x0000, 0xFFFF, NULL,                       Z80ROM2+0x0000); // Z80 RAM   AddZ80BWriteByte(0x0000, 0xFFFF, DefBadWriteZ80,             NULL);   AddZ80BWriteByte(    -1,     -1, NULL,                       NULL);   AddZ80BReadPort(0x00, 0xFF, DefBadReadZ80,           NULL);   AddZ80BReadPort(  -1,   -1, NULL,                    NULL);   AddZ80BWritePort(0xAA, 0xAA, StopZ80BMode2,          NULL);   AddZ80BWritePort(0x00, 0xFF, DefBadWriteZ80,         NULL);   AddZ80BWritePort(  -1,   -1, NULL,                   NULL);   AddZ80BInit();   /*-----[Sound Setup]-----*/   Z80ROM=RAM+0x40000;   if(romset==0){   if(!load_rom("opwlf_s.10", Z80ROM, 0x10000)) return;		// Z80 SOUND ROM   }   else{   if(!load_rom("operwolf.30", Z80ROM, 0x10000)) return;	// Z80 SOUND ROM   }   tb=16;			// First Sample=1   for(ta=0;ta<(0x3C*7);ta+=7){      Z80ROM[ta+0x2F00]=tb>>16;      Z80ROM[ta+0x2F02]=tb>>8;      Z80ROM[ta+0x2F01]=tb;      tb+=16;			// Next Sample   }   AddTaitoYM2151(0x028A, 0x0219, 0x10000, (void *) OpWolfWriteADPCMA, (void *) OpWolfWriteADPCMB);   /*------[Sample Setup]--------*/   if(!(PCMROM=AllocateMem(0x80000))) return;   if(romset==0){   if(!load_rom("opwlf_s.21", PCMROM, 0x80000)) return;   }   else{   if(!(TMP=AllocateMem(0x80000))) return;   if(!load_rom("operwolf.29", TMP+0x00000, 0x10000)) return;   if(!load_rom("operwolf.28", TMP+0x10000, 0x10000)) return;   if(!load_rom("operwolf.27", TMP+0x20000, 0x10000)) return;   if(!load_rom("operwolf.26", TMP+0x30000, 0x10000)) return;   if(!load_rom("operwolf.25", TMP+0x40000, 0x10000)) return;   if(!load_rom("operwolf.24", TMP+0x50000, 0x10000)) return;   if(!load_rom("operwolf.23", TMP+0x60000, 0x10000)) return;   if(!load_rom("operwolf.22", TMP+0x70000, 0x10000)) return;   for(ta=0;ta<0x40000;ta++){      PCMROM[ta+ta+0]=TMP[ta+0x00000];      PCMROM[ta+ta+1]=TMP[ta+0x40000];   }   FreeMem(TMP);   }   msm5205_interface.rom[0] = PCMROM;   msm5205_interface.romsize[0] = 0x80000;   msm5205_interface.rom[1] = PCMROM;   msm5205_interface.romsize[1] = 0x80000;   msm5205_interface.updatemode = MSM5205_MONO;   //ROM[0x0988]=0x60;	// FIX C-CHIP USER ERROR   //ROM[0x0C32]=0x60;	// COIN ERROR   WriteWord68k(&ROM[0xBB72],0x4E71);		// nop   // 68000 Speed Hack   // ----------------   WriteLong68k(&ROM[0x04F4],0x13FC0000);	// move.b #$00,$AA0000   WriteLong68k(&ROM[0x04F8],0x00AA0000);   WriteWord68k(&ROM[0x04FC],0x6100-16);	// <loop>   memset(RAM+0x00000,0x00,0x40000);   RAM_VIDEO  = RAM+0x08000;   RAM_SCROLL = RAM+0x2B200;   RAM_OBJECT = RAM+0x28000;   GFX_BG0_SOLID = make_solid_mask_8x8  (GFX,     0x4000);   GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x1000);   set_colour_mapper(&col_map_xxxx_rrrr_gggg_bbbb);   InitPaletteMap(RAM+0x2A000, 0x100, 0x10, 0x1000);/* *  StarScream Main 68000 Setup */   ByteSwap(ROM,0x40000);   ByteSwap(RAM,0x40000);   AddMemFetch(0x000000, 0x03FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x100000, 0x107FFF, NULL, RAM+0x000000);			// MAIN RAM   AddReadByte(0xC00000, 0xC1FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddReadByte(0xD00000, 0xD01FFF, NULL, RAM_OBJECT);			// OBJECT RAM   AddReadByte(0x0FF000, 0x0FFFFF, CChipReadB, NULL);			// C-CHIP   AddReadByte(0x380000, 0x38000F, NULL, RAM+0x02B000);			// I/O RAM   AddReadByte(0x0F0000, 0x0F000F, NULL, RAM+0x02B100);			// I/O RAM   AddReadByte(0x3E0000, 0x3E0003, tc0140syt_read_main_68k, NULL);	// SOUND   AddReadByte(0x000000, 0xFFFFFF, BadReadByte, NULL);			// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x100000, 0x107FFF, NULL, RAM+0x000000);			// MAIN RAM   AddReadWord(0x200000, 0x2007FF, NULL, RAM+0x02A000);			// COLOR RAM   AddReadWord(0xC00000, 0xC1FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddReadWord(0x0FF000, 0x0FFFFF, CChipReadW, NULL);			// C-CHIP   AddReadWord(0x380000, 0x38000F, NULL, RAM+0x02B000);			// I/O RAM   AddReadWord(0x3A0000, 0x3A000F, NULL, RAM+0x02B400);			// GUN   AddReadWord(0x0F0000, 0x0F000F, NULL, RAM+0x02B100);			// I/O RAM   AddReadWord(0x000000, 0xFFFFFF, BadReadWord, NULL);			// <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x100000, 0x107FFF, NULL, RAM+0x000000);		// MAIN RAM   AddWriteByte(0xC00000, 0xC1FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddWriteByte(0xD00000, 0xD01FFF, NULL, RAM_OBJECT);			// OBJECT RAM   AddWriteByte(0x0FF000, 0x0FFFFF, CChipWriteB, NULL);			// C-CHIP   AddWriteByte(0x3E0000, 0x3E0003, tc0140syt_write_main_68k, NULL);	// SOUND   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, BadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x100000, 0x107FFF, NULL, RAM+0x000000);		// MAIN RAM   AddWriteWord(0xC00000, 0xC1FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddWriteWord(0xD00000, 0xD01FFF, NULL, RAM_OBJECT);			// OBJECT RAM   AddWriteWord(0x200000, 0x2007FF, NULL, RAM+0x02A000);		// COLOR RAM   AddWriteWord(0xC20000, 0xC20003, NULL, RAM_SCROLL+6);		// SCROLL Y   AddWriteWord(0xC40000, 0xC40003, NULL, RAM_SCROLL+0);		// SCROLL X   AddWriteWord(0xC50000, 0xC50001, NULL, RAM_SCROLL+14);		// CTRL   AddWriteWord(0x0FF000, 0x0FFFFF, CChipWriteW, NULL);			// C-CHIP   AddWriteWord(0x000000, 0xFFFFFF, BadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...    GameMouse=1;}void LoadOperationWolf(void){   romset=0;		// Original   LoadActual();}void LoadOperationWolfB(void){   romset=1;		// Bootleg   LoadActual();}void ClearOperationWolf(void){   RemoveTaitoYM2151();   #ifdef RAINE_DEBUG      save_debug("ROM.bin",ROM,0x040000,1);      save_debug("RAM.bin",RAM,0x050000,1);      //save_debug("GFX.bin",GFX,0x200000,0);   #endif}void ExecuteOperationWolfFrame(void){   /*------[Mouse Hack]-------*/   set_mouse_range(0,0,319,239);   x11=mouse_x;   myy11=mouse_y;   x1=x11+16;   if(romset==1){      myy1=myy11-8;   }   else{      myy1=myy11-24;   }   if(x1<0)   x1=0;   if(x1>319) x1=319;   if(myy1<0)   myy1=0;   if(myy1>239) myy1=239;   if(mouse_b&1) RAM[0x2B10A]&= ~0x01;   if(mouse_b&2) RAM[0x2B10A]&= ~0x02;   /*-----[Keyboard Hack]-----*/   if(((RAM[0x2B408]&0x01)!=0)&&(myy1>0))   myy1--;   if(((RAM[0x2B408]&0x02)!=0)&&(myy1<239)) myy1++;   if(((RAM[0x2B408]&0x04)!=0)&&(x1>0))   x1--;   if(((RAM[0x2B408]&0x08)!=0)&&(x1<319)) x1++;   /*----[Write Positions]----*/   RAM[0x2B400]=x1;   RAM[0x2B402]=myy1;   cpu_execute_cycles(CPU_Z80_1, 400000);		// C-CHIP Z80 4Mhz?   cpu_interrupt(CPU_Z80_1, 0x38);   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60));	// M68000 12MHz (60fps)		// MAIN 68000 12Mhz?   cpu_interrupt(CPU_68K_0, 5);   Taito2151_FrameFast();	// Z80 and YM2151}void DrawOperationWolf(void){   int x,y;   ClearPaletteMap();   // Init tc0100scn emulation   // ------------------------   tc0100scn_layer_count = 0;   tc0100scn[0].ctrl = ReadWord(RAM_SCROLL+12);   if(RefreshBuffers){   tc0100scn[0].layer[0].RAM	=RAM_VIDEO+0x0000;   tc0100scn[0].layer[0].GFX	=GFX;   tc0100scn[0].layer[0].MASK	=GFX_BG0_SOLID;   tc0100scn[0].layer[0].SCR	=RAM_SCROLL+0;   tc0100scn[0].layer[0].type	=0;   tc0100scn[0].layer[0].bmp_x	=32;   tc0100scn[0].layer[0].bmp_y	=32;   tc0100scn[0].layer[0].bmp_w	=320;   tc0100scn[0].layer[0].bmp_h	=240;   tc0100scn[0].layer[0].mapper	=&Map_12bit_xRGB;   tc0100scn[0].layer[0].tile_mask=0x3FFF;   tc0100scn[0].layer[0].scr_x	=16;   tc0100scn[0].layer[0].scr_y	=8;   tc0100scn[0].layer[1].RAM	=RAM_VIDEO+0x8000;   tc0100scn[0].layer[1].GFX	=GFX;   tc0100scn[0].layer[1].MASK	=GFX_BG0_SOLID;   tc0100scn[0].layer[1].SCR	=RAM_SCROLL+2;   tc0100scn[0].layer[1].type	=0;   tc0100scn[0].layer[1].bmp_x	=32;   tc0100scn[0].layer[1].bmp_y	=32;   tc0100scn[0].layer[1].bmp_w	=320;   tc0100scn[0].layer[1].bmp_h	=240;   tc0100scn[0].layer[1].mapper	=&Map_12bit_xRGB;   tc0100scn[0].layer[1].tile_mask=0x3FFF;   tc0100scn[0].layer[1].scr_x	=16;   tc0100scn[0].layer[1].scr_y	=8;   }   // Init tc0002obj emulation   // ------------------------   //tc0002obj.ctrl	= ReadWord(&RAM[0x1B010]);   tc0002obj.ctrl	= 0x2000;   if(RefreshBuffers){   tc0002obj.RAM	= RAM_OBJECT;   tc0002obj.GFX	= GFX_SPR;   tc0002obj.MASK	= GFX_SPR_SOLID;   tc0002obj.bmp_x	= 32;   tc0002obj.bmp_y	= 32;   tc0002obj.bmp_w	= 320;   tc0002obj.bmp_h	= 240;   tc0002obj.mapper	= &Map_12bit_xRGB;   tc0002obj.tile_mask	= 0x0FFF;   tc0002obj.ofs_x	= 0;   tc0002obj.ofs_y	= -8;   }   // BG0   // ---   render_tc0100scn_layer_mapped(0,0);   // BG1+OBJECT   // ----------   if((tc0002obj.ctrl & 0x2000)==0){      render_tc0100scn_layer_mapped(0,1);      render_tc0002obj_mapped();   }   else{      render_tc0002obj_mapped();      render_tc0100scn_layer_mapped(0,1);   }   // CURSOR   // ------   x=(32+x11)-7;   y=(32+myy11)-7;   if((x>16)&&(y>16)&&(x<320+32)&&(y<224+32)){      Draw16x16_Trans(SpriteGun1,x,y,0);   }   pal[254].r=0;   pal[254].g=0;   pal[254].b=0;   pal[253].r=31;   pal[253].g=31;   pal[253].b=63;   pal[252].r=63;   pal[252].g=31;   pal[252].b=31;}/*-------[ADPCM PORT]-------*/static int ad[8];void OpWolfWriteADPCMA(UINT16 offset, UINT8 data){   int ta=0;   offset&=7;   ad[offset]=data;   if(offset==6){#ifdef RAINE_DEBUG      print_debug("OpWolfADPCM(%02X%02X:%02X%02X:%02X%02X)\n",ad[1],ad[0],ad[3],ad[2],ad[4],ad[5]);#endif   ta=ad[0];   if((ta>0)&&(ta<=0x3C)){      MSM5205buffer_request( 0, ta-1 );   }   }}/*------[ADPCM PORT 2]------*/static int ad2[8];void OpWolfWriteADPCMB(UINT16 offset, UINT8 data){   int ta=0;   offset&=7;   ad2[offset]=data;   if(offset==6){   #ifdef RAINE_DEBUG      print_debug("OpWolfADPCM#2(%02X%02X:%02X%02X:%02X%02X)\n",ad2[1],ad2[0],ad2[3],ad2[2],ad2[4],ad2[5]);   #endif   ta=ad2[0];   if((ta>0)&&(ta<=0x3C)){      MSM5205buffer_request( 1, ta-1 );   }   }}

⌨️ 快捷键说明

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