diff --git a/emma/src/chip8/instructions.rs b/emma/src/chip8/instructions.rs index d8eaa45..503f916 100644 --- a/emma/src/chip8/instructions.rs +++ b/emma/src/chip8/instructions.rs @@ -1409,13 +1409,6 @@ mod test { let y_offset = 2; let char_offset = 0x0A; - // use the font characters to draw to video memory -// assert_eq!(x.memory.peek(0x0), CHIP8FONT_0[0]); -// assert_eq!(x.memory.peek(0x1), CHIP8FONT_0[1]); -// assert_eq!(x.memory.peek(0x2), CHIP8FONT_0[2]); -// assert_eq!(x.memory.peek(0x3), CHIP8FONT_0[3]); -// assert_eq!(x.memory.peek(0x4), CHIP8FONT_0[4]); - // now lets set the X and Y to 1,2 x.registers.poke(x_register, x_offset); x.registers.poke(y_register, y_offset); @@ -1433,12 +1426,16 @@ mod test { for row_in_sprite in 0..5 { let row_data = CHIP8FONT_2[row_in_sprite]; for bit_in_byte in 0..8 { - let data_offset = (x_offset + row_in_sprite as u8) * 64 + (bit_in_byte + y_offset); - let should_be_set = (row_data.shr(bit_in_byte) & 0x1) == 1; - println!("DATA_OFFSET FOR {}x{} is {} when offsetting by {}x{} and should be {} working with byte {:08b}", - bit_in_byte, row_in_sprite, data_offset, x_offset, y_offset, should_be_set, row_data); + let data_offset = (x_offset + as u16 + row_in_sprite as u16) * 64 + (bit_in_byte + y_offset) as u16; + let real_bit_in_byte = 7-bit_in_byte; + let shifted_one = 0x01 << real_bit_in_byte; + let one_shift_set = (shifted_one & row_data )> 0; + println!("ROWDATA = \t\t[{row_data:08b}]\tBIT IN BYTE = \t[{bit_in_byte}]\tONE_SHIFT_SET = [{one_shift_set}]\tSHIFTED ONE = [{shifted_one:08b}]"); + println!("DATA_OFFSET FOR SOURCE DATA {}x{} is {} / offset by {}x{} and should be {} working with byte {:08b}", + bit_in_byte, row_in_sprite, data_offset, x_offset, y_offset, one_shift_set, row_data); // assert_eq!(should_be_set, ); - assert_eq!(should_be_set, x.video_memory.peek(data_offset as u16)); + assert_eq!(one_shift_set, x.video_memory.peek(data_offset as u16)); } } }