📄 cave.c
字号:
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 + -