more passing tests. almost have coverage of instructions back
This commit is contained in:
1 parent
d8b14fa084
commit
13ceb61c97
10 files changed
+669
-231
No files matched your search
@@ -118,8 +118,8 @@
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script>
|
||||
var data = {"files":[{"path":["/","home","tmerritt","Projects","chip8_toy","gemma","src","chip8","computer.rs"],"content":"use log::{debug};\nuse crate::chip8::delay_timer::DelayTimer;\nuse crate::chip8::keypad::Keypad;\nuse crate::chip8::quirk_modes::QuirkMode;\nuse crate::chip8::registers::Chip8Registers;\nuse crate::chip8::sound_timer::SoundTimer;\nuse crate::chip8::stack::Chip8Stack;\n\nuse super::{\n cpu_states::Chip8CpuStates, instructions::Chip8CpuInstructions, system_memory::Chip8SystemMemory, video::Chip8Video,\n};\n\n#[derive(Clone)]\npub struct Chip8Computer {\n pub num_cycles: i32,\n pub memory: Chip8SystemMemory,\n pub registers: Chip8Registers,\n pub sound_timer: SoundTimer,\n pub delay_timer: DelayTimer,\n pub video_memory: Chip8Video,\n pub state: Chip8CpuStates,\n pub keypad: Keypad,\n pub stack: Chip8Stack,\n pub quirk_mode: QuirkMode\n}\nimpl Default for Chip8Computer {\n fn default() -\u003e Self {\n Self {\n num_cycles: 0,\n memory: Chip8SystemMemory::default(),\n video_memory: Chip8Video::default(),\n registers: Chip8Registers::default(),\n sound_timer: SoundTimer::new(),\n delay_timer: DelayTimer::new(),\n state: Chip8CpuStates::default(),\n keypad: Keypad::default(),\n stack: Chip8Stack::default(),\n quirk_mode: QuirkMode::default()\n }\n }\n}\n\nimpl Chip8Computer {\n pub fn reset(\u0026mut self) {\n self.video_memory.reset();\n self.num_cycles = 0;\n self.registers.reset();\n self.delay_timer.reset();\n self.sound_timer.reset();\n self.stack.reset();\n self.memory.reset();\n self.quirk_mode = QuirkMode::Chip8;\n }\n\n pub fn dump_keypad_to_string(\u0026self) -\u003e String {\n self.keypad.format_as_string()\n }\n\n pub fn dump_registers_to_string(\u0026self) -\u003e String {\n self.registers.format_as_string()\n }\n\n pub fn dump_video_to_string(\u0026self) -\u003e String {\n self.clone().video_memory.format_as_string()\n }\n\n pub fn new_with_program(new_program: Vec\u003cu16\u003e) -\u003e Self {\n let mut working = Chip8Computer::new();\n\n for (i, \u0026word) in new_program.iter().enumerate() {\n let high = (word \u003e\u003e 8) as u8;\n let low = (word \u0026 0xff) as u8;\n let base_offset = (i * 2) as u16;\n working.memory.poke(base_offset, high);\n working.memory.poke(base_offset + 1, low);\n }\n working\n }\n pub fn new() -\u003e Self {\n Chip8Computer::default()\n }\n\n pub fn load_bytes_to_memory(\u0026mut self, offset: u16, to_load: \u0026Vec\u003cu8\u003e) {\n let total_len = to_load.len() as u16;\n for current_index in 0..total_len {\n let new_value = to_load[current_index as usize];\n let new_location = current_index + offset;\n self.memory.poke(new_location, new_value);\n }\n self.registers.set_pc(offset);\n }\n\n pub fn step_system(\u0026mut self) -\u003e \u0026mut Chip8Computer {\n debug!(\"Stepping System 1 Step\");\n // read the next instruction\n let local_memory = \u0026self.memory;\n\n // let mut working_instruction: u16 = 0b0000000000000000;\n let start_pc = self.registers.peek_pc();\n let high_byte = (local_memory.peek(start_pc) as u16).rotate_left(8);\n let low_byte = local_memory.peek(start_pc + 1) as u16;\n let result = high_byte | low_byte;\n let decoded_instruction =\n Chip8CpuInstructions::decode(result, \u0026self.quirk_mode);\n // todo: THIS IS BAD AND IS A SIDE EFFECT\n decoded_instruction.execute(self);\n\n match self.state {\n Chip8CpuStates::WaitingForInstruction =\u003e {\n self.sound_timer.tick();\n self.delay_timer.tick();\n self.video_memory.tick();\n self.num_cycles += 1;\n }\n Chip8CpuStates::WaitingForKey =\u003e {\n debug!(\"waiting for a key press...\");\n }\n _ =\u003e {}\n }\n self\n }\n}\n","traces":[{"line":27,"address":[1101350,1100848],"length":1,"stats":{"Line":3}},{"line":30,"address":[542288],"length":1,"stats":{"Line":8}},{"line":31,"address":[700254],"length":1,"stats":{"Line":2}},{"line":32,"address":[324175],"length":1,"stats":{"Line":3}},{"line":33,"address":[785582],"length":1,"stats":{"Line":8}},{"line":34,"address":[542397],"length":1,"stats":{"Line":3}},{"line":35,"address":[785612],"length":1,"stats":{"Line":8}},{"line":36,"address":[632815],"length":1,"stats":{"Line":3}},{"line":37,"address":[632830],"length":1,"stats":{"Line":8}},{"line":38,"address":[40316373],"length":1,"stats":{"Line":3}},{"line":44,"address":[3509968],"length":1,"stats":{"LLine truncated
|
||||
var previousData = {"files":[{"path":["/","home","tmerritt","Projects","chip8_toy","gemma","src","chip8","computer.rs"],"content":"use log::{debug};\nuse crate::chip8::delay_timer::DelayTimer;\nuse crate::chip8::keypad::Keypad;\nuse crate::chip8::quirk_modes::QuirkMode;\nuse crate::chip8::registers::Chip8Registers;\nuse crate::chip8::sound_timer::SoundTimer;\nuse crate::chip8::stack::Chip8Stack;\n\nuse super::{\n cpu_states::Chip8CpuStates, instructions::Chip8CpuInstructions, system_memory::Chip8SystemMemory, video::Chip8Video,\n};\n\n#[derive(Clone)]\npub struct Chip8Computer {\n pub num_cycles: i32,\n pub memory: Chip8SystemMemory,\n pub registers: Chip8Registers,\n pub sound_timer: SoundTimer,\n pub delay_timer: DelayTimer,\n pub video_memory: Chip8Video,\n pub state: Chip8CpuStates,\n pub keypad: Keypad,\n pub stack: Chip8Stack,\n pub quirk_mode: QuirkMode\n}\nimpl Default for Chip8Computer {\n fn default() -\u003e Self {\n Self {\n num_cycles: 0,\n memory: Chip8SystemMemory::default(),\n video_memory: Chip8Video::default(),\n registers: Chip8Registers::default(),\n sound_timer: SoundTimer::new(),\n delay_timer: DelayTimer::new(),\n state: Chip8CpuStates::default(),\n keypad: Keypad::default(),\n stack: Chip8Stack::default(),\n quirk_mode: QuirkMode::default()\n }\n }\n}\n\nimpl Chip8Computer {\n pub fn reset(\u0026mut self) {\n self.video_memory.reset();\n self.num_cycles = 0;\n self.registers.reset();\n self.delay_timer.reset();\n self.sound_timer.reset();\n self.stack.reset();\n self.memory.reset();\n self.quirk_mode = QuirkMode::Chip8;\n }\n\n pub fn dump_keypad_to_string(\u0026self) -\u003e String {\n self.keypad.format_as_string()\n }\n\n pub fn dump_registers_to_string(\u0026self) -\u003e String {\n self.registers.format_as_string()\n }\n\n pub fn dump_video_to_string(\u0026self) -\u003e String {\n self.clone().video_memory.format_as_string()\n }\n\n pub fn new_with_program(new_program: Vec\u003cu16\u003e) -\u003e Self {\n let mut working = Chip8Computer::new();\n\n for (i, \u0026word) in new_program.iter().enumerate() {\n let high = (word \u003e\u003e 8) as u8;\n let low = (word \u0026 0xff) as u8;\n let base_offset = (i * 2) as u16;\n working.memory.poke(base_offset, high);\n working.memory.poke(base_offset + 1, low);\n }\n working\n }\n pub fn new() -\u003e Self {\n Chip8Computer::default()\n }\n\n pub fn load_bytes_to_memory(\u0026mut self, offset: u16, to_load: \u0026Vec\u003cu8\u003e) {\n let total_len = to_load.len() as u16;\n for current_index in 0..total_len {\n let new_value = to_load[current_index as usize];\n let new_location = current_index + offset;\n self.memory.poke(new_location, new_value);\n }\n self.registers.set_pc(offset);\n }\n\n pub fn step_system(\u0026mut self) -\u003e \u0026mut Chip8Computer {\n debug!(\"Stepping System 1 Step\");\n // read the next instruction\n let local_memory = \u0026self.memory;\n\n // let mut working_instruction: u16 = 0b0000000000000000;\n let start_pc = self.registers.peek_pc();\n let high_byte = (local_memory.peek(start_pc) as u16).rotate_left(8);\n let low_byte = local_memory.peek(start_pc + 1) as u16;\n let result = high_byte | low_byte;\n let decoded_instruction =\n Chip8CpuInstructions::decode(result, \u0026self.quirk_mode);\n // todo: THIS IS BAD AND IS A SIDE EFFECT\n decoded_instruction.execute(self);\n\n match self.state {\n Chip8CpuStates::WaitingForInstruction =\u003e {\n self.sound_timer.tick();\n self.delay_timer.tick();\n self.video_memory.tick();\n self.num_cycles += 1;\n }\n Chip8CpuStates::WaitingForKey =\u003e {\n debug!(\"waiting for a key press...\");\n }\n _ =\u003e {}\n }\n self\n }\n}\n","traces":[{"line":28,"address":[1160542,1160032],"length":1,"stats":{"Line":3}},{"line":31,"address":[602624],"length":1,"stats":{"Line":7}},{"line":32,"address":[377074],"length":1,"stats":{"Line":7}},{"line":33,"address":[754655],"length":1,"stats":{"Line":8}},{"line":34,"address":[842350],"length":1,"stats":{"Line":7}},{"line":35,"address":[602733],"length":1,"stats":{"Line":4}},{"line":36,"address":[842380],"length":1,"stats":{"Line":7}},{"line":37,"address":[685351],"length":1,"stats":{"Line":7}},{"line":38,"address":[685370],"length":1,"stats":{"Line":8}},{"line":39,"address":[42137293],"length":1,"stats":{"Line":3}},{"line":45,"address":[3564352],"length":1,"stLine truncated
|
||||
var data = {"files":[{"path":["/","home","tmerritt","Projects","chip8_toy","gemma","src","chip8","computer.rs"],"content":"use log::{debug};\nuse crate::chip8::delay_timer::DelayTimer;\nuse crate::chip8::keypad::Keypad;\nuse crate::chip8::quirk_modes::QuirkMode;\nuse crate::chip8::registers::Chip8Registers;\nuse crate::chip8::sound_timer::SoundTimer;\nuse crate::chip8::stack::Chip8Stack;\n\nuse super::{\n cpu_states::Chip8CpuStates, instructions::Chip8CpuInstructions, system_memory::Chip8SystemMemory, video::Chip8Video,\n};\n\n#[derive(Clone)]\npub struct Chip8Computer {\n pub num_cycles: i32,\n pub memory: Chip8SystemMemory,\n pub registers: Chip8Registers,\n pub sound_timer: SoundTimer,\n pub delay_timer: DelayTimer,\n pub video_memory: Chip8Video,\n pub state: Chip8CpuStates,\n pub keypad: Keypad,\n pub stack: Chip8Stack,\n pub quirk_mode: QuirkMode\n}\nimpl Default for Chip8Computer {\n fn default() -\u003e Self {\n Self {\n num_cycles: 0,\n memory: Chip8SystemMemory::default(),\n video_memory: Chip8Video::default(),\n registers: Chip8Registers::default(),\n sound_timer: SoundTimer::new(),\n delay_timer: DelayTimer::new(),\n state: Chip8CpuStates::default(),\n keypad: Keypad::default(),\n stack: Chip8Stack::default(),\n quirk_mode: QuirkMode::default()\n }\n }\n}\n\nimpl Chip8Computer {\n pub fn reset(\u0026mut self) {\n self.video_memory.reset();\n self.num_cycles = 0;\n self.registers.reset();\n self.delay_timer.reset();\n self.sound_timer.reset();\n self.stack.reset();\n self.memory.reset();\n self.quirk_mode = QuirkMode::Chip8;\n }\n\n pub fn dump_keypad_to_string(\u0026self) -\u003e String {\n self.keypad.format_as_string()\n }\n\n pub fn dump_registers_to_string(\u0026self) -\u003e String {\n self.registers.format_as_string()\n }\n\n pub fn dump_video_to_string(\u0026self) -\u003e String {\n self.clone().video_memory.format_as_string()\n }\n\n pub fn new_with_program(new_program: Vec\u003cu16\u003e) -\u003e Self {\n let mut working = Chip8Computer::new();\n\n for (i, \u0026word) in new_program.iter().enumerate() {\n let high = (word \u003e\u003e 8) as u8;\n let low = (word \u0026 0xff) as u8;\n let base_offset = (i * 2) as u16;\n working.memory.poke(base_offset, high);\n working.memory.poke(base_offset + 1, low);\n }\n working\n }\n pub fn new() -\u003e Self {\n Chip8Computer::default()\n }\n\n pub fn load_bytes_to_memory(\u0026mut self, offset: u16, to_load: \u0026Vec\u003cu8\u003e) {\n let total_len = to_load.len() as u16;\n for current_index in 0..total_len {\n let new_value = to_load[current_index as usize];\n let new_location = current_index + offset;\n self.memory.poke(new_location, new_value);\n }\n self.registers.set_pc(offset);\n }\n\n pub fn step_system(\u0026mut self) -\u003e \u0026mut Chip8Computer {\n debug!(\"Stepping System 1 Step\");\n // read the next instruction\n let local_memory = \u0026self.memory;\n\n // let mut working_instruction: u16 = 0b0000000000000000;\n let start_pc = self.registers.peek_pc();\n let high_byte = (local_memory.peek(start_pc) as u16).rotate_left(8);\n let low_byte = local_memory.peek(start_pc + 1) as u16;\n let result = high_byte | low_byte;\n let decoded_instruction =\n Chip8CpuInstructions::decode(result, \u0026self.quirk_mode);\n // todo: THIS IS BAD AND IS A SIDE EFFECT\n decoded_instruction.execute(self);\n\n match self.state {\n Chip8CpuStates::WaitingForInstruction =\u003e {\n self.sound_timer.tick();\n self.delay_timer.tick();\n self.video_memory.tick();\n self.num_cycles += 1;\n }\n Chip8CpuStates::WaitingForKey =\u003e {\n debug!(\"waiting for a key press...\");\n }\n _ =\u003e {}\n }\n self\n }\n}\n","traces":[{"line":27,"address":[1102102,1101600],"length":1,"stats":{"Line":3}},{"line":30,"address":[543040],"length":1,"stats":{"Line":8}},{"line":31,"address":[329986],"length":1,"stats":{"Line":7}},{"line":32,"address":[707215],"length":1,"stats":{"Line":7}},{"line":33,"address":[791326],"length":1,"stats":{"Line":4}},{"line":34,"address":[543149],"length":1,"stats":{"Line":7}},{"line":35,"address":[791356],"length":1,"stats":{"Line":4}},{"line":36,"address":[662975],"length":1,"stats":{"Line":7}},{"line":37,"address":[662990],"length":1,"stats":{"Line":4}},{"line":38,"address":[40316453],"length":1,"stats":{"Line":7}},{"line":44,"address":[3514832],"length":1,"stats":{"LLine truncated
|
||||
var previousData = {"files":[{"path":["/","home","tmerritt","Projects","chip8_toy","gemma","src","chip8","computer.rs"],"content":"use log::{debug};\nuse crate::chip8::delay_timer::DelayTimer;\nuse crate::chip8::keypad::Keypad;\nuse crate::chip8::quirk_modes::QuirkMode;\nuse crate::chip8::registers::Chip8Registers;\nuse crate::chip8::sound_timer::SoundTimer;\nuse crate::chip8::stack::Chip8Stack;\n\nuse super::{\n cpu_states::Chip8CpuStates, instructions::Chip8CpuInstructions, system_memory::Chip8SystemMemory, video::Chip8Video,\n};\n\n#[derive(Clone)]\npub struct Chip8Computer {\n pub num_cycles: i32,\n pub memory: Chip8SystemMemory,\n pub registers: Chip8Registers,\n pub sound_timer: SoundTimer,\n pub delay_timer: DelayTimer,\n pub video_memory: Chip8Video,\n pub state: Chip8CpuStates,\n pub keypad: Keypad,\n pub stack: Chip8Stack,\n pub quirk_mode: QuirkMode\n}\nimpl Default for Chip8Computer {\n fn default() -\u003e Self {\n Self {\n num_cycles: 0,\n memory: Chip8SystemMemory::default(),\n video_memory: Chip8Video::default(),\n registers: Chip8Registers::default(),\n sound_timer: SoundTimer::new(),\n delay_timer: DelayTimer::new(),\n state: Chip8CpuStates::default(),\n keypad: Keypad::default(),\n stack: Chip8Stack::default(),\n quirk_mode: QuirkMode::default()\n }\n }\n}\n\nimpl Chip8Computer {\n pub fn reset(\u0026mut self) {\n self.video_memory.reset();\n self.num_cycles = 0;\n self.registers.reset();\n self.delay_timer.reset();\n self.sound_timer.reset();\n self.stack.reset();\n self.memory.reset();\n self.quirk_mode = QuirkMode::Chip8;\n }\n\n pub fn dump_keypad_to_string(\u0026self) -\u003e String {\n self.keypad.format_as_string()\n }\n\n pub fn dump_registers_to_string(\u0026self) -\u003e String {\n self.registers.format_as_string()\n }\n\n pub fn dump_video_to_string(\u0026self) -\u003e String {\n self.clone().video_memory.format_as_string()\n }\n\n pub fn new_with_program(new_program: Vec\u003cu16\u003e) -\u003e Self {\n let mut working = Chip8Computer::new();\n\n for (i, \u0026word) in new_program.iter().enumerate() {\n let high = (word \u003e\u003e 8) as u8;\n let low = (word \u0026 0xff) as u8;\n let base_offset = (i * 2) as u16;\n working.memory.poke(base_offset, high);\n working.memory.poke(base_offset + 1, low);\n }\n working\n }\n pub fn new() -\u003e Self {\n Chip8Computer::default()\n }\n\n pub fn load_bytes_to_memory(\u0026mut self, offset: u16, to_load: \u0026Vec\u003cu8\u003e) {\n let total_len = to_load.len() as u16;\n for current_index in 0..total_len {\n let new_value = to_load[current_index as usize];\n let new_location = current_index + offset;\n self.memory.poke(new_location, new_value);\n }\n self.registers.set_pc(offset);\n }\n\n pub fn step_system(\u0026mut self) -\u003e \u0026mut Chip8Computer {\n debug!(\"Stepping System 1 Step\");\n // read the next instruction\n let local_memory = \u0026self.memory;\n\n // let mut working_instruction: u16 = 0b0000000000000000;\n let start_pc = self.registers.peek_pc();\n let high_byte = (local_memory.peek(start_pc) as u16).rotate_left(8);\n let low_byte = local_memory.peek(start_pc + 1) as u16;\n let result = high_byte | low_byte;\n let decoded_instruction =\n Chip8CpuInstructions::decode(result, \u0026self.quirk_mode);\n // todo: THIS IS BAD AND IS A SIDE EFFECT\n decoded_instruction.execute(self);\n\n match self.state {\n Chip8CpuStates::WaitingForInstruction =\u003e {\n self.sound_timer.tick();\n self.delay_timer.tick();\n self.video_memory.tick();\n self.num_cycles += 1;\n }\n Chip8CpuStates::WaitingForKey =\u003e {\n debug!(\"waiting for a key press...\");\n }\n _ =\u003e {}\n }\n self\n }\n}\n","traces":[{"line":27,"address":[707654,707152],"length":1,"stats":{"Line":6}},{"line":30,"address":[1101632],"length":1,"stats":{"Line":5}},{"line":31,"address":[543054],"length":1,"stats":{"Line":5}},{"line":32,"address":[791263],"length":1,"stats":{"Line":5}},{"line":33,"address":[3514430],"length":1,"stats":{"Line":6}},{"line":34,"address":[1101741],"length":1,"stats":{"Line":4}},{"line":35,"address":[3514460],"length":1,"stats":{"Line":6}},{"line":36,"address":[40316431],"length":1,"stats":{"Line":5}},{"line":37,"address":[40316446],"length":1,"stats":{"Line":6}},{"line":38,"address":[662021],"length":1,"stats":{"Line":4}},{"line":44,"address":[330432],"length":1,Line truncated
|
||||
</script>
|
||||
<script crossorigin>/** @license React v16.13.1
|
||||
* react.production.min.js
|
||||
|
||||
Reference in new issue
Block a user