20071114-1.c

来自「用于进行gcc测试」· C语言 代码 · 共 114 行

C
114
字号
/* PR tree-optimization/34046 *//* Origin: dcb <dcb314@hotmail.com> */typedef unsigned char bool8;typedef unsigned char uint8_t;typedef unsigned short int uint16_t;typedef unsigned int uint32_t;typedef uint8_t uint8;typedef uint16_t uint16;typedef uint32_t uint32;struct SIAPU{    uint8 *PC;    uint8 *RAM;    uint8 Bit;    uint32 Address;    uint8 *WaitAddress1;    uint8 *WaitAddress2;    uint8 _Carry;};struct SAPU{    bool8 ShowROM;    uint8 OutPorts [4];    uint8 ExtraRAM [64];    uint16 TimerTarget [3];};struct SAPU APU;struct SIAPU IAPU;void S9xSetAPUControl (uint8 byte);void S9xSetAPUDSP (uint8 byte);uint8 S9xGetAPUDSP ();uint8 S9xAPUGetByte (uint32 Address){  Address &= 0xffff;  if (Address <= 0xff && Address >= 0xf0)    {      if (Address >= 0xf4 && Address <= 0xf7)	{	  IAPU.WaitAddress2 = IAPU.WaitAddress1;	  IAPU.WaitAddress1 = IAPU.PC;	  return (IAPU.RAM [Address]);	}      else if (Address == 0xf3)	return (S9xGetAPUDSP ());      if (Address >= 0xfd)	{	  IAPU.WaitAddress2 = IAPU.WaitAddress1;	  IAPU.WaitAddress1 = IAPU.PC;	  uint8 t = IAPU.RAM [Address];	  IAPU.RAM [Address] = 0;	  return (t);	}      return (IAPU.RAM [Address]);    } else   return (IAPU.RAM [Address]);}void S9xAPUSetByte (uint8 byte, uint32 Address){  Address &= 0xffff;  if (Address <= 0xff && Address >= 0xf0)    {      if (Address == 0xf3)	S9xSetAPUDSP (byte);      else if (Address >= 0xf4 && Address <= 0xf7)	APU.OutPorts [Address - 0xf4] = byte;      else if (Address == 0xf1)	S9xSetAPUControl (byte);      else if (Address < 0xfd)	{	  IAPU.RAM [Address] = byte;	  if (Address >= 0xfa)	    {	      if (byte == 0)		APU.TimerTarget [Address - 0xfa] = 0x100;	      else		APU.TimerTarget [Address - 0xfa] = byte;	    }	}    }  else    {      if (Address < 0xffc0)	IAPU.RAM [Address] = byte;      else	{	  APU.ExtraRAM [Address - 0xffc0] = byte;	  if (!APU.ShowROM)	    IAPU.RAM [Address] = byte;	}    }}void ApuCA (){  IAPU.Address = *(uint16 *) (IAPU.PC + 1);  IAPU.Bit = (uint8)(IAPU.Address >> 13);  if ((IAPU._Carry))    S9xAPUSetByte (S9xAPUGetByte (IAPU.Address) | (1 << IAPU.Bit), IAPU.Address);  else    S9xAPUSetByte (S9xAPUGetByte (IAPU.Address) & ~(1 << IAPU.Bit), IAPU.Address);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?