📄 armedf.c
字号:
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 + -