Fix error swapping global variables with negation
This commit is contained in:
parent
0ea87ea322
commit
792751e3a4
|
@ -9102,7 +9102,7 @@ void InterCodeProcedure::Disassemble(FILE* file)
|
||||||
|
|
||||||
void InterCodeProcedure::Disassemble(const char* name, bool dumpSets)
|
void InterCodeProcedure::Disassemble(const char* name, bool dumpSets)
|
||||||
{
|
{
|
||||||
#if 1
|
#if 0
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
FILE* file;
|
FILE* file;
|
||||||
static bool initial = true;
|
static bool initial = true;
|
||||||
|
|
|
@ -10069,6 +10069,7 @@ bool NativeCodeBasicBlock::MoveAbsoluteLoadStoreUp(int at)
|
||||||
{
|
{
|
||||||
mIns[j].mLive |= LIVE_CPU_REG_A;
|
mIns[j].mLive |= LIVE_CPU_REG_A;
|
||||||
mIns.Insert(j + 1, mIns[at + 1]);
|
mIns.Insert(j + 1, mIns[at + 1]);
|
||||||
|
mIns[j + 1].mLive |= LIVE_CPU_REG_A;
|
||||||
mIns[at + 2].mType = ASMIT_NOP;
|
mIns[at + 2].mType = ASMIT_NOP;
|
||||||
mIns[at + 2].mMode = ASMIM_IMPLIED;
|
mIns[at + 2].mMode = ASMIM_IMPLIED;
|
||||||
return true;
|
return true;
|
||||||
|
@ -10077,6 +10078,8 @@ bool NativeCodeBasicBlock::MoveAbsoluteLoadStoreUp(int at)
|
||||||
return false;
|
return false;
|
||||||
if (mIns[j].ChangesGlobalMemory())
|
if (mIns[j].ChangesGlobalMemory())
|
||||||
return false;
|
return false;
|
||||||
|
if (mIns[j].SameEffectiveAddress(mIns[at + 1]))
|
||||||
|
return false;
|
||||||
|
|
||||||
j--;
|
j--;
|
||||||
}
|
}
|
||||||
|
@ -13420,6 +13423,26 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass)
|
||||||
mIns[i + 2].mType = ASMIT_NOP; mIns[i + 2].mMode = ASMIM_IMPLIED;
|
mIns[i + 2].mType = ASMIT_NOP; mIns[i + 2].mMode = ASMIM_IMPLIED;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
|
else if (
|
||||||
|
mIns[i + 0].mType == ASMIT_TAX &&
|
||||||
|
!mIns[i + 1].ChangesXReg() && !mIns[i + 1].UsesAccu() &&
|
||||||
|
mIns[i + 2].mType == ASMIT_STX && !(mIns[i + 2].mLive & LIVE_CPU_REG_X))
|
||||||
|
{
|
||||||
|
mIns[i + 0].mType = ASMIT_NOP; mIns[i + 0].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 2].mType = ASMIT_STA;
|
||||||
|
mIns[i + 1].mLive |= LIVE_CPU_REG_A;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
else if (
|
||||||
|
mIns[i + 0].mType == ASMIT_TAY &&
|
||||||
|
!mIns[i + 1].ChangesYReg() && !mIns[i + 1].UsesAccu() &&
|
||||||
|
mIns[i + 2].mType == ASMIT_STY && !(mIns[i + 2].mLive & LIVE_CPU_REG_Y))
|
||||||
|
{
|
||||||
|
mIns[i + 0].mType = ASMIT_NOP; mIns[i + 0].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 2].mType = ASMIT_STA;
|
||||||
|
mIns[i + 1].mLive |= LIVE_CPU_REG_A;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
else if (
|
else if (
|
||||||
mIns[i + 0].mType == ASMIT_SEC &&
|
mIns[i + 0].mType == ASMIT_SEC &&
|
||||||
mIns[i + 1].mType == ASMIT_TXA &&
|
mIns[i + 1].mType == ASMIT_TXA &&
|
||||||
|
|
|
@ -35,7 +35,8 @@ void maze_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static char zxdist[] = {18, 6, 3, 2, 1, 0};
|
static char zxdist0[] = {18, 6, 4, 3, 2, 1, 0};
|
||||||
|
static char zxdist1[] = { 9, 5, 3, 2, 1, 0, 0};
|
||||||
|
|
||||||
// Put one char on screen
|
// Put one char on screen
|
||||||
inline void screen_put(byte x, byte y, char ch, char color)
|
inline void screen_put(byte x, byte y, char ch, char color)
|
||||||
|
@ -56,11 +57,11 @@ inline char screen_get(byte x, byte y)
|
||||||
|
|
||||||
sbyte px = 1, py = 3, dx = 1, dy = 0;
|
sbyte px = 1, py = 3, dx = 1, dy = 0;
|
||||||
|
|
||||||
void maze_draw(void)
|
void maze_draw(const char * zxdist)
|
||||||
{
|
{
|
||||||
sbyte ix = px, iy = py;
|
sbyte ix = px, iy = py;
|
||||||
sbyte sx = 0;
|
sbyte sx = 0;
|
||||||
for(char i=0; i<6; i++)
|
for(char i=0; i<7; i++)
|
||||||
{
|
{
|
||||||
sbyte tx = 20 - zxdist[i];
|
sbyte tx = 20 - zxdist[i];
|
||||||
|
|
||||||
|
@ -167,17 +168,19 @@ int main(void)
|
||||||
{
|
{
|
||||||
float z = 0.5 + i;
|
float z = 0.5 + i;
|
||||||
float x = 9.0 / z;
|
float x = 9.0 / z;
|
||||||
printf("%d : %f / %f : %d\n", i, z, x, (int)x);
|
printf("%d : %f / %f : %d\n", i, z, x, (int)(x + 0.5));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#else
|
||||||
bool rotate = false;
|
bool rotate = false;
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
maze_draw();
|
maze_draw(zxdist0);
|
||||||
joy_poll(1);
|
joy_poll(1);
|
||||||
|
|
||||||
|
if (joyy[1])
|
||||||
|
{
|
||||||
sbyte tx = px - dx * joyy[1];
|
sbyte tx = px - dx * joyy[1];
|
||||||
sbyte ty = py - dy * joyy[1];
|
sbyte ty = py - dy * joyy[1];
|
||||||
|
|
||||||
|
@ -185,13 +188,15 @@ int main(void)
|
||||||
{
|
{
|
||||||
px = tx;
|
px = tx;
|
||||||
py = ty;
|
py = ty;
|
||||||
|
maze_draw(zxdist1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!rotate)
|
if (!rotate)
|
||||||
{
|
{
|
||||||
if (joyx[1] == 1)
|
if (joyx[1] == 1)
|
||||||
{
|
{
|
||||||
sbyte t = dx; dx = - dy; dy = t;
|
sbyte t = dx; dx = -dy; dy = t;
|
||||||
rotate = true;
|
rotate = true;
|
||||||
}
|
}
|
||||||
else if (joyx[1] == -1)
|
else if (joyx[1] == -1)
|
||||||
|
@ -205,6 +210,7 @@ int main(void)
|
||||||
rotate = false;
|
rotate = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue