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

📄 chaknpop.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
字号:
/******************************************************************************//*                                                                            *//*                  CHACK'N POP (C) 1983 TAITO CORPORATION                    *//*                                                                            *//******************************************************************************//*Todo:- Sound Chips should be AY-8910 (is YM2203 100% compatible?)- Colours (proms? ram?)- BG0 Tile banking & pixel layers- MCU!!*/#include "gameinc.h"#include "chaknpop.h"#include "sasound.h"		// sample support routines#include "taitosnd.h"#include "2203intf.h"#include "decode.h"#ifdef RAINE_DEBUG#include "debug.h"#endifstatic struct DIR_INFO chack_n_pop_dirs[] ={   { "chack_n_pop", },   { "chaknpop", },   { NULL, },};static struct ROM_INFO chack_n_pop_roms[] ={   {    "a04-01.28", 0x00002000, 0x386fe1c8, 0, 0, 0, },   {    "a04-02.27", 0x00002000, 0x5562a6a7, 0, 0, 0, },   {    "a04-03.26", 0x00002000, 0x3e2f0a9c, 0, 0, 0, },   {    "a04-04.25", 0x00002000, 0x5209c7d4, 0, 0, 0, },   {     "a04-05.3", 0x00002000, 0x8720e024, 0, 0, 0, },   {    "a04-07.15", 0x00002000, 0xae687c18, 0, 0, 0, },   {    "a04-08.14", 0x00002000, 0x5575a021, 0, 0, 0, },   {    "a04-09.98", 0x00002000, 0x757a723a, 0, 0, 0, },   {    "a04-10.97", 0x00002000, 0x3e3fd608, 0, 0, 0, },   {           NULL,          0,          0, 0, 0, 0, },};static struct INPUT_INFO chack_n_pop_inputs[] ={   { KB_DEF_COIN1,        MSG_COIN1,               0x010000, 0x40, BIT_ACTIVE_0 },   { KB_DEF_TILT,         MSG_TILT,                0x010000, 0x80, BIT_ACTIVE_0 },   { KB_DEF_P1_START,     MSG_P1_START,            0x010000, 0x10, BIT_ACTIVE_0 },   { KB_DEF_P1_UP,        MSG_P1_UP,               0x010001, 0x08, BIT_ACTIVE_0 },   { KB_DEF_P1_DOWN,      MSG_P1_DOWN,             0x010001, 0x04, BIT_ACTIVE_0 },   { KB_DEF_P1_LEFT,      MSG_P1_LEFT,             0x010001, 0x01, BIT_ACTIVE_0 },   { KB_DEF_P1_RIGHT,     MSG_P1_RIGHT,            0x010001, 0x02, BIT_ACTIVE_0 },   { KB_DEF_P1_B1,        MSG_P1_B1,               0x010001, 0x10, BIT_ACTIVE_0 },   { KB_DEF_P1_B2,        MSG_P1_B2,               0x010001, 0x20, BIT_ACTIVE_0 },   { KB_DEF_P2_START,     MSG_P2_START,            0x010000, 0x20, BIT_ACTIVE_0 },   { 0,                   NULL,                    0,        0,    0            },};static struct DSW_DATA dsw_data_chack_n_pop_0[] ={   { MSG_DSWA_BIT1,           0x01, 0x02 },   { MSG_OFF,                 0x01, 0x00 },   { MSG_ON,                  0x00, 0x00 },   { MSG_DEMO_SOUND,          0x02, 0x02 },   { MSG_OFF,                 0x02, 0x00 },   { MSG_ON,                  0x00, 0x00 },   { MSG_DSWA_BIT3,           0x04, 0x02 },   { MSG_OFF,                 0x04, 0x00 },   { MSG_ON,                  0x00, 0x00 },   { MSG_DSWA_BIT4,           0x08, 0x02 },   { MSG_OFF,                 0x08, 0x00 },   { MSG_ON,                  0x00, 0x00 },   { MSG_DSWA_BIT5,           0x10, 0x02 },   { MSG_OFF,                 0x10, 0x00 },   { MSG_ON,                  0x00, 0x00 },   { MSG_DSWA_BIT6,           0x20, 0x02 },   { MSG_OFF,                 0x20, 0x00 },   { MSG_ON,                  0x00, 0x00 },   { MSG_DSWA_BIT7,           0x40, 0x02 },   { MSG_OFF,                 0x40, 0x00 },   { MSG_ON,                  0x00, 0x00 },   { MSG_DSWA_BIT8,           0x80, 0x02 },   { MSG_OFF,                 0x80, 0x00 },   { MSG_ON,                  0x00, 0x00 },   { NULL,                    0,    0,   },};static struct DSW_INFO chack_n_pop_dsw[] ={   { 0x010002, 0xFF, dsw_data_chack_n_pop_0 },   { 0,        0,    NULL,      },};static struct VIDEO_INFO chack_n_pop_video ={   DrawChacknpop,   256,   224,   32,   VIDEO_ROTATE_NORMAL,};static struct YM2203interface ym2203_interface ={  2,  4000000,  { 0x00ff2040, 0x00ff2040 },  { 0, 0 },  { 0, 0 },  { NULL, NULL },  { NULL, NULL },  { NULL, NULL }};static struct SOUND_INFO chack_n_pop_sound[] ={   { SOUND_YM2203,  &ym2203_interface,    },   { 0,             NULL,                 },};struct GAME_MAIN game_chack_n_pop ={   chack_n_pop_dirs,   chack_n_pop_roms,   chack_n_pop_inputs,   chack_n_pop_dsw,   NULL,   LoadChacknpop,   ClearChacknpop,   &chack_n_pop_video,   ExecuteChacknpopFrame,   "chaknpop",   "Chack'n Pop",   NULL,   COMPANY_ID_TAITO,   "A04",   1983,   chack_n_pop_sound,   GAME_PLATFORM | GAME_NOT_WORKING,};static UINT16 ReadIO(UINT16 offset){   switch(offset&15){   case 0x04:   case 0x05:      return(YM2203AReadZ80(offset));   case 0x06:   case 0x07:      return(YM2203BReadZ80(offset));   case 0x08:      return(get_dsw(0));   break;   case 0x09:      return(RAM[0x10001]);   break;   case 0x0A:      return(RAM[0x10000]);   break;   default:#ifdef RAINE_DEBUG      print_debug("RB: %04x\n",offset);#endif      return(0xFF);   break;   }}static void WriteIO(UINT16 offset, UINT8 data){   switch(offset&15){   case 0x04:   case 0x05:      YM2203AWriteZ80(offset,data);   case 0x06:   case 0x07:      YM2203BWriteZ80(offset,data);   break;   default:      #ifdef RAINE_DEBUG      print_debug("WB: %04x,%02x\n",offset,data);      #endif   break;   }}void LoadChacknpop(void){   int ta,tb,tc;   UINT8 *TMP;//哪哪 Set up ROM/RAM 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪//   RAMSize=0x10000+4;   if(!(ROM=AllocateMem(0x10000))) return;   if(!(RAM=AllocateMem(RAMSize))) return; /* +4 to allocate DSW/Inputs storage space */   if(!load_rom("a04-01.28",ROM+0x0000,0x2000)) return;      // Z80 CODE ROM   if(!load_rom("a04-02.27",ROM+0x2000,0x2000)) return;      // Z80 CODE ROM   if(!load_rom("a04-03.26",ROM+0x4000,0x2000)) return;      // Z80 CODE ROM   if(!load_rom("a04-04.25",ROM+0x6000,0x2000)) return;      // Z80 CODE ROM   memset(ROM+0x8000,0x00,0x2000);   if(!load_rom("a04-05.3", ROM+0xA000,0x2000)) return;      // Z80 CODE ROM   memset(ROM+0xC000,0x00,0x2000);   memset(ROM+0xE000,0x00,0x2000);/*   // Skip Idle Z80   // -------------   ROM[0x00B3]=0xD3;  // OUTA (AAh)   ROM[0x00B4]=0xAA;  //   // Fix ROM Checksum   // ----------------   ROM[0x0396]=0x00;  // NOP   ROM[0x0397]=0x00;  // NOP   ROM[0x0398]=0x00;  // NOP*/   // Fix Some Hardware Test   // ----------------------   ROM[0x06C8]=0x00;   ROM[0x06C9]=0x00;   ROM[0x06DB]=0x18;   memcpy(RAM, ROM, 0x10000);   WriteLong(RAM+0x10000,0xFFFFFFFF);   AddZ80AROMBase(RAM, 0x38, 0x66);   AddZ80AReadByte(0x0000, 0x87FF, NULL,                  NULL);        // Z80 ROM; Z80 RAM   AddZ80AReadByte(0x8800, 0x880F, ReadIO,                NULL);        // I/O   AddZ80AReadByte(0x9000, 0x93FF, NULL,                  NULL);        // BG0 RAM   AddZ80AReadByte(0x9800, 0x98FF, NULL,                  NULL);        // OBJ RAM   AddZ80AReadByte(0xA000, 0xFFFF, NULL,                  NULL);        // Z80 ROM; PIXEL RAM   AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80,         NULL);        // <bad writes>   AddZ80AReadByte(-1, -1, NULL, NULL);   AddZ80AWriteByte(0x8000, 0x87FF, NULL,                 NULL);        // Z80 RAM   AddZ80AWriteByte(0x8800, 0x880F, WriteIO,              NULL);        // I/O   AddZ80AWriteByte(0x9000, 0x93FF, NULL,                 NULL);        // BG0 RAM   AddZ80AWriteByte(0x9800, 0x98FF, NULL,                 NULL);        // OBJ RAM   AddZ80AWriteByte(0xC000, 0xFFFF, NULL,                 NULL);        // PIXEL RAM   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, StopZ80,                NULL);   AddZ80AWritePort(0x00, 0xFF, DefBadWriteZ80,         NULL);   AddZ80AWritePort(  -1,   -1, NULL,                   NULL);   AddZ80AInit();//哪哪 Set up graphics 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪

⌨️ 快捷键说明

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