📄 ninjaw.c
字号:
GFX_FG0 = RAM+0x64000; RAM_INPUT = RAM+0x3B000; tc0100scn[0].RAM = RAM+0x21000-0x6000; tc0100scn[0].GFX_FG0 = GFX_FG0; init_tc0100scn(0); GFX_BG0_SOLID = make_solid_mask_8x8 (GFX_BG0, 0x8000); GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x2000); tc0110pcr_init_typeb(RAM+0x38000, 1, 0); tc0110pcr_init_typeb_2(RAM+0x39000, 1, 0); tc0110pcr_init_typeb_3(RAM+0x3A000, 1, 0); set_colour_mapper(&col_map_xbbb_bbgg_gggr_rrrr); InitPaletteMap(RAM+0x38000, 0x80, 0x10, 0x8000); // Init tc0220ioc emulation // ------------------------ tc0220ioc.RAM = RAM_INPUT; tc0220ioc.ctrl = 0; //TC0220_STOPCPU; reset_tc0220ioc(); memset(RAM_INPUT,0x00,0x20);/* * StarScream Stuff follows */ ByteSwap(ROM,0x120000); ByteSwap(RAM,0x60000); AddMemFetch(0x000000, 0x0BFFFF, ROM+0x000000-0x000000); // 68000 ROM AddMemFetch(-1, -1, NULL); AddReadByte(0x000000, 0x0BFFFF, NULL, ROM+0x000000); // 68000 ROM AddReadByte(0x0C0000, 0x0CFFFF, NULL, RAM+0x000000); // MAIN RAM AddReadByte(0x240000, 0x24FFFF, NULL, RAM+0x024000); // COMMON RAM AddReadByte(0x260000, 0x263FFF, NULL, RAM+0x034000); // OBJECT RAM AddReadByte(0x280000, 0x293FFF, NULL, RAM+0x010000); // SCREEN RAM AddReadByte(0x200000, 0x200003, tc0220ioc_rb_port, NULL); // INPUT AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL); // <Bad Reads> AddReadByte(-1, -1, NULL, NULL); AddReadWord(0x000000, 0x0BFFFF, NULL, ROM+0x000000); // 68000 ROM AddReadWord(0x0C0000, 0x0CFFFF, NULL, RAM+0x000000); // MAIN RAM AddReadWord(0x240000, 0x24FFFF, NULL, RAM+0x024000); // COMMON RAM AddReadWord(0x260000, 0x263FFF, NULL, RAM+0x034000); // OBJECT RAM AddReadWord(0x280000, 0x293FFF, NULL, RAM+0x010000); // SCREEN RAM AddReadWord(0x340000, 0x340007, tc0110pcr_rw, NULL); // COLOR RAM SCREEN A AddReadWord(0x350000, 0x350007, tc0110pcr_rw_2, NULL); // COLOR RAM SCREEN B AddReadWord(0x360000, 0x360007, tc0110pcr_rw_3, NULL); // COLOR RAM SCREEN C AddReadWord(0x200000, 0x200003, tc0220ioc_rw_port, NULL); // INPUT AddReadWord(0x2C0000, 0x2D3FFF, NULL, RAM+0x050000); // CUSTOM2 AddReadWord(0x300000, 0x313FFF, NULL, RAM+0x064000); // CUSTOM3 AddReadWord(0x220000, 0x220003, tc0140syt_read_main_68k, NULL); // SOUND AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL); // <Bad Reads> AddReadWord(-1, -1, NULL, NULL); AddWriteByte(0x0C0000, 0x0CFFFF, NULL, RAM+0x000000); // MAIN RAM AddWriteByte(0x240000, 0x24FFFF, NULL, RAM+0x024000); // COMMON RAM AddWriteByte(0x260000, 0x263FFF, NULL, RAM+0x034000); // OBJECT RAM AddWriteByte(0x280000, 0x290FFF, NULL, RAM+0x010000); // SCREEN RAM AddWriteByte(0x291000, 0x291FFF, tc0100scn_0_gfx_fg0_wb, NULL); // FG0 GFX RAM AddWriteByte(0x292000, 0x293FFF, NULL, RAM+0x022000); // FG0 RAM AddWriteByte(0x200000, 0x200003, tc0220ioc_wb_port, NULL); // INPUT AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad Writes> AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0x0C0000, 0x0CFFFF, NULL, RAM+0x000000); // MAIN RAM AddWriteWord(0x240000, 0x24FFFF, NULL, RAM+0x024000); // COMMON RAM AddWriteWord(0x260000, 0x263FFF, NULL, RAM+0x034000); // OBJECT RAM AddWriteWord(0x280000, 0x290FFF, NULL, RAM+0x010000); // SCREEN RAM AddWriteWord(0x291000, 0x291FFF, tc0100scn_0_gfx_fg0_ww, NULL); // FG0 GFX RAM AddWriteWord(0x292000, 0x293FFF, NULL, RAM+0x022000); // FG0 RAM AddWriteWord(0x340000, 0x340007, tc0110pcr_ww, NULL); // COLOR RAM SCREEN A AddWriteWord(0x350000, 0x350007, tc0110pcr_ww_2, NULL); // COLOR RAM SCREEN B AddWriteWord(0x360000, 0x360007, tc0110pcr_ww_3, NULL); // COLOR RAM SCREEN C AddWriteWord(0x200000, 0x200003, tc0220ioc_ww_port, NULL); // INPUT AddWriteWord(0x2A0000, 0x2A000F, NULL, RAM+0x03B100); // SCROLL A AddWriteWord(0x2E0000, 0x2E000F, NULL, RAM+0x03B200); // SCROLL B AddWriteWord(0x320000, 0x32000F, NULL, RAM+0x03B300); // SCROLL C AddWriteWord(0x2C0000, 0x2D3FFF, NULL, RAM+0x050000); // CUSTOM2 AddWriteWord(0x300000, 0x313FFF, NULL, RAM+0x064000); // CUSTOM3 AddWriteWord(0x220000, 0x220003, tc0140syt_write_main_68k, NULL); // SOUND AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers... AddMemFetchMC68000B(0x000000, 0x05FFFF, ROM+0x0C0000-0x000000); // 68000 ROM AddMemFetchMC68000B(-1, -1, NULL); AddReadByteMC68000B(0x000000, 0x05FFFF, NULL, ROM+0x0C0000); // 68000 ROM AddReadByteMC68000B(0x080000, 0x08FFFF, NULL, RAM+0x040000); // SUB LOCAL RAM AddReadByteMC68000B(0x240000, 0x24FFFF, NULL, RAM+0x024000); // COMMON RAM AddReadByteMC68000B(0x260000, 0x263FFF, NULL, RAM+0x034000); // OBJECT RAM AddReadByteMC68000B(0x280000, 0x293FFF, NULL, RAM+0x010000); // SCREEN RAM AddReadByteMC68000B(0x200000, 0x200003, tc0220ioc_rb_port, NULL); // INPUT AddReadByteMC68000B(0x000000, 0xFFFFFF, DefBadReadByte, NULL); // <Bad Reads> AddReadByteMC68000B(-1, -1, NULL, NULL); AddReadWordMC68000B(0x000000, 0x05FFFF, NULL, ROM+0x0C0000); // 68000 ROM AddReadWordMC68000B(0x080000, 0x08FFFF, NULL, RAM+0x040000); // SUB LOCAL RAM AddReadWordMC68000B(0x240000, 0x24FFFF, NULL, RAM+0x024000); // COMMON RAM AddReadWordMC68000B(0x260000, 0x263FFF, NULL, RAM+0x034000); // OBJECT RAM AddReadWordMC68000B(0x280000, 0x293FFF, NULL, RAM+0x010000); // SCREEN RAM AddReadWordMC68000B(0x340000, 0x340007, tc0110pcr_rw, NULL); // COLOR RAM SCREEN A AddReadWordMC68000B(0x350000, 0x350007, tc0110pcr_rw_2, NULL); // COLOR RAM SCREEN B AddReadWordMC68000B(0x360000, 0x360007, tc0110pcr_rw_3, NULL); // COLOR RAM SCREEN C AddReadWordMC68000B(0x200000, 0x200003, tc0220ioc_rw_port, NULL); // INPUT AddReadWordMC68000B(0x000000, 0xFFFFFF, DefBadReadWord, NULL); // <Bad Reads> AddReadWordMC68000B(-1, -1, NULL, NULL); AddWriteByteMC68000B(0x080000, 0x08FFFF, NULL, RAM+0x040000); // SUB LOCAL RAM AddWriteByteMC68000B(0x240000, 0x24FFFF, NULL, RAM+0x024000); // COMMON RAM AddWriteByteMC68000B(0x260000, 0x263FFF, NULL, RAM+0x034000); // OBJECT RAM AddWriteByteMC68000B(0x280000, 0x290FFF, NULL, RAM+0x010000); // SCREEN RAM AddWriteByteMC68000B(0x291000, 0x291FFF, tc0100scn_0_gfx_fg0_wb, NULL); // FG0 GFX RAM AddWriteByteMC68000B(0x292000, 0x293FFF, NULL, RAM+0x022000); // FG0 RAM AddWriteByteMC68000B(0x200000, 0x200003, tc0220ioc_wb_port, NULL); // INPUT AddWriteByteMC68000B(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByteMC68000B(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad Writes> AddWriteByteMC68000B(-1, -1, NULL, NULL); AddWriteWordMC68000B(0x080000, 0x08FFFF, NULL, RAM+0x040000); // SUB LOCAL RAM AddWriteWordMC68000B(0x240000, 0x24FFFF, NULL, RAM+0x024000); // COMMON RAM AddWriteWordMC68000B(0x260000, 0x263FFF, NULL, RAM+0x034000); // OBJECT RAM AddWriteWordMC68000B(0x280000, 0x290FFF, NULL, RAM+0x010000); // SCREEN RAM AddWriteWordMC68000B(0x291000, 0x291FFF, tc0100scn_0_gfx_fg0_ww, NULL); // FG0 GFX RAM AddWriteWordMC68000B(0x292000, 0x293FFF, NULL, RAM+0x022000); // FG0 RAM AddWriteWordMC68000B(0x340000, 0x340007, tc0110pcr_ww, NULL); // COLOR RAM SCREEN A AddWriteWordMC68000B(0x350000, 0x350007, tc0110pcr_ww_2, NULL); // COLOR RAM SCREEN B AddWriteWordMC68000B(0x360000, 0x360007, tc0110pcr_ww_3, NULL); // COLOR RAM SCREEN C AddWriteWordMC68000B(0x200000, 0x200003, tc0220ioc_ww_port, NULL); // INPUT AddWriteWordMC68000B(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWordMC68000B(-1, -1, NULL, NULL); AddInitMemoryMC68000B(); // Set Starscream mem pointers... }void clear_ninja_warriors(void){ RemoveTaitoYM2610(); #ifdef RAINE_DEBUG //save_debug("ROM.bin",ROM,0x120000,1); //save_debug("RAM.bin",RAM,0x060000,1); #endif}void execute_ninja_warriors_frame(void){ cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60)); // M68000 12MHz (60fps) cpu_interrupt(CPU_68K_0, 4); cpu_execute_cycles(CPU_68K_1, CPU_FRAME_MHz(12,60)); // M68000 12MHz (60fps) cpu_interrupt(CPU_68K_1, 4); if(romset==0) Taito2610_FrameNinjaW(); // Z80 and YM2610 else Taito2610_FramePan(); // Z80 and YM2610}void draw_ninja_warriors(void){ int x,y,ta,zz,zzz,zzzz,x16,y16,spr_mask; UINT8 *map; ClearPaletteMap(); // BG0 // --- if(romset==0){ MAKE_SCROLL_1024x512_4_8( 38-(ReadWord(&RAM[0x3B100])), 16-(ReadWord(&RAM[0x3B106])) ); } else{ MAKE_SCROLL_1024x512_4_8( 38-(ReadWord(&RAM[0x3B100])+ReadWord(&RAM[0x20100])), // Add one of the line-line offsets 16-(ReadWord(&RAM[0x3B106])) ); } START_SCROLL_1024x512_4_8(32,32,864,224); ta = ReadWord(&RAM[0x10002+zz])&0x7FFF; MAP_PALETTE_MAPPED_NEW( RAM[0x10000+zz]&0x7F, 16, map ); switch(RAM[0x10001+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; } END_SCROLL_1024x512_4_8(); // BG1 // --- MAKE_SCROLL_1024x512_4_8( 38-(ReadWord(&RAM[0x3B102])), 16-(ReadWord(&RAM[0x3B108])) ); START_SCROLL_1024x512_4_8(32,32,864,224); ta=ReadWord(&RAM[0x18002+zz])&0x7FFF; if(GFX_BG0_SOLID[ta]!=0){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( RAM[0x18000+zz]&0x7F, 16, map ); if(GFX_BG0_SOLID[ta]==1){ // Some pixels; trans switch(RAM[0x18001+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[0x18001+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; } } } END_SCROLL_1024x512_4_8(); // OBJECT // ------ if(romset==0) spr_mask = 0x3FFF; else spr_mask = 0x1FFF; for(zz=0x37FF8;zz>=0x34000;zz-=8){ x = ((-16)+ReadWord(&RAM[zz+0]))&0x3FF; y = (( 16)+ReadWord(&RAM[zz+2]))&0x1FF; if((x>16)&&(y>16)&&(x<864+32)&&(y<224+32)){ ta=ReadWord(&RAM[zz+4])&spr_mask; if(GFX_SPR_SOLID[ta]!=0){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( RAM[zz+7]&0x7F, 16, map ); if(GFX_SPR_SOLID[ta]==1){ // Some pixels; trans switch(RAM[zz+6]&0x03){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x01: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x02: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x03: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break; } } else{ // all pixels; solid switch(RAM[zz+6]&0x03){ case 0x00: Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x01: Draw16x16_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x02: Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map); break; case 0x03: Draw16x16_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break; } } } } } // FG0 // --- MAKE_SCROLL_1024x256_2_8( 38-(ReadWord(&RAM[0x3B104])), 16-(ReadWord(&RAM[0x3B10A])) ); START_SCROLL_1024x256_2_8(32,32,864,224); ta = ReadWord(&RAM[0x22000+zz]); if(ta&0x00FF){ MAP_PALETTE_MAPPED_NEW( (ta>>8)&0x3F, 4, 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();}/*280000 - 287FFF | BG0 (1024x512 - 4 bytes/tile)288000 - 28FFFF | BG1 (1024x512 - 4 bytes/tile)290000 - 2903FF | BG0 LINE290400 - 2907FF | BG1 LINE291000 - 291FFF | FG0 GFX (8x8x4 - 16 bytes/tile)292000 - 293FFF | FG0 (1024x256 - 2 bytes/tile)*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -