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

📄 doubled3.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x4800);   // Coin fix   WriteLong68k(&ROM[0x20C8],0x60000024);   // Speed hack   WriteLong68k(&ROM[0x0916],0x13FC0000); // move.b #$00,$AA0000   WriteLong68k(&ROM[0x091A],0x00AA0000); // (Speed Hack)   WriteLong68k(&ROM[0x091E],0x4E714E71);   InitPaletteMap(RAM+0x2C000, 0x40, 0x10, 0x8000);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x80000);   ByteSwap(RAM,0x40000);   AddMemFetch(0x000000, 0x07FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x07FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadByte(0x080000, 0x083FFF, NULL, RAM+0x008000);			// OBJECT RAM   AddReadByte(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000);			// SCROLL RAM   AddReadByte(0x100000, 0x100FFF, NULL, RAM+0x02C000);			// COLOR RAM   AddReadByte(0x180000, 0x18000F, NULL, RAM+0x00C000);			// INPUT   AddReadByte(0x140000, 0x14000F, NULL, RAM+0x01C000);			// ?   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x07FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadWord(0x080000, 0x083FFF, NULL, RAM+0x008000);			// OBJECT RAM   AddReadWord(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000);			// SCROLL RAM   AddReadWord(0x100000, 0x100FFF, NULL, RAM+0x02C000);			// COLOR RAM   AddReadWord(0x180000, 0x18000F, NULL, RAM+0x00C000);			// INPUT   AddReadWord(0x140000, 0x14000F, NULL, RAM+0x01C000);			// ?   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteByte(0x080000, 0x083FFF, NULL, RAM+0x008000);		// OBJECT RAM   AddWriteByte(0x100000, 0x100FFF, NULL, RAM+0x02C000);		// COLOR RAM   AddWriteByte(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000);		// SCROLL RAM   AddWriteByte(0x180000, 0x18000F, NULL, RAM+0x00C000);		// INPUT   AddWriteByte(0x140000, 0x14000F, DD3SoundWrite, NULL);		// SOUND   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteWord(0x080000, 0x083FFF, NULL, RAM+0x008000);		// OBJECT RAM   AddWriteWord(0x100000, 0x100FFF, NULL, RAM+0x02C000);		// COLOR RAM   AddWriteWord(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000);		// SCROLL RAM   AddWriteWord(0x180000, 0x18000F, NULL, RAM+0x00C000);		// INPUT   AddWriteWord(0x140000, 0x14000F, NULL, RAM+0x01C000);		// ?   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers... }void ClearDoubleD3(void){}void ExecuteDoubleD3Frame(void){   int ta;   // DSW mapper (weird split byte format!)   ta = get_dsw(1);   RAM[0xC001]&=0xCF;   RAM[0xC001]|=(ta>>2)&0x30;   RAM[0xC003]&=0xC0;   RAM[0xC003]|=ta&0x3F;   ta = get_dsw(0);   RAM[0xC005]&=0xC0;   RAM[0xC005]|=ta&0x3F;   RAM[0xC007]&=0xFC;   RAM[0xC007]|=(ta>>6)&0x03;   RAM[0xC007]^=4;   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60));	// M68000 12MHz (60fps)   cpu_interrupt(CPU_68K_0, 5);   cpu_interrupt(CPU_68K_0, 6);   TechnosSound_Frame();		// Z80; YM2151; OKI ADPCM}void DrawDoubleD3(void){   int zz,zzz,zzzz,x16,y16,x,y,ta,nn;   UINT8 *map;   UINT8 *GFX_BG;   ClearPaletteMap();   // BG0   // ---   if((RAM[0x400C]&1)==0){		// Tile Bank      GFX_BG = GFX_BG0;   }   else{      GFX_BG = GFX_BG0 + (0x1000<<8);   }   MAKE_SCROLL_512x512_2_16(       ReadWord(&RAM[0x4004]),       ReadWord(&RAM[0x4006])+8   );   START_SCROLL_512x512_2_16(32,32,320,240);      MAP_PALETTE_MAPPED(         Map_15bit_xBGR,         ((ReadWord(&RAM_BG0[zz])>>12)&0x0F)|0x20,         16,         map      );      Draw16x16_Mapped(&GFX_BG[(ReadWord(&RAM_BG0[zz])&0x0FFF)<<8], x, y, map);   END_SCROLL_512x512_2_16();   // BG1   // ---   MAKE_SCROLL_512x512_4_16(       ReadWord(&RAM[0x4000]),       ReadWord(&RAM[0x4002])+8   );   START_SCROLL_512x512_4_16(32,32,320,240);      ta = ReadWord(&RAM_BG1[zz+2])&0x1FFF;      if(GFX_BG0_SOLID[ta]!=0){				// No pixels; skip         MAP_PALETTE_MAPPED(            Map_15bit_xBGR,            (RAM_BG1[zz]&0x0F)|0x10,            16,            map         );         if(GFX_BG0_SOLID[ta]==1){			// Some pixels; trans            switch(RAM_BG1[zz]&0xC0){            case 0x00: Draw16x16_Trans_Mapped(&GFX_BG0[ta<<8], x, y, map);        break;            case 0x40: Draw16x16_Trans_Mapped_FlipY(&GFX_BG0[ta<<8], x, y, map);  break;            case 0x80: Draw16x16_Trans_Mapped_FlipX(&GFX_BG0[ta<<8], x, y, map);  break;            case 0xC0: Draw16x16_Trans_Mapped_FlipXY(&GFX_BG0[ta<<8], x, y, map); break;            }         }         else{						// all pixels; solid            switch(RAM_BG1[zz]&0xC0){            case 0x00: Draw16x16_Mapped(&GFX_BG0[ta<<8], x, y, map);        break;            case 0x40: Draw16x16_Mapped_FlipY(&GFX_BG0[ta<<8], x, y, map);  break;            case 0x80: Draw16x16_Mapped_FlipX(&GFX_BG0[ta<<8], x, y, map);  break;            case 0xC0: Draw16x16_Mapped_FlipXY(&GFX_BG0[ta<<8], x, y, map); break;            }         }      }   END_SCROLL_512x512_4_16();   // OBJECT   // ------   for(zz=0x0000;zz<0x1000;zz+=16){      if((RAM_SPR[zz+2]&0x01)!=0){         x = (32 + (RAM_SPR[zz+10] | ((RAM_SPR[zz+2]&4)<<6) ))&0x1FF;         y = ((240+24) - (RAM_SPR[zz+0] | ((RAM_SPR[zz+2]&2)<<7) ))&0x1FF;         MAP_PALETTE_MAPPED(            Map_15bit_xBGR,            RAM_SPR[zz+8]&0x0F,            16,            map         );         ta = ((RAM_SPR[zz+4]) | (RAM_SPR[zz+6]<<8))&0x7FFF;         nn = ((RAM_SPR[zz+2]>>5)&0x07)+1;         switch(RAM_SPR[zz+2]&0x18){         case 0x00:            do{               if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){               if(GFX_SPR_SOLID[ta]!=0){			// No pixels; skip               if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped(&GFX_SPR[ta<<8], x, y, map);               else                     Draw16x16_Mapped(      &GFX_SPR[ta<<8], x, y, map);                }               }               ta++;               y-=16;            }while(--nn);         break;         case 0x10:            do{               if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){               if(GFX_SPR_SOLID[ta]!=0){			// No pixels; skip               if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipY(&GFX_SPR[ta<<8], x, y, map);               else                     Draw16x16_Mapped_FlipY(      &GFX_SPR[ta<<8], x, y, map);                }               }               ta++;               y-=16;            }while(--nn);         break;         case 0x08:            y-=((nn-1)*16);            do{               if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){               if(GFX_SPR_SOLID[ta]!=0){			// No pixels; skip               if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipX(&GFX_SPR[ta<<8], x, y, map);               else                     Draw16x16_Mapped_FlipX(      &GFX_SPR[ta<<8], x, y, map);                }               }               ta++;               y+=16;            }while(--nn);         break;         case 0x18:            y-=((nn-1)*16);            do{               if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){               if(GFX_SPR_SOLID[ta]!=0){			// No pixels; skip               if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipXY(&GFX_SPR[ta<<8], x, y, map);               else                     Draw16x16_Mapped_FlipXY(      &GFX_SPR[ta<<8], x, y, map);                }               }               ta++;               y+=16;            }while(--nn);         break;         }      }   }}/*BG0---- 512x512Byte | Bit(s) | Use-----+76543210+---------------  0  |xxxx....| Colour Bank  0  |....xxxx| Tile (high)  1  |xxxxxxxx| Tile (low)BG1---- 512x512Byte | Bit(s) | Use-----+76543210+---------------  1  |x.......| Flip X Axis  1  |.x......| Flip Y Axis  1  |....xxxx| Colour Bank  2  |...xxxxx| Tile (high)  3  |xxxxxxxx| Tile (low)OBJECT------- Only Odd Bytes usedByte | Bit(s) | Use-----+76543210+---------------  1  |xxxxxxxx| Y (low)  3  |xxx.....| Y Chain Size  3  |...x....| Flip X Axis  3  |....x...| Flip Y Axis  3  |.....x..| X (high)  3  |......x.| Y (high)  3  |.......x| Sprite Enable  5  |xxxxxxxx| Tile (low)  7  |.xxxxxxx| Tile (high)  9  |....xxxx| Colour Bank 11  |xxxxxxxx| X (low)*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -