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