📄 wwfsstar.c
字号:
else{if((tb&0xFF)==12){tb-=12;}}}} } tb=0x340000; if(!load_rom("wwfs31.bin", RAM+0x00000, 0x10000)) return; // * if(!load_rom("wwfs30.bin", RAM+0x10000, 0x10000)) return; if(!load_rom("wwfs29.bin", RAM+0x20000, 0x10000)) return; if(!load_rom("wwfs28.bin", RAM+0x30000, 0x10000)) return; for(ta=0;ta<0x40000;ta++){ tc=RAM[ta]; GFX[tb+3]=(((tc&0x80)>>7)<<3); GFX[tb+2]=(((tc&0x40)>>6)<<3); GFX[tb+1]=(((tc&0x20)>>5)<<3); GFX[tb+0]=(((tc&0x10)>>4)<<3); GFX[tb+3]|=(((tc&0x08)>>3)<<2); GFX[tb+2]|=(((tc&0x04)>>2)<<2); GFX[tb+1]|=(((tc&0x02)>>1)<<2); GFX[tb+0]|=(((tc&0x01)>>0)<<2); tb+=16; if((tb&0xFF)==0){tb-=0xFC;} else{if((tb&0xFF)==4){tb-=0xFC;} else{if((tb&0xFF)==8){tb-=0xFC;} else{if((tb&0xFF)==12){tb-=12;}}}} } tb=0x340000; if(!load_rom("wwfs15.bin", RAM+0x00000, 0x10000)) return; if(!load_rom("wwfs14.bin", RAM+0x10000, 0x10000)) return; if(!load_rom("wwfs13.bin", RAM+0x20000, 0x10000)) return; if(!load_rom("wwfs12.bin", RAM+0x30000, 0x10000)) return; for(ta=0;ta<0x40000;ta++){ tc=RAM[ta]; GFX[tb+3]|=(((tc&0x80)>>7)<<1); GFX[tb+2]|=(((tc&0x40)>>6)<<1); GFX[tb+1]|=(((tc&0x20)>>5)<<1); GFX[tb+0]|=(((tc&0x10)>>4)<<1); GFX[tb+3]|=(((tc&0x08)>>3)<<0); GFX[tb+2]|=(((tc&0x04)>>2)<<0); GFX[tb+1]|=(((tc&0x02)>>1)<<0); GFX[tb+0]|=(((tc&0x01)>>0)<<0); tb+=16; if((tb&0xFF)==0){tb-=0xFC;} else{if((tb&0xFF)==4){tb-=0xFC;} else{if((tb&0xFF)==8){tb-=0xFC;} else{if((tb&0xFF)==12){tb-=12;}}}} } tb=0x440000; if(!load_rom("wwfs47.bin", RAM+0x00000, 0x10000)) return; // 16x16 BG0 TILES if(!load_rom("wwfs46.bin", RAM+0x10000, 0x10000)) return; if(!load_rom("wwfs45.bin", RAM+0x20000, 0x10000)) return; if(!load_rom("wwfs44.bin", RAM+0x30000, 0x10000)) return; for(ta=0;ta<0x40000;ta++){ tc=RAM[ta]; GFX[tb+3]=(((tc&0x80)>>7)<<3); GFX[tb+2]=(((tc&0x40)>>6)<<3); GFX[tb+1]=(((tc&0x20)>>5)<<3); GFX[tb+0]=(((tc&0x10)>>4)<<3); GFX[tb+3]|=(((tc&0x08)>>3)<<2); GFX[tb+2]|=(((tc&0x04)>>2)<<2); GFX[tb+1]|=(((tc&0x02)>>1)<<2); GFX[tb+0]|=(((tc&0x01)>>0)<<2); tb+=16; if((tb&0xFF)==0){tb-=0xFC;} else{if((tb&0xFF)==4){tb-=0xFC;} else{if((tb&0xFF)==8){tb-=0xFC;} else{if((tb&0xFF)==12){tb-=12;}}}} } tb=0x440000; if(!load_rom("wwfs51.bin", RAM+0x00000, 0x10000)) return; if(!load_rom("wwfs50.bin", RAM+0x10000, 0x10000)) return; if(!load_rom("wwfs49.bin", RAM+0x20000, 0x10000)) return; if(!load_rom("wwfs48.bin", RAM+0x30000, 0x10000)) return; for(ta=0;ta<0x40000;ta++){ tc=RAM[ta]; GFX[tb+3]|=(((tc&0x80)>>7)<<1); GFX[tb+2]|=(((tc&0x40)>>6)<<1); GFX[tb+1]|=(((tc&0x20)>>5)<<1); GFX[tb+0]|=(((tc&0x10)>>4)<<1); GFX[tb+3]|=(((tc&0x08)>>3)<<0); GFX[tb+2]|=(((tc&0x04)>>2)<<0); GFX[tb+1]|=(((tc&0x02)>>1)<<0); GFX[tb+0]|=(((tc&0x01)>>0)<<0); tb+=16; if((tb&0xFF)==0){tb-=0xFC;} else{if((tb&0xFF)==4){tb-=0xFC;} else{if((tb&0xFF)==8){tb-=0xFC;} else{if((tb&0xFF)==12){tb-=12;}}}} } GFX_FG0_SOLID = make_solid_mask_8x8 (GFX + 0x000000, 0x1000); GFX_SPR_SOLID = make_solid_mask_16x16(GFX + 0x040000, 0x4000); GFX_BG0_SOLID = make_solid_mask_16x16(GFX + 0x440000, 0x1000); if(!load_rom("wwfs08.bin", RAM, 0x10000)) return; // MAIN 68000 for(ta=0;ta<0x10000;ta++){ ROM[ta+ta]=RAM[ta]; } if(!load_rom("wwfs07.bin", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+1]=RAM[ta]; } if(!load_rom("wwfs10.bin", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x20000]=RAM[ta]; } if(!load_rom("wwfs09.bin", RAM, 0x10000)) return; for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0x20001]=RAM[ta]; } memset(RAM+0x00000,0xFF,0x40000); InitPaletteMap(RAM+0x13000, 0x18, 0x10, 0x1000); set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr); WWFSuperStarsSpeedPatch();/* * StarScream Stuff follows */ ByteSwap(ROM,0x40000); ByteSwap(RAM,0x40000); AddMemFetch(0x000000, 0x03FFFF, ROM+0x000000-0x000000); // 68000 ROM AddMemFetch(-1, -1, NULL); AddReadByte(0x000000, 0x03FFFF, NULL, ROM+0x000000); // 68000 ROM AddReadByte(0x1C0000, 0x1CFFFF, NULL, RAM+0x000000); // 68000 RAM AddReadByte(0x080000, 0x080FFF, NULL, RAM+0x010000); // FG0 RAM AddReadByte(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000); // BG0 RAM AddReadByte(0x100000, 0x100FFF, NULL, RAM+0x012000); // OBJECT RAM AddReadByte(0x140000, 0x140FFF, NULL, RAM+0x013000); // COLOR RAM AddReadByte(0x180000, 0x18000F, NULL, RAM+0x014000); // INPUTS AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL); // <Bad Reads> AddReadByte(-1, -1, NULL, NULL); AddReadWord(0x000000, 0x03FFFF, NULL, ROM+0x000000); // 68000 ROM AddReadWord(0x1C0000, 0x1CFFFF, NULL, RAM+0x000000); // 68000 RAM AddReadWord(0x080000, 0x080FFF, NULL, RAM+0x010000); // FG0 RAM AddReadWord(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000); // BG0 RAM AddReadWord(0x100000, 0x100FFF, NULL, RAM+0x012000); // OBJECT RAM AddReadWord(0x140000, 0x140FFF, NULL, RAM+0x013000); // COLOR RAM AddReadWord(0x180000, 0x18000F, NULL, RAM+0x014000); // INPUTS AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL); // <Bad Reads> AddReadWord(-1, -1,NULL, NULL); AddWriteByte(0x1C0000, 0x1CFFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteByte(0x080000, 0x080FFF, NULL, RAM+0x010000); // FG0 RAM AddWriteByte(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000); // BG0 RAM AddWriteByte(0x100000, 0x100FFF, NULL, RAM+0x012000); // OBJECT RAM AddWriteByte(0x140000, 0x140FFF, NULL, RAM+0x013000); // COLOR RAM AddWriteByte(0x180000, 0x18000F, WriteOutByte, NULL); // OUTPUTS AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad Writes> AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0x1C0000, 0x1CFFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteWord(0x080000, 0x080FFF, NULL, RAM+0x010000); // FG0 RAM AddWriteWord(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000); // BG0 RAM AddWriteWord(0x100000, 0x100FFF, NULL, RAM+0x012000); // OBJECT RAM AddWriteWord(0x140000, 0x140FFF, NULL, RAM+0x013000); // COLOR RAM AddWriteWord(0x180000, 0x18000F, WriteOutWord, NULL); // OUTPUTS AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers... }void ClearWWFSuperStars(void){ #ifdef RAINE_DEBUG save_debug("ROM.bin",ROM,0x040000,1); save_debug("RAM.bin",RAM,0x040000,1); //save_debug("GFX.bin",GFX,0x540000,0); #endif}void ExecuteWWFSuperStarsFrame(void){ 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); TechnosSoundOld_Frame(); // Z80; YM2151; OKI ADPCM}void DrawWWFSuperStars(void){ int x,y,ta; int zz,zzz,zzzz,x16,y16; int td,zx,zy,zxx; UINT8 *map; ClearPaletteMap(); zzz=ReadWord(&RAM[0x14014]); zzzz=((zzz&0x1F0)>>4)<<2; // X Offset (16-511) x16=zzz&15; // X Offset (0-15) zx=zzzz&0x007F; zzz=ReadWord(&RAM[0x14016]); zzzz=((zzz&0x1F0)>>4)<<6; // Y Offset (16-511) y16=zzz&15; // Y Offset (0-15) zy=zzzz&0x07FF; for(y=32-y16;y<256+32;y+=16){ zxx=zx; for(x=32-x16;x<256+32;x+=16){ zz=0x11000+((zy&0x3FF)|(zxx&0x3F)); // Build offset zz+=(zxx&0x0040)<<4; zz+=(zy&0x0400)<<1; MAP_PALETTE_MAPPED_NEW( ((RAM[zz]>>4)&7)|0x10, 16, map ); if((RAM[zz]&0x80)==0){ Draw16x16_Mapped_Rot(&GFX[0x440000+((((RAM[zz]<<8)|(RAM[zz+2]))&0xFFF)<<8)],x,y,map); } else{ Draw16x16_Mapped_FlipY_Rot(&GFX[0x440000+((((RAM[zz]<<8)|(RAM[zz+2]))&0xFFF)<<8)],x,y,map); } zxx+=4; zxx&=0x7F; } zy+=0x40; zy&=0x7FF; } for(zz=0x12000;zz<0x12400;zz+=10){ td=RAM[zz+2]; if((td&0x01)!=0){ x=((td&0x08)<<5)|(RAM[zz+8]); x=((256+16)-x)&0x1FF; y=((td&0x04)<<6)|(RAM[zz+0]); y=((256+16)-y)&0x1FF; if((x>16)&&(x<256+32)){ ta=((RAM[zz+4]<<8)|(RAM[zz+6]))&0x3FFF; MAP_PALETTE_MAPPED_NEW( (td>>4)+8, 16, map ); if((td&0x02)==0){ if((y>16)&&(y<256+32)){ switch(RAM[zz+4]&0xC0){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break; case 0x80: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break; case 0x40: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break; } } } else{ ta &= 0x3FFE; if((y>16)&&(y<256+32)){ switch(RAM[zz+4]&0xC0){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX[0x40000+((ta+1)<<8)],x,y,map); break; case 0x80: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX[0x40000+((ta+1)<<8)],x,y,map); break; case 0x40: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break; } } y=(y-16)&0x1FF; if((y>16)&&(y<256+32)){ switch(RAM[zz+4]&0xC0){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break; case 0x80: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break; case 0x40: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX[0x40000+((ta+1)<<8)],x,y,map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX[0x40000+((ta+1)<<8)],x,y,map); break; } } } } } } zz=0x10000; for(y=32;y<256+32;y+=8){ for(x=32;x<256+32;x+=8){ ta=((RAM[zz]<<8)|(RAM[zz+2]))&0xFFF; if(ta!=0){ MAP_PALETTE_MAPPED_NEW( RAM[zz]>>4, 16, map ); Draw8x8_Trans_Mapped_Rot(&GFX[ta<<6],x,y,map); } zz+=4; } }}/*WWF SUPERSTARS (C) 1989 TECHNOS-------------------------------Main CPU....68000Sound CPUs..Z80; YM2151; M6295Sprite RAM----------- 10 bytes/sprite entry.- Even bytes unused, so just 5 bytes/sprite entry.- Sprites are 16x16.- Chain Y bit allows drawing of 2 sprites per entry (ie. to give a 16x32).Byte | Bit(s) | Description-----+76543210+---------------------- 0 |........| <Unused> 1 |xxxxxxxx| Sprite Y (low) 2 |........| <Unused> 3 |.......x| Sprite Enable 3 |......x.| Chain Y (16x32) 3 |.....x..| Sprite Y (high) 3 |....x...| Sprite X (high) 3 |xxxx....| Colour Bank 4 |........| <Unused> 5 |.x......| Flip X Axis 5 |x.......| Flip Y Axis 5 |..xxxxxx| Sprite Number (high) 6 |........| <Unused> 7 |xxxxxxxx| Sprite Number (low) 8 |........| <Unused> 9 |xxxxxxxx| Sprite X (low)Colour RAM----------- 24 banks of 16 colours.Banks | Usage------+-------------------- 0-15 | FG0 Layer 8-23 | Sprites16-23 | BG0 LayerFileName | Description-----------+---------------------------------WWFS01.BIN | Z80 ROMWWFS02.BIN | ADPCM Sampledata (block#1)WWFS03.BIN | ADPCM Sampledata (block#3)WWFS04.BIN | ADPCM Sampledata (block#2)WWFS05.BIN | ADPCM Sampledata (block#4)WWFS06.BIN | 8x8 FG0 GFX (block#1)WWFS07.BIN | 68000 ROM (block#1) (odd)WWFS08.BIN | 68000 ROM (block#1) (even)WWFS09.BIN | 68000 ROM (block#2) (odd)WWFS10.BIN | 68000 ROM (block#2) (even)WWFS11.BIN | 8x8 FG0 GFX (block#2)WWFS12.BIN | 16x16 SPRITES (block#1a)WWFS13.BIN | 16x16 SPRITES (block#2a)WWFS14.BIN | 16x16 SPRITES (block#3a)WWFS15.BIN | 16x16 SPRITES (block#4a)WWFS16.BIN | 16x16 SPRITES (block#5a)WWFS17.BIN | 16x16 SPRITES (block#6a)WWFS18.BIN | 16x16 SPRITES (block#7a)WWFS19.BIN | 16x16 SPRITES (block#8a)WWFS20.BIN | 16x16 SPRITES (block#9a)WWFS21.BIN | 16x16 SPRITES (block#10a)WWFS22.BIN | 16x16 SPRITES (block#11a)WWFS23.BIN | 16x16 SPRITES (block#12a)WWFS24.BIN | 16x16 SPRITES (block#13a)WWFS25.BIN | 16x16 SPRITES (block#14a)WWFS26.BIN | 16x16 SPRITES (block#15a)WWFS27.BIN | 16x16 SPRITES (block#16a)WWFS28.BIN | 16x16 SPRITES (block#1b)WWFS29.BIN | 16x16 SPRITES (block#2b)WWFS30.BIN | 16x16 SPRITES (block#3b)WWFS31.BIN | 16x16 SPRITES (block#4b)WWFS32.BIN | 16x16 SPRITES (block#9b)WWFS33.BIN | 16x16 SPRITES (block#10b)WWFS34.BIN | 16x16 SPRITES (block#11b)WWFS35.BIN | 16x16 SPRITES (block#12b)WWFS36.BIN | 16x16 SPRITES (block#5b)WWFS37.BIN | 16x16 SPRITES (block#6b)WWFS38.BIN | 16x16 SPRITES (block#7b)WWFS39.BIN | 16x16 SPRITES (block#8b)WWFS40.BIN | 16x16 SPRITES (block#13b)WWFS41.BIN | 16x16 SPRITES (block#14b)WWFS42.BIN | 16x16 SPRITES (block#15b)WWFS43.BIN | 16x16 SPRITES (block#16b)WWFS44.BIN | 16x16 BG0 TILES (block#4a)WWFS45.BIN | 16x16 BG0 TILES (block#3a)WWFS46.BIN | 16x16 BG0 TILES (block#2a)WWFS47.BIN | 16x16 BG0 TILES (block#1a)WWFS48.BIN | 16x16 BG0 TILES (block#4b)WWFS49.BIN | 16x16 BG0 TILES (block#3b)WWFS50.BIN | 16x16 BG0 TILES (block#2b)WWFS51.BIN | 16x16 BG0 TILES (block#1b)*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -