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

📄 toki.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   GFX_SPR = GFX+0x040000;   GFX_FG0 = GFX+0x000000;   for(ta=0;ta<0x100000;ta++){      GFX_BG0[ta]^=15;   }   for(ta=0;ta<0x100000;ta++){      GFX_BG1[ta]^=15;   }   for(ta=0;ta<0x040000;ta++){      GFX_FG0[ta]^=15;   }   RAM_BG0 = RAM+0x0F000;   RAM_BG1 = RAM+0x0E800;   RAM_SPR = RAM+0x11806;   RAM_FG0 = RAM+0x0F800;   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, 0x1000);   GFX_BG1_SOLID = make_solid_mask_16x16(GFX_BG1, 0x1000);   GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x2000);   GFX_FG0_SOLID = make_solid_mask_8x8  (GFX_FG0, 0x1000);   Z80ROM=RAM+0x22000;   if(!load_rom("toki.e1", Z80ROM, 0x10000)) return;        // Z80 SOUND ROM   // Apply Speed Patch   // -----------------   Z80ROM[0x0E40]=0xD3; // OUTA (AAh)   Z80ROM[0x0E41]=0xAA; //   SetStopZ80Mode2(0x0E42);   // Setup Z80 memory map   // --------------------   AddZ80AROMBase(Z80ROM, 0x0038, 0x0066);   AddZ80AReadByte(0x0000, 0xBFFF, NULL,                        Z80ROM+0x0000);	// Z80 ROM/BANK ROM   AddZ80AReadByte(0xF000, 0xF7FF, NULL,                        Z80ROM+0xF000); // Z80 RAM   AddZ80AReadByte(0xF800, 0xF800, SoundRead,                   NULL);		// COMM   AddZ80AReadByte(0xEC00, 0xEC01, YM3812ReadZ80,               NULL);   AddZ80AReadByte(0xEC08, 0xEC09, YM3812ReadZ80,               NULL);   AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80,               NULL);   AddZ80AReadByte(    -1,     -1, NULL,                        NULL);   AddZ80AWriteByte(0xF000, 0xF7FF, NULL,                       Z80ROM+0xF000); // Z80 RAM   AddZ80AWriteByte(0xEC00, 0xEC01, YM3812WriteZ80,             NULL);   AddZ80AWriteByte(0xEC08, 0xEC09, YM3812WriteZ80,             NULL);   AddZ80AWriteByte(0x0000, 0xFFFF, DefBadWriteZ80,             NULL);   AddZ80AWriteByte(    -1,     -1, NULL,                       NULL);   AddZ80AReadPort(0x00, 0xFF, DefBadReadZ80,           NULL);   AddZ80AReadPort(  -1,   -1, NULL,                    NULL);   AddZ80AWritePort(0xAA, 0xAA, StopZ80Mode2,           NULL);   AddZ80AWritePort(0x00, 0xFF, DefBadWriteZ80,         NULL);   AddZ80AWritePort(  -1,   -1, NULL,                   NULL);   AddZ80AInit();   memset(RAM+0x00000,0x00,0x22000);   memset(RAM+0x20000,0xFF,0x00100);   // Speed Hack   WriteLong68k(&ROM[0x1A1D4],0x13FC0000);   WriteLong68k(&ROM[0x1A1D8],0x00AA0000);   WriteWord68k(&ROM[0x1A1E2],0x4E71);   WriteWord68k(&ROM[0x1A1EA],0x4E71);   WriteLong68k(&ROM[0x1A342],0x13FC0000);   WriteLong68k(&ROM[0x1A346],0x00AA0000);   WriteLong68k(&ROM[0x1A6A2],0x13FC0000);   WriteLong68k(&ROM[0x1A6A6],0x00AA0000);   // Scroll Sync   WriteLong68k(&ROM[0x00288],0x4EF80300);   WriteWord68k(&ROM[0x00300],0x33C1);   WriteLong68k(&ROM[0x00302],0x00075008);   WriteLong68k(&ROM[0x00306],0x13FC0000);   WriteLong68k(&ROM[0x0030A],0x00AA0000);   WriteWord68k(&ROM[0x0030E],0x4E75);   // Sound Comm   WriteLong68k(&ROM[0x1D940],0x00BB0000);   set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr_rev);   InitPaletteMap(RAM+0x0E000, 0x40, 0x10, 0x1000);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x60000);   ByteSwap(RAM,0x20300);   AddMemFetch(0x000000, 0x05FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x05FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x060000, 0x07FFFF, NULL, RAM+0x000000);			// 68000 RAM/VRAM/PALETTE/SPRITE   AddReadByte(0x080000, 0x0800FF, NULL, RAM+0x020200);   AddReadByte(0x0C0000, 0x0C00FF, NULL, RAM+0x020000);			// DSW/INPUT   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x05FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x060000, 0x07FFFF, NULL, RAM+0x000000);			// 68000 RAM/VRAM/PALETTE/SPRITE   AddReadWord(0x080000, 0x0800FF, NULL, RAM+0x020200);   AddReadWord(0x0C0000, 0x0C00FF, NULL, RAM+0x020000);			// DSW/INPUT   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x060000, 0x07FFFF, NULL, RAM+0x000000);		// 68000 RAM/VRAM/PALETTE/SPRITE   AddWriteByte(0x080000, 0x0800FF, NULL, RAM+0x020200);   AddWriteByte(0x0A0000, 0x0A00FF, NULL, RAM+0x020100);   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0xBB0000, 0xBB0001, SoundWrite, NULL);			// Sound Comm   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x060000, 0x07FFFF, NULL, RAM+0x000000);		// 68000 RAM/VRAM/PALETTE/SPRITE   AddWriteWord(0x080000, 0x0800FF, NULL, RAM+0x020200);   AddWriteWord(0x0A0000, 0x0A00FF, NULL, RAM+0x020100);   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...}void ClearToki(void){   #ifdef RAINE_DEBUG      save_debug("ROM.bin",ROM,0x060000,1);      //save_debug("RAM.bin",RAM,0x022000,1);      //save_debug("GFX.bin",GFX,0x440000,0);   #endif}void ExecuteTokiFrame(void){   static int ta;   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(16,60));	// M68000 12MHz (60fps)   cpu_interrupt(CPU_68K_0, 1);   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(4,60));	// Sync   ta++;   cpu_execute_cycles(CPU_Z80_0, CPU_FRAME_MHz(1,60));       // Z80 4MHz (60fps) Timer on YM3812 needs fixing!!   cpu_execute_cycles(CPU_Z80_0, CPU_FRAME_MHz(1,60));       // Z80 4MHz (60fps)   cpu_execute_cycles(CPU_Z80_0, CPU_FRAME_MHz(1,60));       // Z80 4MHz (60fps)   if(ta&1)      cpu_execute_cycles(CPU_Z80_0, CPU_FRAME_MHz(1,60));    // Z80 4MHz (60fps)}void DrawToki(void){   int zz,zzz,zzzz,x16,y16,x,y,ta,ofs_x,col_msk;   UINT8 *map;   UINT8 *RAM_BG,*GFX_BG,*MSK_BG,*SCR_BG;   ClearPaletteMap();   if(RAM_FG0[0x710]!=0x44){      RAM_BG = RAM_BG0;      GFX_BG = GFX_BG0;      MSK_BG = GFX_BG0_SOLID;      SCR_BG = RAM+0x15008;      ofs_x  = 0x101;      col_msk = 0x30;   }   else{      RAM_BG = RAM_BG1;      GFX_BG = GFX_BG1;      MSK_BG = GFX_BG1_SOLID;      SCR_BG = RAM+0x15004;      ofs_x  = 0x103;      col_msk = 0x20;   }   // BG0   // ---   MAKE_SCROLL_512x512_2_16(       ReadWord(SCR_BG+2)-ofs_x,       ReadWord(SCR_BG)+16+1   );   START_SCROLL_512x512_2_16(32,32,256,224);      MAP_PALETTE_MAPPED_NEW(         ((ReadWord(&RAM_BG[zz])>>12)&0x0F)|col_msk,         16,         map      );      Draw16x16_Mapped_Rot(&GFX_BG[(ReadWord(&RAM_BG[zz])&0x0FFF)<<8], x, y, map);   END_SCROLL_512x512_2_16();   // BG1   // ---   if(RAM_FG0[0x710]==0x44){      RAM_BG = RAM_BG0;      GFX_BG = GFX_BG0;      MSK_BG = GFX_BG0_SOLID;      SCR_BG = RAM+0x15008;      ofs_x  = 0x101;      col_msk = 0x30;   }   else{      RAM_BG = RAM_BG1;      GFX_BG = GFX_BG1;      MSK_BG = GFX_BG1_SOLID;      SCR_BG = RAM+0x15004;      ofs_x  = 0x103;      col_msk = 0x20;   }   MAKE_SCROLL_512x512_2_16(       ReadWord(SCR_BG+2)-ofs_x,       ReadWord(SCR_BG)+16+1   );   START_SCROLL_512x512_2_16(32,32,256,224);      ta = ReadWord(&RAM_BG[zz])&0x0FFF;      if(MSK_BG[ta]){				// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            ((ReadWord(&RAM_BG[zz])>>12)&0x0F)|col_msk,            16,            map         );         if(MSK_BG[ta]==1){			// Some pixels; trans            Draw16x16_Trans_Mapped_Rot(&GFX_BG[ta<<8], x, y, map);         }         else{						// all pixels; solid            Draw16x16_Mapped_Rot(&GFX_BG[ta<<8], x, y, map);         }      }   END_SCROLL_512x512_2_16();   // OBJECT   // ------   for(zz=0;zz<0x800;zz+=8){      y = ReadWord(&RAM_SPR[zz+0]);      if((y&0xF000)==0){         y = (255 - y)&0x1FF;         if((y>16)&&(y<224+32)){            ta = ReadWord(&RAM_SPR[zz+2])&0x1FFF;            if(GFX_SPR_SOLID[ta]){				// No pixels; skip            x = (32+ReadWord(&RAM_SPR[zz+6]))&0x1FF;            if((x>16)&&(x<256+32)){            MAP_PALETTE_MAPPED_NEW(               ((ReadWord(&RAM_SPR[zz+4])>>12)&0x0F)|0x00,               16,               map            );         if(GFX_SPR_SOLID[ta]==1){			// Some pixels; trans            switch(RAM_SPR[zz+3]&0xC0){            case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8], x, y, map);        break;            case 0x40: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8], x, y, map);  break;            case 0x80: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8], x, y, map);  break;            case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8], x, y, map); break;            }         }         else{						// all pixels; solid            switch(RAM_SPR[zz+3]&0xC0){            case 0x00: Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8], x, y, map);        break;            case 0x40: Draw16x16_Mapped_FlipY_Rot(&GFX_SPR[ta<<8], x, y, map);  break;            case 0x80: Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8], x, y, map);  break;            case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8], x, y, map); break;            }         }            }         }         }      }      else{         zz=0x800;      }   }   // FG0   // ---   MAKE_SCROLL_256x256_2_8(       0,       16   );   START_SCROLL_256x256_2_8(32,32,256,224);      ta = ReadWord(&RAM_FG0[zz])&0x0FFF;      if(GFX_FG0_SOLID[ta]){				// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            ((ReadWord(&RAM_FG0[zz])>>12)&0x0F)|0x10,            16,            map         );         if(GFX_FG0_SOLID[ta]==1){			// Some pixels; trans            Draw8x8_Trans_Mapped_Rot(&GFX_FG0[ta<<6], x, y, map);         }         else{						// all pixels; solid            Draw8x8_Mapped_Rot(&GFX_FG0[ta<<6], x, y, map);         }      }   END_SCROLL_256x256_2_8();}/*Background Data (2 bytes per tile)==================================Byte(s)| Bit(s) | Description-------+76543210+----------------------------   00  |xxxx....| Tile Palette bank (0-15)   00  |....xxxx| Tile Number (high 4 bits)   01  |xxxxxxxx| Tile Number (low 8 bits)Sprite Data (8 bytes per Sprite)================================Byte(s)| Bit(s) | Description-------+76543210+----------------------------   00  |.......x| Sprite Ypos (high bit)   01  |xxxxxxxx| Sprite Ypos (low 8 bits)   02  |.x......| Sprite Flip X-Axis   02  |...xxxxx| Sprite Number (low 5 bits)   03  |xxxxxxxx| Sprite Number (high 8 bits)   04  |xxxx....| Sprite Palette Bank (0-15)   06  |.......x| Sprite Xpos (high bit)   07  |xxxxxxxx| Sprite Xpos (low 8 bits)Palette Bank Info=================Banks 00-15: SpritesBanks 16-31: ForegroundBanks 32-47: Backgound#1Banks 48-63: Backgound#2*/

⌨️ 快捷键说明

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