📄 dinorex.c
字号:
for(ta=0;ta<0x100000;ta+=2,tb+=4){ tc=ReadWord(&ROM[ta]); GFX_BG0[tb+0] = ((tc&0xF000)>>12); GFX_BG0[tb+1] = ((tc&0x0F00)>> 8); GFX_BG0[tb+2] = ((tc&0x00F0)>> 4); GFX_BG0[tb+3] = ((tc&0x000F)>> 0); } tb = 0; if(!load_rom("drex_01m.rom", ROM, 0x200000)) return; for(ta=0;ta<0x200000;ta++){ GFX_SPR[tb++]=ROM[ta]&15; GFX_SPR[tb++]=ROM[ta]>>4; } if(!load_rom("drex_02m.rom", ROM, 0x200000)) return; for(ta=0;ta<0x200000;ta++){ GFX_SPR[tb++]=ROM[ta]&15; GFX_SPR[tb++]=ROM[ta]>>4; } if(!load_rom("drex_03m.rom", ROM, 0x200000)) return; for(ta=0;ta<0x200000;ta++){ GFX_SPR[tb++]=ROM[ta]&15; GFX_SPR[tb++]=ROM[ta]>>4; } // Load 68000 PROGRAM ROMS if(!load_rom("drex_14.rom", RAM, 0x80000)) return; for(ta=0;ta<0x80000;ta++){ ROM[ta+ta]=RAM[ta]; } if(!load_rom_index(10, RAM, 0x80000)) return; for(ta=0;ta<0x80000;ta++){ ROM[ta+ta+1]=RAM[ta]; } // Load 68000 DATA ROMS (already byteswapped) if(!load_rom("drex_04m.rom", ROM+0x100000, 0x100000)) return; if(!load_rom("drex_05m.rom", ROM+0x200000, 0x100000)) return; /*-----[Sound Setup]-----*/ Z80ROM=RAM+0x54000; if(!load_rom("drex_12.rom", Z80ROM, 0x10000)) return; // Z80 SOUND ROM if(!(PCMROM=AllocateMem(0x180000))) return; if(!load_rom("drex_08m.rom",PCMROM,0x80000)) return; // ADPCM A rom if(!load_rom("drex_07m.rom",PCMROM+0x80000,0x100000)) return; // ADPCM B rom YM2610SetBuffers(PCMROM, PCMROM+0x80000, 0x080000, 0x100000); AddTaitoYM2610(0x0211, 0x017A, 0x10000); /*-----------------------*/ memset(RAM+0x00000,0x00,0x50000); RAM_VIDEO = RAM+0x30000; RAM_SCROLL = RAM+0x43100; RAM_INPUT = RAM+0x43000; GFX_FG0 = RAM+0x50000; GFX_BG0_SOLID = make_solid_mask_8x8 (GFX_BG0, 0x08000); GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x0C000); set_colour_mapper(&col_Map_15bit_RRRRGGGGBBBBRGBx); InitPaletteMap(RAM+0x40000, 0x100, 0x10, 0x8000); WriteWord68k(&ROM[0x01084],0x4EF9); // JMP $7FF00 WriteLong68k(&ROM[0x01086],0x0007FF00); WriteWord68k(&ROM[0x7FF00],0x4EB9); WriteLong68k(&ROM[0x7FF02],0x000032FC); WriteLong68k(&ROM[0x7FF06],0x13FC0000); // Stop 68000 WriteLong68k(&ROM[0x7FF0A],0x00AA0000); WriteWord68k(&ROM[0x7FF0E],0x6100-16); // Loop // Init tc0220ioc emulation // ------------------------ tc0220ioc.RAM = RAM_INPUT; tc0220ioc.ctrl = 0; //TC0220_STOPCPU; reset_tc0220ioc(); // Init tc0100scn emulation // ------------------------ tc0100scn[0].layer[0].RAM =RAM_VIDEO+0x0000; tc0100scn[0].layer[0].GFX =GFX; tc0100scn[0].layer[0].MASK =GFX_BG0_SOLID; tc0100scn[0].layer[0].SCR =RAM_SCROLL+0; tc0100scn[0].layer[0].type =0; tc0100scn[0].layer[0].bmp_x =32; tc0100scn[0].layer[0].bmp_y =32; tc0100scn[0].layer[0].bmp_w =320; tc0100scn[0].layer[0].bmp_h =224; //tc0100scn[0].layer[0].mapper =&Map_15bit_RRRRGGGGBBBBRGBx; tc0100scn[0].layer[0].tile_mask=0x7FFF; tc0100scn[0].layer[0].scr_x =19; tc0100scn[0].layer[0].scr_y =8; tc0100scn[0].layer[1].RAM =RAM_VIDEO+0x8000; tc0100scn[0].layer[1].GFX =GFX; tc0100scn[0].layer[1].MASK =GFX_BG0_SOLID; tc0100scn[0].layer[1].SCR =RAM_SCROLL+2; tc0100scn[0].layer[1].type =0; tc0100scn[0].layer[1].bmp_x =32; tc0100scn[0].layer[1].bmp_y =32; tc0100scn[0].layer[1].bmp_w =320; tc0100scn[0].layer[1].bmp_h =224; //tc0100scn[0].layer[1].mapper =&Map_15bit_RRRRGGGGBBBBRGBx; tc0100scn[0].layer[1].tile_mask=0x7FFF; tc0100scn[0].layer[1].scr_x =19; tc0100scn[0].layer[1].scr_y =8; tc0100scn[0].layer[2].RAM =RAM_VIDEO+0x4000; tc0100scn[0].layer[2].GFX =GFX_FG0; tc0100scn[0].layer[2].SCR =RAM_SCROLL+4; tc0100scn[0].layer[2].type =3; tc0100scn[0].layer[2].bmp_x =32; tc0100scn[0].layer[2].bmp_y =32; tc0100scn[0].layer[2].bmp_w =320; tc0100scn[0].layer[2].bmp_h =224; //tc0100scn[0].layer[2].mapper =&Map_15bit_RRRRGGGGBBBBRGBx; tc0100scn[0].layer[2].scr_x =19; tc0100scn[0].layer[2].scr_y =8; tc0100scn[0].RAM = RAM_VIDEO; tc0100scn[0].GFX_FG0 = GFX_FG0; init_tc0100scn(0);/* // Init tc0200obj emulation // ------------------------ tc0200obj.RAM = RAM+0x10000; tc0200obj.RAM_B = RAM+0x18000; tc0200obj.GFX = GFX_SPR; tc0200obj.MASK = GFX_SPR_SOLID; tc0200obj.bmp_x = 32; tc0200obj.bmp_y = 32; tc0200obj.bmp_w = 320; tc0200obj.bmp_h = 224; tc0200obj.mapper = &Map_15bit_RRRRGGGGBBBBRGBx; tc0200obj.tile_mask = 0xFFFF; tc0200obj.ofs_x = 0; //0-0x2E; tc0200obj.ofs_y = 0; //0-0x1F; tc0200obj.cols = 16; tc0200obj.RAM_TILE = RAM+0x20000; tc0200obj.RAM_TILE_B = RAM+0x20800; init_tc0200obj();*//* * StarScream Stuff follows */ ByteSwap(ROM,0x100000); ByteSwap(RAM,0x48000); AddMemFetch(0x000000, 0x2FFFFF, ROM+0x000000-0x000000); // 68000 ROM AddMemFetch(-1, -1, NULL); AddReadByte(0x000000, 0x2FFFFF, NULL, ROM+0x000000); // 68000 ROM AddReadByte(0x600000, 0x60FFFF, NULL, RAM+0x000000); // 68000 RAM AddReadByte(0x800000, 0x80FFFF, NULL, RAM+0x010000); // OBJECT RAM AddReadByte(0x400000, 0x400FFF, NULL, RAM+0x020000); // EXT OBJECT RAM AddReadByte(0x900000, 0x90FFFF, NULL, RAM_VIDEO); // SCREEN RAM AddReadByte(0x300000, 0x30001F, NULL, RAM+0x043000); // INPUT AddReadByte(0xA00000, 0xA00003, tc0140syt_read_main_68k, NULL); // SOUND COMM AddReadByte(0x610000, 0x61FFFF, NULL, RAM+0x000000); // 68000 RAM [MIRROR/BAD CODING] AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL); // <Bad Reads> AddReadByte(-1, -1, NULL, NULL); AddReadWord(0x000000, 0x2FFFFF, NULL, ROM+0x000000); // 68000 ROM AddReadWord(0x600000, 0x60FFFF, NULL, RAM+0x000000); // 68000 RAM AddReadWord(0x800000, 0x80FFFF, NULL, RAM+0x010000); // OBJECT RAM AddReadWord(0x900000, 0x90FFFF, NULL, RAM_VIDEO); // SCREEN RAM AddReadWord(0x400000, 0x400FFF, NULL, RAM+0x020000); // EXT OBJECT RAM AddReadWord(0x500000, 0x501FFF, NULL, RAM+0x040000); // COLOR RAM AddReadWord(0x300000, 0x30001F, NULL, RAM+0x043000); // INPUT AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL); // <Bad Reads> AddReadWord(-1, -1,NULL, NULL); AddWriteByte(0x600000, 0x60FFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteByte(0x800000, 0x80FFFF, NULL, RAM+0x010000); // OBJECT RAM AddWriteByte(0x906000, 0x906FFF, tc0100scn_0_gfx_fg0_wb, NULL); // FG0 GFX RAM AddWriteByte(0x900000, 0x90FFFF, NULL, RAM_VIDEO); // SCREEN RAM AddWriteByte(0x400000, 0x400FFF, NULL, RAM+0x020000); // EXT OBJECT RAM AddWriteByte(0xA00000, 0xA00003, tc0140syt_write_main_68k, NULL); // SOUND COMM AddWriteByte(0x300000, 0x30001F, tc0220ioc_wb, NULL); // INPUT AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad Writes> AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0x600000, 0x60FFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteWord(0x800000, 0x80FFFF, NULL, RAM+0x010000); // OBJECT RAM AddWriteWord(0x906000, 0x906FFF, tc0100scn_0_gfx_fg0_ww, NULL); // FG0 GFX RAM AddWriteWord(0x900000, 0x90FFFF, NULL, RAM_VIDEO); // SCREEN RAM AddWriteWord(0x500000, 0x501FFF, NULL, RAM+0x040000); // COLOR RAM AddWriteWord(0x400000, 0x400FFF, NULL, RAM+0x020000); // EXT OBJECT RAM AddWriteWord(0x700000, 0x7000FF, NULL, RAM+0x042000); // ??? RAM AddWriteWord(0x920000, 0x92000F, NULL, RAM_SCROLL); // SCROLL RAM AddWriteWord(0x300000, 0x30001F, tc0220ioc_ww, NULL); // INPUT AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers... }void ClearDinoRex(void){ RemoveTaitoYM2610(); #ifdef RAINE_DEBUG //save_debug("RAM.bin",RAM,0x080000,1); #endif}void ExecuteDinoRexFrame(void){ cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(6,60)); // M68000 12MHz (60fps) cpu_interrupt(CPU_68K_0, 6); cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(6,60)); // M68000 12MHz (60fps) cpu_interrupt(CPU_68K_0, 5); Taito2610_Frame(); // Z80 and YM2610}void DrawDinoRex(void){ int x,y,ta,tb,sb,zz; int xn,yn,td,th; int relx,rely,relx2,rely2; UINT8 *map; ClearPaletteMap(); // Init tc0100scn emulation // ------------------------ tc0100scn_layer_count = 0; tc0100scn[0].ctrl = ReadWord(RAM_SCROLL+12); // BG0 // --- render_tc0100scn_layer_mapped(0,0); // BG1 // --- render_tc0100scn_layer_mapped(0,1); x=0; y=0; xn=0; yn=0; tb=0; if((ReadWord(&RAM[0x1800A])&0x0001)==0){ th=0x10000; sb=0x20000; } else{ th=0x18000; sb=0x20800; } relx2=ReadWord(&RAM[th+0x14])&0x7FF; rely2=ReadWord(&RAM[th+0x16])&0x7FF; relx=relx2; rely=rely2; for(zz=th;zz<(th+0x4000);zz+=16,sb+=2){ if(RAM[zz+11]!=0){zz=th+0x4000;} td=RAM[zz+9]; if((td&0x40)==0){ if((td&0x80)==0){ // 0x04 x=((16-83)+ReadWord(&RAM[zz+4])+relx)&0x7FF; xn=x; } else{ x=xn; } } else{ if((td&0x80)!=0){ x=(x+16)&0x7FF; } } if((td&0x10)==0){ if((td&0x04)==0){ y=(16+ReadWord(&RAM[zz+6])+rely)&0x7FF; yn=y; } else{ y=yn; } } else{ if((td&0x20)!=0){ y=(y+16)&0x7FF; } } if((ReadWord(&RAM[zz+4])&0x4000)!=0){ relx=ReadWord(&RAM[zz+4])&0x7FF; rely=ReadWord(&RAM[zz+6])&0x7FF; relx+=relx2; rely+=rely2; } if((td&0x04)==0){ tb=RAM[zz+8]; } if((x>16)&&(y>16)&&(x<320+32)&&(y<224+32)){ ta=((RAM[sb]<<16)|(RAM[zz]<<8)); if(ta!=0){ MAP_PALETTE_MAPPED_NEW( tb, 16, map ); switch(td&0x03){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX[ta+0x200000],x,y,map); break; case 0x01: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX[ta+0x200000],x,y,map); break; case 0x02: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX[ta+0x200000],x,y,map); break; case 0x03: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX[ta+0x200000],x,y,map); break; } } } }//render_tc0200obj_mapped_opwolf3(); // FG0 // --- render_tc0100scn_layer_mapped(0,2);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -