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

📄 armedf.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   Z80ROM=RAM+0x40000;   if(!load_rom("11.bin", Z80ROM+0x0000, 0x4000)) return;	// Z80 SOUND ROM   if(!load_rom("12.bin", Z80ROM+0x4000, 0x4000)) return;	// Z80 SOUND ROM   Z80ROM[0x57]=0x00;   Z80ROM[0x58]=0x00;   Z80ROM[0x70]=0x00;   Z80ROM[0x71]=0x00;   AddNichibutsuYM3526(0x0082, 0x0077);   AddNichiSample(0x015F, 0x0161, 1);   AddNichiSample(0x0162, 0x0164, 1);   AddNichiSample(0x5040, 0x559A, 1);   AddNichiSample(0x559B, 0x57BC, 1);   AddNichiSample(0x57BD, 0x5E1D, 1);   AddNichiSample(0x5E1E, 0x6EBE, 1);   AddNichiSample(0x6EBF, 0x754F, 1);   AddNichiSample(0x7550, 0x7EC1, 1);   AddNichiSample(0x8040, 0x9040, 1);   AddNichiSample(0x9041, 0x9FD1, 1);   AddNichiSample(0x9FD2, 0xB6C2, 3);   AddNichiSample(0xB6C3, 0xCB13, 1);   AddNichiSample(0xCB14, 0xE5E4, 1);   AddNichiSample(0xE5E5, 0xF5E4, 2);   /*-----------------------*/   GFX_BG0 = GFX+0x000000;   GFX_BG1 = GFX+0x040000;   GFX_SPR = GFX+0x080000;   GFX_FG0 = GFX+0x100000;   tb=0;   if(!load_rom("17.bin", RAM+0x00000, 0x10000)) return;	// GFX BG0   if(!load_rom("18.bin", RAM+0x10000, 0x10000)) return;   for(ta=0;ta<0x20000;ta++,tb+=2){      GFX_BG0[tb+0]=(RAM[ta]&15)^15;      GFX_BG0[tb+1]=(RAM[ta]>>4)^15;   }   tb=0;   if(!load_rom("7.bin", RAM+0x00000, 0x10000)) return;	// GFX BG1   if(!load_rom("8.bin", RAM+0x10000, 0x10000)) return;   for(ta=0;ta<0x20000;ta++,tb+=2){      GFX_BG1[tb+0]=(RAM[ta]&15)^15;      GFX_BG1[tb+1]=(RAM[ta]>>4)^15;   }   tb=0;   if(!load_rom("15.bin", RAM+0x00000, 0x10000)) return;	// GFX SPR   if(!load_rom("16.bin", RAM+0x10000, 0x10000)) return;   if(!load_rom("13.bin", RAM+0x20000, 0x10000)) return;   if(!load_rom("14.bin", RAM+0x30000, 0x10000)) return;   for(ta=0;ta<0x20000;ta++,tb+=4){      GFX_SPR[tb+0]=(RAM[ta+0x00000]&15)^15;      GFX_SPR[tb+1]=(RAM[ta+0x00000]>>4)^15;      GFX_SPR[tb+2]=(RAM[ta+0x20000]&15)^15;      GFX_SPR[tb+3]=(RAM[ta+0x20000]>>4)^15;   }   tb=0;   if(!load_rom("10.bin", RAM, 0x8000)) return;		// GFX FG0   for(ta=0;ta<0x8000;ta++,tb+=2){      GFX_FG0[tb+0]=(RAM[ta]&15)^15;      GFX_FG0[tb+1]=(RAM[ta]>>4)^15;   }   MSK_BG0 = make_solid_mask_16x16(GFX_BG0, 0x0400);   MSK_BG1 = make_solid_mask_16x16(GFX_BG1, 0x0400);   MSK_SPR = make_solid_mask_16x16(GFX_SPR, 0x0800);   MSK_FG0 = make_solid_mask_8x8  (GFX_FG0, 0x0400);   memset(RAM+0x00000,0x00,0x40000);   InitPaletteMap(RAM+0x4000, 0x100, 0x10, 0x1000);   // 68000 Checksum Fix   // ------------------   WriteLong68k(&ROM[0x12f98],0x4E714E71);	// 	nop#if 0   // 68000 Speed Hack   // ----------------   WriteWord68k(&ROM[0x0E81C],0x4EF9);		// 	jmp	$5D000   WriteLong68k(&ROM[0x0E81E],0x0005D000);	//   WriteLong68k(&ROM[0x5D000],0x13FC0000);	//	move.b	#$00,$AA0000   WriteLong68k(&ROM[0x5D004],0x00AA0000);	//	(Speed Hack)   WriteWord68k(&ROM[0x5D008],0x6100-10);	//	bra.s	<loop>#endif   // Change Sound Comm Address (for speed)   // -------------------------------------   WriteLong68k(&ROM[0x13532],0x00BB0000);   WriteLong68k(&ROM[0x1369A],0x00BB0000);   WriteLong68k(&ROM[0x13726],0x00BB0000);/* *  StarScream Stuff follows */      ByteSwap(ROM,0x60000);   ByteSwap(RAM,0x20000);   AddMemFetch(0x000000, 0x05FFFF, ROM+0x000000-0x000000);   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x05FFFF, NULL, ROM+0x000000);   AddRWBW(0x060000, 0x07FFFF, NULL, RAM+0x000000);   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x05FFFF, NULL, ROM+0x000000);   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0xBB0000, 0xBB0001, NichiSoundCommWrite68k, NULL);   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...}void ClearArmedF(void){   RemoveNichibutsuYM3526();   #ifdef RAINE_DEBUG      //save_debug("RAM.bin",RAM,0x010000,1);   #endif}void ExecuteArmedFFrame(void){   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(8,60));	// M68000 12MHz (60fps)   cpu_interrupt(CPU_68K_0, 1);   Nichibutsu3526_Frame();		// Z80 and YM3526}void ExecuteCC2Frame(void){   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(8,60));	// M68000 12MHz (60fps)   cpu_interrupt(CPU_68K_0, 2);   Nichibutsu3526_Frame();		// Z80 and YM3526}void DrawArmedF(void){   int zz,zzz,zzzz,x16,y16,x,y,ta,scrollx,scrolly;   UINT8 *map;   ClearPaletteMap();   // BG0   if(ReadWord(&RAM[io_w]) & 0x0200){     scrolly = ReadWord(&RAM[io_w+2])+96;     scrollx = ReadWord(&RAM[io_w+4])+16;     MAKE_SCROLL_512x1024_2_16(scrollx,scrolly);          if (fg_method) {       START_SCROLL_512x1024_2_16(16,16,224,288);       //fprintf(stderr,"accessing %x\n",bg_videoram+1+zz);       MAP_PALETTE_MAPPED(			  Map_12bit_xxxxRRRRGGGGBBBB_Rev,			  (RAM[bg_videoram+1+zz]>>3)|0x60,			  16,			  map			  );       //fprintf(stderr,"sprite %x %d,%d,%x\n",ReadWord(&RAM[bg_videoram+zz])&0x03FF,x,y,map);       Draw16x16_Mapped_Rot(&GFX_BG0[(ReadWord(&RAM[bg_videoram+zz])&0x03FF)<<8],y,x,map);       //fprintf(stderr,"sprite ok\n");       END_SCROLL_512x1024_2_16();       //fprintf(stderr,"fini\n");     } else {       START_SCROLL_512x1024_2_16(32,32,224,320);       MAP_PALETTE_MAPPED(			  Map_12bit_xxxxRRRRGGGGBBBB_Rev,			  (RAM[bg_videoram+1+zz]>>3)|0x60,			  16,			  map			  );              Draw16x16_Mapped_Rot(&GFX_BG0[(ReadWord(&RAM[bg_videoram+zz])&0x03FF)<<8],y,x,map);              END_SCROLL_512x1024_2_16();     }   }   else{      clear_game_screen(0);   }   // OBJECT LOW   if(ReadWord(&RAM[io_w]) & 0x0800){   for(zz=0;zz<0x600;zz+=8){      if((ReadWord(&RAM[zz+0])&0x2000)==0){      ta=ReadWord(&RAM[zz+2])&0x7FF;      if(MSK_SPR[ta]!=0){				// No pixels; skip	if (fg_method) {	  y=((224+16) - ReadWord(&RAM[zz+0]))&0x1FF;	  x=((128 - (sprite_offy)) + ReadWord(&RAM[zz+6]))&0x1FF;	} else {	  y=((320+32+32) - ReadWord(&RAM[zz+0]))&0x1FF;	  x=((32 - (sprite_offy)) + ReadWord(&RAM[zz+6]))&0x1FF;	}      if((x>16)&&(y>16)&&(x<320+32)&&(y<224+32)){         MAP_PALETTE_MAPPED(            Map_12bit_xxxxRRRRGGGGBBBB_Rev,            (RAM[zz+5]&0x1F)|0x20,            16,            map         );         if(MSK_SPR[ta]==1){				// Some pixels; trans            switch(RAM[zz+3]&0x30){            case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map);        break;            case 0x10: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map);  break;            case 0x20: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map);  break;            case 0x30: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break;            }         }         else{						// all pixels; solid            switch(RAM[zz+3]&0x30){            case 0x00: Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map);        break;            case 0x10: Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map);  break;            case 0x20: Draw16x16_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map);  break;            case 0x30: Draw16x16_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break;            }         }      }      }      }   }   }      // BG1   if(ReadWord(&RAM[io_w]) & 0x0400){     if (scroll_type) {       /* scrolling is handled by the protection mcu */       scrolly = (RAM[0x8000+13*2] | (RAM[0x8000+14*2]<<8))+96;       scrollx = (RAM[0x8000+11*2] | (RAM[0x8000+12*2]<<8))+16;     } else {       scrollx = ReadWord(&RAM[io_w+8])+16;       scrolly = ReadWord(&RAM[io_w+6])+96;     }     //fprintf(stderr,"%d & %d (%d)\n",scrollx,scrolly,scroll_type);     MAKE_SCROLL_512x1024_2_16(			     scrollx,			     scrolly   );     if (fg_method) {       START_SCROLL_512x1024_2_16(16,16,224,288);       ta = ReadWord(&RAM[fg_videoram+zz]) & 0x03FF;       if(MSK_BG1[ta]!=0){				// No pixels; skip	 MAP_PALETTE_MAPPED(			    Map_12bit_xxxxRRRRGGGGBBBB_Rev,			    (RAM[fg_videoram+1+zz]>>3)|0x40,			    16,			    map			    );	 	 if(MSK_BG1[ta]==1)				// Some pixels; trans	   Draw16x16_Trans_Mapped_Rot(&GFX_BG1[ta<<8],y,x,map);	 else						// all pixels; solid	   Draw16x16_Mapped_Rot(&GFX_BG1[ta<<8],y,x,map);	        }              END_SCROLL_512x1024_2_16();     } else {       START_SCROLL_512x1024_2_16(32,32,224,320);              ta = ReadWord(&RAM[fg_videoram+zz]) & 0x03FF;              if(MSK_BG1[ta]!=0){				// No pixels; skip	 	 MAP_PALETTE_MAPPED(			    Map_12bit_xxxxRRRRGGGGBBBB_Rev,			    (RAM[fg_videoram+1+zz]>>3)|0x40,			    16,			    map			    );	 	 if(MSK_BG1[ta]==1)				// Some pixels; trans	   Draw16x16_Trans_Mapped_Rot(&GFX_BG1[ta<<8],y,x,map);	 else						// all pixels; solid	   Draw16x16_Mapped_Rot(&GFX_BG1[ta<<8],y,x,map);	        }       END_SCROLL_512x1024_2_16();     }   }      // OBJECT HIGH   if(ReadWord(&RAM[io_w]) & 0x0800){   for(zz=0;zz<0x600;zz+=8){      if((ReadWord(&RAM[zz+0])&0x2000)!=0){      ta=ReadWord(&RAM[zz+2])&0x7FF;      if(MSK_SPR[ta]!=0){				// No pixels; skip	if (fg_method) {	  y=((224+16) - ReadWord(&RAM[zz+0]))&0x1FF;	  x=((128 - (sprite_offy)) + ReadWord(&RAM[zz+6]))&0x1FF;	} else {	  y=((320+32+32) - ReadWord(&RAM[zz+0]))&0x1FF;	  x=((32 - (sprite_offy)) + ReadWord(&RAM[zz+6]))&0x1FF;	}      if((x>16)&&(y>16)&&(x<320+32)&&(y<224+32)){         MAP_PALETTE_MAPPED(            Map_12bit_xxxxRRRRGGGGBBBB_Rev,            (RAM[zz+5]&0x1F)|0x20,            16,            map         );         if(MSK_SPR[ta]==1){				// Some pixels; trans            switch(RAM[zz+3]&0x30){            case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map);        break;            case 0x10: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map);  break;            case 0x20: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map);  break;            case 0x30: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break;            }         }         else{						// all pixels; solid            switch(RAM[zz+3]&0x30){            case 0x00: Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map);        break;            case 0x10: Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map);  break;            case 0x20: Draw16x16_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map);  break;            case 0x30: Draw16x16_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break;            }         }      }      }      }   }   }      // FG0   if(ReadWord(&RAM[io_w]) & 0x0100){     if (fg_method) {       zz=-0x200;       for(y=224+16;y>16;y-=8){	 for(x=32;x<256+32;x+=8){	   ta = ((RAM[tx_info+zz]&3)<<8) | (RAM[0x8300+zz]);	   if(MSK_FG0[ta]!=0){				// No pixels; skip	     	     MAP_PALETTE_MAPPED(				Map_12bit_xxxxRRRRGGGGBBBB_Rev,				(RAM[tx_info+zz]>>4),				16,				map				);	     	     if(MSK_FG0[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);	     }	   }	   zz+=2;	 }	 //zz+=2;       }     } else { // Armed formation       zz=4;       for(x=32;x<320+32;x+=8){	 for(y=32;y<224+32;y+=8){	   	   ta = ((RAM[tx_info+zz]&3)<<8) | (RAM[0x8300+zz]);	   	   if(MSK_FG0[ta]!=0){				// No pixels; skip	     	     MAP_PALETTE_MAPPED(				Map_12bit_xxxxRRRRGGGGBBBB_Rev,				(RAM[tx_info+zz]>>4),				16,				map				);	     if(MSK_FG0[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);	     }	   }	   	   zz+=2;	 }	 zz+=8;       }     }   }}

⌨️ 快捷键说明

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