📄 darius.c
字号:
static UINT8 *GFX_BG0_SOLID;static UINT8 *GFX_FG0;static UINT8 *GFX_FG0_SOLID;static UINT8 *GFX_SPR;static UINT8 *GFX_SPR_SOLID;static int tcpu;static UINT16 BadReadWord(UINT32 address){ #ifdef RAINE_DEBUG if(address!=0x0B0000)print_debug("Rw%01d(%06x) [%06x]\n",tcpu,address,s68000context.pc); #endif return(0xFFFF);}static void BadWriteWord(UINT32 address, UINT16 data){ #ifdef RAINE_DEBUG if(address!=0x0B0000)print_debug("Ww%01d(%06x,%04x) [%06x]\n",tcpu,address,data,s68000context.pc); #endif}static UINT8 darius_ioc_rb(UINT32 address){ address&=0xFF; switch(address){ case 0x01: case 0x03: return tc0140syt_read_main_68k(address); break; default: return RAM[0x42000+(address^1)]; break; }}static UINT16 darius_ioc_rw(UINT32 address){ UINT16 ret; ret = darius_ioc_rb(address+0)<<8; ret |= darius_ioc_rb(address+1)<<0; return ret;}static void darius_ioc_wb(UINT32 address, UINT8 data){ address&=0xFF; switch(address){ case 0x01: case 0x03: tc0140syt_write_main_68k(address, data); break; case 0x61: RAM[0x42000+(address^1)] = data; switch_led(0,((data>>3)&1)|((data>>4)&1)); // Coin A [Coin Inserted] + Player Start Game switch_led(1,((data>>6)&1)|((data>>4)&1)); // Coin B [Coin Inserted] + Player Start Game //switch_led(0,((data>>3)&1)); // Coin A [Coin Inserted] //switch_led(1,((data>>6)&1)); // Coin B [Coin Inserted] switch_led(2,((data>>1)&1)); // Coin A [Ready for coins] //switch_led(3,((data>>2)&1)); // Coin B [Ready for coins] //switch_led(4,((data>>4)&1)); // Player Start Game break; default: RAM[0x42000+(address^1)] = data; break; }}static void darius_ioc_ww(UINT32 address, UINT16 data){ darius_ioc_wb(address+0, (UINT8) ((data>>8)&0xFF)); darius_ioc_wb(address+1, (UINT8) ((data>>0)&0xFF));}static void LoadActual(int romset){ int ta,tb,tc; RAMSize=0x80000; if(!(ROM=AllocateMem(0xA0000))) return; if(!(RAM=AllocateMem(RAMSize))) return; if(!(GFX=AllocateMem(0xC0000+0x20000+0x180000))) return; GFX_BG0=GFX+0x000000; GFX_FG0=GFX+0x0C0000; GFX_SPR=GFX+0x0E0000; if(!load_rom_index(16, RAM+0x00000, 0x10000)) return; // 16x16 Sprites if(!load_rom_index(12, RAM+0x10000, 0x10000)) return; if(!load_rom_index( 8, RAM+0x20000, 0x10000)) return; tb=0; for(ta=0;ta<0x30000;ta++){ tc=RAM[ta]; GFX_SPR[tb+0]=((tc&0x80)>>7)<<0; GFX_SPR[tb+1]=((tc&0x40)>>6)<<0; GFX_SPR[tb+2]=((tc&0x20)>>5)<<0; GFX_SPR[tb+3]=((tc&0x10)>>4)<<0; GFX_SPR[tb+4]=((tc&0x08)>>3)<<0; GFX_SPR[tb+5]=((tc&0x04)>>2)<<0; GFX_SPR[tb+6]=((tc&0x02)>>1)<<0; GFX_SPR[tb+7]=((tc&0x01)>>0)<<0; tb+=16; if((tb&0x7F)==0){tb-=0x78;} else{if((tb&0x7F)==8){tb-=8;}} } if(!load_rom_index(17, RAM+0x00000, 0x10000)) return; // 16x16 Sprites if(!load_rom_index(13, RAM+0x10000, 0x10000)) return; if(!load_rom_index( 9, RAM+0x20000, 0x10000)) return; tb=0; for(ta=0;ta<0x30000;ta++){ tc=RAM[ta]; GFX_SPR[tb+0]|=((tc&0x80)>>7)<<1; GFX_SPR[tb+1]|=((tc&0x40)>>6)<<1; GFX_SPR[tb+2]|=((tc&0x20)>>5)<<1; GFX_SPR[tb+3]|=((tc&0x10)>>4)<<1; GFX_SPR[tb+4]|=((tc&0x08)>>3)<<1; GFX_SPR[tb+5]|=((tc&0x04)>>2)<<1; GFX_SPR[tb+6]|=((tc&0x02)>>1)<<1; GFX_SPR[tb+7]|=((tc&0x01)>>0)<<1; tb+=16; if((tb&0x7F)==0){tb-=0x78;} else{if((tb&0x7F)==8){tb-=8;}} } if(!load_rom_index(18, RAM+0x00000, 0x10000)) return; // 16x16 Sprites if(!load_rom_index(14, RAM+0x10000, 0x10000)) return; if(!load_rom_index(10, RAM+0x20000, 0x10000)) return; tb=0; for(ta=0;ta<0x30000;ta++){ tc=RAM[ta]; GFX_SPR[tb+0]|=((tc&0x80)>>7)<<2; GFX_SPR[tb+1]|=((tc&0x40)>>6)<<2; GFX_SPR[tb+2]|=((tc&0x20)>>5)<<2; GFX_SPR[tb+3]|=((tc&0x10)>>4)<<2; GFX_SPR[tb+4]|=((tc&0x08)>>3)<<2; GFX_SPR[tb+5]|=((tc&0x04)>>2)<<2; GFX_SPR[tb+6]|=((tc&0x02)>>1)<<2; GFX_SPR[tb+7]|=((tc&0x01)>>0)<<2; tb+=16; if((tb&0x7F)==0){tb-=0x78;} else{if((tb&0x7F)==8){tb-=8;}} } if(!load_rom_index(19, RAM+0x00000, 0x10000)) return; // 16x16 Sprites if(!load_rom_index(15, RAM+0x10000, 0x10000)) return; if(!load_rom_index(11, RAM+0x20000, 0x10000)) return; tb=0; for(ta=0;ta<0x30000;ta++){ tc=RAM[ta]; GFX_SPR[tb+0]|=((tc&0x80)>>7)<<3; GFX_SPR[tb+1]|=((tc&0x40)>>6)<<3; GFX_SPR[tb+2]|=((tc&0x20)>>5)<<3; GFX_SPR[tb+3]|=((tc&0x10)>>4)<<3; GFX_SPR[tb+4]|=((tc&0x08)>>3)<<3; GFX_SPR[tb+5]|=((tc&0x04)>>2)<<3; GFX_SPR[tb+6]|=((tc&0x02)>>1)<<3; GFX_SPR[tb+7]|=((tc&0x01)>>0)<<3; tb+=16; if((tb&0x7F)==0){tb-=0x78;} else{if((tb&0x7F)==8){tb-=8;}} } if(!load_rom_index(20, RAM+0x00000, 0x10000)) return; // 8x8 BG0 if(!load_rom_index(21, RAM+0x10000, 0x10000)) return; if(!load_rom_index(22, RAM+0x20000, 0x10000)) return; tb=0; for(ta=0;ta<0x30000;ta++,tb+=4){ GFX_BG0[tb+0]=RAM[ta]>>4; GFX_BG0[tb+1]=RAM[ta]&15; } if(!load_rom_index(23, RAM+0x00000, 0x10000)) return; if(!load_rom_index(24, RAM+0x10000, 0x10000)) return; if(!load_rom_index(25, RAM+0x20000, 0x10000)) return; tb=0; for(ta=0;ta<0x30000;ta++,tb+=4){ GFX_BG0[tb+2]=RAM[ta]>>4; GFX_BG0[tb+3]=RAM[ta]&15; } if(!load_rom_index(27, RAM+0x00000, 0x4000)) return; // 8x8 FG0 tb=0; for(ta=0;ta<0x4000;ta++){ tc=RAM[ta]; GFX_FG0[tb+0]=((tc&0x80)>>7)<<0; GFX_FG0[tb+1]=((tc&0x40)>>6)<<0; GFX_FG0[tb+2]=((tc&0x20)>>5)<<0; GFX_FG0[tb+3]=((tc&0x10)>>4)<<0; GFX_FG0[tb+4]=((tc&0x08)>>3)<<0; GFX_FG0[tb+5]=((tc&0x04)>>2)<<0; GFX_FG0[tb+6]=((tc&0x02)>>1)<<0; GFX_FG0[tb+7]=((tc&0x01)>>0)<<0; tb+=8; } if(!load_rom_index(26, RAM+0x00000, 0x4000)) return; tb=0; for(ta=0;ta<0x4000;ta++){ tc=RAM[ta]; GFX_FG0[tb+0]|=((tc&0x80)>>7)<<1; GFX_FG0[tb+1]|=((tc&0x40)>>6)<<1; GFX_FG0[tb+2]|=((tc&0x20)>>5)<<1; GFX_FG0[tb+3]|=((tc&0x10)>>4)<<1; GFX_FG0[tb+4]|=((tc&0x08)>>3)<<1; GFX_FG0[tb+5]|=((tc&0x04)>>2)<<1; GFX_FG0[tb+6]|=((tc&0x02)>>1)<<1; GFX_FG0[tb+7]|=((tc&0x01)>>0)<<1; tb+=8; } GFX_BG0_SOLID = make_solid_mask_8x8 (GFX_BG0, 0x3000); GFX_FG0_SOLID = make_solid_mask_8x8 (GFX_FG0, 0x0800); GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x1800); memset(RAM,0xFF,0x30000); if(!load_rom_index(1, RAM+0x00000, 0x10000)) return; // 68000 MAIN if(romset==2){ if(!load_rom_index(30,RAM+0x10000, 0x10000)) return; } if(!load_rom_index(3, RAM+0x20000, 0x10000)) return; for(ta=0;ta<0x30000;ta++){ ROM[ta+ta]=RAM[ta]; } memset(RAM,0xFF,0x30000); if(!load_rom_index(0, RAM+0x00000, 0x10000)) return; // 68000 MAIN if(romset==2){ if(!load_rom_index(31,RAM+0x10000, 0x10000)) return; } if(!load_rom_index(2, RAM+0x20000, 0x10000)) return; for(ta=0;ta<0x30000;ta++){ ROM[ta+ta+1]=RAM[ta]; } if(!load_rom_index(5, RAM+0x00000, 0x10000)) return; // 68000 SUB if(!load_rom_index(7, RAM+0x10000, 0x10000)) return; for(ta=0;ta<0x20000;ta++){ ROM[ta+ta+0x60000]=RAM[ta]; } if(!load_rom_index(4, RAM+0x00000, 0x10000)) return; // 68000 SUB if(!load_rom_index(6, RAM+0x10000, 0x10000)) return; for(ta=0;ta<0x20000;ta++){ ROM[ta+ta+0x60001]=RAM[ta]; } /*----------------------*/ if(!(PCMROM=AllocateMem(0x10000))) return; if(!load_rom_index(28, PCMROM, 0x10000)) return; Z80ROM=RAM+0x44000; if(!load_rom_index(29, Z80ROM, 0x10000)) return; // Z80 SOUND ROM Z80ROM[0x0270]=0xD3; // OUTA (AAh) Z80ROM[0x0271]=0xAA; // SetStopZ80Mode2(0x0263); // Setup rom banking // ----------------- AddTaitoSoundBanking(Z80ROM, 0x10000); // Setup Z80 memory interface // -------------------------- AddZ80AROMBase(Z80ROM, 0x0038, 0x0066); AddZ80AReadByte(0x0000, 0x7FFF, NULL, NULL); // BANK ROM AddZ80AReadByte(0x8000, 0x8FFF, NULL, Z80ROM+0x008000); // Z80 RAM AddZ80AReadByte(0x9000, 0x9001, YM2203AReadZ80, NULL); // YM2203 A AddZ80AReadByte(0xA000, 0xA001, YM2203BReadZ80, NULL); // YM2203 B AddZ80AReadByte(0xB000, 0xB001, tc0140syt_read_sub_z80, NULL); // 68000 COMM AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80, NULL); AddZ80AReadByte(-1, -1, NULL, NULL); AddZ80AWriteByte(0x8000, 0x8FFF, NULL, Z80ROM+0x008000); // Z80 RAM AddZ80AWriteByte(0x9000, 0x9001, YM2203AWriteZ80, NULL); // YM2203 A AddZ80AWriteByte(0xA000, 0xA001, YM2203BWriteZ80, NULL); // YM2203 B AddZ80AWriteByte(0xB000, 0xB001, tc0140syt_write_sub_z80,NULL); // 68000 COMM AddZ80AWriteByte(0xD400, 0xD400, DariusWrite_ADPCM, NULL); // ADPCM COMM AddZ80AWriteByte(0xDC00, 0xDC00, TaitoSoundSetBank, NULL); // BANK SELECT if( DariusStereo ){ AddZ80AWriteByte(0xC000, 0xC000, DariusYM2203SetFMPan, NULL); /* YM2203 FM #0 pan */ AddZ80AWriteByte(0xC400, 0xC400, DariusYM2203SetFMPan, NULL); /* YM2203 FM #1 pan */ AddZ80AWriteByte(0xC800, 0xC800, DariusYM2203SetAYPan, NULL); /* YM2203 PSG #0 pan */ AddZ80AWriteByte(0xCC00, 0xCC00, DariusYM2203SetAYPan, NULL); /* YM2203 PSG #1 pan */ AddZ80AWriteByte(0xD000, 0xD000, DariusMSM5205SetPan, NULL); /* ADPCM pan */ } AddZ80AWriteByte(0x0000, 0xFFFF, DefBadWriteZ80, NULL); AddZ80AWriteByte(-1, -1, NULL, NULL); AddZ80AReadPort(0x00, 0xFF, DefBadReadZ80, NULL); AddZ80AReadPort( -1, -1, NULL, NULL); AddZ80AWritePort(0xAA, 0xAA, StopZ80Mode2, NULL); AddZ80AWritePort(0x00, 0xFF, DefBadWriteZ80, NULL); AddZ80AWritePort( -1, -1, NULL, NULL); AddZ80AInit(); TaitoSoundSetBank(0,1); tc0140syt_reset(); // Add [J3d!] msm5205_interface.rom[0] = PCMROM; msm5205_interface.romsize[0] = 0x10000; if( !DariusStereo ) msm5205_interface.updatemode = MSM5205_MONO; else msm5205_interface.updatemode = MSM5205_STEREO; /************************************/ if(romset==0){ // Original // Main 68000 Speed Hack WriteLong68k(&ROM[0x0070C],0x13FC0000); WriteLong68k(&ROM[0x00710],0x00AA0000); WriteWord68k(&ROM[0x00714],0x6100-20); WriteLong68k(&ROM[0x00938],0x13FC0000); WriteLong68k(&ROM[0x0093C],0x00AA0000); // Sub 68000 Speed Hack WriteLong68k(&ROM[0x606FA],0x13FC0000); WriteLong68k(&ROM[0x606FE],0x00AA0000); WriteWord68k(&ROM[0x60702],0x6100-16); WriteLong68k(&ROM[0x6F074],0x13FC0000); WriteLong68k(&ROM[0x6F078],0x00AA0000); // Fix Main 68000 Checksum WriteLong68k(&ROM[0x013A8],0x4E714E71); WriteLong68k(&ROM[0x013BE],0x4E714E71); // Fix Communication WriteWord68k(&ROM[0x013EA],0x4E71); // Fix Sub 68000 Checksum WriteLong68k(&ROM[0x60A0A],0x4E714E71); } if(romset==1){ // Extra // Main 68000 Speed Hack WriteLong68k(&ROM[0x00716],0x13FC0000); WriteLong68k(&ROM[0x0071A],0x00AA0000); WriteWord68k(&ROM[0x0071E],0x6100-20); WriteLong68k(&ROM[0x0093E],0x13FC0000); WriteLong68k(&ROM[0x00942],0x00AA0000); // Sub 68000 Speed Hack WriteLong68k(&ROM[0x606FA],0x13FC0000); WriteLong68k(&ROM[0x606FE],0x00AA0000); WriteWord68k(&ROM[0x60702],0x6100-16); WriteLong68k(&ROM[0x6F074],0x13FC0000); WriteLong68k(&ROM[0x6F078],0x00AA0000); // Fix Main 68000 Checksum WriteLong68k(&ROM[0x013D6],0x4E714E71); WriteLong68k(&ROM[0x013EC],0x4E714E71); // Fix Communication WriteWord68k(&ROM[0x01418],0x4E71); // Fix Sub 68000 Checksum WriteLong68k(&ROM[0x60A0A],0x4E714E71); } if(romset==2){ // Alternate // Main 68000 Speed Hack WriteLong68k(&ROM[0x0070C],0x13FC0000); WriteLong68k(&ROM[0x00710],0x00AA0000); WriteWord68k(&ROM[0x00714],0x6100-20); WriteLong68k(&ROM[0x00938],0x13FC0000); WriteLong68k(&ROM[0x0093C],0x00AA0000); // Sub 68000 Speed Hack WriteLong68k(&ROM[0x606FA],0x13FC0000); WriteLong68k(&ROM[0x606FE],0x00AA0000); WriteWord68k(&ROM[0x60702],0x6100-16); WriteLong68k(&ROM[0x6F074],0x13FC0000); WriteLong68k(&ROM[0x6F078],0x00AA0000); // Fix Main 68000 Checksum WriteLong68k(&ROM[0x013FA],0x4E714E71); WriteLong68k(&ROM[0x01410],0x4E714E71); // Fix Communication WriteWord68k(&ROM[0x0143C],0x4E71); // Fix Sub 68000 Checksum WriteLong68k(&ROM[0x60A0A],0x4E714E71); } if (romset == 3) { // Main 68000 Speed Hack WriteLong68k(&ROM[0x00700],0x13FC0000); WriteLong68k(&ROM[0x00704],0x00AA0000); WriteWord68k(&ROM[0x00708],0x6100-20); WriteLong68k(&ROM[0x0092c],0x13FC0000); WriteLong68k(&ROM[0x00930],0x00AA0000); // Sub 68000 Speed Hack WriteLong68k(&ROM[0x606FA],0x13FC0000); WriteLong68k(&ROM[0x606FE],0x00AA0000); WriteWord68k(&ROM[0x60702],0x6100-16); WriteLong68k(&ROM[0x6F076],0x13FC0000); WriteLong68k(&ROM[0x6F07a],0x00AA0000); // Fix Main 68000 Checksum WriteLong68k(&ROM[0x01398],0x4E714E71); //WriteLong68k(&ROM[0x013BE],0x4E714E71); // Fix Communication
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -