mirror of
https://github.com/libretro/snes9x2005.git
synced 2025-02-26 03:26:33 +00:00
Un-inline a bunch of stuff.
With the MIPS instruction cache, this means that two consecutive SNES CPU instructions using e.g. the same addressing style or the same opcode have a chance that the second one will use the first one's code and that it will be cached.
This commit is contained in:
parent
286bfd5805
commit
e708c127fa
3
Makefile
3
Makefile
@ -63,7 +63,8 @@ OBJECTS = $(C_OBJECTS) $(CPP_OBJECTS)
|
||||
# - - - Compilation flags - - -
|
||||
CFLAGS := -mips32 -Os -mno-abicalls -fno-pic -fno-builtin \
|
||||
-fno-exceptions -fno-function-sections -mlong-calls \
|
||||
-fomit-frame-pointer -msoft-float -G 4
|
||||
-fomit-frame-pointer -msoft-float -G 4 \
|
||||
-fno-inline -fno-early-inlining
|
||||
|
||||
DEFS := -DSPC700_C -DEXECUTE_SUPERFX_PER_LINE -DSDD1_DECOMP \
|
||||
-DVAR_CYCLES -DCPU_SHUTDOWN -DSPC700_SHUTDOWN \
|
||||
|
@ -95,7 +95,7 @@ extern uint8 W4;
|
||||
extern uint8 APUROM[64];
|
||||
END_EXTERN_C
|
||||
|
||||
INLINE uint8 S9xAPUGetByteZ (uint8 Address)
|
||||
uint8 S9xAPUGetByteZ (uint8 Address)
|
||||
{
|
||||
if (Address >= 0xf0 && IAPU.DirectPage == IAPU.RAM)
|
||||
{
|
||||
@ -127,7 +127,7 @@ INLINE uint8 S9xAPUGetByteZ (uint8 Address)
|
||||
return (IAPU.DirectPage [Address]);
|
||||
}
|
||||
|
||||
INLINE void S9xAPUSetByteZ (uint8 byte, uint8 Address)
|
||||
void S9xAPUSetByteZ (uint8 byte, uint8 Address)
|
||||
{
|
||||
if (Address >= 0xf0 && IAPU.DirectPage == IAPU.RAM)
|
||||
{
|
||||
@ -156,7 +156,7 @@ INLINE void S9xAPUSetByteZ (uint8 byte, uint8 Address)
|
||||
IAPU.DirectPage [Address] = byte;
|
||||
}
|
||||
|
||||
INLINE uint8 S9xAPUGetByte (uint32 Address)
|
||||
uint8 S9xAPUGetByte (uint32 Address)
|
||||
{
|
||||
Address &= 0xffff;
|
||||
|
||||
@ -189,7 +189,7 @@ INLINE uint8 S9xAPUGetByte (uint32 Address)
|
||||
return (IAPU.RAM [Address]);
|
||||
}
|
||||
|
||||
INLINE void S9xAPUSetByte (uint8 byte, uint32 Address)
|
||||
void S9xAPUSetByte (uint8 byte, uint32 Address)
|
||||
{
|
||||
Address &= 0xffff;
|
||||
|
||||
|
@ -100,19 +100,19 @@ typedef enum {
|
||||
JUMP = 4
|
||||
} AccessMode;
|
||||
|
||||
STATIC inline void Immediate8 (AccessMode a)
|
||||
void Immediate8 (AccessMode a)
|
||||
{
|
||||
OpAddress = ICPU.ShiftedPB + CPU.PC - CPU.PCBase;
|
||||
CPU.PC++;
|
||||
}
|
||||
|
||||
STATIC inline void Immediate16 (AccessMode a)
|
||||
void Immediate16 (AccessMode a)
|
||||
{
|
||||
OpAddress = ICPU.ShiftedPB + CPU.PC - CPU.PCBase;
|
||||
CPU.PC += 2;
|
||||
}
|
||||
|
||||
STATIC inline void Relative (AccessMode a)
|
||||
void Relative (AccessMode a)
|
||||
{
|
||||
Int8 = *CPU.PC++;
|
||||
#ifndef SA1_OPCODES
|
||||
@ -121,7 +121,7 @@ STATIC inline void Relative (AccessMode a)
|
||||
OpAddress = ((int) (CPU.PC - CPU.PCBase) + Int8) & 0xffff;
|
||||
}
|
||||
|
||||
STATIC inline void RelativeLong (AccessMode a)
|
||||
void RelativeLong (AccessMode a)
|
||||
{
|
||||
#ifdef FAST_LSB_WORD_ACCESS
|
||||
OpAddress = *(uint16 *) CPU.PC;
|
||||
@ -136,7 +136,7 @@ STATIC inline void RelativeLong (AccessMode a)
|
||||
OpAddress &= 0xffff;
|
||||
}
|
||||
|
||||
STATIC inline void AbsoluteIndexedIndirect (AccessMode a)
|
||||
void AbsoluteIndexedIndirect (AccessMode a)
|
||||
{
|
||||
#ifdef FAST_LSB_WORD_ACCESS
|
||||
OpAddress = (Registers.X.W + *(uint16 *) CPU.PC) & 0xffff;
|
||||
@ -152,7 +152,7 @@ STATIC inline void AbsoluteIndexedIndirect (AccessMode a)
|
||||
if(a&READ) OpenBus = (uint8)(OpAddress>>8);
|
||||
}
|
||||
|
||||
STATIC inline void AbsoluteIndirectLong (AccessMode a)
|
||||
void AbsoluteIndirectLong (AccessMode a)
|
||||
{
|
||||
#ifdef FAST_LSB_WORD_ACCESS
|
||||
OpAddress = *(uint16 *) CPU.PC;
|
||||
@ -172,7 +172,7 @@ STATIC inline void AbsoluteIndirectLong (AccessMode a)
|
||||
}
|
||||
}
|
||||
|
||||
STATIC inline void AbsoluteIndirect (AccessMode a)
|
||||
void AbsoluteIndirect (AccessMode a)
|
||||
{
|
||||
#ifdef FAST_LSB_WORD_ACCESS
|
||||
OpAddress = *(uint16 *) CPU.PC;
|
||||
@ -190,7 +190,7 @@ STATIC inline void AbsoluteIndirect (AccessMode a)
|
||||
OpAddress += ICPU.ShiftedPB;
|
||||
}
|
||||
|
||||
STATIC inline void Absolute (AccessMode a)
|
||||
void Absolute (AccessMode a)
|
||||
{
|
||||
#ifdef FAST_LSB_WORD_ACCESS
|
||||
OpAddress = *(uint16 *) CPU.PC + ICPU.ShiftedDB;
|
||||
@ -204,7 +204,7 @@ STATIC inline void Absolute (AccessMode a)
|
||||
#endif
|
||||
}
|
||||
|
||||
STATIC inline void AbsoluteLong (AccessMode a)
|
||||
void AbsoluteLong (AccessMode a)
|
||||
{
|
||||
#ifdef FAST_LSB_WORD_ACCESS
|
||||
OpAddress = (*(uint32 *) CPU.PC) & 0xffffff;
|
||||
@ -218,7 +218,7 @@ STATIC inline void AbsoluteLong (AccessMode a)
|
||||
#endif
|
||||
}
|
||||
|
||||
STATIC inline void Direct(AccessMode a)
|
||||
void Direct(AccessMode a)
|
||||
{
|
||||
if(a&READ) OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.D.W) & 0xffff;
|
||||
@ -228,7 +228,7 @@ STATIC inline void Direct(AccessMode a)
|
||||
// if (Registers.DL != 0) CPU.Cycles += ONE_CYCLE;
|
||||
}
|
||||
|
||||
STATIC inline void DirectIndirectIndexed (AccessMode a)
|
||||
void DirectIndirectIndexed (AccessMode a)
|
||||
{
|
||||
OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.D.W) & 0xffff;
|
||||
@ -245,7 +245,7 @@ STATIC inline void DirectIndirectIndexed (AccessMode a)
|
||||
// XXX: else Add one cycle if crosses page boundary
|
||||
}
|
||||
|
||||
STATIC inline void DirectIndirectIndexedLong (AccessMode a)
|
||||
void DirectIndirectIndexedLong (AccessMode a)
|
||||
{
|
||||
OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.D.W) & 0xffff;
|
||||
@ -261,7 +261,7 @@ STATIC inline void DirectIndirectIndexedLong (AccessMode a)
|
||||
// if (Registers.DL != 0) CPU.Cycles += ONE_CYCLE;
|
||||
}
|
||||
|
||||
STATIC inline void DirectIndexedIndirect(AccessMode a)
|
||||
void DirectIndexedIndirect(AccessMode a)
|
||||
{
|
||||
OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.D.W + Registers.X.W) & 0xffff;
|
||||
@ -281,7 +281,7 @@ STATIC inline void DirectIndexedIndirect(AccessMode a)
|
||||
#endif
|
||||
}
|
||||
|
||||
STATIC inline void DirectIndexedX (AccessMode a)
|
||||
void DirectIndexedX (AccessMode a)
|
||||
{
|
||||
if(a&READ) OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.D.W + Registers.X.W);
|
||||
@ -299,7 +299,7 @@ STATIC inline void DirectIndexedX (AccessMode a)
|
||||
#endif
|
||||
}
|
||||
|
||||
STATIC inline void DirectIndexedY (AccessMode a)
|
||||
void DirectIndexedY (AccessMode a)
|
||||
{
|
||||
if(a&READ) OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.D.W + Registers.Y.W);
|
||||
@ -316,7 +316,7 @@ STATIC inline void DirectIndexedY (AccessMode a)
|
||||
#endif
|
||||
}
|
||||
|
||||
STATIC inline void AbsoluteIndexedX (AccessMode a)
|
||||
void AbsoluteIndexedX (AccessMode a)
|
||||
{
|
||||
#ifdef FAST_LSB_WORD_ACCESS
|
||||
OpAddress = ICPU.ShiftedDB + *(uint16 *) CPU.PC + Registers.X.W;
|
||||
@ -333,7 +333,7 @@ STATIC inline void AbsoluteIndexedX (AccessMode a)
|
||||
// XXX: else is cross page boundary add one cycle
|
||||
}
|
||||
|
||||
STATIC inline void AbsoluteIndexedY (AccessMode a)
|
||||
void AbsoluteIndexedY (AccessMode a)
|
||||
{
|
||||
#ifdef FAST_LSB_WORD_ACCESS
|
||||
OpAddress = ICPU.ShiftedDB + *(uint16 *) CPU.PC + Registers.Y.W;
|
||||
@ -350,7 +350,7 @@ STATIC inline void AbsoluteIndexedY (AccessMode a)
|
||||
// XXX: else is cross page boundary add one cycle
|
||||
}
|
||||
|
||||
STATIC inline void AbsoluteLongIndexedX (AccessMode a)
|
||||
void AbsoluteLongIndexedX (AccessMode a)
|
||||
{
|
||||
#ifdef FAST_LSB_WORD_ACCESS
|
||||
OpAddress = (*(uint32 *) CPU.PC + Registers.X.W) & 0xffffff;
|
||||
@ -364,7 +364,7 @@ STATIC inline void AbsoluteLongIndexedX (AccessMode a)
|
||||
#endif
|
||||
}
|
||||
|
||||
STATIC inline void DirectIndirect (AccessMode a)
|
||||
void DirectIndirect (AccessMode a)
|
||||
{
|
||||
OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.D.W) & 0xffff;
|
||||
@ -378,7 +378,7 @@ STATIC inline void DirectIndirect (AccessMode a)
|
||||
// if (Registers.DL != 0) CPU.Cycles += ONE_CYCLE;
|
||||
}
|
||||
|
||||
STATIC inline void DirectIndirectLong (AccessMode a)
|
||||
void DirectIndirectLong (AccessMode a)
|
||||
{
|
||||
OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.D.W) & 0xffff;
|
||||
@ -393,7 +393,7 @@ STATIC inline void DirectIndirectLong (AccessMode a)
|
||||
// if (Registers.DL != 0) CPU.Cycles += ONE_CYCLE;
|
||||
}
|
||||
|
||||
STATIC inline void StackRelative (AccessMode a)
|
||||
void StackRelative (AccessMode a)
|
||||
{
|
||||
if(a&READ) OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.S.W) & 0xffff;
|
||||
@ -403,7 +403,7 @@ STATIC inline void StackRelative (AccessMode a)
|
||||
#endif
|
||||
}
|
||||
|
||||
STATIC inline void StackRelativeIndirectIndexed (AccessMode a)
|
||||
void StackRelativeIndirectIndexed (AccessMode a)
|
||||
{
|
||||
OpenBus = *CPU.PC;
|
||||
OpAddress = (*CPU.PC++ + Registers.S.W) & 0xffff;
|
||||
|
@ -90,19 +90,19 @@
|
||||
#ifndef _CPUMACRO_H_
|
||||
#define _CPUMACRO_H_
|
||||
|
||||
STATIC inline void SetZN16 (uint16 Work)
|
||||
void SetZN16 (uint16 Work)
|
||||
{
|
||||
ICPU._Zero = Work != 0;
|
||||
ICPU._Negative = (uint8) (Work >> 8);
|
||||
}
|
||||
|
||||
STATIC inline void SetZN8 (uint8 Work)
|
||||
void SetZN8 (uint8 Work)
|
||||
{
|
||||
ICPU._Zero = Work;
|
||||
ICPU._Negative = Work;
|
||||
}
|
||||
|
||||
STATIC inline void ADC8 ()
|
||||
void ADC8 ()
|
||||
{
|
||||
Work8 = S9xGetByte (OpAddress);
|
||||
|
||||
@ -159,7 +159,7 @@ STATIC inline void ADC8 ()
|
||||
}
|
||||
}
|
||||
|
||||
STATIC inline void ADC16 ()
|
||||
void ADC16 ()
|
||||
{
|
||||
Work16 = S9xGetWord (OpAddress);
|
||||
|
||||
@ -235,19 +235,19 @@ STATIC inline void ADC16 ()
|
||||
}
|
||||
}
|
||||
|
||||
STATIC inline void AND16 ()
|
||||
void AND16 ()
|
||||
{
|
||||
Registers.A.W &= S9xGetWord (OpAddress);
|
||||
SetZN16 (Registers.A.W);
|
||||
}
|
||||
|
||||
STATIC inline void AND8 ()
|
||||
void AND8 ()
|
||||
{
|
||||
Registers.AL &= S9xGetByte (OpAddress);
|
||||
SetZN8 (Registers.AL);
|
||||
}
|
||||
|
||||
STATIC inline void A_ASL16 ()
|
||||
void A_ASL16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -257,7 +257,7 @@ STATIC inline void A_ASL16 ()
|
||||
SetZN16 (Registers.A.W);
|
||||
}
|
||||
|
||||
STATIC inline void A_ASL8 ()
|
||||
void A_ASL8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -267,7 +267,7 @@ STATIC inline void A_ASL8 ()
|
||||
SetZN8 (Registers.AL);
|
||||
}
|
||||
|
||||
STATIC inline void ASL16 ()
|
||||
void ASL16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -281,7 +281,7 @@ STATIC inline void ASL16 ()
|
||||
SetZN16 (Work16);
|
||||
}
|
||||
|
||||
STATIC inline void ASL8 ()
|
||||
void ASL8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -293,7 +293,7 @@ STATIC inline void ASL8 ()
|
||||
SetZN8 (Work8);
|
||||
}
|
||||
|
||||
STATIC inline void BIT16 ()
|
||||
void BIT16 ()
|
||||
{
|
||||
Work16 = S9xGetWord (OpAddress);
|
||||
ICPU._Overflow = (Work16 & 0x4000) != 0;
|
||||
@ -301,7 +301,7 @@ STATIC inline void BIT16 ()
|
||||
ICPU._Zero = (Work16 & Registers.A.W) != 0;
|
||||
}
|
||||
|
||||
STATIC inline void BIT8 ()
|
||||
void BIT8 ()
|
||||
{
|
||||
Work8 = S9xGetByte (OpAddress);
|
||||
ICPU._Overflow = (Work8 & 0x40) != 0;
|
||||
@ -309,7 +309,7 @@ STATIC inline void BIT8 ()
|
||||
ICPU._Zero = Work8 & Registers.AL;
|
||||
}
|
||||
|
||||
STATIC inline void CMP16 ()
|
||||
void CMP16 ()
|
||||
{
|
||||
Int32 = (long) Registers.A.W -
|
||||
(long) S9xGetWord (OpAddress);
|
||||
@ -317,7 +317,7 @@ STATIC inline void CMP16 ()
|
||||
SetZN16 ((uint16) Int32);
|
||||
}
|
||||
|
||||
STATIC inline void CMP8 ()
|
||||
void CMP8 ()
|
||||
{
|
||||
Int16 = (short) Registers.AL -
|
||||
(short) S9xGetByte (OpAddress);
|
||||
@ -325,7 +325,7 @@ STATIC inline void CMP8 ()
|
||||
SetZN8 ((uint8) Int16);
|
||||
}
|
||||
|
||||
STATIC inline void CMX16 ()
|
||||
void CMX16 ()
|
||||
{
|
||||
Int32 = (long) Registers.X.W -
|
||||
(long) S9xGetWord (OpAddress);
|
||||
@ -333,7 +333,7 @@ STATIC inline void CMX16 ()
|
||||
SetZN16 ((uint16) Int32);
|
||||
}
|
||||
|
||||
STATIC inline void CMX8 ()
|
||||
void CMX8 ()
|
||||
{
|
||||
Int16 = (short) Registers.XL -
|
||||
(short) S9xGetByte (OpAddress);
|
||||
@ -341,7 +341,7 @@ STATIC inline void CMX8 ()
|
||||
SetZN8 ((uint8) Int16);
|
||||
}
|
||||
|
||||
STATIC inline void CMY16 ()
|
||||
void CMY16 ()
|
||||
{
|
||||
Int32 = (long) Registers.Y.W -
|
||||
(long) S9xGetWord (OpAddress);
|
||||
@ -349,7 +349,7 @@ STATIC inline void CMY16 ()
|
||||
SetZN16 ((uint16) Int32);
|
||||
}
|
||||
|
||||
STATIC inline void CMY8 ()
|
||||
void CMY8 ()
|
||||
{
|
||||
Int16 = (short) Registers.YL -
|
||||
(short) S9xGetByte (OpAddress);
|
||||
@ -357,7 +357,7 @@ STATIC inline void CMY8 ()
|
||||
SetZN8 ((uint8) Int16);
|
||||
}
|
||||
|
||||
STATIC inline void A_DEC16 ()
|
||||
void A_DEC16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -370,7 +370,7 @@ STATIC inline void A_DEC16 ()
|
||||
SetZN16 (Registers.A.W);
|
||||
}
|
||||
|
||||
STATIC inline void A_DEC8 ()
|
||||
void A_DEC8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -383,7 +383,7 @@ STATIC inline void A_DEC8 ()
|
||||
SetZN8 (Registers.AL);
|
||||
}
|
||||
|
||||
STATIC inline void DEC16 ()
|
||||
void DEC16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -399,7 +399,7 @@ STATIC inline void DEC16 ()
|
||||
SetZN16 (Work16);
|
||||
}
|
||||
|
||||
STATIC inline void DEC8 ()
|
||||
void DEC8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -413,19 +413,19 @@ STATIC inline void DEC8 ()
|
||||
SetZN8 (Work8);
|
||||
}
|
||||
|
||||
STATIC inline void EOR16 ()
|
||||
void EOR16 ()
|
||||
{
|
||||
Registers.A.W ^= S9xGetWord (OpAddress);
|
||||
SetZN16 (Registers.A.W);
|
||||
}
|
||||
|
||||
STATIC inline void EOR8 ()
|
||||
void EOR8 ()
|
||||
{
|
||||
Registers.AL ^= S9xGetByte (OpAddress);
|
||||
SetZN8 (Registers.AL);
|
||||
}
|
||||
|
||||
STATIC inline void A_INC16 ()
|
||||
void A_INC16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -438,7 +438,7 @@ STATIC inline void A_INC16 ()
|
||||
SetZN16 (Registers.A.W);
|
||||
}
|
||||
|
||||
STATIC inline void A_INC8 ()
|
||||
void A_INC8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -451,7 +451,7 @@ STATIC inline void A_INC8 ()
|
||||
SetZN8 (Registers.AL);
|
||||
}
|
||||
|
||||
STATIC inline void INC16 ()
|
||||
void INC16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -467,7 +467,7 @@ STATIC inline void INC16 ()
|
||||
SetZN16 (Work16);
|
||||
}
|
||||
|
||||
STATIC inline void INC8 ()
|
||||
void INC8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -481,43 +481,43 @@ STATIC inline void INC8 ()
|
||||
SetZN8 (Work8);
|
||||
}
|
||||
|
||||
STATIC inline void LDA16 ()
|
||||
void LDA16 ()
|
||||
{
|
||||
Registers.A.W = S9xGetWord (OpAddress);
|
||||
SetZN16 (Registers.A.W);
|
||||
}
|
||||
|
||||
STATIC inline void LDA8 ()
|
||||
void LDA8 ()
|
||||
{
|
||||
Registers.AL = S9xGetByte (OpAddress);
|
||||
SetZN8 (Registers.AL);
|
||||
}
|
||||
|
||||
STATIC inline void LDX16 ()
|
||||
void LDX16 ()
|
||||
{
|
||||
Registers.X.W = S9xGetWord (OpAddress);
|
||||
SetZN16 (Registers.X.W);
|
||||
}
|
||||
|
||||
STATIC inline void LDX8 ()
|
||||
void LDX8 ()
|
||||
{
|
||||
Registers.XL = S9xGetByte (OpAddress);
|
||||
SetZN8 (Registers.XL);
|
||||
}
|
||||
|
||||
STATIC inline void LDY16 ()
|
||||
void LDY16 ()
|
||||
{
|
||||
Registers.Y.W = S9xGetWord (OpAddress);
|
||||
SetZN16 (Registers.Y.W);
|
||||
}
|
||||
|
||||
STATIC inline void LDY8 ()
|
||||
void LDY8 ()
|
||||
{
|
||||
Registers.YL = S9xGetByte (OpAddress);
|
||||
SetZN8 (Registers.YL);
|
||||
}
|
||||
|
||||
STATIC inline void A_LSR16 ()
|
||||
void A_LSR16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -527,7 +527,7 @@ STATIC inline void A_LSR16 ()
|
||||
SetZN16 (Registers.A.W);
|
||||
}
|
||||
|
||||
STATIC inline void A_LSR8 ()
|
||||
void A_LSR8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -537,7 +537,7 @@ STATIC inline void A_LSR8 ()
|
||||
SetZN8 (Registers.AL);
|
||||
}
|
||||
|
||||
STATIC inline void LSR16 ()
|
||||
void LSR16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -551,7 +551,7 @@ STATIC inline void LSR16 ()
|
||||
SetZN16 (Work16);
|
||||
}
|
||||
|
||||
STATIC inline void LSR8 ()
|
||||
void LSR8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -563,19 +563,19 @@ STATIC inline void LSR8 ()
|
||||
SetZN8 (Work8);
|
||||
}
|
||||
|
||||
STATIC inline void ORA16 ()
|
||||
void ORA16 ()
|
||||
{
|
||||
Registers.A.W |= S9xGetWord (OpAddress);
|
||||
SetZN16 (Registers.A.W);
|
||||
}
|
||||
|
||||
STATIC inline void ORA8 ()
|
||||
void ORA8 ()
|
||||
{
|
||||
Registers.AL |= S9xGetByte (OpAddress);
|
||||
SetZN8 (Registers.AL);
|
||||
}
|
||||
|
||||
STATIC inline void A_ROL16 ()
|
||||
void A_ROL16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -586,7 +586,7 @@ STATIC inline void A_ROL16 ()
|
||||
SetZN16 ((uint16) Work32);
|
||||
}
|
||||
|
||||
STATIC inline void A_ROL8 ()
|
||||
void A_ROL8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -599,7 +599,7 @@ STATIC inline void A_ROL8 ()
|
||||
SetZN8 ((uint8) Work16);
|
||||
}
|
||||
|
||||
STATIC inline void ROL16 ()
|
||||
void ROL16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -614,7 +614,7 @@ STATIC inline void ROL16 ()
|
||||
SetZN16 ((uint16) Work32);
|
||||
}
|
||||
|
||||
STATIC inline void ROL8 ()
|
||||
void ROL8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -627,7 +627,7 @@ STATIC inline void ROL8 ()
|
||||
SetZN8 ((uint8) Work16);
|
||||
}
|
||||
|
||||
STATIC inline void A_ROR16 ()
|
||||
void A_ROR16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -640,7 +640,7 @@ STATIC inline void A_ROR16 ()
|
||||
SetZN16 ((uint16) Work32);
|
||||
}
|
||||
|
||||
STATIC inline void A_ROR8 ()
|
||||
void A_ROR8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -652,7 +652,7 @@ STATIC inline void A_ROR8 ()
|
||||
SetZN8 ((uint8) Work16);
|
||||
}
|
||||
|
||||
STATIC inline void ROR16 ()
|
||||
void ROR16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -667,7 +667,7 @@ STATIC inline void ROR16 ()
|
||||
SetZN16 ((uint16) Work32);
|
||||
}
|
||||
|
||||
STATIC inline void ROR8 ()
|
||||
void ROR8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -680,7 +680,7 @@ STATIC inline void ROR8 ()
|
||||
SetZN8 ((uint8) Work16);
|
||||
}
|
||||
|
||||
STATIC inline void SBC16 ()
|
||||
void SBC16 ()
|
||||
{
|
||||
Work16 = S9xGetWord (OpAddress);
|
||||
|
||||
@ -750,7 +750,7 @@ STATIC inline void SBC16 ()
|
||||
}
|
||||
}
|
||||
|
||||
STATIC inline void SBC8 ()
|
||||
void SBC8 ()
|
||||
{
|
||||
Work8 = S9xGetByte (OpAddress);
|
||||
if (CheckDecimal ())
|
||||
@ -801,47 +801,47 @@ STATIC inline void SBC8 ()
|
||||
}
|
||||
}
|
||||
|
||||
STATIC inline void STA16 ()
|
||||
void STA16 ()
|
||||
{
|
||||
S9xSetWord (Registers.A.W, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void STA8 ()
|
||||
void STA8 ()
|
||||
{
|
||||
S9xSetByte (Registers.AL, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void STX16 ()
|
||||
void STX16 ()
|
||||
{
|
||||
S9xSetWord (Registers.X.W, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void STX8 ()
|
||||
void STX8 ()
|
||||
{
|
||||
S9xSetByte (Registers.XL, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void STY16 ()
|
||||
void STY16 ()
|
||||
{
|
||||
S9xSetWord (Registers.Y.W, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void STY8 ()
|
||||
void STY8 ()
|
||||
{
|
||||
S9xSetByte (Registers.YL, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void STZ16 ()
|
||||
void STZ16 ()
|
||||
{
|
||||
S9xSetWord (0, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void STZ8 ()
|
||||
void STZ8 ()
|
||||
{
|
||||
S9xSetByte (0, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void TSB16 ()
|
||||
void TSB16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -854,7 +854,7 @@ STATIC inline void TSB16 ()
|
||||
S9xSetByte (Work16&0xFF, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void TSB8 ()
|
||||
void TSB8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -865,7 +865,7 @@ STATIC inline void TSB8 ()
|
||||
S9xSetByte (Work8, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void TRB16 ()
|
||||
void TRB16 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
@ -878,7 +878,7 @@ STATIC inline void TRB16 ()
|
||||
S9xSetByte (Work16&0xFF, OpAddress);
|
||||
}
|
||||
|
||||
STATIC inline void TRB8 ()
|
||||
void TRB8 ()
|
||||
{
|
||||
#ifndef SA1_OPCODES
|
||||
CPU.Cycles += ONE_CYCLE;
|
||||
|
@ -103,7 +103,7 @@ extern "C"
|
||||
extern uint8 OpenBus;
|
||||
}
|
||||
|
||||
INLINE uint8 S9xGetByte (uint32 Address)
|
||||
uint8 S9xGetByte (uint32 Address)
|
||||
{
|
||||
int block;
|
||||
uint8 *GetAddress = Memory.Map [block = (Address >> MEMMAP_SHIFT) & MEMMAP_MASK];
|
||||
@ -197,7 +197,7 @@ INLINE uint8 S9xGetByte (uint32 Address)
|
||||
}
|
||||
}
|
||||
|
||||
INLINE uint16 S9xGetWord (uint32 Address)
|
||||
uint16 S9xGetWord (uint32 Address)
|
||||
{
|
||||
if ((Address & 0x0fff) == 0x0fff)
|
||||
{
|
||||
@ -320,7 +320,7 @@ INLINE uint16 S9xGetWord (uint32 Address)
|
||||
}
|
||||
}
|
||||
|
||||
INLINE void S9xSetByte (uint8 Byte, uint32 Address)
|
||||
void S9xSetByte (uint8 Byte, uint32 Address)
|
||||
{
|
||||
#if defined(CPU_SHUTDOWN)
|
||||
CPU.WaitAddress = NULL;
|
||||
@ -436,7 +436,7 @@ INLINE void S9xSetByte (uint8 Byte, uint32 Address)
|
||||
}
|
||||
}
|
||||
|
||||
INLINE void S9xSetWord (uint16 Word, uint32 Address)
|
||||
void S9xSetWord (uint16 Word, uint32 Address)
|
||||
{
|
||||
if((Address & 0x0FFF)==0x0FFF)
|
||||
{
|
||||
@ -594,7 +594,7 @@ INLINE void S9xSetWord (uint16 Word, uint32 Address)
|
||||
}
|
||||
}
|
||||
|
||||
INLINE uint8 *GetBasePointer (uint32 Address)
|
||||
uint8 *GetBasePointer (uint32 Address)
|
||||
{
|
||||
uint8 *GetAddress = Memory.Map [(Address >> MEMMAP_SHIFT) & MEMMAP_MASK];
|
||||
if (GetAddress >= (uint8 *) CMemory::MAP_LAST)
|
||||
@ -660,7 +660,7 @@ INLINE uint8 *GetBasePointer (uint32 Address)
|
||||
}
|
||||
}
|
||||
|
||||
INLINE uint8 *S9xGetMemPointer (uint32 Address)
|
||||
uint8 *S9xGetMemPointer (uint32 Address)
|
||||
{
|
||||
uint8 *GetAddress = Memory.Map [(Address >> MEMMAP_SHIFT) & MEMMAP_MASK];
|
||||
if (GetAddress >= (uint8 *) CMemory::MAP_LAST)
|
||||
@ -714,7 +714,7 @@ INLINE uint8 *S9xGetMemPointer (uint32 Address)
|
||||
}
|
||||
}
|
||||
|
||||
INLINE void S9xSetPCBase (uint32 Address)
|
||||
void S9xSetPCBase (uint32 Address)
|
||||
{
|
||||
int block;
|
||||
uint8 *GetAddress = Memory.Map [block = (Address >> MEMMAP_SHIFT) & MEMMAP_MASK];
|
||||
|
@ -146,7 +146,7 @@ int is_bsx(unsigned char *);
|
||||
int bs_name(unsigned char *);
|
||||
int check_char(unsigned);
|
||||
void S9xDeinterleaveType2 (bool8 reset=TRUE);
|
||||
inline uint32 caCRC32(uint8 *array, uint32 size, register uint32 crc32 = 0xFFFFFFFF);
|
||||
uint32 caCRC32(uint8 *array, uint32 size, register uint32 crc32 = 0xFFFFFFFF);
|
||||
|
||||
extern char *rom_filename;
|
||||
|
||||
@ -395,10 +395,11 @@ char *CMemory::Safe (const char *s)
|
||||
|
||||
/**********************************************************************************************/
|
||||
/* Init() */
|
||||
/* This function allocates all the memory needed by the emulator */
|
||||
/* This function allocates and zeroes all the memory needed by the emulator */
|
||||
/**********************************************************************************************/
|
||||
bool8 CMemory::Init ()
|
||||
{
|
||||
// memset? Really? We could just memcpy after the first allocation... [Neb]
|
||||
RAM = (uint8 *) malloc (0x20000);
|
||||
SRAM = (uint8 *) malloc (0x20000);
|
||||
VRAM = (uint8 *) malloc (0x10000);
|
||||
@ -1213,7 +1214,7 @@ void S9xDeinterleaveType2 (bool8 reset)
|
||||
}
|
||||
|
||||
//CRC32 for char arrays
|
||||
inline uint32 caCRC32(uint8 *array, uint32 size, register uint32 crc32)
|
||||
uint32 caCRC32(uint8 *array, uint32 size, register uint32 crc32)
|
||||
{
|
||||
for (register uint32 i = 0; i < size; i++)
|
||||
{
|
||||
|
285
source/ppu.cpp
285
source/ppu.cpp
@ -117,7 +117,7 @@ uint8 in_bit=0;
|
||||
|
||||
extern uint8 *HDMAMemPointers [8];
|
||||
|
||||
static inline void S9xLatchCounters (bool force)
|
||||
void S9xLatchCounters (bool force)
|
||||
{
|
||||
if(!force && !(Memory.FillRAM[0x4213] & 0x80)) return;
|
||||
|
||||
@ -3297,3 +3297,286 @@ printf ("%06x: %d\n", t, FxEmulate (2000000));
|
||||
}
|
||||
#endif
|
||||
|
||||
// Register reads and writes...
|
||||
|
||||
uint8 REGISTER_4212()
|
||||
{
|
||||
GetBank = 0;
|
||||
if (CPU.V_Counter >= PPU.ScreenHeight + FIRST_VISIBLE_LINE &&
|
||||
CPU.V_Counter < PPU.ScreenHeight + FIRST_VISIBLE_LINE + 3)
|
||||
GetBank = 1;
|
||||
|
||||
GetBank |= CPU.Cycles >= Settings.HBlankStart ? 0x40 : 0;
|
||||
if (CPU.V_Counter >= PPU.ScreenHeight + FIRST_VISIBLE_LINE)
|
||||
GetBank |= 0x80; /* XXX: 0x80 or 0xc0 ? */
|
||||
|
||||
return (GetBank);
|
||||
}
|
||||
|
||||
void FLUSH_REDRAW ()
|
||||
{
|
||||
if (IPPU.PreviousLine != IPPU.CurrentLine)
|
||||
S9xUpdateScreen ();
|
||||
}
|
||||
|
||||
void REGISTER_2104 (uint8 byte)
|
||||
{
|
||||
if (PPU.OAMAddr & 0x100)
|
||||
{
|
||||
int addr = ((PPU.OAMAddr & 0x10f) << 1) + (PPU.OAMFlip & 1);
|
||||
if (byte != PPU.OAMData [addr]){
|
||||
FLUSH_REDRAW ();
|
||||
PPU.OAMData [addr] = byte;
|
||||
IPPU.OBJChanged = TRUE;
|
||||
|
||||
// X position high bit, and sprite size (x4)
|
||||
struct SOBJ *pObj = &PPU.OBJ [(addr & 0x1f) * 4];
|
||||
|
||||
pObj->HPos = (pObj->HPos & 0xFF) | SignExtend[(byte >> 0) & 1];
|
||||
pObj++->Size = byte & 2;
|
||||
pObj->HPos = (pObj->HPos & 0xFF) | SignExtend[(byte >> 2) & 1];
|
||||
pObj++->Size = byte & 8;
|
||||
pObj->HPos = (pObj->HPos & 0xFF) | SignExtend[(byte >> 4) & 1];
|
||||
pObj++->Size = byte & 32;
|
||||
pObj->HPos = (pObj->HPos & 0xFF) | SignExtend[(byte >> 6) & 1];
|
||||
pObj->Size = byte & 128;
|
||||
}
|
||||
PPU.OAMFlip ^= 1;
|
||||
if(!(PPU.OAMFlip & 1)){
|
||||
++PPU.OAMAddr;
|
||||
PPU.OAMAddr &= 0x1ff;
|
||||
if (PPU.OAMPriorityRotation && PPU.FirstSprite != (PPU.OAMAddr >> 1))
|
||||
{
|
||||
PPU.FirstSprite = (PPU.OAMAddr&0xFE) >> 1;
|
||||
IPPU.OBJChanged = TRUE;
|
||||
}
|
||||
} else {
|
||||
if (PPU.OAMPriorityRotation && (PPU.OAMAddr&1)) IPPU.OBJChanged = TRUE;
|
||||
}
|
||||
} else if(!(PPU.OAMFlip & 1)){
|
||||
PPU.OAMWriteRegister &= 0xff00;
|
||||
PPU.OAMWriteRegister |= byte;
|
||||
PPU.OAMFlip |= 1;
|
||||
if (PPU.OAMPriorityRotation && (PPU.OAMAddr&1)) IPPU.OBJChanged = TRUE;
|
||||
} else {
|
||||
PPU.OAMWriteRegister &= 0x00ff;
|
||||
uint8 lowbyte = (uint8)(PPU.OAMWriteRegister);
|
||||
uint8 highbyte = byte;
|
||||
PPU.OAMWriteRegister |= byte << 8;
|
||||
|
||||
int addr = (PPU.OAMAddr << 1);
|
||||
|
||||
if (lowbyte != PPU.OAMData [addr] ||
|
||||
highbyte != PPU.OAMData [addr+1])
|
||||
{
|
||||
FLUSH_REDRAW ();
|
||||
PPU.OAMData [addr] = lowbyte;
|
||||
PPU.OAMData [addr+1] = highbyte;
|
||||
IPPU.OBJChanged = TRUE;
|
||||
if (addr & 2)
|
||||
{
|
||||
// Tile
|
||||
PPU.OBJ[addr = PPU.OAMAddr >> 1].Name = PPU.OAMWriteRegister & 0x1ff;
|
||||
|
||||
// priority, h and v flip.
|
||||
PPU.OBJ[addr].Palette = (highbyte >> 1) & 7;
|
||||
PPU.OBJ[addr].Priority = (highbyte >> 4) & 3;
|
||||
PPU.OBJ[addr].HFlip = (highbyte >> 6) & 1;
|
||||
PPU.OBJ[addr].VFlip = (highbyte >> 7) & 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// X position (low)
|
||||
PPU.OBJ[addr = PPU.OAMAddr >> 1].HPos &= 0xFF00;
|
||||
PPU.OBJ[addr].HPos |= lowbyte;
|
||||
|
||||
// Sprite Y position
|
||||
PPU.OBJ[addr].VPos = highbyte;
|
||||
}
|
||||
}
|
||||
PPU.OAMFlip &= ~1;
|
||||
++PPU.OAMAddr;
|
||||
if (PPU.OAMPriorityRotation && PPU.FirstSprite != (PPU.OAMAddr >> 1))
|
||||
{
|
||||
PPU.FirstSprite = (PPU.OAMAddr&0xFE) >> 1;
|
||||
IPPU.OBJChanged = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
Memory.FillRAM [0x2104] = byte;
|
||||
}
|
||||
|
||||
void REGISTER_2118 (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
if (PPU.VMA.FullGraphicCount)
|
||||
{
|
||||
uint32 rem = PPU.VMA.Address & PPU.VMA.Mask1;
|
||||
address = (((PPU.VMA.Address & ~PPU.VMA.Mask1) +
|
||||
(rem >> PPU.VMA.Shift) +
|
||||
((rem & (PPU.VMA.FullGraphicCount - 1)) << 3)) << 1) & 0xffff;
|
||||
Memory.VRAM [address] = Byte;
|
||||
}
|
||||
else
|
||||
{
|
||||
Memory.VRAM[address = (PPU.VMA.Address << 1) & 0xFFFF] = Byte;
|
||||
}
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (!PPU.VMA.High)
|
||||
{
|
||||
#ifdef DEBUGGER
|
||||
if (Settings.TraceVRAM && !CPU.InDMA)
|
||||
{
|
||||
printf ("VRAM write byte: $%04X (%d,%d)\n", PPU.VMA.Address,
|
||||
Memory.FillRAM[0x2115] & 3,
|
||||
(Memory.FillRAM [0x2115] & 0x0c) >> 2);
|
||||
}
|
||||
#endif
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
}
|
||||
// Memory.FillRAM [0x2118] = Byte;
|
||||
}
|
||||
|
||||
void REGISTER_2118_tile (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
uint32 rem = PPU.VMA.Address & PPU.VMA.Mask1;
|
||||
address = (((PPU.VMA.Address & ~PPU.VMA.Mask1) +
|
||||
(rem >> PPU.VMA.Shift) +
|
||||
((rem & (PPU.VMA.FullGraphicCount - 1)) << 3)) << 1) & 0xffff;
|
||||
Memory.VRAM [address] = Byte;
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (!PPU.VMA.High)
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
// Memory.FillRAM [0x2118] = Byte;
|
||||
}
|
||||
|
||||
void REGISTER_2118_linear (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
Memory.VRAM[address = (PPU.VMA.Address << 1) & 0xFFFF] = Byte;
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (!PPU.VMA.High)
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
// Memory.FillRAM [0x2118] = Byte;
|
||||
}
|
||||
|
||||
void REGISTER_2119 (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
if (PPU.VMA.FullGraphicCount)
|
||||
{
|
||||
uint32 rem = PPU.VMA.Address & PPU.VMA.Mask1;
|
||||
address = ((((PPU.VMA.Address & ~PPU.VMA.Mask1) +
|
||||
(rem >> PPU.VMA.Shift) +
|
||||
((rem & (PPU.VMA.FullGraphicCount - 1)) << 3)) << 1) + 1) & 0xFFFF;
|
||||
Memory.VRAM [address] = Byte;
|
||||
}
|
||||
else
|
||||
{
|
||||
Memory.VRAM[address = ((PPU.VMA.Address << 1) + 1) & 0xFFFF] = Byte;
|
||||
}
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (PPU.VMA.High)
|
||||
{
|
||||
#ifdef DEBUGGER
|
||||
if (Settings.TraceVRAM && !CPU.InDMA)
|
||||
{
|
||||
printf ("VRAM write word: $%04X (%d,%d)\n", PPU.VMA.Address,
|
||||
Memory.FillRAM[0x2115] & 3,
|
||||
(Memory.FillRAM [0x2115] & 0x0c) >> 2);
|
||||
}
|
||||
#endif
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
}
|
||||
// Memory.FillRAM [0x2119] = Byte;
|
||||
}
|
||||
|
||||
void REGISTER_2119_tile (uint8 Byte)
|
||||
{
|
||||
uint32 rem = PPU.VMA.Address & PPU.VMA.Mask1;
|
||||
uint32 address = ((((PPU.VMA.Address & ~PPU.VMA.Mask1) +
|
||||
(rem >> PPU.VMA.Shift) +
|
||||
((rem & (PPU.VMA.FullGraphicCount - 1)) << 3)) << 1) + 1) & 0xFFFF;
|
||||
Memory.VRAM [address] = Byte;
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (PPU.VMA.High)
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
// Memory.FillRAM [0x2119] = Byte;
|
||||
}
|
||||
|
||||
void REGISTER_2119_linear (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
Memory.VRAM[address = ((PPU.VMA.Address << 1) + 1) & 0xFFFF] = Byte;
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (PPU.VMA.High)
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
// Memory.FillRAM [0x2119] = Byte;
|
||||
}
|
||||
|
||||
void REGISTER_2122(uint8 Byte)
|
||||
{
|
||||
// CG-RAM (palette) write
|
||||
|
||||
if (PPU.CGFLIP)
|
||||
{
|
||||
if ((Byte & 0x7f) != (PPU.CGDATA[PPU.CGADD] >> 8))
|
||||
{
|
||||
if (Settings.SixteenBit)
|
||||
FLUSH_REDRAW ();
|
||||
PPU.CGDATA[PPU.CGADD] &= 0x00FF;
|
||||
PPU.CGDATA[PPU.CGADD] |= (Byte & 0x7f) << 8;
|
||||
IPPU.ColorsChanged = TRUE;
|
||||
if (Settings.SixteenBit)
|
||||
{
|
||||
IPPU.Blue [PPU.CGADD] = IPPU.XB [(Byte >> 2) & 0x1f];
|
||||
IPPU.Green [PPU.CGADD] = IPPU.XB [(PPU.CGDATA[PPU.CGADD] >> 5) & 0x1f];
|
||||
IPPU.ScreenColors [PPU.CGADD] = (uint16) BUILD_PIXEL (IPPU.Red [PPU.CGADD],
|
||||
IPPU.Green [PPU.CGADD],
|
||||
IPPU.Blue [PPU.CGADD]);
|
||||
}
|
||||
}
|
||||
PPU.CGADD++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Byte != (uint8) (PPU.CGDATA[PPU.CGADD] & 0xff))
|
||||
{
|
||||
if (Settings.SixteenBit)
|
||||
FLUSH_REDRAW ();
|
||||
PPU.CGDATA[PPU.CGADD] &= 0x7F00;
|
||||
PPU.CGDATA[PPU.CGADD] |= Byte;
|
||||
IPPU.ColorsChanged = TRUE;
|
||||
if (Settings.SixteenBit)
|
||||
{
|
||||
IPPU.Red [PPU.CGADD] = IPPU.XB [Byte & 0x1f];
|
||||
IPPU.Green [PPU.CGADD] = IPPU.XB [(PPU.CGDATA[PPU.CGADD] >> 5) & 0x1f];
|
||||
IPPU.ScreenColors [PPU.CGADD] = (uint16) BUILD_PIXEL (IPPU.Red [PPU.CGADD],
|
||||
IPPU.Green [PPU.CGADD],
|
||||
IPPU.Blue [PPU.CGADD]);
|
||||
}
|
||||
}
|
||||
}
|
||||
PPU.CGFLIP ^= 1;
|
||||
// Memory.FillRAM [0x2122] = Byte;
|
||||
}
|
||||
|
||||
void REGISTER_2180(uint8 Byte)
|
||||
{
|
||||
Memory.RAM[PPU.WRAM++] = Byte;
|
||||
PPU.WRAM &= 0x1FFFF;
|
||||
Memory.FillRAM [0x2180] = Byte;
|
||||
}
|
||||
|
293
source/ppu.h
293
source/ppu.h
@ -342,288 +342,17 @@ END_EXTERN_C
|
||||
#define MAX_5C78_VERSION 0x03
|
||||
#define MAX_5A22_VERSION 0x02
|
||||
|
||||
STATIC inline uint8 REGISTER_4212()
|
||||
{
|
||||
GetBank = 0;
|
||||
if (CPU.V_Counter >= PPU.ScreenHeight + FIRST_VISIBLE_LINE &&
|
||||
CPU.V_Counter < PPU.ScreenHeight + FIRST_VISIBLE_LINE + 3)
|
||||
GetBank = 1;
|
||||
|
||||
GetBank |= CPU.Cycles >= Settings.HBlankStart ? 0x40 : 0;
|
||||
if (CPU.V_Counter >= PPU.ScreenHeight + FIRST_VISIBLE_LINE)
|
||||
GetBank |= 0x80; /* XXX: 0x80 or 0xc0 ? */
|
||||
|
||||
return (GetBank);
|
||||
}
|
||||
|
||||
STATIC inline void FLUSH_REDRAW ()
|
||||
{
|
||||
if (IPPU.PreviousLine != IPPU.CurrentLine)
|
||||
S9xUpdateScreen ();
|
||||
}
|
||||
|
||||
STATIC inline void REGISTER_2104 (uint8 byte)
|
||||
{
|
||||
if (PPU.OAMAddr & 0x100)
|
||||
{
|
||||
int addr = ((PPU.OAMAddr & 0x10f) << 1) + (PPU.OAMFlip & 1);
|
||||
if (byte != PPU.OAMData [addr]){
|
||||
FLUSH_REDRAW ();
|
||||
PPU.OAMData [addr] = byte;
|
||||
IPPU.OBJChanged = TRUE;
|
||||
|
||||
// X position high bit, and sprite size (x4)
|
||||
struct SOBJ *pObj = &PPU.OBJ [(addr & 0x1f) * 4];
|
||||
|
||||
pObj->HPos = (pObj->HPos & 0xFF) | SignExtend[(byte >> 0) & 1];
|
||||
pObj++->Size = byte & 2;
|
||||
pObj->HPos = (pObj->HPos & 0xFF) | SignExtend[(byte >> 2) & 1];
|
||||
pObj++->Size = byte & 8;
|
||||
pObj->HPos = (pObj->HPos & 0xFF) | SignExtend[(byte >> 4) & 1];
|
||||
pObj++->Size = byte & 32;
|
||||
pObj->HPos = (pObj->HPos & 0xFF) | SignExtend[(byte >> 6) & 1];
|
||||
pObj->Size = byte & 128;
|
||||
}
|
||||
PPU.OAMFlip ^= 1;
|
||||
if(!(PPU.OAMFlip & 1)){
|
||||
++PPU.OAMAddr;
|
||||
PPU.OAMAddr &= 0x1ff;
|
||||
if (PPU.OAMPriorityRotation && PPU.FirstSprite != (PPU.OAMAddr >> 1))
|
||||
{
|
||||
PPU.FirstSprite = (PPU.OAMAddr&0xFE) >> 1;
|
||||
IPPU.OBJChanged = TRUE;
|
||||
}
|
||||
} else {
|
||||
if (PPU.OAMPriorityRotation && (PPU.OAMAddr&1)) IPPU.OBJChanged = TRUE;
|
||||
}
|
||||
} else if(!(PPU.OAMFlip & 1)){
|
||||
PPU.OAMWriteRegister &= 0xff00;
|
||||
PPU.OAMWriteRegister |= byte;
|
||||
PPU.OAMFlip |= 1;
|
||||
if (PPU.OAMPriorityRotation && (PPU.OAMAddr&1)) IPPU.OBJChanged = TRUE;
|
||||
} else {
|
||||
PPU.OAMWriteRegister &= 0x00ff;
|
||||
uint8 lowbyte = (uint8)(PPU.OAMWriteRegister);
|
||||
uint8 highbyte = byte;
|
||||
PPU.OAMWriteRegister |= byte << 8;
|
||||
|
||||
int addr = (PPU.OAMAddr << 1);
|
||||
|
||||
if (lowbyte != PPU.OAMData [addr] ||
|
||||
highbyte != PPU.OAMData [addr+1])
|
||||
{
|
||||
FLUSH_REDRAW ();
|
||||
PPU.OAMData [addr] = lowbyte;
|
||||
PPU.OAMData [addr+1] = highbyte;
|
||||
IPPU.OBJChanged = TRUE;
|
||||
if (addr & 2)
|
||||
{
|
||||
// Tile
|
||||
PPU.OBJ[addr = PPU.OAMAddr >> 1].Name = PPU.OAMWriteRegister & 0x1ff;
|
||||
|
||||
// priority, h and v flip.
|
||||
PPU.OBJ[addr].Palette = (highbyte >> 1) & 7;
|
||||
PPU.OBJ[addr].Priority = (highbyte >> 4) & 3;
|
||||
PPU.OBJ[addr].HFlip = (highbyte >> 6) & 1;
|
||||
PPU.OBJ[addr].VFlip = (highbyte >> 7) & 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// X position (low)
|
||||
PPU.OBJ[addr = PPU.OAMAddr >> 1].HPos &= 0xFF00;
|
||||
PPU.OBJ[addr].HPos |= lowbyte;
|
||||
|
||||
// Sprite Y position
|
||||
PPU.OBJ[addr].VPos = highbyte;
|
||||
}
|
||||
}
|
||||
PPU.OAMFlip &= ~1;
|
||||
++PPU.OAMAddr;
|
||||
if (PPU.OAMPriorityRotation && PPU.FirstSprite != (PPU.OAMAddr >> 1))
|
||||
{
|
||||
PPU.FirstSprite = (PPU.OAMAddr&0xFE) >> 1;
|
||||
IPPU.OBJChanged = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
Memory.FillRAM [0x2104] = byte;
|
||||
}
|
||||
|
||||
STATIC inline void REGISTER_2118 (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
if (PPU.VMA.FullGraphicCount)
|
||||
{
|
||||
uint32 rem = PPU.VMA.Address & PPU.VMA.Mask1;
|
||||
address = (((PPU.VMA.Address & ~PPU.VMA.Mask1) +
|
||||
(rem >> PPU.VMA.Shift) +
|
||||
((rem & (PPU.VMA.FullGraphicCount - 1)) << 3)) << 1) & 0xffff;
|
||||
Memory.VRAM [address] = Byte;
|
||||
}
|
||||
else
|
||||
{
|
||||
Memory.VRAM[address = (PPU.VMA.Address << 1) & 0xFFFF] = Byte;
|
||||
}
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (!PPU.VMA.High)
|
||||
{
|
||||
#ifdef DEBUGGER
|
||||
if (Settings.TraceVRAM && !CPU.InDMA)
|
||||
{
|
||||
printf ("VRAM write byte: $%04X (%d,%d)\n", PPU.VMA.Address,
|
||||
Memory.FillRAM[0x2115] & 3,
|
||||
(Memory.FillRAM [0x2115] & 0x0c) >> 2);
|
||||
}
|
||||
#endif
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
}
|
||||
// Memory.FillRAM [0x2118] = Byte;
|
||||
}
|
||||
|
||||
STATIC inline void REGISTER_2118_tile (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
uint32 rem = PPU.VMA.Address & PPU.VMA.Mask1;
|
||||
address = (((PPU.VMA.Address & ~PPU.VMA.Mask1) +
|
||||
(rem >> PPU.VMA.Shift) +
|
||||
((rem & (PPU.VMA.FullGraphicCount - 1)) << 3)) << 1) & 0xffff;
|
||||
Memory.VRAM [address] = Byte;
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (!PPU.VMA.High)
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
// Memory.FillRAM [0x2118] = Byte;
|
||||
}
|
||||
|
||||
STATIC inline void REGISTER_2118_linear (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
Memory.VRAM[address = (PPU.VMA.Address << 1) & 0xFFFF] = Byte;
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (!PPU.VMA.High)
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
// Memory.FillRAM [0x2118] = Byte;
|
||||
}
|
||||
|
||||
STATIC inline void REGISTER_2119 (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
if (PPU.VMA.FullGraphicCount)
|
||||
{
|
||||
uint32 rem = PPU.VMA.Address & PPU.VMA.Mask1;
|
||||
address = ((((PPU.VMA.Address & ~PPU.VMA.Mask1) +
|
||||
(rem >> PPU.VMA.Shift) +
|
||||
((rem & (PPU.VMA.FullGraphicCount - 1)) << 3)) << 1) + 1) & 0xFFFF;
|
||||
Memory.VRAM [address] = Byte;
|
||||
}
|
||||
else
|
||||
{
|
||||
Memory.VRAM[address = ((PPU.VMA.Address << 1) + 1) & 0xFFFF] = Byte;
|
||||
}
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (PPU.VMA.High)
|
||||
{
|
||||
#ifdef DEBUGGER
|
||||
if (Settings.TraceVRAM && !CPU.InDMA)
|
||||
{
|
||||
printf ("VRAM write word: $%04X (%d,%d)\n", PPU.VMA.Address,
|
||||
Memory.FillRAM[0x2115] & 3,
|
||||
(Memory.FillRAM [0x2115] & 0x0c) >> 2);
|
||||
}
|
||||
#endif
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
}
|
||||
// Memory.FillRAM [0x2119] = Byte;
|
||||
}
|
||||
|
||||
STATIC inline void REGISTER_2119_tile (uint8 Byte)
|
||||
{
|
||||
uint32 rem = PPU.VMA.Address & PPU.VMA.Mask1;
|
||||
uint32 address = ((((PPU.VMA.Address & ~PPU.VMA.Mask1) +
|
||||
(rem >> PPU.VMA.Shift) +
|
||||
((rem & (PPU.VMA.FullGraphicCount - 1)) << 3)) << 1) + 1) & 0xFFFF;
|
||||
Memory.VRAM [address] = Byte;
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (PPU.VMA.High)
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
// Memory.FillRAM [0x2119] = Byte;
|
||||
}
|
||||
|
||||
STATIC inline void REGISTER_2119_linear (uint8 Byte)
|
||||
{
|
||||
uint32 address;
|
||||
Memory.VRAM[address = ((PPU.VMA.Address << 1) + 1) & 0xFFFF] = Byte;
|
||||
IPPU.TileCached [TILE_2BIT][address >> 4] = FALSE;
|
||||
IPPU.TileCached [TILE_4BIT][address >> 5] = FALSE;
|
||||
IPPU.TileCached [TILE_8BIT][address >> 6] = FALSE;
|
||||
if (PPU.VMA.High)
|
||||
PPU.VMA.Address += PPU.VMA.Increment;
|
||||
// Memory.FillRAM [0x2119] = Byte;
|
||||
}
|
||||
|
||||
STATIC inline void REGISTER_2122(uint8 Byte)
|
||||
{
|
||||
// CG-RAM (palette) write
|
||||
|
||||
if (PPU.CGFLIP)
|
||||
{
|
||||
if ((Byte & 0x7f) != (PPU.CGDATA[PPU.CGADD] >> 8))
|
||||
{
|
||||
if (Settings.SixteenBit)
|
||||
FLUSH_REDRAW ();
|
||||
PPU.CGDATA[PPU.CGADD] &= 0x00FF;
|
||||
PPU.CGDATA[PPU.CGADD] |= (Byte & 0x7f) << 8;
|
||||
IPPU.ColorsChanged = TRUE;
|
||||
if (Settings.SixteenBit)
|
||||
{
|
||||
IPPU.Blue [PPU.CGADD] = IPPU.XB [(Byte >> 2) & 0x1f];
|
||||
IPPU.Green [PPU.CGADD] = IPPU.XB [(PPU.CGDATA[PPU.CGADD] >> 5) & 0x1f];
|
||||
IPPU.ScreenColors [PPU.CGADD] = (uint16) BUILD_PIXEL (IPPU.Red [PPU.CGADD],
|
||||
IPPU.Green [PPU.CGADD],
|
||||
IPPU.Blue [PPU.CGADD]);
|
||||
}
|
||||
}
|
||||
PPU.CGADD++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Byte != (uint8) (PPU.CGDATA[PPU.CGADD] & 0xff))
|
||||
{
|
||||
if (Settings.SixteenBit)
|
||||
FLUSH_REDRAW ();
|
||||
PPU.CGDATA[PPU.CGADD] &= 0x7F00;
|
||||
PPU.CGDATA[PPU.CGADD] |= Byte;
|
||||
IPPU.ColorsChanged = TRUE;
|
||||
if (Settings.SixteenBit)
|
||||
{
|
||||
IPPU.Red [PPU.CGADD] = IPPU.XB [Byte & 0x1f];
|
||||
IPPU.Green [PPU.CGADD] = IPPU.XB [(PPU.CGDATA[PPU.CGADD] >> 5) & 0x1f];
|
||||
IPPU.ScreenColors [PPU.CGADD] = (uint16) BUILD_PIXEL (IPPU.Red [PPU.CGADD],
|
||||
IPPU.Green [PPU.CGADD],
|
||||
IPPU.Blue [PPU.CGADD]);
|
||||
}
|
||||
}
|
||||
}
|
||||
PPU.CGFLIP ^= 1;
|
||||
// Memory.FillRAM [0x2122] = Byte;
|
||||
}
|
||||
|
||||
STATIC inline void REGISTER_2180(uint8 Byte)
|
||||
{
|
||||
Memory.RAM[PPU.WRAM++] = Byte;
|
||||
PPU.WRAM &= 0x1FFFF;
|
||||
Memory.FillRAM [0x2180] = Byte;
|
||||
}
|
||||
|
||||
extern uint8 REGISTER_4212();
|
||||
extern void FLUSH_REDRAW ();
|
||||
extern void REGISTER_2104 (uint8 byte);
|
||||
extern void REGISTER_2118 (uint8 Byte);
|
||||
extern void REGISTER_2118_tile (uint8 Byte);
|
||||
extern void REGISTER_2118_linear (uint8 Byte);
|
||||
extern void REGISTER_2119 (uint8 Byte);
|
||||
extern void REGISTER_2119_tile (uint8 Byte);
|
||||
extern void REGISTER_2119_linear (uint8 Byte);
|
||||
extern void REGISTER_2122(uint8 Byte);
|
||||
extern void REGISTER_2180(uint8 Byte);
|
||||
|
||||
//Platform specific input functions used by PPU.CPP
|
||||
void JustifierButtons(uint32&);
|
||||
|
@ -134,6 +134,69 @@
|
||||
#define StackRelative SA1StackRelative
|
||||
#define StackRelativeIndirectIndexed SA1StackRelativeIndirectIndexed
|
||||
|
||||
#define SetZN16 SA1SetZN16
|
||||
#define SetZN8 SA1SetZN8
|
||||
#define ADC8 SA1ADC8
|
||||
#define ADC16 SA1ADC16
|
||||
#define AND16 SA1AND16
|
||||
#define AND8 SA1AND8
|
||||
#define A_ASL16 SA1A_ASL16
|
||||
#define A_ASL8 SA1A_ASL8
|
||||
#define ASL16 SA1ASL16
|
||||
#define ASL8 SA1ASL8
|
||||
#define BIT16 SA1BIT16
|
||||
#define BIT8 SA1BIT8
|
||||
#define CMP16 SA1CMP16
|
||||
#define CMP8 SA1CMP8
|
||||
#define CMX16 SA1CMX16
|
||||
#define CMX8 SA1CMX8
|
||||
#define CMY16 SA1CMY16
|
||||
#define CMY8 SA1CMY8
|
||||
#define A_DEC16 SA1A_DEC16
|
||||
#define A_DEC8 SA1A_DEC8
|
||||
#define DEC16 SA1DEC16
|
||||
#define DEC8 SA1DEC8
|
||||
#define EOR16 SA1EOR16
|
||||
#define EOR8 SA1EOR8
|
||||
#define A_INC16 SA1A_INC16
|
||||
#define A_INC8 SA1A_INC8
|
||||
#define INC16 SA1INC16
|
||||
#define INC8 SA1INC8
|
||||
#define LDA16 SA1LDA16
|
||||
#define LDA8 SA1LDA8
|
||||
#define LDX16 SA1LDX16
|
||||
#define LDX8 SA1LDX8
|
||||
#define LDY16 SA1LDY16
|
||||
#define LDY8 SA1LDY8
|
||||
#define A_LSR16 SA1A_LSR16
|
||||
#define A_LSR8 SA1A_LSR8
|
||||
#define LSR16 SA1LSR16
|
||||
#define LSR8 SA1LSR8
|
||||
#define ORA16 SA1ORA16
|
||||
#define ORA8 SA1ORA8
|
||||
#define A_ROL16 SA1A_ROL16
|
||||
#define A_ROL8 SA1A_ROL8
|
||||
#define ROL16 SA1ROL16
|
||||
#define ROL8 SA1ROL8
|
||||
#define A_ROR16 SA1A_ROR16
|
||||
#define A_ROR8 SA1A_ROR8
|
||||
#define ROR16 SA1ROR16
|
||||
#define ROR8 SA1ROR8
|
||||
#define SBC16 SA1SBC16
|
||||
#define SBC8 SA1SBC8
|
||||
#define STA16 SA1STA16
|
||||
#define STA8 SA1STA8
|
||||
#define STX16 SA1STX16
|
||||
#define STX8 SA1STX8
|
||||
#define STY16 SA1STY16
|
||||
#define STY8 SA1STY8
|
||||
#define STZ16 SA1STZ16
|
||||
#define STZ8 SA1STZ8
|
||||
#define TSB16 SA1TSB16
|
||||
#define TSB8 SA1TSB8
|
||||
#define TRB16 SA1TRB16
|
||||
#define TRB8 SA1TRB8
|
||||
|
||||
//#undef CPU_SHUTDOWN
|
||||
#undef VAR_CYCLES
|
||||
#define SA1_OPCODES
|
||||
|
@ -216,7 +216,7 @@ uint8 ConvertTile (uint8 *pCache, uint32 TileAddr)
|
||||
return (non_zero ? TRUE : BLANK_TILE);
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint8 Pixel;
|
||||
uint8 *Screen = GFX.S + Offset;
|
||||
@ -236,7 +236,7 @@ inline void WRITE_4PIXELS (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS_FLIPPED (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS_FLIPPED (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint8 Pixel;
|
||||
uint8 *Screen = GFX.S + Offset;
|
||||
@ -256,7 +256,7 @@ inline void WRITE_4PIXELS_FLIPPED (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELSx2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELSx2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint8 Pixel;
|
||||
uint8 *Screen = GFX.S + Offset;
|
||||
@ -276,7 +276,7 @@ inline void WRITE_4PIXELSx2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS_FLIPPEDx2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS_FLIPPEDx2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint8 Pixel;
|
||||
uint8 *Screen = GFX.S + Offset;
|
||||
@ -296,7 +296,7 @@ inline void WRITE_4PIXELS_FLIPPEDx2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELSx2x2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELSx2x2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint8 Pixel;
|
||||
uint8 *Screen = GFX.S + Offset;
|
||||
@ -318,7 +318,7 @@ inline void WRITE_4PIXELSx2x2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS_FLIPPEDx2x2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS_FLIPPEDx2x2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint8 Pixel;
|
||||
uint8 *Screen = GFX.S + Offset;
|
||||
@ -417,7 +417,7 @@ void DrawLargePixel (uint32 Tile, uint32 Offset,
|
||||
RENDER_TILE_LARGE (((uint8) GFX.ScreenColors [pixel]), PLOT_PIXEL)
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -437,7 +437,7 @@ inline void WRITE_4PIXELS16 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_FLIPPED (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_FLIPPED (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -457,7 +457,7 @@ inline void WRITE_4PIXELS16_FLIPPED (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16x2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16x2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -477,7 +477,7 @@ inline void WRITE_4PIXELS16x2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_FLIPPEDx2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_FLIPPEDx2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -497,7 +497,7 @@ inline void WRITE_4PIXELS16_FLIPPEDx2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16x2x2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16x2x2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -519,7 +519,7 @@ inline void WRITE_4PIXELS16x2x2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_FLIPPEDx2x2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_FLIPPEDx2x2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -614,7 +614,7 @@ void DrawLargePixel16 (uint32 Tile, uint32 Offset,
|
||||
RENDER_TILE_LARGE (GFX.ScreenColors [pixel], PLOT_PIXEL)
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_ADD (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_ADD (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -646,7 +646,7 @@ inline void WRITE_4PIXELS16_ADD (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_FLIPPED_ADD (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_FLIPPED_ADD (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -678,7 +678,7 @@ inline void WRITE_4PIXELS16_FLIPPED_ADD (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_ADD1_2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_ADD1_2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -710,7 +710,7 @@ inline void WRITE_4PIXELS16_ADD1_2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_FLIPPED_ADD1_2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_FLIPPED_ADD1_2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -742,7 +742,7 @@ inline void WRITE_4PIXELS16_FLIPPED_ADD1_2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_SUB (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_SUB (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -774,7 +774,7 @@ inline void WRITE_4PIXELS16_SUB (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_FLIPPED_SUB (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_FLIPPED_SUB (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -806,7 +806,7 @@ inline void WRITE_4PIXELS16_FLIPPED_SUB (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_SUB1_2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_SUB1_2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -838,7 +838,7 @@ inline void WRITE_4PIXELS16_SUB1_2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_FLIPPED_SUB1_2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_FLIPPED_SUB1_2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -951,7 +951,7 @@ void DrawClippedTile16Sub1_2 (uint32 Tile, uint32 Offset,
|
||||
RENDER_CLIPPED_TILE(WRITE_4PIXELS16_SUB1_2, WRITE_4PIXELS16_FLIPPED_SUB1_2, 4)
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_ADDF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_ADDF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -977,7 +977,7 @@ inline void WRITE_4PIXELS16_ADDF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_FLIPPED_ADDF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_FLIPPED_ADDF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -1003,7 +1003,7 @@ inline void WRITE_4PIXELS16_FLIPPED_ADDF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_SUBF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_SUBF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
@ -1029,7 +1029,7 @@ inline void WRITE_4PIXELS16_SUBF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
#undef FN
|
||||
}
|
||||
|
||||
inline void WRITE_4PIXELS16_FLIPPED_SUBF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
void WRITE_4PIXELS16_FLIPPED_SUBF1_2 (uint32 Offset, uint8 *Pixels)
|
||||
{
|
||||
uint32 Pixel;
|
||||
uint16 *Screen = (uint16 *) GFX.S + Offset;
|
||||
|
Loading…
x
Reference in New Issue
Block a user