prep to add savestates

This commit is contained in:
tmerritt committed 2024-11-02 08:10:20 -04:00
1 parent 4e52b5b05a
commit 5663123f81
5 files changed
+565 -541

No files matched your search

+2 -2
View File
@@ -118,8 +118,8 @@
<body>
<div id="root"></div>
<script>
var data = {"files":[{"path":["/","home","tmerritt","Projects","trevors_chip8_toy","gemma","src","bin","speedtest.rs"],"content":"use std::fs::File;\nuse std::io::Read;\nuse std::ops::Add;\nuse std::path::Path;\nuse std::time::{Duration, Instant};\nuse gemma::chip8::computer::Chip8Computer;\nuse gemma::chip8::computer_manager::Chip8ComputerManager;\n\nconst ROM_ROOT: \u0026str = \"resources/roms\";\n\nfn main() {\n let mut x = Chip8ComputerManager::new();\n\n let mut buffer = Vec::new();\n let mut input_file = File::open(Path::new(\u0026(ROM_ROOT.to_string() + \"/mandelbrot_bench.ch8\"))).expect(\"derp\");\n input_file.read_to_end(\u0026mut buffer).expect(\"unable to read file\");\n x.load_new_program_to_system_memory((\u0026*buffer).into());\n\n for _ in 0..10 {\n let start_time = Instant::now();\n let mut num_cycles = 0;\n // how many instructions in 10s.\n let end_time = start_time.add(Duration::from_secs(10));\n while (Instant::now().le(\u0026end_time)) {\n num_cycles += 1;\n x.step();\n }\n\n let num = num_cycles.to_string()\n .as_bytes()\n .rchunks(3)\n .rev()\n .map(std::str::from_utf8)\n .collect::\u003cResult\u003cVec\u003c\u0026str\u003e, _\u003e\u003e()\n .unwrap()\n .join(\",\"); // separator\n\n\n let num_ips = num_cycles / 1000000;\n println!(\"Completed at {num_ips} Mips.\");\n }\n}","traces":[{"line":11,"address":[237008,238973,239038],"length":1,"stats":{"Line":0}},{"line":12,"address":[237030],"length":1,"stats":{"Line":0}},{"line":14,"address":[237055],"length":1,"stats":{"Line":0}},{"line":15,"address":[237174,237106],"length":1,"stats":{"Line":0}},{"line":16,"address":[237426],"length":1,"stats":{"Line":0}},{"line":17,"address":[237519],"length":1,"stats":{"Line":0}},{"line":19,"address":[237607],"length":1,"stats":{"Line":0}},{"line":20,"address":[237756,237832],"length":1,"stats":{"Line":0}},{"line":21,"address":[237861],"length":1,"stats":{"Line":0}},{"line":23,"address":[237877],"length":1,"stats":{"Line":0}},{"line":24,"address":[237955],"length":1,"stats":{"Line":0}},{"line":25,"address":[239012,238986,238059],"length":1,"stats":{"Line":0}},{"line":26,"address":[239033,238993],"length":1,"stats":{"Line":0}},{"line":29,"address":[238094,238484,238052,238185,238551],"length":1,"stats":{"Line":0}},{"line":39,"address":[238698,238862],"length":1,"stats":{"Line":0}},{"line":40,"address":[238882],"length":1,"stats":{"Line":0}}],"covered":0,"coverable":16},{"path":["/","home","tmerritt","Projects","trevors_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 Line truncated
var previousData = {"files":[{"path":["/","home","tmerritt","Projects","trevors_chip8_toy","gemma","src","bin","speedtest.rs"],"content":"use std::fs::File;\nuse std::io::Read;\nuse std::ops::Add;\nuse std::path::Path;\nuse std::time::{Duration, Instant};\nuse gemma::chip8::computer::Chip8Computer;\nuse gemma::chip8::computer_manager::Chip8ComputerManager;\n\nconst ROM_ROOT: \u0026str = \"resources/roms\";\n\nfn main() {\n let mut x = Chip8ComputerManager::new();\n\n let mut buffer = Vec::new();\n let mut input_file = File::open(Path::new(\u0026(ROM_ROOT.to_string() + \"/mandelbrot_bench.ch8\"))).expect(\"derp\");\n input_file.read_to_end(\u0026mut buffer).expect(\"unable to read file\");\n x.load_new_program_to_system_memory((\u0026*buffer).into());\n\n for _ in 0..10 {\n let start_time = Instant::now();\n let mut num_cycles = 0;\n // how many instructions in 10s.\n let end_time = start_time.add(Duration::from_secs(10));\n while (Instant::now().le(\u0026end_time)) {\n num_cycles += 1;\n x.step();\n }\n\n let num = num_cycles.to_string()\n .as_bytes()\n .rchunks(3)\n .rev()\n .map(std::str::from_utf8)\n .collect::\u003cResult\u003cVec\u003c\u0026str\u003e, _\u003e\u003e()\n .unwrap()\n .join(\",\"); // separator\n\n\n let num_ips = num_cycles / 1000000;\n println!(\"Completed at {num_ips} Mips.\");\n }\n}","traces":[{"line":11,"address":[238973,237008,239038],"length":1,"stats":{"Line":0}},{"line":12,"address":[237030],"length":1,"stats":{"Line":0}},{"line":14,"address":[237055],"length":1,"stats":{"Line":0}},{"line":15,"address":[237174,237106],"length":1,"stats":{"Line":0}},{"line":16,"address":[237426],"length":1,"stats":{"Line":0}},{"line":17,"address":[237519],"length":1,"stats":{"Line":0}},{"line":19,"address":[237607],"length":1,"stats":{"Line":0}},{"line":20,"address":[237832,237756],"length":1,"stats":{"Line":0}},{"line":21,"address":[237861],"length":1,"stats":{"Line":0}},{"line":23,"address":[237877],"length":1,"stats":{"Line":0}},{"line":24,"address":[237955],"length":1,"stats":{"Line":0}},{"line":25,"address":[238986,238059,239012],"length":1,"stats":{"Line":0}},{"line":26,"address":[238993,239033],"length":1,"stats":{"Line":0}},{"line":29,"address":[238094,238551,238185,238484,238052],"length":1,"stats":{"Line":0}},{"line":39,"address":[238862,238698],"length":1,"stats":{"Line":0}},{"line":40,"address":[238882],"length":1,"stats":{"Line":0}}],"covered":0,"coverable":16},{"path":["/","home","tmerritt","Projects","trevors_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;Line truncated
var data = {"files":[{"path":["/","home","tmerritt","Projects","trevors_chip8_toy","gemma","src","bin","speedtest.rs"],"content":"use gemma::chip8::computer::Chip8Computer;\nuse gemma::chip8::computer_manager::Chip8ComputerManager;\nuse std::fs::File;\nuse std::io::Read;\nuse std::ops::Add;\nuse std::path::Path;\nuse std::time::{Duration, Instant};\n\nconst ROM_ROOT: \u0026str = \"resources/roms\";\n\nfn main() {\n let mut x = Chip8ComputerManager::new();\n\n let mut buffer = Vec::new();\n let mut input_file =\n File::open(Path::new(\u0026(ROM_ROOT.to_string() + \"/mandelbrot_bench.ch8\"))).expect(\"derp\");\n input_file\n .read_to_end(\u0026mut buffer)\n .expect(\"unable to read file\");\n x.load_new_program_to_system_memory((\u0026*buffer).into());\n\n for _ in 0..10 {\n let start_time = Instant::now();\n let mut num_cycles = 0;\n // how many instructions in 10s.\n let end_time = start_time.add(Duration::from_secs(10));\n while (Instant::now().le(\u0026end_time)) {\n num_cycles += 1;\n x.step();\n }\n\n let num = num_cycles\n .to_string()\n .as_bytes()\n .rchunks(3)\n .rev()\n .map(std::str::from_utf8)\n .collect::\u003cResult\u003cVec\u003c\u0026str\u003e, _\u003e\u003e()\n .unwrap()\n .join(\",\"); // separator\n\n let num_ips = num_cycles / 1000000;\n println!(\"Completed at {num_ips} Mips. ({num})\");\n }\n}\n","traces":[{"line":11,"address":[239164,239099,237008],"length":1,"stats":{"Line":0}},{"line":12,"address":[237030],"length":1,"stats":{"Line":0}},{"line":14,"address":[237055],"length":1,"stats":{"Line":0}},{"line":15,"address":[237174,237106],"length":1,"stats":{"Line":0}},{"line":17,"address":[237426],"length":1,"stats":{"Line":0}},{"line":20,"address":[237519],"length":1,"stats":{"Line":0}},{"line":22,"address":[237607],"length":1,"stats":{"Line":0}},{"line":23,"address":[237756,237832],"length":1,"stats":{"Line":0}},{"line":24,"address":[237861],"length":1,"stats":{"Line":0}},{"line":26,"address":[237877],"length":1,"stats":{"Line":0}},{"line":27,"address":[237955],"length":1,"stats":{"Line":0}},{"line":28,"address":[239138,239112,238059],"length":1,"stats":{"Line":0}},{"line":29,"address":[239119,239159],"length":1,"stats":{"Line":0}},{"line":32,"address":[238551,238185,238094,238484,238052],"length":1,"stats":{"Line":0}},{"line":42,"address":[238698,238862],"length":1,"stats":{"Line":0}},{"line":43,"address":[238992],"length":1,"stats":{"Line":0}}],"covered":0,"coverable":16},{"path":["/","home","tmerritt","Projects","trevors_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 Line truncated
var previousData = {"files":[{"path":["/","home","tmerritt","Projects","trevors_chip8_toy","gemma","src","bin","speedtest.rs"],"content":"use gemma::chip8::computer::Chip8Computer;\nuse gemma::chip8::computer_manager::Chip8ComputerManager;\nuse std::fs::File;\nuse std::io::Read;\nuse std::ops::Add;\nuse std::path::Path;\nuse std::time::{Duration, Instant};\n\nconst ROM_ROOT: \u0026str = \"resources/roms\";\n\nfn main() {\n let mut x = Chip8ComputerManager::new();\n\n let mut buffer = Vec::new();\n let mut input_file =\n File::open(Path::new(\u0026(ROM_ROOT.to_string() + \"/mandelbrot_bench.ch8\"))).expect(\"derp\");\n input_file\n .read_to_end(\u0026mut buffer)\n .expect(\"unable to read file\");\n x.load_new_program_to_system_memory((\u0026*buffer).into());\n\n for _ in 0..10 {\n let start_time = Instant::now();\n let mut num_cycles = 0;\n // how many instructions in 10s.\n let end_time = start_time.add(Duration::from_secs(10));\n while (Instant::now().le(\u0026end_time)) {\n num_cycles += 1;\n x.step();\n }\n\n let num = num_cycles\n .to_string()\n .as_bytes()\n .rchunks(3)\n .rev()\n .map(std::str::from_utf8)\n .collect::\u003cResult\u003cVec\u003c\u0026str\u003e, _\u003e\u003e()\n .unwrap()\n .join(\",\"); // separator\n\n let num_ips = num_cycles / 1000000;\n println!(\"Completed at {num_ips} Mips. ({num})\");\n }\n}\n","traces":[{"line":11,"address":[239038,237008,238973],"length":1,"stats":{"Line":0}},{"line":12,"address":[237030],"length":1,"stats":{"Line":0}},{"line":14,"address":[237055],"length":1,"stats":{"Line":0}},{"line":15,"address":[237174,237106],"length":1,"stats":{"Line":0}},{"line":16,"address":[237426],"length":1,"stats":{"Line":0}},{"line":17,"address":[237519],"length":1,"stats":{"Line":0}},{"line":19,"address":[237607],"length":1,"stats":{"Line":0}},{"line":20,"address":[237756,237832],"length":1,"stats":{"Line":0}},{"line":21,"address":[237861],"length":1,"stats":{"Line":0}},{"line":23,"address":[237877],"length":1,"stats":{"Line":0}},{"line":24,"address":[237955],"length":1,"stats":{"Line":0}},{"line":25,"address":[239012,238986,238059],"length":1,"stats":{"Line":0}},{"line":26,"address":[239033,238993],"length":1,"stats":{"Line":0}},{"line":29,"address":[238551,238094,238052,238185,238484],"length":1,"stats":{"Line":0}},{"line":39,"address":[238862,238698],"length":1,"stats":{"Line":0}},{"line":40,"address":[238882],"length":1,"stats":{"Line":0}}],"covered":0,"coverable":16},{"path":["/","home","tmerritt","Projects","trevors_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 Line truncated
</script>
<script crossorigin>/** @license React v16.13.1
* react.production.min.js