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

📄 terraf.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************//*                                                                            *//*                      TERRA FORCE (C) 1990 NICHBUTSU                        *//*                                                                            *//******************************************************************************/#include "gameinc.h"#include "terraf.h"#include "nichisnd.h"static struct DIR_INFO terra_force_dirs[] ={   { "terra_force", },   { "terraf", },   { NULL, },};static struct ROM_INFO terra_force_roms[] ={   { "terrafor.010", 0x00010000, 0x58b5f43b, 0, 0, 0, },   { "terrafor.002", 0x00010000, 0x148aa0c5, 0, 0, 0, },   { "terrafor.003", 0x00010000, 0xd74085a1, 0, 0, 0, },   { "terrafor.004", 0x00010000, 0x2144d8e0, 0, 0, 0, },   { "terrafor.005", 0x00010000, 0x744f5c9e, 0, 0, 0, },   { "terrafor.006", 0x00010000, 0x25d23dfd, 0, 0, 0, },   { "terrafor.007", 0x00010000, 0xb9b0fe27, 0, 0, 0, },   { "terrafor.008", 0x00008000, 0xbc6f7cbc, 0, 0, 0, },   { "terrafor.009", 0x00008000, 0xd1014280, 0, 0, 0, },   { "terrafor.001", 0x00010000, 0xeb6b4138, 0, 0, 0, },   { "terrafor.011", 0x00010000, 0x5320162a, 0, 0, 0, },   { "terrafor.012", 0x00008000, 0x4f0e1d76, 0, 0, 0, },   { "terrafor.013", 0x00010000, 0xa86951e0, 0, 0, 0, },   { "terrafor.014", 0x00010000, 0x8e5f557f, 0, 0, 0, },   {           NULL,          0,          0, 0, 0, 0, },};static struct INPUT_INFO terra_force_inputs[] ={   { KB_DEF_COIN1,        MSG_COIN1,               0x018001, 0x04, BIT_ACTIVE_0 },   { KB_DEF_COIN2,        MSG_COIN2,               0x018001, 0x08, BIT_ACTIVE_0 },   { KB_DEF_P1_START,     MSG_P1_START,            0x018001, 0x01, BIT_ACTIVE_0 },   { KB_DEF_P1_UP,        MSG_P1_UP,               0x018000, 0x01, BIT_ACTIVE_0 },   { KB_DEF_P1_DOWN,      MSG_P1_DOWN,             0x018000, 0x02, BIT_ACTIVE_0 },   { KB_DEF_P1_LEFT,      MSG_P1_LEFT,             0x018000, 0x04, BIT_ACTIVE_0 },   { KB_DEF_P1_RIGHT,     MSG_P1_RIGHT,            0x018000, 0x08, BIT_ACTIVE_0 },   { KB_DEF_P1_B1,        MSG_P1_B1,               0x018000, 0x10, BIT_ACTIVE_0 },   { KB_DEF_P1_B2,        MSG_P1_B2,               0x018000, 0x20, BIT_ACTIVE_0 },   { KB_DEF_P2_START,     MSG_P2_START,            0x018001, 0x02, BIT_ACTIVE_0 },   { KB_DEF_P2_UP,        MSG_P2_UP,               0x018002, 0x01, BIT_ACTIVE_0 },   { KB_DEF_P2_DOWN,      MSG_P2_DOWN,             0x018002, 0x02, BIT_ACTIVE_0 },   { KB_DEF_P2_LEFT,      MSG_P2_LEFT,             0x018002, 0x04, BIT_ACTIVE_0 },   { KB_DEF_P2_RIGHT,     MSG_P2_RIGHT,            0x018002, 0x08, BIT_ACTIVE_0 },   { KB_DEF_P2_B1,        MSG_P2_B1,               0x018002, 0x10, BIT_ACTIVE_0 },   { KB_DEF_P2_B2,        MSG_P2_B2,               0x018002, 0x20, BIT_ACTIVE_0 },   { 0,                   NULL,                    0,        0,    0            },};static struct DSW_DATA dsw_data_terra_force_0[] ={   { "Lives",                 0x03, 0x04 },   { "3",                     0x03, 0x00 },   { "4",                     0x02, 0x00 },   { "5",                     0x01, 0x00 },   { "6",                     0x00, 0x00 },   { "Extra Life at",         0x04, 0x02 },   { "20,000",                0x04, 0x00 },   { "50,000",                0x00, 0x00 },   { "Second Life at",        0x08, 0x02 },   { "60,000",                0x08, 0x00 },   { "90,000",                0x00, 0x00 },   { MSG_DEMO_SOUND,          0x10, 0x02 },   { MSG_ON,                  0x10, 0x00 },   { MSG_OFF,                 0x00, 0x00 },   { MSG_CABINET,             0x20, 0x02 },   { MSG_TABLE,               0x20, 0x00 },   { MSG_UPRIGHT,             0x00, 0x00 },   { MSG_DIFFICULTY,          0xC0, 0x04 },   { MSG_EASY,                0xC0, 0x00 },   { MSG_NORMAL,              0x80, 0x00 },   { MSG_HARD,                0x40, 0x00 },   { MSG_HARDEST,             0x00, 0x00 },   { NULL,                    0,    0,   },};static struct DSW_DATA dsw_data_terra_force_1[] ={   { MSG_COIN1,               0x03, 0x04 },   { MSG_1COIN_1PLAY,         0x03, 0x00 },   { MSG_1COIN_2PLAY,         0x02, 0x00 },   { MSG_2COIN_1PLAY,         0x01, 0x00 },   { MSG_FREE_PLAY,             0x00, 0x00 },   { MSG_COIN2,               0x0C, 0x04 },   { MSG_1COIN_1PLAY,         0x0C, 0x00 },   { MSG_1COIN_2PLAY,         0x08, 0x00 },   { MSG_2COIN_1PLAY,         0x04, 0x00 },   { MSG_2COIN_3PLAY,         0x00, 0x00 },   { MSG_SCREEN,              0x20, 0x02 },   { MSG_NORMAL,              0x20, 0x00 },   { MSG_INVERT,              0x00, 0x00 },   { "Continues",             0xC0, 0x04 },   { "0",                     0xC0, 0x00 },   { "3",                     0x80, 0x00 },   { "5",                     0x40, 0x00 },   { "Infinite",              0x00, 0x00 },   { NULL,                    0,    0,   },};static struct DSW_INFO terra_force_dsw[] ={   { 0x018004, 0xFF, dsw_data_terra_force_0 },   { 0x018006, 0xFF, dsw_data_terra_force_1 },   { 0,        0,    NULL,      },};static struct VIDEO_INFO terra_force_video ={   DrawTerraF,   320,   224,   32,   VIDEO_ROTATE_NORMAL,};struct GAME_MAIN game_terra_force ={   terra_force_dirs,   terra_force_roms,   terra_force_inputs,   terra_force_dsw,   NULL,   LoadTerraF,   ClearTerraF,   &terra_force_video,   ExecuteTerraFFrame,   "terraf",   "Terra Force",   "僥儔僼僅乕僗",   COMPANY_ID_NICHIBUTSU,   NULL,   1987,   nichi_ym3812_sound,   GAME_SHOOT,};static UINT8 *GFX_BG0;static UINT8 *GFX_BG1;static UINT8 *GFX_SPR;static UINT8 *GFX_FG0;static UINT8 *MSK_BG1;static UINT8 *MSK_SPR;static UINT8 *MSK_FG0;static UINT8 *RAM_SCR;void LoadTerraF(void){   int ta,tb;   RAMSize=0x20100+0x10000;   if(!(ROM=AllocateMem(0x50000))) return;   if(!(RAM=AllocateMem(RAMSize))) return;   if(!(GFX=AllocateMem(0xD0000))) return;   if(!load_rom("terrafor.014",&RAM[0x0000],0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("terrafor.011",&RAM[0x0000],0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   if(!load_rom("terrafor.013",&RAM[0x0000],0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20000]=RAM[ta];   }   if(!load_rom("terrafor.010",&RAM[0x0000],0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20001]=RAM[ta];   }   if(!load_rom("terrafor.012",&RAM[0x0000],0x8000)) return;   for(ta=0;ta<0x8000;ta++){      ROM[ta+ta+0x40000]=RAM[ta];   }   if(!load_rom("terrafor.009",&RAM[0x0000],0x8000)) return;   for(ta=0;ta<0x8000;ta++){      ROM[ta+ta+0x40001]=RAM[ta];   }   /*-----[Sound Setup]-----*/   Z80ROM=RAM+0x20100;   if(!load_rom("terrafor.001", Z80ROM, 0x10000)) return;	// Z80 SOUND ROM   AddNichibutsuYM3526(0x0085, 0x007A);   AddNichiSample(0x0173, 0x0175, 1);   AddNichiSample(0x0176, 0x0178, 1);   AddNichiSample(0x5040, 0x53F0, 1);   AddNichiSample(0x53F1, 0x5511, 1);   AddNichiSample(0x5512, 0x5AD2, 1);   AddNichiSample(0x5AD3, 0x70D3, 3);   AddNichiSample(0x8040, 0x88DB, 2);   AddNichiSample(0x88DC, 0x9687, 2);   AddNichiSample(0x9688, 0xA9C4, 3);   AddNichiSample(0xA9C5, 0xAFF5, 3);   AddNichiSample(0xAFF6, 0xCA26, 3);   AddNichiSample(0xCA27, 0xDC27, 3);   AddNichiSample(0xDC28, 0xDD48, 1);   AddNichiSample(0xDD49, 0xE3B6, 2);   AddNichiSample(0xE3B7, 0xF0B7, 1);   /*-----------------------*/   GFX_BG0 = GFX+0x000000;   GFX_BG1 = GFX+0x040000;   GFX_SPR = GFX+0x080000;   GFX_FG0 = GFX+0x0C0000;   tb=0;   if(!load_rom("terrafor.004", RAM+0x00000, 0x10000)) return;	// GFX BG0   if(!load_rom("terrafor.005", RAM+0x10000, 0x10000)) return;   for(ta=0;ta<0x20000;ta++,tb+=2){      GFX_BG0[tb+0]=(RAM[ta]&15)^15;      GFX_BG0[tb+1]=(RAM[ta]>>4)^15;   }   tb=0;   if(!load_rom("terrafor.006", RAM+0x00000, 0x10000)) return;	// GFX BG1   if(!load_rom("terrafor.007", RAM+0x10000, 0x10000)) return;   for(ta=0;ta<0x20000;ta++,tb+=2){      GFX_BG1[tb+0]=(RAM[ta]&15)^15;      GFX_BG1[tb+1]=(RAM[ta]>>4)^15;   }   tb=0;   if(!load_rom("terrafor.003", RAM+0x00000, 0x10000)) return;	// GFX SPR   if(!load_rom("terrafor.002", RAM+0x10000, 0x10000)) return;   for(ta=0;ta<0x10000;ta++,tb+=4){      GFX_SPR[tb+0]=(RAM[ta+0x00000]&15)^15;      GFX_SPR[tb+1]=(RAM[ta+0x00000]>>4)^15;      GFX_SPR[tb+2]=(RAM[ta+0x10000]&15)^15;      GFX_SPR[tb+3]=(RAM[ta+0x10000]>>4)^15;   }   tb=0;   if(!load_rom("terrafor.008", RAM+0x00000, 0x08000)) return;	// GFX FG0   for(ta=0;ta<0x8000;ta++,tb+=2){      GFX_FG0[tb+0]=(RAM[ta]&15)^15;      GFX_FG0[tb+1]=(RAM[ta]>>4)^15;   }   MSK_BG1 = make_solid_mask_16x16(GFX_BG1, 0x0400);   MSK_SPR = make_solid_mask_16x16(GFX_SPR, 0x0400);   MSK_FG0 = make_solid_mask_8x8  (GFX_FG0, 0x0400);   RAM_SCR = RAM+0x1C000;   memset(RAM+0x00000,0x00,0x20100);   memset(RAM+0x18000,0xFF,0x00100);   // 68000 Speed Hack   // ----------------   WriteLong68k(&ROM[0x00132],0x13FC0000);	//	move.b	#$00,$AA0000   WriteLong68k(&ROM[0x00136],0x00AA0000);	//	(Speed Hack)   // Change Sound Comm Address (for speed)   // -------------------------------------   WriteLong68k(&ROM[0x0784A],0x00BB0000);   // Scroll Write Fix   // ----------------   WriteLong68k(&ROM[0x1F724],0x0007D000);   InitPaletteMap(RAM+0x4000, 0x100, 0x10, 0x1000);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x50000);   ByteSwap(RAM,0x20000);   AddMemFetch(0x000000, 0x04FFFF, ROM+0x000000-0x000000);   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x04FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x060000, 0x07FFFF, NULL, RAM+0x000000);			// ALL RAM   AddReadByte(-1, -1, NULL, NULL);

⌨️ 快捷键说明

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