⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rainbow.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 5 页
字号:
   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 + -