It's no wonder that the display emulation gives you problems... the way how graphics are done in Chip8 is rather strange compared to modern systems. It is very important that you do the drawing in xorred mode, just blitting the sprite pixels gives you total garbage. It is also vital that you set the VF flag after every sprite draw, or otherwise the game can't detect when collisions occur. When the game starts, display is empty (all pixels in VRAM are black = 0). When first sprite is drawn, it will be draw as-is because xorring result 1 xor 0 = 1 and 0 xor 0 = 0. But if game draws exactly same sprite, onto exactly same position, the sprite will actually disappear, because when white (=1) pixel is drawn onto pixel which is set (=1) the xor will result black pixel: 1 xor 1 = 0. Now in this case the VF flag will be set to 1 using bitwise OR.
phew what a lengthy explanation. Hope you get at least something from it
And I agree with you about that tutorial, but it's not intended to be comlete spec reference. You can find a good explanation of all instructions from
here.
I've tried all available roms and I've never got FX73 instruction... you probably mean FX33, FX55 or FX65?
FX33 converts value in VX into 3 bytes which represents the numbers if value in VX would be as text... eg. if VX has value 0x64 (100 in decimals) you would put into memory (starting at address which is pointed by register I) values 1, 0, 0.
FX55 dumps the registers into memory (again using I as address). For example if X would be 2, register V0 would go to Mem
, V1 to Mem[I+1], V2 to Mem[I+2] (while I keeps unchanged).
FX65 simply does same thing as FX55 but reversed (e.g loads registers from memory).