mirror of
https://github.com/rafaelvcaetano/melonDS-android-lib.git
synced 2024-11-30 09:01:20 +00:00
make NEG update flags correctly (oops).
also misc graphics notes added.
This commit is contained in:
parent
52d866fa17
commit
383093c5ff
@ -1301,8 +1301,10 @@ void T_NEG_REG(ARM* cpu)
|
||||
u32 b = cpu->R[(cpu->CurInstr >> 3) & 0x7];
|
||||
u32 res = -b;
|
||||
cpu->R[cpu->CurInstr & 0x7] = res;
|
||||
cpu->SetNZ(res & 0x80000000,
|
||||
!res);
|
||||
cpu->SetNZCV(res & 0x80000000,
|
||||
!res,
|
||||
CARRY_SUB(0, b),
|
||||
OVERFLOW_SUB(0, b, res));
|
||||
}
|
||||
|
||||
void T_CMP_REG(ARM* cpu)
|
||||
|
@ -54,7 +54,8 @@
|
||||
//
|
||||
// 3D/2D blending rules
|
||||
// * if destination selected as 2nd target:
|
||||
// blending is applied instead of the selected color effect, using full 31bit alpha from 3D layer
|
||||
// blending is applied instead of the selected color effect, using full 5bit alpha from 3D layer
|
||||
// (or 6bit alpha? TODO: check it)
|
||||
// this even if the selected color effect is 'none'.
|
||||
// apparently this works even if BG0 isn't selected as 1st target
|
||||
// * if BG0 is selected as 1st target, destination not selected as 2nd target:
|
||||
@ -231,7 +232,7 @@ void GPU2D::Write16(u32 addr, u16 val)
|
||||
EVB = (val >> 8) & 0x1F;
|
||||
if (EVB > 16) EVB = 16;
|
||||
return;
|
||||
case 0x54:
|
||||
case 0x054:
|
||||
EVY = val & 0x1F;
|
||||
if (EVY > 16) EVY = 16;
|
||||
return;
|
||||
|
11
GPU3D.cpp
11
GPU3D.cpp
@ -44,11 +44,12 @@
|
||||
// the added bias affects interpolation.
|
||||
//
|
||||
// depth buffer:
|
||||
// Z-buffering mode: val = ((Z * 0x800 * 0x1000) / W) + 0x7FFCFF
|
||||
// W-buffering mode: val = W - 0x1FF
|
||||
// TODO: confirm W, because it's weird
|
||||
// ... nope, that shit above isn't right
|
||||
// also, the formula for the clear depth on GBAtek appears to be wrong
|
||||
// Z-buffering mode: val = ((Z * 0x800 * 0x1000) / W) + 0x7FFEFF
|
||||
// W-buffering mode: val = W
|
||||
//
|
||||
// formula for clear depth: (GBAtek is wrong there)
|
||||
// clearZ = (val * 0x200) + 0x1FF;
|
||||
// if (clearZ >= 0x010000 && clearZ < 0xFFFFFF) clearZ++;
|
||||
|
||||
|
||||
namespace GPU3D
|
||||
|
Loading…
Reference in New Issue
Block a user