📄 rainbow.c
字号:
WriteLong68k(&ROM[0x14D1C],0x4EB90000); // C-CHIP HACK#21D WriteLong68k(&ROM[0x14D20],0x024C4E71); WriteWord68k(&ROM[0x14D24],0x4E71); WriteLong68k(&ROM[0x14D36],0x4EB90000); // C-CHIP HACK#21E WriteLong68k(&ROM[0x14D3A],0x024C4E71); WriteWord68k(&ROM[0x14D3E],0x4E71); WriteLong68k(&ROM[0x145D6],0x4EB90000); // C-CHIP HACK#22A WriteLong68k(&ROM[0x145DA],0x02644E71); WriteWord68k(&ROM[0x145DE],0x4E71); WriteLong68k(&ROM[0x1C758],0x4EB90000); // C-CHIP HACK#22B WriteLong68k(&ROM[0x1C75C],0x02644E71); WriteWord68k(&ROM[0x1C760],0x4E71); WriteLong68k(&ROM[0x6136],0x4EF86158); // C-CHIP INLINE HACK#1 } if(romset==2){ ROM[0x0116E]=0x4E; // Fix ROM CHECKSUM ROM[0x0116F]=0x71; ROM[0x070C]=0x4E; // jmp $7FF00 ROM[0x070D]=0xF9; ROM[0x070E]=0x00; ROM[0x070F]=0x07; ROM[0x0710]=0xFF; ROM[0x0711]=0x00; ROM[0x7FF00]=0x4E; // jsr $11D78 (random gen) ROM[0x7FF01]=0xB9; ROM[0x7FF02]=0x00; ROM[0x7FF03]=0x01; ROM[0x7FF04]=0x1D; ROM[0x7FF05]=0x78; ROM[0x7FF06]=0x13; // move.b #$00,$AA0000 (speed hack) ROM[0x7FF07]=0xFC; ROM[0x7FF08]=0x00; ROM[0x7FF09]=0x00; ROM[0x7FF0A]=0x00; ROM[0x7FF0B]=0xAA; ROM[0x7FF0C]=0x00; ROM[0x7FF0D]=0x00; ROM[0x7FF0E]=0x60; // bra <loop> ROM[0x7FF0F]=0x100-16; WriteLong68k(&ROM[0x788],0x303C00ED); // UNDO BOOTLEG SPRITE HACK WriteLong68k(&ROM[0x78C],0x41ED084A); WriteLong68k(&ROM[0x820],0x33ED1042); // UNDO BOOTLEG SCROLL HACK WriteLong68k(&ROM[0x824],0x00C20000); //WriteLong68k(&ROM[0xA6C],0xD1C23019); // UNDO BOOTLEG COLOR HACK //WriteLong68k(&ROM[0xA70],0x30C051C9); // <NOT 100%> } ROM[0x7FF30]=0x60; // Init tc0100scn emulation // ------------------------ if (romset < 2) { set_colour_mapper(&col_map_xbbb_bbgg_gggr_rrrr); } else { set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr_rev); } tc0100scn[0].layer[0].RAM =RAM_VIDEO+0x0000; tc0100scn[0].layer[0].GFX =GFX_BG0; 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 = col_mapper[romset]; tc0100scn[0].layer[0].tile_mask=0x3FFF; tc0100scn[0].layer[0].scr_x =16; tc0100scn[0].layer[0].scr_y =16; tc0100scn[0].layer[1].RAM =RAM_VIDEO+0x8000; tc0100scn[0].layer[1].GFX =GFX_BG0; 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 = col_mapper[romset]; tc0100scn[0].layer[1].tile_mask=0x3FFF; tc0100scn[0].layer[1].scr_x =16; tc0100scn[0].layer[1].scr_y =16; // Init tc0002obj emulation // ------------------------ tc0002obj.RAM = RAM_OBJECT; tc0002obj.GFX = GFX_SPR; tc0002obj.MASK = GFX_SPR_SOLID; tc0002obj.bmp_x = 32; tc0002obj.bmp_y = 32; tc0002obj.bmp_w = 320; tc0002obj.bmp_h = 224; //tc0002obj.mapper = col_mapper[romset]; tc0002obj.tile_mask = 0x1FFF; tc0002obj.ofs_x = 0; tc0002obj.ofs_y = -16;/* * StarScream Stuff follows */ ByteSwap(ROM,0xA0000); ByteSwap(RAM,0x20000); AddMemFetch(0x000000, 0x09FFFF, ROM+0x000000-0x000000); // 68000 ROM AddMemFetch(-1, -1, NULL); AddReadByte(0x000000, 0x09FFFF, NULL, ROM+0x000000); AddReadByte(0x10C000, 0x10FFFF, NULL, RAM+0x000000); AddReadByte(0xC00000, 0xC0FFFF, NULL, RAM+0x008000); AddReadByte(0xD00000, 0xD01FFF, NULL, RAM+0x018000); AddReadByte(0x200000, 0x203FFF, NULL, RAM+0x004000); // COLOR RAM AddReadByte(0xC20000, 0xC20003, NULL, RAM+0x01B000); AddReadByte(0xC40000, 0xC40003, NULL, RAM+0x01B004); AddReadByte(0xC50000, 0xC50001, NULL, RAM+0x01B008); AddReadByte(0x390000, 0x390001, NULL, RAM+0x01B012); // DSWA AddReadByte(0x3A0000, 0x3A0001, NULL, RAM+0x01B00A); AddReadByte(0x3B0000, 0x3B0001, NULL, RAM+0x01B014); // DSWB AddReadByte(0x3C0000, 0x3C0001, NULL, RAM+0x01B00C); AddReadByte(0x3E0000, 0x3E0003, tc0140syt_read_main_68k, NULL); // SOUND AddReadByte(0x800000, 0x800FFF, CChipReadB, NULL); // C-CHIP if(romset==2){ AddReadByte(0x400000, 0x400003, NULL, RAM+0x01B100); // JUMPING: DSW AddReadByte(0x401000, 0x401003, NULL, RAM+0x01B104); // JUMPING: INPUT AddReadByte(0x420000, 0x420000, NULL, RAM+0x01B108); // JUMPING: ??? } AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL); // <bad reads> AddReadByte(-1, -1, NULL, NULL); AddReadWord(0x000000, 0x09FFFF, NULL, ROM+0x000000); AddReadWord(0x10C000, 0x10FFFF, NULL, RAM+0x000000); AddReadWord(0xC00000, 0xC0FFFF, NULL, RAM+0x008000); AddReadWord(0xD00000, 0xD01FFF, NULL, RAM+0x018000); AddReadWord(0x200000, 0x203FFF, NULL, RAM+0x004000); // COLOR RAM AddReadWord(0xC20000, 0xC20003, NULL, RAM+0x01B000); AddReadWord(0xC40000, 0xC40003, NULL, RAM+0x01B004); AddReadWord(0xC50000, 0xC50001, NULL, RAM+0x01B008); AddReadWord(0x390000, 0x390001, NULL, RAM+0x01B012); // DSWA AddReadWord(0x3A0000, 0x3A0001, NULL, RAM+0x01B00A); AddReadWord(0x3B0000, 0x3B0001, NULL, RAM+0x01B014); // DSWB AddReadWord(0x3C0000, 0x3C0001, NULL, RAM+0x01B00C); AddReadWord(0x3E0000, 0x3E0003, NULL, RAM+0x01B00E); // SOUND AddReadWord(0x800000, 0x800FFF, CChipReadW, NULL); // C-CHIP if(romset==2){ AddReadWord(0x400000, 0x400003, NULL, RAM+0x01B100); // JUMPING: DSW AddReadWord(0x401000, 0x401003, NULL, RAM+0x01B104); // JUMPING: INPUT } AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL); // <bad reads> AddReadWord(-1, -1, NULL, NULL); AddWriteByte(0x10C000, 0x10FFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteByte(0xC00000, 0xC0FFFF, NULL, RAM+0x008000); // SCREEN RAM AddWriteByte(0xD00000, 0xD01FFF, NULL, RAM+0x018000); // OBJECT RAM AddWriteByte(0x200000, 0x203FFF, NULL, RAM+0x004000); // COLOR RAM AddWriteByte(0xC20000, 0xC20003, NULL, RAM_SCROLL+6); // SCROLL Y AddWriteByte(0xC40000, 0xC40003, NULL, RAM_SCROLL+0); // SCROLL X AddWriteByte(0xC50000, 0xC50001, NULL, RAM_SCROLL+14); // CTRL AddWriteByte(0x390000, 0x390001, NULL, RAM+0x01B012); // DSWA AddWriteByte(0x3A0000, 0x3A0001, NULL, RAM+0x01B00A); AddWriteByte(0x3B0000, 0x3B0001, NULL, RAM+0x01B014); // DSWB AddWriteByte(0x3C0000, 0x3C0001, NULL, RAM+0x01B00C); AddWriteByte(0x3E0000, 0x3E0003, tc0140syt_write_main_68k, NULL); // SOUND AddWriteByte(0x800000, 0x800FFF, CChipWriteB, NULL); // C-CHIP if(romset==2){ AddWriteByte(0x400007, 0x400007, Jumpingsound_w, NULL); // JUMPING: SOUND } AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <bad writes> AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0x10C000, 0x10FFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteWord(0xC00000, 0xC0FFFF, NULL, RAM+0x008000); AddWriteWord(0xD00000, 0xD01FFF, NULL, RAM+0x018000); AddWriteWord(0x200000, 0x203FFF, NULL, RAM+0x004000); // COLOR RAM if(romset==2){ AddWriteWord(0x440000, 0x4407FF, NULL, RAM+0x01B200); // JUMPING: SPRITE? AddWriteWord(0x430000, 0x430003, NULL, RAM+0x01B110); // JUMPING: SCROLL } AddWriteWord(0xC20000, 0xC20003, NULL, RAM_SCROLL+6); // SCROLL Y AddWriteWord(0xC40000, 0xC40003, NULL, RAM_SCROLL+0); // SCROLL X AddWriteWord(0xC50000, 0xC50001, NULL, RAM_SCROLL+14); // CTRL AddWriteWord(0x390000, 0x390001, NULL, RAM+0x01B012); // DSWA AddWriteWord(0x3A0000, 0x3A0001, NULL, RAM+0x01B00A); AddWriteWord(0x3B0000, 0x3B0001, NULL, RAM+0x01B014); // DSWB AddWriteWord(0x3C0000, 0x3C0001, NULL, RAM+0x01B00C); AddWriteWord(0x3E0000, 0x3E0003, NULL, RAM+0x01B00E); // SOUND AddWriteWord(0x800000, 0x800FFF, CChipWriteW, NULL); // C-CHIP AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <bad writes> AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers...}void LoadRainbow(void){ romset=0; subset=0; LoadActual();}void LoadRainbowA(void){ romset=0; subset=1; LoadActual();}void LoadRainbowE(void){ romset=1; LoadActual();}void LoadJumping(void){ romset=2; LoadActual();}void ClearRainbow(void){ if(romset!=2) RemoveTaitoYM2151();}void ExecuteRainbowFrame(void){ cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60)); // M68000 12MHz (60fps) cpu_interrupt(CPU_68K_0, 4); if(romset==2){ cpu_execute_cycles(CPU_Z80_0, CPU_FRAME_MHz(4,60)); // Sound Z80 cpu_interrupt(CPU_Z80_0, 0x38); } else{ Taito2151_FrameRI(); // Antiriad }}void DrawRainbow(void){ ClearPaletteMap(); // Init tc0100scn emulation // ------------------------ tc0100scn_layer_count = 0; tc0100scn[0].ctrl = ReadWord(RAM_SCROLL+12); // Init tc0002obj emulation // ------------------------ tc0002obj.ctrl = TC0002OBJ_CONV_CTRL(ReadWord(&RAM[0x1B00A])); // BG0 // --- render_tc0100scn_layer_mapped(0,0); // BG1+OBJECT // ---------- if((tc0002obj.ctrl & 0x2000)==0){ render_tc0100scn_layer_mapped(0,1); render_tc0002obj_mapped(); } else{ render_tc0002obj_mapped(); render_tc0100scn_layer_mapped(0,1); }}// Jumping Islands Sound Comm// --------------------------static int JSoundPort=0;static void Jumpingsound_w(UINT32 offset,UINT8 data){ JSoundPort=data;}static UINT16 JumpingRead_b800(UINT16 offset){ int ta; ta=JSoundPort; JSoundPort=0xFF; return(ta);}/*Jumping Islands---------------Name | Description---------+---------------------------------JB1_CD67 | Z80 ROMJB1_F89 | C-Chip DataJB1_H23 | 68000 ROM (block#3) (even)JB1_H4 | 68000 ROM (block#1) (even)JB1_H7 | 68000 ROM (block#3) (odd)JB1_H8 | 68000 ROM (block#1) (odd)JB1_I23 | 68000 ROM (block#4) (even)JB1_I4 | 68000 ROM (block#2) (even)JB1_I7 | 68000 ROM (block#4) (odd)JB1_I8 | 68000 ROM (block#2) (odd)JB2_I119 | 16x16 Sprites (block#3) (plane1)JB2_I120 | 16x16 Sprites (block#2) (plane1)JB2_I121 | 16x16 Sprites (block#1) (plane1)JB2_IC10 | 8x8 Tiles (block#1) (plane2)JB2_IC11 | 8x8 Tiles (block#2) (plane3)JB2_IC12 | 8x8 Tiles (block#1) (plane3)JB2_IC13 | 8x8 Tiles (block#2) (plane4)JB2_IC14 | 8x8 Tiles (block#1) (plane4)JB2_IC60 | 16x16 Sprites (block#3) (plane2)JB2_IC61 | 16x16 Sprites (block#2) (plane2)JB2_IC62 | 16x16 Sprites (block#1) (plane2)JB2_IC7 | 8x8 Tiles (block#2) (plane1)JB2_IC76 | 16x16 Sprites (block#3) (plane3)JB2_IC77 | 16x16 Sprites (block#2) (plane3)JB2_IC78 | 16x16 Sprites (block#1) (plane3)JB2_IC8 | 8x8 Tiles (block#1) (plane1)JB2_IC9 | 8x8 Tiles (block#2) (plane2)JB2_IC91 | 16x16 Sprites (block#3) (plane3)JB2_IC92 | 16x16 Sprites (block#2) (plane3)JB2_IC93 | 16x16 Sprites (block#1) (plane3)Rainbow Original----------------- Has bad/missing roms, so stuff added from rainbow extra!!Name | Description-----------+---------------------------------B22-03 | 68000 ROM (block#2, even) (too short dump)B22-04 | 68000 ROM (block#2, odd) (too short dump)B22-08 | 68000 ROM (block#0, even) *B22-09 | 68000 ROM (block#0, odd) *B22-10 | 68000 ROM (block#1, even) *B22-11 | 68000 ROM (block#1, odd) *B22-12 | 16x16 SPR Tiles#2 (odd)B22-13 | 16x16 SPR Tiles#2 (even)B22-14 | Z80 ROM *JB1_F89 | C-Chip data (from jumping islands)RI_M01.ROM | 8x8 BG0 Tiles (from extra romset)RI_M02.ROM | 16x16 SPR Tiles (from extra romset)RI_M03.ROM | 68000 ROM (block#2, even) (from extra romset)RI_M04.ROM | 68000 ROM (block#2, odd) (from extra romset)Rainbow Extra-------------Name | Description-----------+-----------------------------------JB1_F89 | C-Chip data (from jumping islands)RI_01.ROM | 68000 ROM (block#0, even) *RI_02.ROM | 68000 ROM (block#0, odd) *RI_03.ROM | 68000 ROM (block#1, even) *RI_04.ROM | 68000 ROM (block#1, odd) *RI_12.ROM |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -