📄 spacegun.c
字号:
TMP[tb+13]|=((tc&0x0004)<<(1));
TMP[tb+14]|=((tc&0x0002)<<(2));
TMP[tb+15]|=((tc&0x0001)<<(3));
tb+=16;
}
if(!(GFX=AllocateMem(0x100000+0xF61000+0x2000))) return;
te=0;
if(!load_rom("C57-05", TMP, 0x3D840)) return; // 64x64 SPRITES
for(ta=0x100000;ta<(0x100000+0xF61000);ta+=0x1000){
for(tb=0;tb<8;tb++){
for(tc=0;tc<4;tc++){
td=ReadWord(&TMP[te])<<7;
td+=0xF94B0;
te+=2;
for(tf=0;tf<8;tf++){
WriteLong(&GFX[(tb<<9)+(tc<<4)+(tf<<6)+ta+0],ReadLong(&TMP[td+0]));
WriteLong(&GFX[(tb<<9)+(tc<<4)+(tf<<6)+ta+4],ReadLong(&TMP[td+4]));
WriteLong(&GFX[(tb<<9)+(tc<<4)+(tf<<6)+ta+8],ReadLong(&TMP[td+8]));
WriteLong(&GFX[(tb<<9)+(tc<<4)+(tf<<6)+ta+12],ReadLong(&TMP[td+12]));
td+=16;
}
}
}
}
tb=0;
if(!load_rom("C57-06", TMP, 0x80000)) return; // 8x8 BG TILES
for(ta=0;ta<0x80000;ta+=2){
GFX[tb+3]=TMP[ta+0]&15;
GFX[tb+2]=TMP[ta+0]>>4;
GFX[tb+1]=TMP[ta+1]&15;
GFX[tb+0]=TMP[ta+1]>>4;
tb+=4;
}
FreeMem(TMP);
GFX_BG0=GFX+0x000000;
GFX_SPR=GFX+0x100000;
GFX_BG0_SOLID = make_solid_mask_8x8(GFX, 0x4000);
GFX_SPR_SOLID = MakeSolidTileMap64x64(GFX_SPR, 0xF61);
for(tb=0;tb<0xF61000;tb+=64){ // Flip Y Axis
for(ta=0;ta<32;ta++){
tc=GFX_SPR[tb+ta];
GFX_SPR[tb+ta]=GFX_SPR[tb+63-ta];
GFX_SPR[tb+63-ta]=tc;
}
}
Init64x64_Table(&GFX[0x100000+0xF61000]); // $1000x2
RAMSize=0x50000+0x10000;
if(!(ROM=AllocateMem(0xC0000))) return;
if(!(RAM=AllocateMem(RAMSize))) return;
if(!load_rom("C57-18", RAM, 0x20000)) return; // MAIN 68000
for(ta=0;ta<0x20000;ta++){
ROM[ta+ta]=RAM[ta];
}
if(!load_rom("C57-20", RAM, 0x20000)) return;
for(ta=0;ta<0x20000;ta++){
ROM[ta+ta+1]=RAM[ta];
}
if(!load_rom("C57-17", RAM, 0x20000)) return;
for(ta=0;ta<0x20000;ta++){
ROM[ta+ta+0x40000]=RAM[ta];
}
if(!load_rom("C57-22", RAM, 0x20000)) return;
for(ta=0;ta<0x20000;ta++){
ROM[ta+ta+0x40001]=RAM[ta];
}
if(!load_rom("C57-15", RAM, 0x20000)) return; // SUB 68000
for(ta=0;ta<0x20000;ta++){
ROM[ta+ta+0x80000]=RAM[ta];
}
if(!load_rom("C57-16", RAM, 0x20000)) return;
for(ta=0;ta<0x20000;ta++){
ROM[ta+ta+0x80001]=RAM[ta];
}
/*-----[Sound Setup]-----*/
if(!(PCMROM=AllocateMem(0x100000))) return;
if(!load_rom("C57-08",PCMROM+0x00000,0x80000)) return; // ADPCM A rom
if(!load_rom("C57-07",PCMROM+0x80000,0x80000)) return; // ADPCM A rom
YM2610SetBuffers(PCMROM, PCMROM+0x80000, 0x80000, 0x80000);
Pan2610_OffsetVol( 4 ); /* set volume shift size */
/*-----------------------*/
memset(RAM+0x00000,0x00,0x48000);
RAM_VIDEO = RAM+0x10000;
RAM_SCROLL = RAM+0x24800;
RAM_INPUT = RAM+0x44000;
GFX_FG0 = RAM+0x48000;
set_colour_mapper(&col_map_xrrr_rrgg_gggb_bbbb);
InitPaletteMap(RAM+0x38000, 0x100, 0x10, 0x8000);
tc0110pcr_init(RAM+0x38000, 1);
ROM[0x23C0]=0x4E; // V-PROG ROM ERROR
ROM[0x23C1]=0x71;
ROM[0x23C2]=0x4E;
ROM[0x23C3]=0x71;
ROM[0x80E74]=0x4E; // M-PROG ROM ERROR
ROM[0x80E75]=0x71;
ROM[0x23D2]=0x4E; // EE-ROM ERROR
ROM[0x23D3]=0x71;
ROM[0x23D4]=0x4E;
ROM[0x23D5]=0x71;
ROM[0x80076]=0x0B; // INT#5
ROM[0x80077]=0xF2;
ROM[0x80BF2]=0x48; // IMPROVE INT#5
ROM[0x80BF3]=0xE7;
ROM[0x80BF4]=0xC0;
ROM[0x80BF5]=0xC0;
ROM[0x809A6]=0x13; // move.b #$00,$AA0000
ROM[0x809A7]=0xFC; // Speed Hack
ROM[0x809A8]=0x00;
ROM[0x809A9]=0x00;
ROM[0x809AA]=0x00;
ROM[0x809AB]=0xAA;
ROM[0x809AC]=0x00;
ROM[0x809AD]=0x00;
ROM[0x809AE]=0x60;
ROM[0x809AF]=0xF6;
ROM[0x9AA]=0x13; // move.b #$00,$AA0000
ROM[0x9AB]=0xFC; // Speed Hack
ROM[0x9AC]=0x00;
ROM[0x9AD]=0x00;
ROM[0x9AE]=0x00;
ROM[0x9AF]=0xAA;
ROM[0x9B0]=0x00;
ROM[0x9B1]=0x00;
// Init tc0220ioc emulation
// ------------------------
tc0220ioc.RAM = RAM_INPUT;
tc0220ioc.ctrl = 0; //TC0220_STOPCPU;
reset_tc0220ioc();
// Init tc0100scn emulation
// ------------------------
tc0100scn[0].layer[0].RAM =RAM_VIDEO+0x0000;
tc0100scn[0].layer[0].GFX =GFX;
tc0100scn[0].layer[0].MASK =GFX_BG0_SOLID;
tc0100scn[0].layer[0].SCR =RAM_SCROLL+0;
tc0100scn[0].layer[0].type =0;
tc0100scn[0].layer[0].bmp_x =64;
tc0100scn[0].layer[0].bmp_y =64;
tc0100scn[0].layer[0].bmp_w =320;
tc0100scn[0].layer[0].bmp_h =240;
tc0100scn[0].layer[0].mapper =&Map_15bit_xRGB;
tc0100scn[0].layer[0].tile_mask=0x3FFF;
tc0100scn[0].layer[0].scr_x =20;
tc0100scn[0].layer[0].scr_y =8;
tc0100scn[0].layer[1].RAM =RAM_VIDEO+0x8000;
tc0100scn[0].layer[1].GFX =GFX;
tc0100scn[0].layer[1].MASK =GFX_BG0_SOLID;
tc0100scn[0].layer[1].SCR =RAM_SCROLL+2;
tc0100scn[0].layer[1].type =0;
tc0100scn[0].layer[1].bmp_x =64;
tc0100scn[0].layer[1].bmp_y =64;
tc0100scn[0].layer[1].bmp_w =320;
tc0100scn[0].layer[1].bmp_h =240;
tc0100scn[0].layer[1].mapper =&Map_15bit_xRGB;
tc0100scn[0].layer[1].tile_mask=0x3FFF;
tc0100scn[0].layer[1].scr_x =20;
tc0100scn[0].layer[1].scr_y =8;
tc0100scn[0].layer[2].RAM =RAM_VIDEO+0x4000;
tc0100scn[0].layer[2].GFX =GFX_FG0;
tc0100scn[0].layer[2].SCR =RAM_SCROLL+4;
tc0100scn[0].layer[2].type =3;
tc0100scn[0].layer[2].bmp_x =64;
tc0100scn[0].layer[2].bmp_y =64;
tc0100scn[0].layer[2].bmp_w =320;
tc0100scn[0].layer[2].bmp_h =240;
tc0100scn[0].layer[2].mapper =&Map_15bit_xRGB;
tc0100scn[0].layer[2].scr_x =20;
tc0100scn[0].layer[2].scr_y =8;
tc0100scn[0].RAM = RAM_VIDEO;
tc0100scn[0].GFX_FG0 = GFX_FG0;
init_tc0100scn(0);
/*
* StarScream Stuff follows
*/
ByteSwap(ROM,0xC0000);
ByteSwap(RAM,0x48000);
AddMemFetch(0x000000, 0x07FFFF, ROM+0x000000-0x000000); // 68000 ROM
AddMemFetch(-1, -1, NULL);
AddReadByte(0x000000, 0x07FFFF, NULL, ROM+0x000000); // 68000 ROM
AddReadByte(0x310000, 0x31FFFF, NULL, RAM+0x000000); // MAIN RAM
AddReadByte(0x900000, 0x90FFFF, NULL, RAM_VIDEO); // SCREEN RAM
AddReadByte(0x30C000, 0x30FFFF, NULL, RAM+0x020000); // V-WORK RAM
AddReadByte(0x000000, 0xFFFFFF, BadReadByte, NULL); // <Bad Reads>
AddReadByte(-1, -1, NULL, NULL);
AddReadWord(0x000000, 0x07FFFF, NULL, ROM+0x000000); // 68000 ROM
AddReadWord(0x30C000, 0x30FFFF, NULL, RAM+0x020000); // V-WORK RAM
AddReadWord(0x310000, 0x31FFFF, NULL, RAM+0x000000); // MAIN RAM
AddReadWord(0x900000, 0x90FFFF, NULL, RAM_VIDEO); // SCREEN RAM
AddReadWord(0xB00000, 0xB00007, tc0110pcr_rw, NULL); // COLOR RAM
AddReadWord(0x500000, 0x5007FF, NULL, RAM+0x024000); // OBJECT RAM
AddReadWord(0x000000, 0xFFFFFF, BadReadWord, NULL); // <Bad Reads>
AddReadWord(-1, -1,NULL, NULL);
AddWriteByte(0x310000, 0x31FFFF, NULL, RAM+0x000000); // MAIN RAM
AddWriteByte(0x906000, 0x906FFF, tc0100scn_0_gfx_fg0_wb, NULL); // FG0 GFX RAM
AddWriteByte(0x900000, 0x90FFFF, NULL, RAM_VIDEO); // SCREEN RAM
AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000
AddWriteByte(0x000000, 0xFFFFFF, BadWriteByte, NULL); // <Bad Writes>
AddWriteByte(-1, -1, NULL, NULL);
AddWriteWord(0x30C000, 0x30FFFF, NULL, RAM+0x020000); // V-WORK RAM
AddWriteWord(0x310000, 0x31FFFF, NULL, RAM+0x000000); // MAIN RAM
AddWriteWord(0x500000, 0x5007FF, NULL, RAM+0x024000); // OBJECT RAM
AddWriteWord(0x906000, 0x906FFF, tc0100scn_0_gfx_fg0_ww, NULL); // FG0 GFX RAM
AddWriteWord(0x900000, 0x90FFFF, NULL, RAM_VIDEO); // SCREEN RAM
AddWriteWord(0x920000, 0x92000F, NULL, RAM_SCROLL); // SCROLL RAM
AddWriteWord(0xB00000, 0xB00007, tc0110pcr_ww, NULL); // COLOR RAM
AddWriteWord(0x000000, 0xFFFFFF, BadWriteWord, NULL); // <Bad Writes>
AddWriteWord(-1, -1, NULL, NULL);
AddInitMemory(); // Set Starscream mem pointers...
AddMemFetchMC68000B(0x000000, 0x03FFFF, ROM+0x080000-0x000000); // 68000 ROM
AddMemFetchMC68000B(-1, -1, NULL);
AddReadByteMC68000B(0x000000, 0x03FFFF, NULL, ROM+0x080000); // 68000 ROM
AddReadByteMC68000B(0x20C000, 0x20FFFF, NULL, RAM+0x040000); // SUB LOCAL RAM
AddReadByteMC68000B(0x210000, 0x21FFFF, NULL, RAM+0x000000); // COMMON RAM
AddReadByteMC68000B(0x800000, 0x80000F, NULL, RAM_INPUT); // INPUT
AddReadByteMC68000B(0x000000, 0xFFFFFF, BadReadByte, NULL); // <Bad Reads>
AddReadByteMC68000B(-1, -1, NULL, NULL);
AddReadWordMC68000B(0x000000, 0x03FFFF, NULL, ROM+0x080000); // 68000 ROM
AddReadWordMC68000B(0x20C000, 0x20FFFF, NULL, RAM+0x040000); // SUB LOCAL RAM
AddReadWordMC68000B(0x210000, 0x21FFFF, NULL, RAM+0x000000); // COMMON RAM
AddReadWordMC68000B(0x800000, 0x80000F, NULL, RAM_INPUT); // INPUT
AddReadWordMC68000B(0xC00000, 0xC00007, YM2610Read68k, NULL); // YM2610
AddReadWordMC68000B(0x000000, 0xFFFFFF, BadReadWord, NULL); // <Bad Reads>
AddReadWordMC68000B(-1, -1, NULL, NULL);
AddWriteByteMC68000B(0x20C000, 0x20FFFF, NULL, RAM+0x040000); // SUB LOCAL RAM
AddWriteByteMC68000B(0x210000, 0x21FFFF, NULL, RAM+0x000000); // COMMON RAM
AddWriteByteMC68000B(0x800000, 0x80000F, tc0220ioc_wb, NULL); // INPUT
AddWriteByteMC68000B(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000
//AddWriteByteMC68000B(0x000000, 0xFFFFFF, BadWriteByte, NULL); // <Bad Writes>
AddWriteByteMC68000B(-1, -1, NULL, NULL);
AddWriteWordMC68000B(0x20C000, 0x20FFFF, NULL, RAM+0x040000); // SUB LOCAL RAM
AddWriteWordMC68000B(0x210000, 0x21FFFF, NULL, RAM+0x000000); // COMMON RAM
AddWriteWordMC68000B(0xC00000, 0xC00007, YM2610Write68k, NULL); // YM2610
AddWriteWordMC68000B(0xC20000, 0xC20007, PanWrite, NULL); // PANNING
AddWriteWordMC68000B(0x800000, 0x80000F, tc0220ioc_ww, NULL); // INPUT
//AddWriteWordMC68000B(0x000000, 0xFFFFFF, BadWriteWord, NULL); // <Bad Writes>
AddWriteWordMC68000B(-1, -1, NULL, NULL);
AddInitMemoryMC68000B(); // Set Starscream mem pointers...
GameMouse=1;
}
void ClearSpaceGun(void)
{
#ifdef RAINE_DEBUG
//save_debug("RAM.bin",RAM,0x048000,1);
#endif
}
static int x1,x2,myy1,y2,x11,myy11;
void ExecuteSpaceGunFrame(void)
{
/*----------[Start of Player 1 Gun Input Emulation]------------*/
/* User selects mouse control on fake dipswitch - Default */
if ((RAM[0x44005] &0x20) && (RAM[0x44005] &0x10)){
if (RAM[0x44005] &0x4) //Slow
{set_mouse_range(0,0,319,239);
x11=319-mouse_x;
myy11=mouse_y;}
else //Fast
{set_mouse_range(0,0,159,119);
x11=319-(mouse_x*2);
myy11=(mouse_y*2);}
x1=(x11<<7)/320;
myy1=(myy11<<7)/240;
if(x1<0){x1=0;}
if(x1>127){x1=127;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -