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

📄 cave.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 5 页
字号:
   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]);   Z80ROM=load_region[REGION_ROM2];   Z80RAM=RAM+0x50000; // Too much ram for sure !   AddZ80AROMBase(Z80ROM, 0x0038, 0x0066); // ???!   AddZ80AReadByte(0x0000, 0x7fFF, NULL,  Z80ROM+0x0000); // Z80 ROM   AddZ80AReadByte(0xe000, 0xFFFF, NULL,  Z80RAM+0X0000); // RAM   AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80,       NULL);   AddZ80AReadByte(    -1,     -1, NULL,                NULL);   AddZ80AWriteByte(0xe000, 0xffFF, NULL, Z80RAM+0x0000); // Z80 RAM   AddZ80AWriteByte(0x0000, 0xFFFF, DefBadWriteZ80,     NULL);   AddZ80AWriteByte(    -1,     -1, NULL,               NULL);   AddZ80AReadPort(0x30, 0x30, soundlatch_lo_r,  NULL);   AddZ80AReadPort(0x40, 0x40, soundlatch_hi_r,  NULL);   AddZ80AReadPort(0x50, 0x50, YM2203_status_port_0_r, NULL);   AddZ80AReadPort(0x51, 0x51, YM2203_read_port_0_r, NULL);   AddZ80AReadPort(0x60, 0x60, OKIM6295_status_0_r, NULL);   AddZ80AReadPort(0x00, 0xFF, DefBadReadZ80,           NULL);   AddZ80AReadPort(  -1,   -1, NULL,                    NULL);   AddZ80AWritePort(0x50, 0x50, YM2203_control_port_0_w, NULL);   AddZ80AWritePort(0x51, 0x51, YM2203_write_port_0_w, NULL);   AddZ80AWritePort(0x60, 0x60, OKIM6295_data_0_w, NULL);   AddZ80AWritePort(0x00, 0xFF, DefBadWriteZ80,         NULL);   AddZ80AWritePort(  -1,   -1, NULL,                   NULL);   AddZ80AInit();/* *  StarScream Stuff follows */      // 68000 speed hack   ByteSwap(ROM,0x100000);   ByteSwap(RAM,0x040000);   AddMemFetch(0x000000, 0x0FFFFF, ROM+0x000000-0x000000);      // 68000 ROM   AddReadBW(0x000000, 0x0fFFFF, NULL, ROM+0x000000);   // 68000 ROM   AddRWBW(0x300000, 0x30FFFF, NULL, RAM+0x000000);   // 68000 RAM   AddRWBW(0x880000, 0x887FFF, NULL, RAM_BG0);   // BG0   AddRWBW(0x900000, 0x907FFF, NULL, RAM_BG1);   // BG1   AddRWBW(0x980000, 0x987FFF, NULL, RAM_BG2);   // BG2   AddWriteWord(0xa8006e, 0xa8006f, hotdogst_soundcmd_w, NULL);   AddWriteByte(0xa8006e, 0xa8006f, hotdogst_soundcmd_wb, NULL);   AddReadWord(0xa80000, 0xa80007, cave_irq_cause_r, NULL);   AddWriteBW( 0xa80000, 0xa8007f, NULL, RAM_CTRL+0);   AddRWBW(0xf00000, 0xf0fFFF, NULL, RAM+0x010000);   // Sprites   AddRWBW(0xb00000, 0xb00005, NULL, RAM_BG0_CTRL);      // bg0 ctrl   AddRWBW(0xb80000, 0xb80005, NULL, RAM_BG1_CTRL);      // bg1 ctrl   AddRWBW(0xc00000, 0xc00005, NULL, RAM_BG2_CTRL);      // bg2 ctrl   AddRWBW(0x408000, 0x408FFF, NULL, RAM+0x38100);   // COLOR RAM   AddReadByte(0xc80000, 0xc80003, esp_input_rb, NULL);   // INPUT   AddReadWord(0xc80000, 0xc80003, esp_input_rw, NULL);   // INPUT   AddWriteWord(0xd00000, 0xd00001, cave_eeprom_w, NULL);// EEPROM   AddWriteWord(0xd00002, 0xd00003, NULL, RAM+0x380a0); // ???      AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);   // Trap Idle 68000   setup_cave_game();}   void load_esprade(void){  romset = 0;  scrolldx_flip = esprade_scrolldx_flip;  scrolldx = esprade_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];   if (!GFX_BG0 || !GFX_BG1 || !GFX_BG2 || !GFX_OBJ_A)     return;      if(!(GFX_OBJ_B   =AllocateMem(sprite_size<<8))) return;   memcpy(GFX_OBJ_B,GFX_OBJ_A,sprite_size<<8);   if(!(GFX_OBJ_SIZE=AllocateMem(sprite_size))) return;   memset(GFX_OBJ_SIZE,0x00,sprite_size);   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, 0x0800000/0x100);   GFX_BG1_SOLID = make_solid_mask_16x16(GFX_BG1, 0x0800000/0x100);   GFX_BG2_SOLID = make_solid_mask_16x16(GFX_BG2, 0x0400000/0x100);   GFX_OBJ_SOLID = make_solid_mask_16x16(GFX_OBJ_B, sprite_size);   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 + 0x048080;   RAM_BG1_CTRL = RAM + 0x048088;   RAM_BG2_CTRL = RAM + 0x048090;   RAM_CTRL = RAM + 0x48100;   // 68000 speed hack   WriteLong68k(&ROM[0x4f156],0x13FC0000);   WriteLong68k(&ROM[0x4f15a],0x00AA0000);   InitPaletteMap(RAM+0x38000, 0x80, 0x100, 0x8000);   init_16x16_zoom_64();   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 */   ByteSwap(ROM,0x100000);   ByteSwap(RAM,0x048000);   AddMemFetch(0x000000, 0x0FFFFF, ROM+0x000000-0x000000);      // 68000 ROM   AddReadByte(0x000000, 0x0FFFFF, NULL, ROM+0x000000);         // 68000 ROM   AddReadByte(0x100000, 0x10FFFF, NULL, RAM+0x000000);         // 68000 RAM   AddReadWord(0x300002,0x300003,cave_sound_r,NULL);   AddWriteWord(0x300000, 0x300003, cave_sound_w,NULL);   AddReadByte(0x400000, 0x40FFFF, NULL, RAM+0x010000);         // OBJECT RAM   AddReadByte(0x500000, 0x507FFF, NULL, RAM+0x020000);         // BG0 RAM   AddReadByte(0x600000, 0x607FFF, NULL, RAM+0x028000);         // BG1 RAM   AddReadByte(0x700000, 0x707FFF, NULL, RAM+0x030000);         // BG2 RAM   AddReadBW(0x800000, 0x800007, cave_irq_cause_r, NULL);      // ?   AddReadByte(0xC00000, 0xC0FFFF, NULL, RAM+0x038000);         // COLOR RAM   AddReadByte(0xD00000, 0xD00003, esp_input_rb, NULL);         // INPUT   AddReadWord(0x000000, 0x0FFFFF, NULL, ROM+0x000000);         // 68000 ROM   AddReadWord(0x100000, 0x10FFFF, NULL, RAM+0x000000);         // 68000 RAM   AddReadWord(0x400000, 0x40FFFF, NULL, RAM+0x010000);         // OBJECT RAM   AddReadWord(0x500000, 0x507FFF, NULL, RAM+0x020000);         // BG0 RAM   AddReadWord(0x600000, 0x607FFF, NULL, RAM+0x028000);         // BG1 RAM   AddReadWord(0x700000, 0x707FFF, NULL, RAM+0x030000);         // BG2 RAM   AddReadWord(0x900000, 0x900007, NULL, RAM+0x048080);      // BG0 CTRL RAM   AddReadWord(0xA00000, 0xA00007, NULL, RAM+0x048088);      // BG1 CTRL RAM   AddReadWord(0xB00000, 0xB00007, NULL, RAM+0x048090);      // BG2 CTRL RAM   AddReadWord(0xC00000, 0xC0FFFF, NULL, RAM+0x038000);         // COLOR RAM   AddReadWord(0xD00000, 0xD00003, esp_input_rw, NULL);         // INPUT   AddWriteByte(0x100000, 0x10FFFF, NULL, RAM+0x000000);      // 68000 RAM   AddWriteByte(0x400000, 0x40FFFF, NULL, RAM+0x010000);      // OBJECT RAM   AddWriteByte(0x500000, 0x507FFF, NULL, RAM+0x020000);      // BG0 RAM   AddWriteByte(0x600000, 0x607FFF, NULL, RAM+0x028000);      // BG1 RAM   AddWriteByte(0x700000, 0x707FFF, NULL, RAM+0x030000);      // BG2 RAM   //AddWriteByte(0x800000, 0x80007F, esp_800000_wb, NULL);      // ?   AddWriteByte(0xC00000, 0xC0FFFF, NULL, RAM+0x038000);      // COLOR RAM   AddWriteByte(0xD00000, 0xD00003, esp_input_wb, NULL);      // INPUT   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);         // Trap Idle 68000   AddWriteWord(0x100000, 0x10FFFF, NULL, RAM+0x000000);      // 68000 RAM   AddWriteWord(0x400000, 0x40FFFF, NULL, RAM+0x010000);      // OBJECT RAM   AddWriteWord(0x500000, 0x507FFF, NULL, RAM+0x020000);      // BG0 RAM   AddWriteWord(0x600000, 0x607FFF, NULL, RAM+0x028000);      // BG1 RAM   AddWriteWord(0x700000, 0x707FFF, NULL, RAM+0x030000);      // BG2 RAM   AddWriteWord(0xC00000, 0xC0FFFF, NULL, RAM+0x038000);      // COLOR RAM   AddWriteWord(0xD00000, 0xD00003, esp_input_ww, NULL);      // INPUT   AddWriteWord(0xE00000, 0xE00001, cave_eeprom_w, NULL);      // EEPROM   //AddWriteWord(0x800000, 0x80007F, esp_800000_ww, NULL);      // ?   AddWriteBW(0x800000, 0x80007F, NULL, RAM_CTRL+0);   AddWriteWord(0x900000, 0x900007, NULL, RAM+0x048080);      // BG0 CTRL RAM   AddWriteWord(0xA00000, 0xA00007, NULL, RAM+0x048088);      // BG1 CTRL RAM   AddWriteWord(0xB00000, 0xB00007, NULL, RAM+0x048090);      // BG2 CTRL RAM   setup_cave_game();}void load_guwange(void){   // Guwange has exactly the same gfx handling as esprade...   romset = 0;  scrolldx_flip = guwange_scrolldx_flip;  scrolldx = guwange_scrolldx;  raster_bg = 0;   sprite_size = 0x18000;   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];   if(!(GFX_OBJ_B   =AllocateMem(sprite_size<<8))) return;   memcpy(GFX_OBJ_B,GFX_OBJ_A,sprite_size<<8);   if(!(GFX_OBJ_SIZE=AllocateMem(sprite_size))) return;   memset(GFX_OBJ_SIZE,0x00,sprite_size);   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, 0x0800000/0x100);   GFX_BG1_SOLID = make_solid_mask_16x16(GFX_BG1, 0x0400000/0x100);   GFX_BG2_SOLID = make_solid_mask_16x16(GFX_BG2, 0x0400000/0x100);   GFX_OBJ_SOLID = make_solid_mask_16x16(GFX_OBJ_B, sprite_size);   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 + 0x048080;   RAM_BG1_CTRL = RAM + 0x048088;   RAM_BG2_CTRL = RAM + 0x048090;   RAM_CTRL = RAM + 0x48100;   InitPaletteMap(RAM+0x38000, 0x80, 0x100, 0x8000);   init_16x16_zoom_64();   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 */   ByteSwap(ROM,0x100000);   ByteSwap(RAM,0x048500);   AddMemFetch(0x000000, 0x0FFFFF, ROM+0x000000-0x000000);      // 68000 ROM   AddReadBW(0x000000, 0x0FFFFF, NULL, ROM+0x000000);         // 68000 ROM   AddRWBW(0x200000, 0x20FFFF, NULL, RAM+0x000000);         // 68000 RAM   AddReadBW(0x300000,0x300007,cave_irq_cause_r,NULL);      //AddWriteByte(0x300000, 0x30007f, esp_800000_wb,NULL);   //AddWriteWord(0x300000, 0x30007f, esp_800000_ww,NULL);   AddWriteBW(0x300000, 0x30007F, NULL, RAM_CTRL+0);   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, 0x707FFF, NULL, RAM+0x030000);         // BG2 RAM   AddReadBW(0x800002, 0x800003, cave_sound_r, NULL);      // ?   AddWriteWord(0x800000, 0x800003, cave_sound_w,NULL);   AddWriteByte(0x800000, 0x800003, cave_sound_w, NULL);      // ?   AddRWBW(0x900000, 0x900007, NULL, RAM+0x048080);      // BG0 CTRL RAM   AddRWBW(0xA00000, 0xA00007, NULL, RAM+0x048088);      // BG1 CTRL RAM   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);         // Trap Idle 68000   AddRWBW(0xB00000, 0xB00007, NULL, RAM+0x048090);      // BG2 CTRL RAM   AddWriteWord(0xB00000, 0xB00007, NULL, RAM+0x048090);      // BG2 CTRL RAM   AddRWBW(0xC00000, 0xC0FFFF, NULL, RAM+0x038000);         // COLOR RAM   AddReadByte(0xD00010, 0xD00013, guwange_input_rb, NULL);         // INPUT   AddReadWord(0xD00010, 0xD00013, guwange_input_rw, NULL);         // INPUT   AddWriteWord(0xD00010, 0xD00011, guwange_eeprom_w, NULL);         // INPUT   setup_cave_game();}void load_feveron(void){   romset = 3;   scrolldx_flip = feveron_scrolldx_flip;   scrolldx = feveron_scrolldx;   raster_bg = 0;   sprite_size = 0x10000;   GFX_BG0   = load_region[REGION_GFX1];   GFX_BG1   = load_region[REGION_GFX2];   GFX_BG2   = NULL;   GFX_OBJ_A = load_region[REGION_GFX4];   if(!(GFX_OBJ_B   =AllocateMem(sprite_size<<8))) return;   memcpy(GFX_OBJ_B,GFX_OBJ_A,sprite_size<<8);   if(!(GFX_OBJ_SIZE=AllocateMem(sprite_size))) return;   memset(GFX_OBJ_SIZE,0x00,sprite_size);   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, 0x0400000/0x100);   GFX_BG1_SOLID = make_solid_mask_16x16(GFX_BG1, 0x0400000/0x100);   GFX_BG2_SOLID = NULL;   GFX_OBJ_SOLID = make_solid_mask_16x16(GFX_OBJ_B, sprite_size);   if(!(TileQueue_scroll = (struct TILE_QS *) AllocateMem(sizeof(TILE_QS)*MAX_TILES)))return;   gfx_colours = 16;   RAMSize=0x80000;   if(!(RAM=AllocateMem(RAMSize))) return;   RAM_BG0 = RAM + 0x020000;   RAM_BG1 = RAM + 0x028000;   RAM_BG2 = NULL;   RAM_BG0_CTRL = RAM + 0x048080;   RAM_BG1_CTRL = RAM + 0x048088;   RAM_BG2_CTRL = NULL;   RAM_CTRL = RAM + 0x48100;/*   WriteWord68k(&ROM[0x02D4A],0x4E71);*/   InitPaletteMap(RAM+0x38000, 0x80, 0x10, 0x8000);   init_16x16_zoom_64();      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] = 0;   layer_id_data[3] = add_layer_info(layer_id_name[3]);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x100000);   ByteSwap(RAM,0x048000);      AddMemFetch(0x000000, 0x0FFFFF, ROM+0x000000-0x000000);      // 68000 ROM   AddReadBW(0x000000, 0x0FFFFF, NULL, ROM+0x000000);         // 68000 ROM   AddRWBW(0x100000, 0x10FFFF, NULL, RAM+0x000000);         // 68000 RAM   AddReadBW(0x300002,0x300003,cave_sound_r,NULL);   AddWriteBW(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(0x708000, 0x708FFF, NULL, RAM+0x038000);         // COLOR RAM   //AddReadBW(0x708000, 0x708FFF, NULL, RAM+0x038000);         // COLOR RAM   //AddWriteByte(0x708000, 0x708FFF, feveron_pal_wb, NULL);         // COLOR RAM   //AddWriteWord(0x708000, 0x708FFF, feveron_pal_ww, NULL);         // COLOR RAM   AddRWBW(0x710000, 0x710FFF, NULL, RAM+0x038000);         // COLOR RAM [MIRROR]   AddReadWord(0x800000, 0x800007, cave_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);      AddWriteWord(0x900000, 0x900007, NULL, RAM+0x048080);      // BG0 CTRL RAM   AddWriteWord(0xA00000, 0xA00007, NULL, RAM+0x048088);      // BG1 CTRL RAM   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);         // Trap Idle 68000   AddReadWord(0xB00000, 0xB00003, esp_input_rw, NULL);         // INPUT   AddReadByte(0xB00000, 0xB00003, esp_input_rb, NULL);         // INPUT   AddWriteWord(0xC00000, 0xC00001, cave_eeprom_w, NULL);      // EEPROM   setup_cave_game();}void load_uo_poko(void){   romset = 2;   sprite_size = 0x08000;   scrolldx = uopoko_scrolldx;   scrolldx_flip = uopoko_scrolldx_flip;  raster_bg = 1;   GFX_BG0   = load_region[REGION_GFX1];   GFX_BG1   = NULL;   GFX_BG2   = NULL;   GFX_OBJ_A = load_region[REGION_GFX4];   if(!(GFX_OBJ_B   =AllocateMem(sprite_size<<8))) return;   memcpy(GFX_OBJ_B,GFX_OBJ_A,sprite_size<<8);   if(!(GFX_OBJ_SIZE=AllocateMem(sprite_size))) return;   memset(GFX_OBJ_SIZE,0x00,sprite_size);   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, 0x0400000/0x100);   GFX_BG1_SOLID = NULL;   GFX_BG2_SOLID = NULL;   GFX_OBJ_SOLID = make_solid_mask_16x16(GFX_OBJ_B, sprite_size);   if(!(TileQueue_scroll = (struct TILE_QS *) AllocateMem(sizeof(TILE_QS)*MAX_TILES)))return;   gfx_colours = 256;   RAMSize=0x80000;   if(!(RAM=AllocateMem(RAMSize))) return;   RAM_BG0 = RAM + 0x020000;   RAM_BG1 = NULL;   RAM_BG2 = NULL;   RAM_BG0_CTRL = RAM + 0x048080;   RAM_BG1_CTRL = NULL;   RAM_BG2_CTRL = NULL;   RAM_CTRL = RAM + 0x48100;/*   WriteWord68k(&ROM[0x02D4A],0x4E71);*/   InitPaletteMap(RAM+0x38000, 0x80, 0x100, 0x8000);   init_16x16_zoom_64();   set_colour_mapper(&col_map_xggg_ggrr_rrrb_bbbb);   EEPROM_init(&eeprom_interface);   load_eeprom();

⌨️ 快捷键说明

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