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

📄 bloodbro.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
   AddZ80AWritePort(0xAA, 0xAA, StopZ80Mode2, NULL);   AddZ80AWritePort(-1, -1, NULL, NULL);   AddZ80AInit();   /*---------------------------------*/   memset(RAM+0x00000,0x00,0x20000);   memset(RAM+0x20000,0xFF,0x01000);   RAMSize=0x31000;   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);   set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr_rev);   InitPaletteMap(RAM+0xE800, 0x80, 0x10, 0x1000);   // Fix Sound Comm   // --------------   WriteWord68k(&ROM[0x0880],0x4E71);		// nop   // 68000 Speed hack   // ----------------   WriteLong68k(&ROM[0x0988],0x13FC0000);	// move.b #$00,$AA0000   WriteLong68k(&ROM[0x098C],0x00AA0000);	//   WriteLong68k(&ROM[0x0990],0x4E714E71);	///* *  StarScream Stuff follows */   ByteSwap(ROM,0x80000);   ByteSwap(RAM,0x14000);   AddMemFetch(0x000000, 0x07FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x07FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x080000, 0x08FFFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadByte(0x0C0000, 0x0C01FF, NULL, RAM+0x010000);			// ??? RAM   AddReadByte(0x0E0000, 0x0E000F, NULL, RAM+0x020000);			// INPUT RAM   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x07FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x080000, 0x08FFFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadWord(0x0C0000, 0x0C01FF, NULL, RAM+0x010000);			// ??? RAM   AddReadWord(0x0E0000, 0x0E000F, NULL, RAM+0x020000);			// INPUT RAM   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x080000, 0x08FFFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteByte(0x0C0000, 0x0C01FF, NULL, RAM+0x010000);		// INPUT RAM   AddWriteByte(0x0A0000, 0x0A0001, WriteSound68k, NULL);		// SOUND COMM   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x080000, 0x08FFFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteWord(0x0C0000, 0x0C01FF, NULL, RAM+0x010000);		// INPUT RAM   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers... }void ClearBloodBros(void){}void ExecuteBloodBrosFrame(void){   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(10,60));	// M68000 10MHz (60fps)   cpu_interrupt(CPU_68K_0, 4);   /*cpu_execute_cycles(CPU_Z80_0, 4000000/60);   #ifdef RAINE_DEBUG      print_debug("Z80PC0:%04x\n",z80pc);   #endif   cpu_interrupt(CPU_Z80_0, 0x0010);   cpu_interrupt(CPU_Z80_0, 0x0018);*/}static void draw_blood_bros_object(int pri) {   int x,y,rx,ry,rxx,ryy,rxxx,ryyy;   int zz,ta;   UINT8 *MAP;   if(pri)      pri = 0x80;   for(zz=0xB7F8;zz>=0xB000;zz-=8){   if((RAM[zz+1]&0x80) != pri){   x=(32+ReadWord(&RAM[zz+4]))&0x1FF;   y=(16+ReadWord(&RAM[zz+6]))&0x1FF;   if((x>16)&&(y>16)&&(x<256+32)&&(y<224+32)){   ta=ReadWord(&RAM[zz+2])&0x1FFF;   if(ta!=0){      MAP_PALETTE_MAPPED_NEW(         RAM[zz]&15,         16,         MAP      );      rx=(ReadWord(&RAM[zz])>>4)&7;      ry=(ReadWord(&RAM[zz])>>7)&7;      rxxx=x;      ryyy=y;   switch(ReadWord(&RAM[zz])&0x6000){   case 0x0000:   for(ryy=0;ryy<=ry;ryy++){   for(rxx=0;rxx<=rx;rxx++){   if((x>16)&&(y>16)&&(x<256+32)&&(y<224+32)){   Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],x,y,MAP);   }   ta++;   y+=16;   }   x+=16;   y=ryyy;   }   break;   case 0x2000:   x+=(ry<<4);   for(ryy=0;ryy<=ry;ryy++){   for(rxx=0;rxx<=rx;rxx++){   if((x>16)&&(y>16)&&(x<256+32)&&(y<224+32)){   Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,MAP);   }   ta++;   y+=16;   }   x-=16;   y=ryyy;   }   break;   case 0x4000:   for(ryy=0;ryy<=ry;ryy++){   for(rxx=0;rxx<=rx;rxx++){   if((x>16)&&(y>16)&&(x<256+32)&&(y<224+32)){   Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,MAP);   }   ta++;   y+=16;   }   x+=16;   y=ryyy;   }   break;   case 0x6000:   x+=(ry<<4);   for(ryy=0;ryy<=ry;ryy++){   for(rxx=0;rxx<=rx;rxx++){   if((x>16)&&(y>16)&&(x<256+32)&&(y<224+32)){   Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,MAP);   }   ta++;   y+=16;   }   x-=16;   y=ryyy;   }   break;   }   }   }   }   }}static void draw_west_story_object(int pri) {   int x,y;   int zz,ta;   UINT8 *MAP;   if(pri==0){   for(zz=0x147F6;zz>=0x14806;zz-=8){   if((RAM[zz+1]&0x80)!=0){   y=(256-ReadWord(&RAM[zz]))&0x1FF;   x=(32+ReadWord(&RAM[zz+6]))&0x1FF;   if((x>16)&&(y>16)&&(x<256+32)&&(y<224+32)){   ta=ReadWord(&RAM[zz+2])&0x1FFF;   if(ta!=0){      MAP_PALETTE_MAPPED_NEW(               RAM[zz+5]>>4,               16,        MAP            );      switch(RAM[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{zz=0x14006;}   }   }   else{   for(zz=0x14006;zz<0x14806;zz+=8){   if((RAM[zz+1]&0x80)==0){   y=(256-ReadWord(&RAM[zz]))&0x1FF;   x=(32+ReadWord(&RAM[zz+6]))&0x1FF;   if((x>16)&&(y>16)&&(x<256+32)&&(y<224+32)){   ta=ReadWord(&RAM[zz+2])&0x1FFF;   if(ta!=0){      MAP_PALETTE_MAPPED_NEW(               RAM[zz+5]>>4,               16,        MAP            );      switch(RAM[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{zz=0x14806;}   }   }}void DrawBloodBros(void){   int x,y,x16,y16;   int zz,zzz,zzzz,ta;   UINT8 *MAP;   ClearPaletteMap();   // BG0   MAKE_SCROLL_512x1024_2_16(      ReadWord(&RAM_SCR[0x00]),      ReadWord(&RAM_SCR[0x02])+16   );   START_SCROLL_512x1024_2_16(32,32,256,224);      MAP_PALETTE_MAPPED_NEW(         (ReadWord(&RAM_BG0[zz])>>12)|pal_bg0,         16,         MAP      );      Draw16x16_Mapped_Rot(&GFX_BG0[(ReadWord(&RAM_BG0[zz])&0xFFF)<<8],x,y,MAP);   END_SCROLL_512x1024_2_16();   // OBJECT LOW   if(romset==0)      draw_blood_bros_object(0);   else      draw_west_story_object(0);   // BG1   MAKE_SCROLL_512x1024_2_16(      ReadWord(&RAM_SCR[0x04]),      ReadWord(&RAM_SCR[0x06])+16   );   START_SCROLL_512x1024_2_16(32,32,256,224);      if(zz<0x400){	// bleh      ta=ReadWord(&RAM_BG1[zz])&0xFFF;      if(GFX_BG1_SOLID[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            (ReadWord(&RAM_BG1[zz])>>12)|pal_bg1,            16,            MAP         );         if(GFX_BG1_SOLID[ta]==1)		// Some pixels; trans            Draw16x16_Trans_Mapped_Rot(&GFX_BG1[ta<<8],x,y,MAP);         else					// all pixels; solid            Draw16x16_Mapped_Rot(&GFX_BG1[ta<<8],x,y,MAP);      }      }   END_SCROLL_512x1024_2_16();   // OBJECT HIGH   if(romset==0)      draw_blood_bros_object(0x80);   else      draw_west_story_object(0x80);   // FG0   MAKE_SCROLL_256x256_2_8(      0,      0+16   );   START_SCROLL_256x256_2_8(32,32,256,224);      ta=ReadWord(&RAM_FG0[zz])&0xFFF;      if(GFX_FG0_SOLID[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            (ReadWord(&RAM_FG0[zz])>>12)|pal_fg0,            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();}/*Blood Bros Sprite List----------------------- 8 bytes/sprite entry- 256 entriesOffset| Bit(s)         | Usage------+7654321076543210+-----------------  0/1 |............xxxx| Colour Bank  0/1 |.........xxx....| Chain X  0/1 |......xxx.......| Chain Y  0/1 |.xx.............| Flip X/Y  0/1 |x...............| Sprite:BG1 Priority  2/3 |...xxxxxxxxxxxxx| Sprite Number  4/5 |.......xxxxxxxxx| Sprite X  6/7 |.......xxxxxxxxx| Sprite YWest Story Sprite List----------------------- 8 bytes/sprite entry- 256 entriesOffset| Bit(s)         | Usage------+7654321076543210+-----------------  0/1 |x...............| Sprite:BG1 Priority  0/1 |.......xxxxxxxxx| Sprite Y  2/3 |xx..............| Flip X/Y  2/3 |...xxxxxxxxxxxxx| Sprite Number  4/5 |............xxxx| Colour Bank  6/7 |.......xxxxxxxxx| Sprite XWEST STORY (C) 1991 DATSU ALLIANCE----------------------------------Main CPU....68000Sound CPU...Z80ROM CONTENTS------------Filename | Description---------+----------------------------WS01.BIN | 16x16 BG0 (0-3)WS02.BIN | 16x16 BG0 (0-1)WS03.BIN | 16x16 BG0 (0-2)WS04.BIN | 16x16 BG0 (0-0)WS05.BIN | 16x16 BG1 (0-3)WS06.BIN | 16x16 BG1 (0-1)WS07.BIN | 16x16 BG1 (0-2)WS08.BIN | 16x16 BG1 (0-0)WS09.BIN | 8x8 FG0 (0-3)WS10.BIN | 8x8 FG0 (0-1)WS11.BIN | 8x8 FG0 (0-2)WS12.BIN | 8x8 FG0 (0-0)WS13.BIN | 68000 ROM (block#1) (odd)WS14.BIN | 68000 ROM (block#2) (odd)WS15.BIN | 68000 ROM (block#1) (even)WS16.BIN | 68000 ROM (block#2) (even)WS17.BIN | Z80 ROMWS18.BIN | ADPCM Sample DataWS19.BIN | 16x16 SPR (0-0)WS20.BIN | 16x16 SPR (1-0)WS21.BIN | 16x16 SPR (0-1)WS22.BIN | 16x16 SPR (1-1)WS23.BIN | 16x16 SPR (0-2)WS24.BIN | 16x16 SPR (1-2)WS25.BIN | 16x16 SPR (0-3)WS26.BIN | 16x16 SPR (1-3)*/

⌨️ 快捷键说明

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