Very simple. Unlike VB, VC++ does not look if you're writing/reading outside an array. The compiler merly uses a formula to see the offset you're trying to read/write to.
If each variable in the array is 4 bytes and you try to access element 200, it uses the following forumula: addr_of_array + (4 * 200) = addr_of_array + 800. That's the location it will read from.
Do you expect this memory to be empty? No. It almost never is. You're reading junk data. You should actually concider yourself lucky that you don't get an access violation.
Make SURE you're filling the right registers everywhere. When it asks to draw from a certain register, do a sanity check to see if these contain any valid values. Also make sure the I register is properly set to point at the correct data.
You can use your watch window to see for example memory and see if there's any data there or if it's pretty much empty. This should be a fairly easy problem to solve with the debugger.
Remember: if your variables are corrupted somewhere in your program, use data breakpoints.
EDIT:
Compiling code...
Compilation errors found! Listing compilation errors in bold!
Code:
void SkipIF_A()
{
[b] if(vRegister[OpCode&0x0F00] == (OpCode&0x00FF)) MemoryIndex += 4;[/b]
else MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void SkipIF_B()
{
[b] if(vRegister[OpCode&0x0F00] != (OpCode&0x00FF)) MemoryIndex += 4;[/b]
else MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void SkipIF_C()
{
[b] if(vRegister[OpCode&0x0F00] == vRegister[OpCode&0x00F0]) MemoryIndex += 4;[/b]
else MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void SkipIF_D()
{
[b] if(vRegister[OpCode&0x0F00] != vRegister[OpCode&0x00F0]) MemoryIndex += 4;[/b]
else MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegAssign_A()
{
[b] vRegister[OpCode&0x0F00] = (OpCode&0x00FF);[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegAssign_B()
{
[b] vRegister[OpCode&0x0F00] += (OpCode&0x00FF);[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegAssign_C()
{
[b] vRegister[OpCode&0x0F00] = vRegister[OpCode&0x00F0];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegAssign_D()
{
[b] vRegister[OpCode&0x0F00] |= vRegister[OpCode&0x00F0];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegAssign_E()
{
[b] vRegister[OpCode&0x0F00] &= vRegister[OpCode&0x00F0];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegAssign_F()
{
[b] vRegister[OpCode&0x0F00] ^= vRegister[OpCode&0x00F0];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegAssign_G()
{
[b] if(vRegister[OpCode&0x00F0] > (0xFF - vRegister[OpCode&0x0F00])) vRegister[0xF] = 1;[/b]
[b] vRegister[OpCode&0x0F00] += vRegister[OpCode&0x00F0];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
[i]Compilation error! If carry is not detected, register VF is set to 0![/i]
void RegAssign_H()
{
[b] if(vRegister[OpCode&0x0F00] >= vRegister[OpCode&0x00F0]) vRegister[0xF] = 1;
else vRegister[0xF] = 0;
[b] vRegister[OpCode&0x0F00] -= vRegister[OpCode&0x00F0];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegAssign_I()
{
[b] vRegister[0xF] = (vRegister[OpCode&0x0F00]&0x01);[/b]
vRegister[OpCode&0x0F00] >>= 1;
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
[i]Compilation warning: Bad name for shifting?[/i]
void RegAssign_J()
{
[b] if(vRegister[OpCode&0x00F0] >= vRegister[OpCode&0x0F00]) vRegister[0xF] = 1;[/b]
else vRegister[0xF] = 0;
[b] vRegister[OpCode&0x0F00] = vRegister[OpCode&0x00F0] - vRegister[OpCode&0x0F00];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegAssign_K()
{
[b] vRegister[0xF] = ((vRegister[OpCode&0x0F00]&0x80) >> 7);[/b]
[b] vRegister[OpCode&0x0F00] <<= 1;[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void RegRandom()
{
[b] vRegister[OpCode&0x0F00] = ((rand() % 16) & (OpCode&0x00FF));[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void DrawSprite()
{
int height;
int x, y;
int loopX, loopY;
unsigned char Data;
height = (OpCode&0x000F);
[b] x = vRegister[OpCode&0x0F00];[/b]
[b] y = vRegister[OpCode&0x00F0];[/b]
for(loopY = 0; loopY < height; loopY++)
{
Data = Memory[loopY + iRegister];
for(loopX = 0; loopX < 8; loopX++)
{
if((Data&(0x80 >> loopX)) != 0)
{
if(DisplayBuffer[x + loopX][y + loopY] == 1) vRegister[0xF] = 1;
DisplayBuffer[x + loopX][y + loopY] ^= 1;
}
}
}
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
[b]void SkipIFKey()
{
if(KeyPress() < 16) MemoryIndex += 4;
else MemoryIndex += 2;
WriteLog(Log);
}
void SkipIFnKey()
{
if(KeyPress() == 16) MemoryIndex += 4;
else MemoryIndex += 2;
WriteLog(Log);
}[/b]
[i]Compilation error! These opcodes checks if the register found in register defined by OpCode & 0x0F00 is pressed or not![/i]
void DelayTimer()
{
[b] vRegister[OpCode&0x0F00] = DTimer;[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void StoreKey()
{
if(KeyPress() < 16)
{
[b] vRegister[OpCode&0x0F00] = KeyPress();[/b]
MemoryIndex += 2;
}
else MemoryIndex -= 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void SetDelayT()
{
[b] DTimer = vRegister[OpCode&0x0F00];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void SetSoundT()
{
[b] STimer = vRegister[OpCode&0x0F00];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void IAssignment()
{
[b] iRegister += vRegister[OpCode&0x0F00];[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void IToFont()
{
[b] iRegister = vRegister[OpCode&0x0F00] * 5;[/b]
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void SaveMem()
{
int loop;
[b] for(loop = 0; loop < vRegister[OpCode&0x0F00]; loop++)[/b]
Memory[iRegister + loop] = vRegister[loop];
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void LoadMem()
{
int loop;
[b] for(loop = 0; loop < vRegister[OpCode&0x0F00]; loop++)[/b]
vRegister[loop] = Memory[iRegister + loop];
MemoryIndex += 2;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
void StoreBCD()
{
[b] iRegister = vRegister[OpCode&0x0F00];[/b]
Memory[iRegister] = (iRegister ) / 100;
Memory[iRegister + 1] = (iRegister / 10) % 10;
Memory[iRegister + 2] = (iRegister % 100) / 10;
WriteLog(Log);
}
[i]Compilation error! Register value not shifted properly![/i]
[i]Counting compilation errors: ...error... lost count. Cannot continue.[/I]
Congratulations, you've just been awarded for the sloppiest coding of all time! Congraulations, n00b! :flowers: