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

📄 cave.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 5 页
字号:
    //   print_ingame(60,"inp0 : %x\n",val);    break;  case 0x01:    val = input_buffer[1];    break;  case 0x02:    val = (input_buffer[2] & 0x03) | 0xF4 |      ( (EEPROM_read_bit() & 0x01) << 3 );    break;  case 0x03:    val = input_buffer[3];    break;  default:    val = 0;    break;  }  return val;}//AD16_HANDLER( guwange_inputs_r )static UINT8 guwange_input_rb(UINT32 offset){  short val;  offset &= 3;  switch(offset){  case 0x00:    val = (input_buffer[0] & 0x03) | 0xFC;    break;  case 0x01:    val = input_buffer[1];    break;  case 0x02:    val = input_buffer[2];    //     (eeprom_93c46_rb_cave() << 3);    //   val = input_buffer[2] | ((eeprom_93c46_rb_cave() & 0x1) << 3);    break;      case 0x03:   val = (input_buffer[3] & 0x7f) | ( (EEPROM_read_bit() & 0x01) << 7 );   break;  default:    val = 0;    break;  }  return val;}static UINT16 esp_input_rw(UINT32 offset){   UINT16 val= (esp_input_rb(offset+0) << 8) |          (esp_input_rb(offset+1) << 0);   //   if (offset == 0) {   //     print_ingame(60,"offs %x -> %x\n",offset,val);     //   }   return val;}static UINT16 guwange_input_rw(UINT32 offset){   UINT16 val= (guwange_input_rb(offset+0) << 8) |          (guwange_input_rb(offset+1) << 0);   //   if (offset == 0) {   //     print_ingame(60,"%x\n",val);   //   }   return val;}static void esp_input_wb(UINT32 offset, UINT8 data){#ifdef RAINE_DEBUG      print_debug("esp_input_wb(%02x,%02x)\n", offset & 3, data);#endif}static void esp_input_ww(UINT32 offset, UINT16 data){   esp_input_wb(offset+0, data >> 8);   esp_input_wb(offset+1, data >> 0);}static UINT8 ddonpach_irq_cause_r(UINT32 offset){    int result = 0x0007;    if (vblank_irq)      result ^= 0x01; /*    if (unknown_irq)   result ^= 0x02; */    if ((offset&0xe) == 0)   vblank_irq = 0; /*    if (offset == 6)   unknown_irq = 0; */   update_irq_state();     return result;   }static UINT16 cave_irq_cause_r(UINT32 offset){    int result = 0x0003;    offset &= 0xf;    if (vblank_irq)      result ^= 0x01;     if (offset == 4 || offset==5)   vblank_irq = 0;     update_irq_state();     return result;   }static int layer_id_data[4];static char *layer_id_name[4] ={   "BG0", "BG1", "BG2", "OBJECT",};void load_ddonpach(void){   romset = 1;   scrolldx_flip = ddonpach_scrolldx_flip;   scrolldx = ddonpach_scrolldx;  raster_bg = 0;      sprite_size = 0x10000;   GFX_BG0   = load_region[REGION_GFX1];   GFX_BG1   = load_region[REGION_GFX2];   GFX_BG2   = load_region[REGION_GFX3];   GFX_OBJ_A = load_region[REGION_GFX4];   gfx_bg0_count = 0x04000;   gfx_bg1_count = 0x04000;   gfx_bg2_count = 0x0200000/0x40;   gfx_obj_count = 0x10000;   if(!(GFX_OBJ_B   =AllocateMem(sprite_size<<8))) return;   memcpy(GFX_OBJ_B,GFX_OBJ_A,sprite_size<<8);   if(!(GFX_OBJ_SIZE=AllocateMem(gfx_obj_count))) return;   memset(GFX_OBJ_SIZE,0x00,gfx_obj_count);   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, gfx_bg0_count);   GFX_BG1_SOLID = make_solid_mask_16x16(GFX_BG1, gfx_bg1_count);   GFX_BG2_SOLID = make_solid_mask_8x8(GFX_BG2, gfx_bg2_count);   GFX_OBJ_SOLID = make_solid_mask_16x16(GFX_OBJ_B, gfx_obj_count);   gfx_colours = 256;   RAMSize=0x80000;   if(!(RAM=AllocateMem(RAMSize))) return;   RAM_BG0 = RAM + 0x020000;   RAM_BG1 = RAM + 0x028000;   RAM_BG2 = RAM + 0x030000;   RAM_BG0_CTRL = RAM + 0x040000;   RAM_BG1_CTRL = RAM + 0x040006;   RAM_BG2_CTRL = RAM + 0x04000c;   RAM_CTRL = RAM + 0x50100;/*   WriteWord68k(&ROM[0x02D4A],0x4E71);*/   InitPaletteMap(RAM+0x40012, 0x80, 0x100, 0x8000);   set_colour_mapper(&col_map_xggg_ggrr_rrrb_bbbb);   EEPROM_init(&eeprom_interface);   load_eeprom();   layer_id_data[0] = add_layer_info(layer_id_name[0]);   layer_id_data[1] = add_layer_info(layer_id_name[1]);   layer_id_data[2] = add_layer_info(layer_id_name[2]);   layer_id_data[3] = add_layer_info(layer_id_name[3]);/* *  StarScream Stuff follows */   // 68000 speed hack   ByteSwap(ROM,0x100000);   ByteSwap(RAM,0x050012);   AddMemFetch(0x000000, 0x0FFFFF, ROM+0x000000-0x000000);      // 68000 ROM   AddReadBW(0x000000, 0x0FFFFF, NULL, ROM+0x000000);   // 68000 ROM   AddRWBW(0x100000, 0x10FFFF, NULL, RAM+0x000000);   // 68000 RAM   AddReadWord(0x300002,0x300003,cave_sound_r,NULL);   AddWriteWord(0x300000, 0x300003, cave_sound_w,NULL);   AddRWBW(0x400000, 0x40FFFF, NULL, RAM+0x010000);   // OBJECT RAM   AddRWBW(0x500000, 0x507FFF, NULL, RAM+0x020000);   // BG0 RAM   AddRWBW(0x600000, 0x607FFF, NULL, RAM+0x028000);   // BG1 RAM   AddRWBW(0x700000, 0x703FFF, NULL, RAM+0x030000);   // BG2 RAM   AddRWBW(0x704000, 0x707FFF, NULL, RAM+0x030000);   // BG2 RAM [mirror]   AddRWBW(0x708000, 0x70BFFF, NULL, RAM+0x030000);   // BG2 RAM [mirror]   AddRWBW(0x70C000, 0x70FFFF, NULL, RAM+0x030000);   // BG2 RAM [mirror]   AddReadWord(0x800000, 0x800007, ddonpach_irq_cause_r, NULL);// ?   //AddWriteByte(0x800000, 0x80007F, esp_800000_wb, NULL);// ?   //AddWriteWord(0x800000, 0x80007F, esp_800000_ww, NULL);// ?   AddWriteBW(0x800000, 0x80007F, NULL, RAM_CTRL+0);   AddRWBW(0x900000, 0x900005, NULL, RAM+0x40000);      // bg0 ctrl   AddRWBW(0xa00000, 0xa00005, NULL, RAM+0x40006);      // bg1 ctrl   AddRWBW(0xb00000, 0xb00005, NULL, RAM+0x4000c);      // bg2 ctrl   AddRWBW(0xC00000, 0xC0FFFF, NULL, RAM+0x40012);   // COLOR RAM   AddReadByte(0xD00000, 0xD00003, esp_input_rb, NULL);   // INPUT   AddReadWord(0xD00000, 0xD00003, esp_input_rw, NULL);   // INPUT   AddReadBW(0xe00000, 0xe00001, NULL, RAM+0x50012);   // INPUT   AddWriteWord(0xE00000, 0xE00001, cave_eeprom_w, NULL);// EEPROM   setup_cave_game();}   static WRITE16_HANDLER( nmk_oki6295_bankswitch_w ){  /* The OKI6295 ROM space is divided in four banks, each one indepentently     controlled. The sample table at the beginning of the addressing space is     divided in four pages as well, banked together with the sample data. */  #define TABLESIZE 0x100#define BANKSIZE 0x10000    int chip,banknum,size,bankaddr;  unsigned char *rom;  offset -= 0xb00020;  offset >>=1;    chip	=	offset / 4;  banknum	=offset % 4;    rom = load_region[REGION_SMP1 + chip];  size	= get_region_size(REGION_SMP1 + chip) - 0x40000;    bankaddr =	(data * BANKSIZE) % size;	// % used: size is not a power of 2    /* copy the samples */  memcpy(rom + banknum * BANKSIZE,rom + 0x40000 + bankaddr,BANKSIZE);        /* and also copy the samples address table (only for chip #1) */  if (chip==1)    {      rom += banknum * TABLESIZE;      memcpy(rom,rom + 0x40000 + bankaddr,TABLESIZE);    }}void load_donpachi(void){  romset =1; // like ddonpach     sprite_size = 0x8000;  scrolldx_flip = donpachi_scrolldx_flip;  scrolldx = donpachi_scrolldx;  raster_bg = 0;  GFX_BG0   = load_region[REGION_GFX1];  GFX_BG1   = load_region[REGION_GFX2];  GFX_BG2   = load_region[REGION_GFX3];  GFX_OBJ_A = load_region[REGION_GFX4];    gfx_bg0_count = 0x02000; // 16x16x4  gfx_bg1_count = 0x02000;  gfx_bg2_count = 0x02000; // 8x8x4  gfx_obj_count = 0x08000;   if(!(GFX_OBJ_B   =AllocateMem(sprite_size<<8))) return;   memcpy(GFX_OBJ_B,GFX_OBJ_A,sprite_size<<8);   if(!(GFX_OBJ_SIZE=AllocateMem(gfx_obj_count))) return;   memset(GFX_OBJ_SIZE,0x00,gfx_obj_count);   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, gfx_bg0_count);   GFX_BG1_SOLID = make_solid_mask_16x16(GFX_BG1, gfx_bg1_count);   GFX_BG2_SOLID = make_solid_mask_8x8(GFX_BG2, gfx_bg2_count);   GFX_OBJ_SOLID = make_solid_mask_16x16(GFX_OBJ_B, gfx_obj_count);   gfx_colours = 16;   RAMSize=0x80000;   if(!(RAM=AllocateMem(RAMSize))) return;   RAM_BG0 = RAM + 0x028000;   RAM_BG1 = RAM + 0x020000;   RAM_BG2 = RAM + 0x030000;   RAM_BG1_CTRL = RAM + 0x038000;   RAM_BG0_CTRL = RAM + 0x038006;   RAM_BG2_CTRL = RAM + 0x03800c;   RAM_CTRL = RAM + 0x38020;/*   WriteWord68k(&ROM[0x02D4A],0x4E71);*/   InitPaletteMap(RAM+0x38100, 0x80, 0x10, 0x8000);   set_colour_mapper(&col_map_xggg_ggrr_rrrb_bbbb);   EEPROM_init(&eeprom_interface);   load_eeprom();   layer_id_data[0] = add_layer_info(layer_id_name[0]);   layer_id_data[1] = add_layer_info(layer_id_name[1]);   layer_id_data[2] = add_layer_info(layer_id_name[2]);   layer_id_data[3] = add_layer_info(layer_id_name[3]);/* *  StarScream Stuff follows */   // 68000 speed hack   ByteSwap(ROM,0x80000);   ByteSwap(RAM,0x050012);   AddMemFetch(0x000000, 0x0FFFFF, ROM+0x000000-0x000000);      // 68000 ROM   AddReadBW(0x000000, 0x07FFFF, NULL, ROM+0x000000);   // 68000 ROM   AddRWBW(0x100000, 0x10FFFF, NULL, RAM+0x000000);   // 68000 RAM   AddRWBW(0x200000, 0x207FFF, NULL, RAM+0x020000);   // BG1   AddRWBW(0x300000, 0x307FFF, NULL, RAM+0x028000);   // BG0   AddRWBW(0x400000, 0x403FFF, NULL, RAM+0x030000);   // BG2   AddRWBW(0x404000, 0x407FFF, NULL, RAM+0x030000);   // BG2 (mirror)   AddRWBW(0x500000, 0x50fFFF, NULL, RAM+0x010000);   // Sprites   AddRWBW(0x600000, 0x600005, NULL, RAM+0x38000);      // bg1 ctrl   AddRWBW(0x700000, 0x700005, NULL, RAM+0x38006);      // bg0 ctrl   AddRWBW(0x800000, 0x800005, NULL, RAM+0x3800c);      // bg2 ctrl   AddRWBW(0x900000, 0x90007f, NULL, RAM+0x38020);      // sprites ctrl   AddRWBW(0xa08000, 0xa08FFF, NULL, RAM+0x38100);   // COLOR RAM   AddReadWord(0xb00000, 0xb00001, OKIM6295_status_0_r, NULL);   AddReadWord(0xb00010, 0xb00011, OKIM6295_status_1_r, NULL);   AddWriteWord(0xb00000, 0xb00001, OKIM6295_data_0_w, NULL);   AddWriteWord(0xb00010, 0xb00011, OKIM6295_data_1_w, NULL);   AddWriteWord(0xb00020, 0xb0002f, nmk_oki6295_bankswitch_w, NULL);   AddReadByte(0xc00000, 0xc00003, esp_input_rb, NULL);   // INPUT   AddReadWord(0xc00000, 0xc00003, esp_input_rw, NULL);   // INPUT   AddWriteWord(0xd00000, 0xd00001, cave_eeprom_w, NULL);// EEPROM   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);   // Trap Idle 68000   setup_cave_game();}   static UINT8 soundlatch_lo_r(UINT32 offset) {  return latch & 0xff;}static UINT8 soundlatch_hi_r(UINT32 offset) {  return latch >> 8;}static WRITE16_HANDLER( hotdogst_soundcmd_w ){  latch = data;  cpu_int_nmi(CPU_Z80_0);}static WRITE_HANDLER( hotdogst_soundcmd_wb ){  // Debugging only (not called)  if (offset & 1)    latch = (latch & 0xff00) | data;  else    latch = (latch & 0xff) | (data << 8);  cpu_int_nmi(CPU_Z80_0);}void load_hotdogst(void){  UINT8 *Z80RAM;    romset =4; // sprites placement, and layer activation bit...  sprite_size = 0x8000;  scrolldx_flip = hotdogst_scrolldx_flip;  scrolldx = esprade_scrolldx;  raster_bg = 0;  GFX_BG0   = load_region[REGION_GFX1];  GFX_BG1   = load_region[REGION_GFX2];  GFX_BG2   = load_region[REGION_GFX3];  GFX_OBJ_A = load_region[REGION_GFX4];  gfx_bg0_count = 0x01000; // 16x16x4  gfx_bg1_count = 0x01000;  gfx_bg2_count = 0x01000; // 8x8x4  gfx_obj_count = 0x08000;   if(!(GFX_OBJ_B   =AllocateMem(sprite_size<<8))) return;   memcpy(GFX_OBJ_B,GFX_OBJ_A,sprite_size<<8);   if(!(GFX_OBJ_SIZE=AllocateMem(gfx_obj_count))) return;   memset(GFX_OBJ_SIZE,0x00,gfx_obj_count);   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, gfx_bg0_count);   GFX_BG1_SOLID = make_solid_mask_16x16(GFX_BG1, gfx_bg1_count);   GFX_BG2_SOLID = make_solid_mask_16x16(GFX_BG2, gfx_bg2_count);   GFX_OBJ_SOLID = make_solid_mask_16x16(GFX_OBJ_B, gfx_obj_count);   gfx_colours = 16;   RAMSize=0x80000;   if(!(RAM=AllocateMem(RAMSize))) return;   RAM_BG0 = RAM + 0x028000;   RAM_BG1 = RAM + 0x020000;   RAM_BG2 = RAM + 0x030000;   RAM_BG1_CTRL = RAM + 0x038000;   RAM_BG0_CTRL = RAM + 0x038006;   RAM_BG2_CTRL = RAM + 0x03800c;   RAM_CTRL = RAM + 0x38020;/*   WriteWord68k(&ROM[0x02D4A],0x4E71);*/   InitPaletteMap(RAM+0x38100, 0x80, 0x10, 0x8000);   init_16x16_zoom_64(); // Should have zoom...   set_colour_mapper(&col_map_xggg_ggrr_rrrb_bbbb);   EEPROM_init(&hotdogst_eeprom_interface);   load_eeprom();

⌨️ 快捷键说明

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