📄 doubled3.c
字号:
GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x4800); // Coin fix WriteLong68k(&ROM[0x20C8],0x60000024); // Speed hack WriteLong68k(&ROM[0x0916],0x13FC0000); // move.b #$00,$AA0000 WriteLong68k(&ROM[0x091A],0x00AA0000); // (Speed Hack) WriteLong68k(&ROM[0x091E],0x4E714E71); InitPaletteMap(RAM+0x2C000, 0x40, 0x10, 0x8000);/* * StarScream Stuff follows */ ByteSwap(ROM,0x80000); ByteSwap(RAM,0x40000); AddMemFetch(0x000000, 0x07FFFF, ROM+0x000000-0x000000); // 68000 ROM AddMemFetch(-1, -1, NULL); AddReadByte(0x000000, 0x07FFFF, NULL, ROM+0x000000); // 68000 ROM AddReadByte(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000); // 68000 RAM AddReadByte(0x080000, 0x083FFF, NULL, RAM+0x008000); // OBJECT RAM AddReadByte(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000); // SCROLL RAM AddReadByte(0x100000, 0x100FFF, NULL, RAM+0x02C000); // COLOR RAM AddReadByte(0x180000, 0x18000F, NULL, RAM+0x00C000); // INPUT AddReadByte(0x140000, 0x14000F, NULL, RAM+0x01C000); // ? AddReadByte(-1, -1, NULL, NULL); AddReadWord(0x000000, 0x07FFFF, NULL, ROM+0x000000); // 68000 ROM AddReadWord(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000); // 68000 RAM AddReadWord(0x080000, 0x083FFF, NULL, RAM+0x008000); // OBJECT RAM AddReadWord(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000); // SCROLL RAM AddReadWord(0x100000, 0x100FFF, NULL, RAM+0x02C000); // COLOR RAM AddReadWord(0x180000, 0x18000F, NULL, RAM+0x00C000); // INPUT AddReadWord(0x140000, 0x14000F, NULL, RAM+0x01C000); // ? AddReadWord(-1, -1,NULL, NULL); AddWriteByte(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000); // 68000 RAM AddWriteByte(0x080000, 0x083FFF, NULL, RAM+0x008000); // OBJECT RAM AddWriteByte(0x100000, 0x100FFF, NULL, RAM+0x02C000); // COLOR RAM AddWriteByte(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000); // SCROLL RAM AddWriteByte(0x180000, 0x18000F, NULL, RAM+0x00C000); // INPUT AddWriteByte(0x140000, 0x14000F, DD3SoundWrite, NULL); // SOUND AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000); // 68000 RAM AddWriteWord(0x080000, 0x083FFF, NULL, RAM+0x008000); // OBJECT RAM AddWriteWord(0x100000, 0x100FFF, NULL, RAM+0x02C000); // COLOR RAM AddWriteWord(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000); // SCROLL RAM AddWriteWord(0x180000, 0x18000F, NULL, RAM+0x00C000); // INPUT AddWriteWord(0x140000, 0x14000F, NULL, RAM+0x01C000); // ? AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers... }void ClearDoubleD3(void){}void ExecuteDoubleD3Frame(void){ int ta; // DSW mapper (weird split byte format!) ta = get_dsw(1); RAM[0xC001]&=0xCF; RAM[0xC001]|=(ta>>2)&0x30; RAM[0xC003]&=0xC0; RAM[0xC003]|=ta&0x3F; ta = get_dsw(0); RAM[0xC005]&=0xC0; RAM[0xC005]|=ta&0x3F; RAM[0xC007]&=0xFC; RAM[0xC007]|=(ta>>6)&0x03; RAM[0xC007]^=4; cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60)); // M68000 12MHz (60fps) cpu_interrupt(CPU_68K_0, 5); cpu_interrupt(CPU_68K_0, 6); TechnosSound_Frame(); // Z80; YM2151; OKI ADPCM}void DrawDoubleD3(void){ int zz,zzz,zzzz,x16,y16,x,y,ta,nn; UINT8 *map; UINT8 *GFX_BG; ClearPaletteMap(); // BG0 // --- if((RAM[0x400C]&1)==0){ // Tile Bank GFX_BG = GFX_BG0; } else{ GFX_BG = GFX_BG0 + (0x1000<<8); } MAKE_SCROLL_512x512_2_16( ReadWord(&RAM[0x4004]), ReadWord(&RAM[0x4006])+8 ); START_SCROLL_512x512_2_16(32,32,320,240); MAP_PALETTE_MAPPED( Map_15bit_xBGR, ((ReadWord(&RAM_BG0[zz])>>12)&0x0F)|0x20, 16, map ); Draw16x16_Mapped(&GFX_BG[(ReadWord(&RAM_BG0[zz])&0x0FFF)<<8], x, y, map); END_SCROLL_512x512_2_16(); // BG1 // --- MAKE_SCROLL_512x512_4_16( ReadWord(&RAM[0x4000]), ReadWord(&RAM[0x4002])+8 ); START_SCROLL_512x512_4_16(32,32,320,240); ta = ReadWord(&RAM_BG1[zz+2])&0x1FFF; if(GFX_BG0_SOLID[ta]!=0){ // No pixels; skip MAP_PALETTE_MAPPED( Map_15bit_xBGR, (RAM_BG1[zz]&0x0F)|0x10, 16, map ); if(GFX_BG0_SOLID[ta]==1){ // Some pixels; trans switch(RAM_BG1[zz]&0xC0){ case 0x00: Draw16x16_Trans_Mapped(&GFX_BG0[ta<<8], x, y, map); break; case 0x40: Draw16x16_Trans_Mapped_FlipY(&GFX_BG0[ta<<8], x, y, map); break; case 0x80: Draw16x16_Trans_Mapped_FlipX(&GFX_BG0[ta<<8], x, y, map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY(&GFX_BG0[ta<<8], x, y, map); break; } } else{ // all pixels; solid switch(RAM_BG1[zz]&0xC0){ case 0x00: Draw16x16_Mapped(&GFX_BG0[ta<<8], x, y, map); break; case 0x40: Draw16x16_Mapped_FlipY(&GFX_BG0[ta<<8], x, y, map); break; case 0x80: Draw16x16_Mapped_FlipX(&GFX_BG0[ta<<8], x, y, map); break; case 0xC0: Draw16x16_Mapped_FlipXY(&GFX_BG0[ta<<8], x, y, map); break; } } } END_SCROLL_512x512_4_16(); // OBJECT // ------ for(zz=0x0000;zz<0x1000;zz+=16){ if((RAM_SPR[zz+2]&0x01)!=0){ x = (32 + (RAM_SPR[zz+10] | ((RAM_SPR[zz+2]&4)<<6) ))&0x1FF; y = ((240+24) - (RAM_SPR[zz+0] | ((RAM_SPR[zz+2]&2)<<7) ))&0x1FF; MAP_PALETTE_MAPPED( Map_15bit_xBGR, RAM_SPR[zz+8]&0x0F, 16, map ); ta = ((RAM_SPR[zz+4]) | (RAM_SPR[zz+6]<<8))&0x7FFF; nn = ((RAM_SPR[zz+2]>>5)&0x07)+1; switch(RAM_SPR[zz+2]&0x18){ case 0x00: do{ if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){ if(GFX_SPR_SOLID[ta]!=0){ // No pixels; skip if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped(&GFX_SPR[ta<<8], x, y, map); else Draw16x16_Mapped( &GFX_SPR[ta<<8], x, y, map); } } ta++; y-=16; }while(--nn); break; case 0x10: do{ if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){ if(GFX_SPR_SOLID[ta]!=0){ // No pixels; skip if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipY(&GFX_SPR[ta<<8], x, y, map); else Draw16x16_Mapped_FlipY( &GFX_SPR[ta<<8], x, y, map); } } ta++; y-=16; }while(--nn); break; case 0x08: y-=((nn-1)*16); do{ if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){ if(GFX_SPR_SOLID[ta]!=0){ // No pixels; skip if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipX(&GFX_SPR[ta<<8], x, y, map); else Draw16x16_Mapped_FlipX( &GFX_SPR[ta<<8], x, y, map); } } ta++; y+=16; }while(--nn); break; case 0x18: y-=((nn-1)*16); do{ if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){ if(GFX_SPR_SOLID[ta]!=0){ // No pixels; skip if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipXY(&GFX_SPR[ta<<8], x, y, map); else Draw16x16_Mapped_FlipXY( &GFX_SPR[ta<<8], x, y, map); } } ta++; y+=16; }while(--nn); break; } } }}/*BG0---- 512x512Byte | Bit(s) | Use-----+76543210+--------------- 0 |xxxx....| Colour Bank 0 |....xxxx| Tile (high) 1 |xxxxxxxx| Tile (low)BG1---- 512x512Byte | Bit(s) | Use-----+76543210+--------------- 1 |x.......| Flip X Axis 1 |.x......| Flip Y Axis 1 |....xxxx| Colour Bank 2 |...xxxxx| Tile (high) 3 |xxxxxxxx| Tile (low)OBJECT------- Only Odd Bytes usedByte | Bit(s) | Use-----+76543210+--------------- 1 |xxxxxxxx| Y (low) 3 |xxx.....| Y Chain Size 3 |...x....| Flip X Axis 3 |....x...| Flip Y Axis 3 |.....x..| X (high) 3 |......x.| Y (high) 3 |.......x| Sprite Enable 5 |xxxxxxxx| Tile (low) 7 |.xxxxxxx| Tile (high) 9 |....xxxx| Colour Bank 11 |xxxxxxxx| X (low)*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -