|
|
Tom Morton
static void __F26 ()
{
Regs[0].s32 = 0;
nZ = 0;
N = 0 < 0;
V = 0;
C = 0;
}
static void __F30 ()
{
Regs[0].s32 = 10;
nZ = 10;
N = 10 < 0;
V = 0;
C = 0;
}
static void __F32 ()
{
Regs[1].s32 = 2;
nZ = 2;
N = 2 < 0;
V = 0;
C = 0;
}
static void __F34 ()
{
u16 src = Regs[1].s16;
u32 dest = (u16)Regs[0].s16;
dest *= (u32)src;
nZ = dest;
N = ((s32)dest) < 0;
C = V = 0;
Regs[0].s32 = dest;
}
static void __F36 ()
{
s16 src = Regs[1].s16;
s32 dest = (s16)Regs[0].s16;
dest *= (s32)src;
nZ = dest;
N = ((s32)dest) < 0;
C = V = 0;
Regs[0].s32 = dest;
}
static void __F38 ()
{
u32 val = Regs[0].s32;
s32 src = Regs[1].s32 & 63;
if (src >= 32) {
V = (val != 0);
X = C = (src == 32 ? val & 1 : 0);
val = 0;
} else if (src == 0) {
C = 0;
V = 0;
} else {
u32 mask = (0xffffffff << (31 - src)) & 0xffffffff;
V = (val & mask) != mask && (val & mask) != 0;
val <<= src-1;
C = X = (val & 0x80000000);
val <<= 1;
val &= 0xffffffff;
}
nZ = ((s32)(val)) != 0;
N = ((s32)(val)) < 0;
Regs[0].s32 = val;
}
static void __F3a ()
{
u32 val = Regs[0].s32;
s32 src = Regs[1].s32 & 63;
u32 sign = (0x80000000 & val) >> 31;
if (src >= 32) {
val = 0xffffffff & (u32)-sign;
X = C = sign;
} else if (src == 0) {
C = 0;
V = 0;
} else {
val >>= src - 1;
C = X = val & 1;
val >>= 1;
val |= (0xffffffff << (32 - src)) & (u32)-sign;
val &= 0xffffffff;
}
nZ = ((s32)(val)) != 0;
N = ((s32)(val)) < 0;
Regs[0].s32 = val;
}
static void __F3c ()
{
u32 val = Regs[0].s32;
s32 shift = Regs[1].s32 & 63;
if (shift >= 32) {
X = C = (shift == 32 ? val & 1 : 0);
val = 0;
} else if (shift == 0) {
C = 0;
V = 0;
} else {
val <<= shift-1;
C = X = (val & 0x80000000);
val <<= 1;
val &= 0xffffffff;
}
nZ = ((s32)(val)) != 0;
N = ((s32)(val)) < 0;
Regs[0].s32 = val;
}
static void __F3e ()
{
u32 val = Regs[0].s32;
s32 shift = Regs[1].s32 & 63;
if (shift >= 32) {
val = 0;
X = C = (shift == 32) && (val >> 31);
} else if (shift == 0) {
C = 0;
V = 0;
} else {
val >>= shift - 1;
C = X = val & 1;
val >>= 1;
}
nZ = ((s32)(val)) != 0;
N = ((s32)(val)) < 0;
Regs[0].s32 = val;
}
static void __F40 ()
{
u32 val = (u32)Regs[0].s32;
s32 cnt = Regs[1].s32 & 63;
V = 0;
u32 loval;
cnt &= 31;
loval = val >> (32 - cnt);
val <<= cnt;
val |= loval;
val &= 0xffffffff;
C = val & 1;
nZ = val;
N = ((s32)val) < 0;
Regs[0].s32 = val;
}
static void __F42 ()
{
u32 val = (u32)Regs[0].s32;
s32 cnt = (Regs[1].s32 & 63) - 1;
V = 0;
u32 loval = val >> (31 - cnt);
u32 carry = loval & 1;
val = (((val << 1) | (X ? 1 : 0)) << cnt) | (loval >> 1);
X = carry;
val &= 0xffffffff;
C = X;
nZ = val;
N = ((s32)val) < 0;
Regs[0].s32 = val;
}
static void __F44 ()
{
u32 src = Regs[1].s32;
u32 dest = Regs[0].s32;
src &= 31;
nZ = !(1 ^ ((dest >> src) & 1));
dest &= ~(1 << src);
Regs[0].s32 = dest;
}
static void __F4e ()
{
Regs[0].s32 = 0;
nZ = 0;
N = 0 < 0;
V = 0;
C = 0;
}
static void __F50 ()
{
nZ = STMemory_ReadByte(Regs[8].s32);
Regs[0].s8 = nZ;
Regs[8].s32 += 1;
N = nZ < 0;
V = 0;
C = 0;
}
static void __F5a ()
{
nZ = 1048575;
Regs[0].s32 = nZ;
N = nZ < 0;
V = 0;
C = 0;
}
static void __F5c ()
{
u16 src = Regs[1].s16;
u32 dest = (u16)Regs[2].s16;
dest *= (u32)src;
nZ = dest;
N = ((s32)dest) < 0;
C = V = 0;
Regs[2].s32 = dest;
}
static void __F5e ()
{
s32 flgs, flgo, flgn, dest;
dest = Regs[0].s32;
nZ = (s32)dest - (s32)1;
Regs[0].s32 = nZ;
flgs = ((s32)1) < 0;
flgo = ((s32)dest) < 0;
flgn = ((s32)nZ) < 0;
V = (flgs ^ flgo) & (flgn ^ flgo);
C = ((s32)1) > ((s32)dest);
X = C;
N = (flgn != 0);
}
static void __F60 ()
{
nZ = Regs[0].s32;
N = nZ < 0;
V = 0;
C = 0;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.