📄 rainbow.c
字号:
tb=0; for(ta=0;ta<0x80000;ta+=2){ GFX_SPR[tb++]=ROM[ta+1]>>4; GFX_SPR[tb++]=ROM[ta+1]&15; GFX_SPR[tb++]=ROM[ta+0]>>4; GFX_SPR[tb++]=ROM[ta+0]&15; } if(!load_rom("b22-12", ROM+0x00000, 0x10000)) return; if(!load_rom("b22-13", ROM+0x10000, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ GFX_SPR[tb++]=ROM[ta+0x10000]>>4; GFX_SPR[tb++]=ROM[ta+0x10000]&15; GFX_SPR[tb++]=ROM[ta]>>4; GFX_SPR[tb++]=ROM[ta]&15; } if (subset==0) { if(!load_rom("b22-10", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta]=RAM[ta]; } if(!load_rom("b22-11", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+1]=RAM[ta]; } if(!load_rom("b22-08", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x20000]=RAM[ta]; } if(!load_rom("b22-09", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x20001]=RAM[ta]; } } else { if(!load_rom("b22_10-1", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta]=RAM[ta]; } if(!load_rom("b22_11-1", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+1]=RAM[ta]; } if(!load_rom("b22_08-1", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x20000]=RAM[ta]; } if(!load_rom("b22_09-1", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x20001]=RAM[ta]; } } if(!load_rom("ri_m03.rom", RAM, 0x20000)) return; // Came From Extra for(ta=0;ta<0x20000;ta++){ ROM[ta+ta+0x40000]=RAM[ta]; } if(!load_rom("ri_m04.rom", RAM, 0x20000)) return; // Came From Extra for(ta=0;ta<0x20000;ta++){ ROM[ta+ta+0x40001]=RAM[ta]; } if(!load_rom("jb1_f89", RAM, 0x10000)) return; // BOOTLEG C-CHIP for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x80000]=0; ROM[ta+ta+0x80001]=RAM[ta]; } } if(romset==2){ if(!load_rom("jb2_ic8",&ROM[0x00000],0x10000)) return; // 8x8 TILES if(!load_rom("jb2_ic7",&ROM[0x10000],0x10000)) return; tb=0; for(ta=0;ta<0x20000;ta++,tb+=8){ tc=ROM[ta]^255; GFX_BG0[tb+0]=((tc&0x80)>>7)<<3; GFX_BG0[tb+1]=((tc&0x40)>>6)<<3; GFX_BG0[tb+2]=((tc&0x20)>>5)<<3; GFX_BG0[tb+3]=((tc&0x10)>>4)<<3; GFX_BG0[tb+4]=((tc&0x08)>>3)<<3; GFX_BG0[tb+5]=((tc&0x04)>>2)<<3; GFX_BG0[tb+6]=((tc&0x02)>>1)<<3; GFX_BG0[tb+7]=((tc&0x01)>>0)<<3; } if(!load_rom("jb2_ic10",&ROM[0x00000],0x10000)) return; if(!load_rom("jb2_ic9",&ROM[0x10000],0x10000)) return; tb=0; for(ta=0;ta<0x20000;ta++,tb+=8){ tc=ROM[ta]^255; GFX_BG0[tb+0]|=((tc&0x80)>>7)<<2; GFX_BG0[tb+1]|=((tc&0x40)>>6)<<2; GFX_BG0[tb+2]|=((tc&0x20)>>5)<<2; GFX_BG0[tb+3]|=((tc&0x10)>>4)<<2; GFX_BG0[tb+4]|=((tc&0x08)>>3)<<2; GFX_BG0[tb+5]|=((tc&0x04)>>2)<<2; GFX_BG0[tb+6]|=((tc&0x02)>>1)<<2; GFX_BG0[tb+7]|=((tc&0x01)>>0)<<2; } if(!load_rom("jb2_ic12",&ROM[0x00000],0x10000)) return; if(!load_rom("jb2_ic11",&ROM[0x10000],0x10000)) return; tb=0; for(ta=0;ta<0x20000;ta++,tb+=8){ tc=ROM[ta]^255; GFX_BG0[tb+0]|=((tc&0x80)>>7)<<1; GFX_BG0[tb+1]|=((tc&0x40)>>6)<<1; GFX_BG0[tb+2]|=((tc&0x20)>>5)<<1; GFX_BG0[tb+3]|=((tc&0x10)>>4)<<1; GFX_BG0[tb+4]|=((tc&0x08)>>3)<<1; GFX_BG0[tb+5]|=((tc&0x04)>>2)<<1; GFX_BG0[tb+6]|=((tc&0x02)>>1)<<1; GFX_BG0[tb+7]|=((tc&0x01)>>0)<<1; } if(!load_rom("jb2_ic14",&ROM[0x00000],0x10000)) return; if(!load_rom("jb2_ic13",&ROM[0x10000],0x10000)) return; tb=0; for(ta=0;ta<0x20000;ta++,tb+=8){ tc=ROM[ta]^255; GFX_BG0[tb+0]|=((tc&0x80)>>7)<<0; GFX_BG0[tb+1]|=((tc&0x40)>>6)<<0; GFX_BG0[tb+2]|=((tc&0x20)>>5)<<0; GFX_BG0[tb+3]|=((tc&0x10)>>4)<<0; GFX_BG0[tb+4]|=((tc&0x08)>>3)<<0; GFX_BG0[tb+5]|=((tc&0x04)>>2)<<0; GFX_BG0[tb+6]|=((tc&0x02)>>1)<<0; GFX_BG0[tb+7]|=((tc&0x01)>>0)<<0; } if(!load_rom("jb2_ic62",&ROM[0x00000],0x10000)) return; // 16x16 SPRITES if(!load_rom("jb2_ic61",&ROM[0x10000],0x10000)) return; if(!load_rom("jb2_ic60",&ROM[0x20000],0x8000)) return; tb=0; for(ta=0;ta<0x28000;ta++){ tc=ROM[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&0xFF)==0){tb-=0xF8;} else{if((tb&0xFF)==8){tb-=0x8;}} } if(!load_rom("jb2_ic78",&ROM[0x00000],0x10000)) return; // 16x16 SPRITES if(!load_rom("jb2_ic77",&ROM[0x10000],0x10000)) return; if(!load_rom("jb2_ic76",&ROM[0x20000],0x8000)) return; tb=0; for(ta=0;ta<0x28000;ta++){ tc=ROM[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&0xFF)==0){tb-=0xF8;} else{if((tb&0xFF)==8){tb-=0x8;}} } if(!load_rom("jb2_ic93",&ROM[0x00000],0x10000)) return; // 16x16 SPRITES if(!load_rom("jb2_ic92",&ROM[0x10000],0x10000)) return; if(!load_rom("jb2_ic91",&ROM[0x20000],0x8000)) return; tb=0; for(ta=0;ta<0x28000;ta++){ tc=ROM[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&0xFF)==0){tb-=0xF8;} else{if((tb&0xFF)==8){tb-=0x8;}} } if(!load_rom("jb2_I121",&ROM[0x00000],0x10000)) return; // 16x16 SPRITES if(!load_rom("jb2_I120",&ROM[0x10000],0x10000)) return; if(!load_rom("jb2_I119",&ROM[0x20000],0x8000)) return; tb=0; for(ta=0;ta<0x28000;ta++){ tc=ROM[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&0xFF)==0){tb-=0xF8;} else{if((tb&0xFF)==8){tb-=0x8;}} } if(!load_rom("jb1_h4", RAM, 0x10000)) return; // 68000 ROM for(ta=0;ta<0x10000;ta++){ ROM[ta+ta]=RAM[ta]; } if(!load_rom("jb1_h8", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+1]=RAM[ta]; } if(!load_rom("jb1_i4", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x20000]=RAM[ta]; } if(!load_rom("jb1_i8", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x20001]=RAM[ta]; } if(!load_rom("ri_m03.rom", RAM, 0x20000)) return; for(ta=0;ta<0x20000;ta++){ ROM[ta+ta+0x40000]=RAM[ta]; } if(!load_rom("ri_m04.rom", RAM, 0x20000)) return; for(ta=0;ta<0x20000;ta++){ ROM[ta+ta+0x40001]=RAM[ta]; } if(!load_rom("jb1_f89", RAM, 0x10000)) return; // BOOTLEG C-CHIP for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x80000]=0; ROM[ta+ta+0x80001]=RAM[ta]; } } memset(RAM+0x00000,0x00,0x20000); memset(RAM+0x1A000,0xFF,0x01000); WriteWord(&RAM[0x1B108],0x0000); for(ta=0x20000;ta<0x24000;ta++){ RAM[ta]=(ta>>1)+8; } for(ta=0x001;ta<0x800;ta+=2){ CBANK[4][ta]=0xFF; } for(ta=0x001;ta<0x800;ta+=2){ CBANK[5][ta]=0xFF; } CBANK[5][0x001]=0xFF; CBANK[2][0x051]=0x30; /* Dying rainbow graphics */ CBANK[2][0x053]=0x31; CBANK[2][0x055]=0x32; CBANK[2][0x057]=0x33; CBANK[2][0x059]=0x34; CBANK[2][0x05b]=0x35; CBANK[2][0x05d]=0x36; CBANK[2][0x05f]=0x37; CBANK[2][0x061]=0x38; CBANK[2][0x063]=0x39; CBANK[2][0x065]=0x3a; CBANK[2][0x067]=0x3b; CBANK[2][0x069]=0x3c; CBANK[2][0x06b]=0x3d; CBANK[2][0x06d]=0x3e; CBANK[2][0x06f]=0x3f; CBANK[2][0x071]=0x40; CBANK[2][0x073]=0x41; CBANK[2][0x075]=0x42; CBANK[2][0x077]=0x43; CBANK[2][0x079]=0x44; CBANK[2][0x07b]=0x45; CBANK[2][0x07d]=0x46; CBANK[2][0x07f]=0x47; CBANK[1][0x20b]=0x00; // Rainbow Climb CBANK[1][0x223]=0x00; // Rainbow Climb CBANK[1][0x277]=0x7F; // Rainbow Climb CBANK[1][0x279]=0x7F; // Rainbow Climb CBANK[1][0x291]=0x00; // End of Island Boss CBANK[1][0x293]=0x00; // Unknown CBANK[1][0x295]=0x00; // G Below CBANK[1][0x297]=0x00; // G Right CBANK[1][0x299]=0x20; // O below CBANK[1][0x29b]=0x10; // O Right CBANK[1][0x29d]=0x40; // A Below CBANK[1][0x29f]=0x20; // A Right CBANK[1][0x2a1]=0x60; // L Below CBANK[1][0x2a3]=0x38; // L Right CBANK[1][0x2a5]=0x80; // I Below CBANK[1][0x2a7]=0x58; // I Right CBANK[1][0x2a9]=0xa0; // N Below CBANK[1][0x2ab]=0x68; // N Right RAMSize=0x34000; // ***** RAM_VIDEO = RAM+0x08000; RAM_SCROLL = RAM+0x1B080; RAM_OBJECT = RAM+0x18000; if(romset!=2) InitPaletteMap(RAM+0x4000, 0x100, 0x10, 0x8000); else InitPaletteMap(RAM+0x4000, 0x100, 0x10, 0x1000); GFX_BG0_SOLID = make_solid_mask_8x8 (GFX_BG0, 0x4000); GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x1400);/* * Catch 68000 Interrupt wait */ if(romset==0){ 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[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; if(subset==0){ ROM[0x7FF00]=0x4E; // jsr $11D78 (random gen) ROM[0x7FF01]=0xB9; ROM[0x7FF02]=0x00; ROM[0x7FF03]=0x01; ROM[0x7FF04]=0x1D; ROM[0x7FF05]=0x78; TMP=RaineData[Jumping_HACK].dat; // COPY C-CHIP HACK CODE for(ta=0;ta<0x1D0;ta++){ ROM[ta+0xC0]=TMP[ta]; } TMP=RaineData[Jump1630_HACK].dat; // COPY C-CHIP HACK CODE#2 for(ta=0;ta<0x5E;ta++){ ROM[ta+0x7FF10]=TMP[ta]; } WriteLong68k(&ROM[0x40AE],0x4EB90000); // C-CHIP HACK#1 WriteLong68k(&ROM[0x40B2],0x00C04E71); WriteLong68k(&ROM[0x51FA],0x4EB90000); // C-CHIP HACK#2 WriteWord68k(&ROM[0x51FE],0x00CC); WriteLong68k(&ROM[0x59A2],0x4EB90000); // C-CHIP HACK#3 WriteWord68k(&ROM[0x59A6],0x00E2); WriteLong68k(&ROM[0x59AA],0x4EB90000); // C-CHIP HACK#4 WriteWord68k(&ROM[0x59AE],0x00F8); WriteLong68k(&ROM[0x59B6],0x4EB90000); // C-CHIP HACK#5 WriteWord68k(&ROM[0x59BA],0x010E); WriteLong68k(&ROM[0x59BE],0x4EB90000); // C-CHIP HACK#6 WriteWord68k(&ROM[0x59C2],0x011A); WriteLong68k(&ROM[0x5E9A],0x4EB90000); // C-CHIP HACK#7A WriteWord68k(&ROM[0x5E9E],0x0130); WriteLong68k(&ROM[0x5F5E],0x4EB90000); // C-CHIP HACK#7B WriteWord68k(&ROM[0x5F62],0x0130); WriteLong68k(&ROM[0xB654],0x4EB90000); // C-CHIP HACK#7C WriteWord68k(&ROM[0xB658],0x0130);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -