📄 warriorb.c
字号:
// ----------------- WriteWord68k(&ROM[0x0376A],0x4EF9); // jmp $400 WriteLong68k(&ROM[0x0376C],0x00000400); // WriteLong68k(&ROM[0x00400],0x4A2DA91E); // tst.b -22242(a5) WriteWord68k(&ROM[0x00404],0x670A); // beq.S LAB_0142 WriteLong68k(&ROM[0x00406],0x206DA924); // movea.l -22236(a5),a0 WriteWord68k(&ROM[0x0040A],0x4E90); // jsr (a0) WriteLong68k(&ROM[0x0040C],0x422DA91E); // clr.b -22242(a5) WriteLong68k(&ROM[0x00410],0x13FC0000); // move.b #$00,$AA0000 ; Speed Hack WriteLong68k(&ROM[0x00414],0x00AA0000); // WriteWord68k(&ROM[0x00418],0x6100-0x1A); // bra.s <loop> WriteLong68k(&ROM[0x03764],0x4EB80420); // jsr ($420).w WriteLong68k(&ROM[0x00420],0x4EB838AE); // jsr (EXT_00CC).w ; Random Gen WriteLong68k(&ROM[0x00424],0x13FC0000); // move.b #$00,$AA0000 ; Speed Hack WriteLong68k(&ROM[0x00428],0x00AA0000); // WriteWord68k(&ROM[0x0042C],0x4E75); // rts // Fix Freeze // ---------- WriteWord68k(&ROM[0x033B6],0x4E71); // Init tc0220ioc emulation // ------------------------ tc0220ioc.RAM = RAM_INPUT; tc0220ioc.ctrl = 0; //TC0220_STOPCPU; reset_tc0220ioc();/* * StarScream Stuff follows */ ByteSwap(ROM,0x100000); ByteSwap(RAM,0x70000); AddMemFetch(0x000000, 0x1FFFFF, ROM+0x000000-0x000000); // 68000 ROM AddMemFetch(-1, -1, NULL); AddReadByte(0x000000, 0x1FFFFF, NULL, ROM+0x000000); // 68000 ROM AddReadByte(0x200000, 0x20FFFF, NULL, RAM+0x000000); // 68000 RAM AddReadByte(0x300000, 0x313FFF, NULL, RAM+0x010000); // SCREEN RAM AddReadByte(0x340000, 0x353FFF, NULL, RAM+0x024000); // OBJECT RAM AddReadByte(0x800000, 0x80001F, NULL, RAM_INPUT); // INPUT AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL); // <Bad Reads> AddReadByte(-1, -1, NULL, NULL); AddReadWord(0x000000, 0x1FFFFF, NULL, ROM+0x000000); // 68000 ROM AddReadWord(0x200000, 0x20FFFF, NULL, RAM+0x000000); // 68000 RAM AddReadWord(0x300000, 0x313FFF, NULL, RAM+0x010000); // SCREEN RAM AddReadWord(0x340000, 0x353FFF, NULL, RAM+0x024000); // OBJECT RAM AddReadWord(0x400000, 0x400007, tc0110pcr_rw, NULL); // COLOR RAM SCREEN A AddReadWord(0x420000, 0x420007, tc0110pcr_rw_2, NULL); // COLOR RAM SCREEN B AddReadWord(0x600000, 0x601FFF, NULL, RAM+0x038000); // SPRITE RAM AddReadWord(0x800000, 0x80001F, NULL, RAM_INPUT); // INPUT AddReadWord(0x830000, 0x830003, tc0140syt_read_main_68k, NULL); // SOUND COMM AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL); // <Bad Reads> AddReadWord(-1, -1, NULL, NULL); AddWriteByte(0x200000, 0x20FFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteByte(0x300000, 0x310FFF, NULL, RAM+0x010000); // SCREEN RAM AddWriteByte(0x340000, 0x353FFF, NULL, RAM+0x024000); // OBJECT RAM AddWriteByte(0x311000, 0x311FFF, tc0100scn_0_gfx_fg0_wb, NULL); // FG0 GFX RAM AddWriteByte(0x312000, 0x313FFF, NULL, RAM+0x022000); // SCREEN RAM AddWriteWord(0x800000, 0x80001F, 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(0x200000, 0x20FFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteWord(0x300000, 0x310FFF, NULL, RAM+0x010000); // SCREEN RAM AddWriteWord(0x340000, 0x353FFF, NULL, RAM+0x024000); // OBJECT RAM AddWriteWord(0x311000, 0x311FFF, tc0100scn_0_gfx_fg0_ww, NULL); // FG0 GFX RAM AddWriteWord(0x312000, 0x313FFF, NULL, RAM+0x022000); // SCREEN RAM AddWriteWord(0x400000, 0x400007, tc0110pcr_ww, NULL); // COLOR RAM SCREEN A AddWriteWord(0x420000, 0x420007, tc0110pcr_ww_2, NULL); // COLOR RAM SCREEN B AddWriteWord(0x600000, 0x601FFF, NULL, RAM+0x038000); // SPRITE RAM AddWriteWord(0x320000, 0x32000F, NULL, RAM+0x040020); // SCROLL A RAM AddWriteWord(0x360000, 0x36000F, NULL, RAM+0x040040); // SCROLL B RAM AddWriteWord(0x830000, 0x830003, tc0140syt_write_main_68k, NULL); // SOUND COMM AddWriteWord(0x800000, 0x80001F, tc0220ioc_ww, NULL); // INPUT AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers... }void ClearWarriorBlade(void){ RemoveTaitoYM2610(); #ifdef RAINE_DEBUG //save_debug("ROM.bin",ROM,0x100000,1); //save_debug("RAM.bin",RAM,0x070000,1); #endif}void ExecuteWarriorBladeFrame(void){ //print_ingame(600,"%04x",ReadWord(&RAM[0x4002C])); cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(20,60)); // M68000 20MHz (60fps) /*#ifdef RAINE_DEBUG print_debug("PC0:%06x SR:%04x\n",s68000context.pc,s68000context.sr); #endif*/ cpu_interrupt(CPU_68K_0, 4); Taito2610_FrameWarriorB(); // Z80 and YM2610}void DrawWarriorBlade(void){ int x,y,ta; int zz,zzz,zzzz,x16,y16; UINT8 *map; UINT8 *RAM_BGA; UINT8 *RAM_BGB; UINT8 *SCR_BGA; UINT8 *SCR_BGB; ClearPaletteMap(); if((ReadWord(&RAM[0x4002C])&0x08)==0){ RAM_BGA = RAM+0x10000; RAM_BGB = RAM+0x18000; SCR_BGA = RAM+0x40020; SCR_BGB = RAM+0x40022; } else{ RAM_BGA = RAM+0x18000; RAM_BGB = RAM+0x10000; SCR_BGA = RAM+0x40022; SCR_BGB = RAM+0x40020; } // BG0 // --- MAKE_SCROLL_1024x512_4_8( 20-(ReadWord(&SCR_BGA[0])), 8-(ReadWord(&SCR_BGA[6])) ); zz=zzzz; for(y=(32-y16);y<(240+32);y+=8){ for(x=(32-x16);x<(320+32-x16);x+=8){ MAP_PALETTE_MAPPED_NEW( RAM_BGA[zz]&0x7F, 16, map ); ta = ReadWord(&RAM_BGA[2+zz]); switch(RAM_BGA[1+zz]&0xC0){ case 0x00: Draw8x8_Mapped_Rot(&GFX_BG0[ta<<6],x,y,map); break; case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG0[ta<<6],x,y,map); break; case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG0[ta<<6],x,y,map); break; case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG0[ta<<6],x,y,map); break; } zz=(zz&0x7E00)|((zz+4)&0x1FF); } for(x=(320+32-x16);x<(640+32);x+=8){ MAP_PALETTE_MAPPED_NEW( RAM_BGA[zz]&0x7F, 16, map ); ta = ReadWord(&RAM_BGA[2+zz]); switch(RAM_BGA[1+zz]&0xC0){ case 0x00: Draw8x8_Mapped_Rot(&GFX_BG1[ta<<6],x,y,map); break; case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG1[ta<<6],x,y,map); break; case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG1[ta<<6],x,y,map); break; case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG1[ta<<6],x,y,map); break; } zz=(zz&0x7E00)|((zz+4)&0x1FF); } zzzz=(zzzz+0x200)&0x7FFF; zz=zzzz; } // BG1 // --- MAKE_SCROLL_1024x512_4_8( 20-(ReadWord(&SCR_BGB[0])), 8-(ReadWord(&SCR_BGB[6])) ); zz=zzzz; for(y=(32-y16);y<(240+32);y+=8){ for(x=(32-x16);x<(320+32-x16);x+=8){ ta=ReadWord(&RAM_BGB[2+zz]); if(GFX_BG0_SOLID[ta]){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( RAM_BGB[zz]&0x7F, 16, map ); if(GFX_BG0_SOLID[ta]==1){ // Some pixels; trans switch(RAM_BGB[1+zz]&0xC0){ case 0x00: Draw8x8_Trans_Mapped_Rot(&GFX_BG0[ta<<6],x,y,map); break; case 0x40: Draw8x8_Trans_Mapped_FlipY_Rot(&GFX_BG0[ta<<6],x,y,map); break; case 0x80: Draw8x8_Trans_Mapped_FlipX_Rot(&GFX_BG0[ta<<6],x,y,map); break; case 0xC0: Draw8x8_Trans_Mapped_FlipXY_Rot(&GFX_BG0[ta<<6],x,y,map); break; } } else{ // all pixels; solid switch(RAM_BGB[1+zz]&0xC0){ case 0x00: Draw8x8_Mapped_Rot(&GFX_BG0[ta<<6],x,y,map); break; case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG0[ta<<6],x,y,map); break; case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG0[ta<<6],x,y,map); break; case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG0[ta<<6],x,y,map); break; } } } zz=(zz&0x7E00)|((zz+4)&0x1FF); } for(x=(320+32-x16);x<(640+32);x+=8){ ta=ReadWord(&RAM_BGB[2+zz]); if(GFX_BG1_SOLID[ta]){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( RAM_BGB[zz]&0x7F, 16, map ); if(GFX_BG1_SOLID[ta]==1){ // Some pixels; trans switch(RAM_BGB[1+zz]&0xC0){ case 0x00: Draw8x8_Trans_Mapped_Rot(&GFX_BG1[ta<<6],x,y,map); break; case 0x40: Draw8x8_Trans_Mapped_FlipY_Rot(&GFX_BG1[ta<<6],x,y,map); break; case 0x80: Draw8x8_Trans_Mapped_FlipX_Rot(&GFX_BG1[ta<<6],x,y,map); break; case 0xC0: Draw8x8_Trans_Mapped_FlipXY_Rot(&GFX_BG1[ta<<6],x,y,map); break; } } else{ // all pixels; solid switch(RAM_BGB[1+zz]&0xC0){ case 0x00: Draw8x8_Mapped_Rot(&GFX_BG1[ta<<6],x,y,map); break; case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG1[ta<<6],x,y,map); break; case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG1[ta<<6],x,y,map); break; case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG1[ta<<6],x,y,map); break; } } } zz=(zz&0x7E00)|((zz+4)&0x1FF); } zzzz=(zzzz+0x200)&0x7FFF; zz=zzzz; } for(zz=0x393F8;zz>=0x38000;zz-=8){ x=((32)+ReadWord(&RAM[zz+6]))&0x3FF; y=((32+224+256)-ReadWord(&RAM[zz]))&0x1FF; if((x>16)&&(y>16)&&(x<640+32)&&(y<240+32)){ ta=ReadWord(&RAM[zz+2])&0x7FFF; if(GFX_SPR_SOLID[ta]){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( RAM[zz+4]&0x7F, 16, map ); if(GFX_SPR_SOLID[ta]==1){ // Some pixels; trans switch(RAM[zz+7]&0x0C){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x04: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x08: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x0C: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break; } } else{ // all pixels; solid switch(RAM[zz+7]&0x0C){ case 0x00: Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x04: Draw16x16_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x08: Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x0C: Draw16x16_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break; } } } } } // FG0 // --- MAKE_SCROLL_1024x256_2_8( 20-(ReadWord(&RAM[0x40024])), 8-(ReadWord(&RAM[0x4002A])) ); START_SCROLL_1024x256_2_8(32,32,640,240); ta = ReadWord(&RAM[0x22000+zz]); if(ta&0x00FF){ MAP_PALETTE_MAPPED_NEW( (ta>>8)&0x3F, 16, map ); switch(ta&0xC000){ case 0x0000: Draw8x8_Trans_Mapped_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map); break; case 0x4000: Draw8x8_Trans_Mapped_FlipY_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map); break; case 0x8000: Draw8x8_Trans_Mapped_FlipX_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map); break; case 0xC000: Draw8x8_Trans_Mapped_FlipXY_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map); break; } } END_SCROLL_1024x256_2_8();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -