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

📄 nmk.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 5 页
字号:
      case 0x4010:	//fprintf(stderr,"BAD\n");	return OKIM6295_status_1_r( 1 );	//return M6295buffer_status(1);         //return 0;      break;      default:         //if(addr>0x4000) print_debug("RW:%06x\n",addr);         return ReadWord(&RAM[0x10000+addr]);      break;   }   return 0;}int NMKDecodeFG0(UINT8 *src, UINT32 size){   UINT32 ta,tb;   if(!(GFX_FG0=AllocateMem(0x40000))) return 0;   memset(GFX_FG0,0x00,0x40000);   tb=0;   for(ta=0;ta<size;ta++,tb+=2){      GFX_FG0[tb+0]=(src[ta]>>4)^15;      GFX_FG0[tb+1]=(src[ta]&15)^15;   }   FG0_Mask = make_solid_mask_8x8(GFX_FG0, 0x1000);   return 1;}int NMKDecodeSPR(UINT8 *src, UINT32 size){   UINT32 ta,tb;   if(!(GFX_SPR=AllocateMem(size<<1))) return 0;   tb=0;   for(ta=0;ta<size;ta+=4){      GFX_SPR[tb+0]=(src[ta+0]>>4)^15;      GFX_SPR[tb+1]=(src[ta+0]&15)^15;      GFX_SPR[tb+2]=(src[ta+1]>>4)^15;      GFX_SPR[tb+3]=(src[ta+1]&15)^15;      GFX_SPR[tb+4]=(src[ta+2]>>4)^15;      GFX_SPR[tb+5]=(src[ta+2]&15)^15;      GFX_SPR[tb+6]=(src[ta+3]>>4)^15;      GFX_SPR[tb+7]=(src[ta+3]&15)^15;      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=8;}}   }   SPR_Mask = make_solid_mask_pad_16x16(GFX_SPR, (size<<1)>>8, 0x10000);   return 1;}int NMKDecodeSPR_Mustang(UINT8 *src, UINT32 size){   int ta,tb,ss;   ss=size/2;   if(!(GFX_SPR=AllocateMem(size<<1))) return 0;   tb=0;   for(ta=0;ta<ss;ta+=2){      GFX_SPR[tb+0]=(src[   ta+0]>>4)^15;      GFX_SPR[tb+1]=(src[   ta+0]&15)^15;      GFX_SPR[tb+2]=(src[ss+ta+0]>>4)^15;      GFX_SPR[tb+3]=(src[ss+ta+0]&15)^15;      GFX_SPR[tb+4]=(src[   ta+1]>>4)^15;      GFX_SPR[tb+5]=(src[   ta+1]&15)^15;      GFX_SPR[tb+6]=(src[ss+ta+1]>>4)^15;      GFX_SPR[tb+7]=(src[ss+ta+1]&15)^15;      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=8;}}   }   SPR_Mask = make_solid_mask_pad_16x16(GFX_SPR, (size<<1)>>8, 0x10000);   return 1;}int NMKDecodeBG1(UINT8 *src, UINT32 size){   UINT32 ta,tb;   if(!(GFX_BG1=AllocateMem(0x100000))) return(0);   memset(GFX_BG1,0x00,0x100000);   tb=0;   for(ta=0;ta<size;ta+=4){      GFX_BG1[tb+0]=(src[ta+0]>>4)^15;      GFX_BG1[tb+1]=(src[ta+0]&15)^15;      GFX_BG1[tb+2]=(src[ta+1]>>4)^15;      GFX_BG1[tb+3]=(src[ta+1]&15)^15;      GFX_BG1[tb+4]=(src[ta+2]>>4)^15;      GFX_BG1[tb+5]=(src[ta+2]&15)^15;      GFX_BG1[tb+6]=(src[ta+3]>>4)^15;      GFX_BG1[tb+7]=(src[ta+3]&15)^15;      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=8;}}   }   BG1_Mask = make_solid_mask_16x16(GFX_BG1, 0x1000);   return 1;}int NMKDecodeBG0(UINT8 *src, UINT32 size){   UINT32 ta,tb;   if(size <= 0x100000){   if(!(GFX_BG0=AllocateMem(0x100000))) return(0);   memset(GFX_BG0,0x00,0x100000);   }   else{   if(!(GFX_BG0=AllocateMem(size * 2))) return(0);   memset(GFX_BG0,0x00,size * 2);   }   tb=0;   for(ta=0;ta<size;ta+=4){      GFX_BG0[tb+0]=(src[ta+0]>>4)^15;      GFX_BG0[tb+1]=(src[ta+0]&15)^15;      GFX_BG0[tb+2]=(src[ta+1]>>4)^15;      GFX_BG0[tb+3]=(src[ta+1]&15)^15;      GFX_BG0[tb+4]=(src[ta+2]>>4)^15;      GFX_BG0[tb+5]=(src[ta+2]&15)^15;      GFX_BG0[tb+6]=(src[ta+3]>>4)^15;      GFX_BG0[tb+7]=(src[ta+3]&15)^15;      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=8;}}   }   if(size <= 0x100000)   BG0_Mask = make_solid_mask_16x16(GFX_BG0, 0x1000);   else   BG0_Mask = make_solid_mask_16x16(GFX_BG0, size/0x80);   return 1;}int NMKDecodeBG0_BJT(UINT8 *src, UINT32 size){   UINT32 ta,tb;   if(!(GFX_BG0=AllocateMem(size * 2))) return(0);   memset(GFX_BG0,0x00,size * 2);   tb=0;   for(ta=0;ta<size;ta++){      GFX_BG0[tb+0]=(src[ta+0]>>4)^15;      GFX_BG0[tb+1]=(src[ta+0]&15)^15;      tb+=2;   }   BG0_Mask = make_solid_mask_8x8(GFX_BG0, size/0x20);   return 1;}static void EmptySoundFrame(void){}static void AddNMKControls(void){   // Set Sound Only Emulation Frame   // ------------------------------   ExecuteSoundFrame=&EmptySoundFrame;   memset(RAM+0x00000,0x00,0x30000);   memset(RAM+0x10000,0xFF,0x00010);   if(romset==7)      RAM_COL=RAM+0x1C000;   else      RAM_COL=RAM+0x18000;   InitPaletteMap(RAM_COL, 0x40, 0x10, 0x8000);   set_colour_mapper(&col_map_rrrr_gggg_bbbb_rgbx_rev);}void AddNMKMainCPU(UINT32 ram, UINT32 vram){   AddMemFetch(0x000000, 0x07FFFF, ROM+0x000000-0x000000);      // 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x07FFFF, NULL, ROM+0x000000);                 // 68000 ROM   AddReadByte(ram,    ram+0xFFFF, NULL, RAM+0x000000);                 // 68000 RAM   //AddReadByte(vram+0x4000,vram+0x4001,OKIM6295_status_0_r,NULL);   //AddReadByte(vram+0x4010,vram+0x4011,OKIM6295_status_1_r,NULL);      AddReadByte(vram, vram+0x1FFFF, NULL, RAM+0x010000);                 // SCREEN RAM   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);               // <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x07FFFF, NULL, ROM+0x000000);                 // 68000 ROM   AddReadWord(ram,    ram+0xFFFF, NULL, RAM+0x000000);                 // 68000 RAM   AddReadWord(vram+0x8000,vram+0x1FFFF, NULL, RAM+0x018000);           // SCREEN RAM   //AddReadWord(vram+0x4000,vram+0x4001,OKIM6295_status_0_r,NULL);   //AddReadWord(vram+0x4010,vram+0x4011,OKIM6295_status_1_r,NULL);   AddReadWord(vram, vram+0x07FFF, NMKVideoRW, NULL);                   // MISC SCREEN RAM   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);               // <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(ram,    ram+0xFFFF, NULL, RAM+0x000000);                // 68000 RAM   AddWriteByte(vram+0x8000, vram+0x1FFFF, NULL, RAM+0x018000);         // SCREEN RAM   //AddWriteByte(vram+0x4000, vram+0x04001,OKIM6295_data_0_w , NULL);                  // MISC SCREEN RAM   //AddWriteByte(vram+0x4010, vram+0x04011,OKIM6295_data_1_w , NULL);                  // MISC SCREEN RAM   //AddWriteByte(vram+0x4020, vram+0x0402f,bjtwin_oki6295_bankswitch_w , NULL);                  // MISC SCREEN RAM   AddWriteByte(vram, vram+0x07FFF, NMKVideoWB, NULL);                  // MISC SCREEN RAM   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);                   // Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);             // <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(ram,    ram+0xFFFF, NULL, RAM+0x000000);                // 68000 RAM   AddWriteWord(vram+0x8000, vram+0x1FFFF, NULL, RAM+0x018000);         // SCREEN RAM   //AddWriteWord(vram+0x4000, vram+0x04001,OKIM6295_data_0_w , NULL);                  // MISC SCREEN RAM   //AddWriteWord(vram+0x4010, vram+0x04011,OKIM6295_data_1_w , NULL);                  // MISC SCREEN RAM   //AddWriteWord(vram+0x4020, vram+0x402f, bjtwin_oki6295_bankswitch_w , NULL);                  // MISC SCREEN RAM   AddWriteWord(vram, vram+0x07FFF, NMKVideoWW, NULL);                  // MISC SCREEN RAM   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);             // <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();     // Set Starscream mem pointers... }void LoadBombJackTwin(void){   int ta;   romset=0;   if(!(ROM=AllocateMem(0x100000))) return;   if(!(RAM=AllocateMem(0x60000))) return;   if(!load_rom("bjt.35", ROM, 0x10000)) return;   // 8x8 FG0 TILES (OK)   if(!NMKDecodeFG0(ROM,0x10000))return;   if(!load_rom("bjt.100", ROM, 0x100000)) return; // 16x16 SPRITES (OK)   DecodeBombJackTwin_OBJ(ROM,0x100000);//   DecodeBombJackTwin_OBJ(ROM); kath   if(!NMKDecodeSPR(ROM,0x100000))return;   if(!load_rom("bjt.32", ROM, 0x100000)) return;  // 16x16 TILES (OK)   DecodeBombJackTwin_BG0(ROM,0x100000);//   DecodeBombJackTwin_BG0(ROM); kath   if(!NMKDecodeBG0_BJT(ROM,0x100000))return;   if(!load_rom("bjt.77", RAM+0x00000, 0x40000)) return;   // MAIN 68000   for(ta=0;ta<0x40000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("bjt.76", RAM+0x00000, 0x40000)) return;   for(ta=0;ta<0x40000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   /*-----[Sound Setup]-----*/   if(!(PCMROM = AllocateMem(0x200000))) return;   if(!load_rom("bjt.130",PCMROM+0x000000,0x100000)) return;   if(!load_rom("bjt.127",PCMROM+0x100000,0x100000)) return;   ADPCMSetBuffers(((struct ADPCMinterface*)&m6295_interface),PCMROM,0x100000);/*    for(ta=0;ta<0x10;ta++){ *//*       m6295_romlist_chip_a[ta].data = PCMROM+0x000000+(ta*0x10000); *//*       m6295_romlist_chip_a[ta].size = 0x10000; *//*       m6295_romlist_chip_b[ta].data = PCMROM+0x100000+(ta*0x10000); *//*       m6295_romlist_chip_b[ta].size = 0x10000; *//*    } */   /*-----------------------*/   RAMSize=0x40000;   scr_x = 384;   scr_y = 224;   // 68000 Speed hack   WriteLong68k(&ROM[0x096EA],0x13FC0000);       // move.b #$00,$AA0000   WriteLong68k(&ROM[0x096EE],0x00AA0000);       //   // Input hack, so test mode is available   WriteLong68k(&ROM[0x08F64],0x4E714E71);      //   WriteLong68k(&ROM[0x08F68],0x4E714E71);      //   WriteLong68k(&ROM[0x08F6C],0x4E714E71);      //   WriteLong68k(&ROM[0x08F70],0x4E714E71);      //   WriteLong68k(&ROM[0x08F74],0x4E714E71);      //   // Checksum hack   ROM[0x09172] = 0x60;/* *  StarScream Stuff follows */   ByteSwap(ROM,0x80000);   ByteSwap(RAM,0x40000);   AddNMKMainCPU(0x0F0000, 0x080000);   AddNMKControls();}void LoadSabotenBombers(void){   int ta;   romset=0;   if(!(ROM=AllocateMem(0x200000))) return;   if(!(RAM=AllocateMem(0x60000))) return;   if(!load_rom("ic35.sb3", ROM, 0x10000)) return;   // 8x8 FG0 TILES (OK)   if(!NMKDecodeFG0(ROM,0x10000))return;   if(!load_rom("ic100.sb5", ROM, 0x200000)) return; // 16x16 SPRITES (OK)   DecodeBombJackTwin_OBJ(ROM,0x200000);//   DecodeBombJackTwin_OBJ(ROM); kath   if(!NMKDecodeSPR(ROM,0x200000))return;   if(!load_rom("ic32.sb4", ROM, 0x200000)) return;  // 16x16 TILES (OK)   DecodeBombJackTwin_BG0(ROM,0x200000);   if(!NMKDecodeBG0_BJT(ROM,0x200000))return;   if(!load_rom("ic76.sb1", RAM+0x00000, 0x40000)) return;   // MAIN 68000   for(ta=0;ta<0x40000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("ic75.sb2", RAM+0x00000, 0x40000)) return;   for(ta=0;ta<0x40000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   /*-----[Sound Setup]-----*/   if(!(PCMROM = AllocateMem(0x200000))) return;   if(!load_rom("ic30.sb6",PCMROM+0x000000,0x100000)) return;   if(!load_rom("ic27.sb7",PCMROM+0x100000,0x100000)) return;   ADPCMSetBuffers(((struct ADPCMinterface*)&m6295_interface),PCMROM,0x100000);/*    for(ta=0;ta<0x10;ta++){ *//*       m6295_romlist_chip_a[ta].data = PCMROM+0x000000+(ta*0x10000); *//*       m6295_romlist_chip_a[ta].size = 0x10000; *//*       m6295_romlist_chip_b[ta].data = PCMROM+0x100000+(ta*0x10000); *//*       m6295_romlist_chip_b[ta].size = 0x10000; *//*    } */   /*-----------------------*/   RAMSize=0x40000;   scr_x = 384;   scr_y = 224;   // 68000 Speed hack//   WriteLong68k(&ROM[0x096EA],0x13FC0000);       // move.b #$00,$AA0000//   WriteLong68k(&ROM[0x096EE],0x00AA0000);       //   // Input hack, so test mode is available//   WriteLong68k(&ROM[0x08F64],0x4E714E71);      ////   WriteLong68k(&ROM[0x08F68],0x4E714E71);      ////   WriteLong68k(&ROM[0x08F6C],0x4E714E71);      ////   WriteLong68k(&ROM[0x08F70],0x4E714E71);      ////   WriteLong68k(&ROM[0x08F74],0x4E714E71);      //   // Checksum hack//   ROM[0x09172] = 0x60;/* *  StarScream Stuff follows */   ByteSwap(ROM,0x80000);   ByteSwap(RAM,0x40000);   AddNMKMainCPU(0x0F0000, 0x080000);   AddNMKControls();}void load_macross_2(void){  //int ta;   romset=8;   if(!(RAM=AllocateMem(0x60000))) return;   if(!(ROM=AllocateMem(0x200000))) return;   if(!load_rom("921a01", ROM, 0x20000)) return;   // 8x8 FG0 TILES (OK)   if(!NMKDecodeFG0(ROM,0x20000))return;   if(!load_rom("921a07", ROM, 0x200000)) return;  // 16x16 SPRITES (OK)   DecodeBombJackTwin_OBJ(ROM,0x200000);//   DecodeBombJackTwin_OBJ(ROM); kath   if(!NMKDecodeSPR(ROM,0x200000))return;   if(!load_rom("921a04", ROM, 0x200000)) return;  // 16x16 TILES (OK)   DecodeBombJackTwin_BG0(ROM,0x200000);//   DecodeBombJackTwin_BG0(ROM); kath   if(!NMKDecodeBG0(ROM,0x200000))return;   FreeMem(ROM);   if(!(ROM=AllocateMem(0x80000))) return;   if(!load_rom("921a03", ROM+0x00000, 0x80000)) return;   // MAIN 68000   ByteSwap(ROM,0x80000);   /*-----[Sound Setup]-----*/   if(!(PCMROM = AllocateMem(0x100000))) return;   if(!load_rom("921a05",PCMROM+0x000000,0x080000)) return;   if(!load_rom("921a06",PCMROM+0x080000,0x080000)) return;

⌨️ 快捷键说明

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