?? gcpball.c
字號:
if(!load_rom("u56", PCMROM+0x080000, 0x200000)) return; // M6585 ADPCMSetBuffers(((struct ADPCMinterface*)&m6295_interface),PCMROM,0x40000); m6585_romlist_chip_a[0].data = PCMROM+0x080000; m6585_romlist_chip_a[1].data = PCMROM+0x180000; if(!load_rom("u43.2", ROM+0x000000, 0x80000)) return; // BASE ROM memset(ROM+0x080000,0x00,0x080000); // EMPTY ROM if(!load_rom("u45.3", ROM+0x100000, 0x80000)) return; // DATA ROM if(!load_rom("u46.4", ROM+0x180000, 0x80000)) return; // DATA ROM ByteSwap(ROM,0x200000); memset(RAM+0x00000,0x00,RAMSize); memset(RAM+0x16000,0xFF,0x00200); // eeprom save WriteLong68k(&ROM[0x31DD6],0x00BB0000); WriteLong68k(&ROM[0x31DDA],0x701F22D8); WriteLong68k(&ROM[0x31DDE],0x51C8FFFC); WriteWord68k(&ROM[0x31DE2],0x4E75); // eeprom load WriteLong68k(&ROM[0x31E2E],0x00BB0000); WriteLong68k(&ROM[0x31E32],0x701F20D9); WriteLong68k(&ROM[0x31E36],0x51C8FFFC); WriteWord68k(&ROM[0x31E3A],0x4E75); // speed hack WriteLong68k(&ROM[0x02A00],0x4EF80100); WriteLong68k(&ROM[0x00100],0x1200C239); WriteLong68k(&ROM[0x00104],0x00FF22EC); WriteLong68k(&ROM[0x00108],0xB101C200); WriteWord68k(&ROM[0x0010C],0x6606); WriteLong68k(&ROM[0x0010E],0x4CDF0003); WriteWord68k(&ROM[0x00112],0x4E75); WriteLong68k(&ROM[0x00114],0x13FC0000); WriteLong68k(&ROM[0x00118],0x00AA0000); WriteLong68k(&ROM[0x0011C],0x4EF80100); // scroll sync WriteLong68k(&ROM[0x00A9E],0x00000180); WriteLong68k(&ROM[0x00180],0x13FC0000); WriteLong68k(&ROM[0x00184],0x00AA0000); WriteLong68k(&ROM[0x00188],0x4EF824AA); // skip cpu idling on sound writes WriteWord68k(&ROM[0x0BF7C],0x4E75); set_colour_mapper(&col_Map_15bit_RRRRGGGGBBBBRGBx); InitPaletteMap(RAM+0x15000, 0x80, 0x10, 0x8000); EEPROM=RAM+0x16100; add_eeprom(EEPROM, 0x80, EPR_INVALIDATE_ON_ROM_CHANGE); ta = load_eeprom(); if(!ta) memset(EEPROM, 0x55, 0x80);/* * StarScream Stuff follows */ ByteSwap(ROM,0x200000); ByteSwap(RAM,RAMSize); AddMemFetch(0x000000, 0x1FFFFF, ROM+0x000000-0x000000); // 68000 ROM AddMemFetch(-1, -1, NULL); AddReadByte(0x000000, 0x1FFFFF, NULL, ROM+0x000000); // 68000 ROM AddReadByte(0xFF0000, 0xFFFFFF, NULL, RAM+0x000000); // 68000 RAM AddReadByte(0xC00000, 0xC03FFF, NULL, RAM+0x010000); // BG0/BG1/FG0 RAM AddReadByte(0xC80000, 0xC80FFF, NULL, RAM+0x014000); // ? RAM AddReadByte(0xD00000, 0xD00FFF, NULL, RAM+0x015000); // COLOR RAM AddReadByte(0xD80000, 0xD800FF, grand_cross_pinball_ioc_rb, NULL); // I/O AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL); // <Bad Reads> AddReadByte(-1, -1, NULL, NULL); AddReadWord(0x000000, 0x1FFFFF, NULL, ROM+0x000000); // 68000 ROM AddReadWord(0xFF0000, 0xFFFFFF, NULL, RAM+0x000000); // 68000 RAM AddReadWord(0xC00000, 0xC03FFF, NULL, RAM+0x010000); // BG0/BG1/FG0 RAM AddReadWord(0xC80000, 0xC80FFF, NULL, RAM+0x014000); // ? RAM AddReadWord(0xD00000, 0xD00FFF, NULL, RAM+0x015000); // COLOR RAM AddReadWord(0xD80000, 0xD800FF, grand_cross_pinball_ioc_rw, NULL); // I/O AddReadWord(0xBB0000, 0xBB007F, NULL, EEPROM); // EEPROM FAKE AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL); // <Bad Reads> AddReadWord(-1, -1,NULL, NULL); AddWriteByte(0xFF0000, 0xFFFFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteByte(0xC00000, 0xC03FFF, NULL, RAM+0x010000); // BG0/BG1/FG0 RAM AddWriteByte(0xC80000, 0xC80FFF, NULL, RAM+0x014000); // ? RAM AddWriteByte(0xD00000, 0xD00FFF, NULL, RAM+0x015000); // COLOR RAM AddWriteByte(0xD80000, 0xD800FF, grand_cross_pinball_ioc_wb, NULL); // I/O AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad Writes> AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0xFF0000, 0xFFFFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteWord(0xC00000, 0xC03FFF, NULL, RAM+0x010000); // BG0/BG1/FG0 RAM AddWriteWord(0xC80000, 0xC80FFF, NULL, RAM+0x014000); // ? RAM AddWriteWord(0xD00000, 0xD00FFF, NULL, RAM+0x015000); // COLOR RAM AddWriteWord(0xD80000, 0xD800FF, grand_cross_pinball_ioc_ww, NULL); // I/O AddWriteWord(0xBB0000, 0xBB007F, NULL, EEPROM); // EEPROM FAKE AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers...}void clear_grand_cross_pinball(void){ save_eeprom(); #ifdef RAINE_DEBUG //save_debug("RAM.bin",RAM,RAMSize,1); #endif}void execute_grand_cross_pinball_frame(void){ if(!M6585buffer_status(0)) cpu_interrupt(CPU_68K_0, 3); cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(16,60)); // M68000 16MHz (60fps) cpu_interrupt(CPU_68K_0, 1); cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(1,60)); // Scroll Sync cpu_interrupt(CPU_68K_0, 4);}static void draw_grand_cross_pinball_object(void){ int rx; int x,y,zz; int ta; UINT8 *map; UINT8 *RAM_BG; // OBJECT RAM_BG = RAM + 0x14000; for(zz=0;zz<0x1000;zz+=0x10){ if(!(RAM_BG[zz+14]&0x80)){ x = (16 + ((RAM_BG[zz+6]<<8) | (RAM_BG[zz+4]<<0)))&0x7FFF; y = ((320 + 16) - ((RAM_BG[zz+2]<<8) | (RAM_BG[zz+0]<<0)))&0x7FFF; ta = ((RAM_BG[zz+12]<<8) | (RAM_BG[zz+10]<<0))&0x3FFF; MAP_PALETTE_MAPPED_NEW( (RAM_BG[zz+14]&0x0F) | 0x60, 16, map ); rx = (RAM_BG[zz+8]&0x07)+1; switch(RAM_BG[zz+8]&0x18){ case 0x08: do{ if((x>16)&&(y>16)&&(x<224+32)&&(y<320+32)){ if(GFX_SPR_SOLID[ta]!=0){ if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],320+48-y,x,map); else Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],320+48-y,x,map); } } ta++; x = (x+16)&0x7FFF; }while(--rx); break; case 0x18: x += ((rx-1)<<4); x &= 0x7FFF; do{ if((x>16)&&(y>16)&&(x<224+32)&&(y<320+32)){ if(GFX_SPR_SOLID[ta]!=0){ if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],320+48-y,x,map); else Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],320+48-y,x,map); } } ta++; x = (x-16)&0x7FFF; }while(--rx); break; case 0x00: //y -= ((rx-1)<<4); //y &= 0x7FFF; do{ if((x>16)&&(y>16)&&(x<224+32)&&(y<320+32)){ if(GFX_SPR_SOLID[ta]!=0){ if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],320+48-y,x,map); else Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],320+48-y,x,map); } } ta++; y = (y-16)&0x7FFF; }while(--rx); break; case 0x10: do{ if((x>16)&&(y>16)&&(x<224+32)&&(y<320+32)){ if(GFX_SPR_SOLID[ta]!=0){ if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],320+48-y,x,map); else Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],320+48-y,x,map); } } ta++; y = (y-16)&0x7FFF; }while(--rx); break; } } }}void draw_grand_cross_pinball(void){ int x16,y16; int x,y,zz,zzz,zzzz; int ta; UINT8 *map; UINT8 *GFX_BG; UINT8 *MSK_BG; UINT8 *RAM_BG; ClearPaletteMap(); // BG0 //if(bg0){ RAM_BG = RAM + 0x10000; if(!(ReadWord(&RAM[0x16088])&0x0400)){ GFX_BG = GFX_BG0+0x000000; MSK_BG = GFX_BG0_SOLID+0x0000; } else{ GFX_BG = GFX_BG0+0x100000; MSK_BG = GFX_BG0_SOLID+0x1000; } MAKE_SCROLL_512x512_4_16( ReadWord(&RAM[0x16014]), ReadWord(&RAM[0x16016])+0x10 ); START_SCROLL_512x512_4_16(32,32,320,224); ta=ReadWord(&RAM_BG[zz+0])&0x0FFF; MAP_PALETTE_MAPPED_NEW( (ReadWord(&RAM_BG[zz+2])&0x1F)+0x00, 16, map ); switch(ReadWord(&RAM_BG[zz+2])&0x0300){ case 0x0000: Draw16x16_Mapped_Rot(&GFX_BG[ta<<8],x,y,map); break; case 0x0100: Draw16x16_Mapped_FlipY_Rot(&GFX_BG[ta<<8],x,y,map); break; case 0x0200: Draw16x16_Mapped_FlipX_Rot(&GFX_BG[ta<<8],x,y,map); break; case 0x0300: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG[ta<<8],x,y,map); break; } END_SCROLL_512x512_4_16(); //} if(!(ReadWord(&RAM[0x16068])&0x8800)) draw_grand_cross_pinball_object(); // BG1 //if(bg1){ RAM_BG = RAM + 0x11000; if(!(ReadWord(&RAM[0x16088])&0x0800)){ GFX_BG = GFX_BG0+0x200000; MSK_BG = GFX_BG0_SOLID+0x2000; } else{ GFX_BG = GFX_BG0+0x300000; MSK_BG = GFX_BG0_SOLID+0x3000; } MAKE_SCROLL_512x512_4_16( ReadWord(&RAM[0x16018]), ReadWord(&RAM[0x1601A])+0x10 ); START_SCROLL_512x512_4_16(32,32,320,224); ta=ReadWord(&RAM_BG[zz+0])&0x0FFF; if(MSK_BG[ta]!=0){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( (ReadWord(&RAM_BG[zz+2])&0x1F)+0x30, 16, map ); if(MSK_BG[ta]==1){ // Some pixels; trans switch(ReadWord(&RAM_BG[zz+2])&0x0300){ case 0x0000: Draw16x16_Trans_Mapped_Rot(&GFX_BG[ta<<8],x,y,map); break; case 0x0100: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_BG[ta<<8],x,y,map); break; case 0x0200: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_BG[ta<<8],x,y,map); break; case 0x0300: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_BG[ta<<8],x,y,map); break; } } else{ // all pixels; solid switch(ReadWord(&RAM_BG[zz+2])&0x0300){ case 0x0000: Draw16x16_Mapped_Rot(&GFX_BG[ta<<8],x,y,map); break; case 0x0100: Draw16x16_Mapped_FlipY_Rot(&GFX_BG[ta<<8],x,y,map); break; case 0x0200: Draw16x16_Mapped_FlipX_Rot(&GFX_BG[ta<<8],x,y,map); break; case 0x0300: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG[ta<<8],x,y,map); break; } } } END_SCROLL_512x512_4_16(); //} if((ReadWord(&RAM[0x16068])&0x8800)) draw_grand_cross_pinball_object(); // FG0 //if(bg2){ RAM_BG = RAM + 0x12000; MAKE_SCROLL_512x512_2_8( ReadWord(&RAM[0x1601C]), ReadWord(&RAM[0x1601E])+0x10 ); START_SCROLL_512x512_2_8(32,32,320,224); ta=ReadWord(&RAM_BG[zz])&0x0FFF; if(GFX_FG0_SOLID[ta]!=0){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( (ReadWord(&RAM_BG[zz])>>12) | 0x70, 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_512x512_2_8(); //}}/*EXCELLENT SYSTEM - OBJECT RAM-----------------------------Byte | Bit(s) | Use-----+76543210+----------------- 0 |xxxxxxxx| X (low) 2 |xxxxxxxx| X (high) 4 |xxxxxxxx| Y (low) 6 |xxxxxxxx| Y (high) E |...x....| Flip X E |....x...| Flip Y E |.....xxx| Chain A |xxxxxxxx| Tile (low) C |xxxxxxxx| Tile (high) E |x.......| Disable E |....xxxx| Colour Bank*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -