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