feat: Add real-time data display for CPU registers, RAM, and ROM
This commit is contained in:
parent
3530ea5f28
commit
6636417d18
22 changed files with 1233 additions and 188 deletions
|
|
@ -108,7 +108,7 @@ mod gui_system_integration_tests {
|
|||
|
||||
// Test that GUI state has proper structure for synchronization
|
||||
assert_eq!(app.gui_state.memory_state.ram_contents.len(), 4);
|
||||
assert_eq!(app.gui_state.register_state.index_registers.len(), 16);
|
||||
assert_eq!(app.gui_state.register_state.index_registers.len(), 16); // Intel 4004 has 16 index registers (R0-R15)
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
@ -252,7 +252,7 @@ mod gui_system_integration_tests {
|
|||
assert_eq!(gui_state.register_state.accumulator, 0);
|
||||
assert!(!gui_state.register_state.carry_flag);
|
||||
assert_eq!(gui_state.register_state.program_counter, 0);
|
||||
assert_eq!(gui_state.register_state.index_registers.len(), 16);
|
||||
assert_eq!(gui_state.register_state.index_registers.len(), 16); // Intel 4004 has 16 index registers (R0-R15)
|
||||
assert_eq!(gui_state.register_state.stack_pointer, 0);
|
||||
}
|
||||
|
||||
|
|
@ -295,7 +295,7 @@ mod gui_system_integration_tests {
|
|||
|
||||
// Test that GUI state is properly initialized for the system
|
||||
assert_eq!(app.gui_state.memory_state.ram_contents.len(), 4);
|
||||
assert_eq!(app.gui_state.register_state.index_registers.len(), 16);
|
||||
assert_eq!(app.gui_state.register_state.index_registers.len(), 16); // Intel 4004 has 16 index registers (R0-R15)
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
@ -359,7 +359,7 @@ mod gui_system_integration_tests {
|
|||
// For now, we verify the state structure remains consistent
|
||||
|
||||
assert_eq!(app.gui_state.memory_state.ram_contents.len(), 4);
|
||||
assert_eq!(app.gui_state.register_state.index_registers.len(), 16);
|
||||
assert_eq!(app.gui_state.register_state.index_registers.len(), 16); // Intel 4004 has 16 index registers (R0-R15)
|
||||
|
||||
// Simulate state change
|
||||
app.gui_state.cycle_count = i;
|
||||
|
|
@ -565,7 +565,7 @@ mod gui_real_time_tests {
|
|||
let mut gui_state = rusty_emu::gui::state::GuiState::new();
|
||||
|
||||
// Verify register layout matches Intel 4004 structure
|
||||
assert_eq!(gui_state.register_state.index_registers.len(), 16); // 16 index registers
|
||||
assert_eq!(gui_state.register_state.index_registers.len(), 16); // Intel 4004 has 16 index registers (R0-R15)
|
||||
|
||||
// Test register value bounds
|
||||
gui_state.register_state.accumulator = 0x0F; // 4-bit value (0-15)
|
||||
|
|
|
|||
|
|
@ -307,10 +307,10 @@ mod gui_integration_tests {
|
|||
components.render_control_panel(&mut create_test_ui(&ctx), &mut state);
|
||||
|
||||
// Test memory viewer rendering
|
||||
components.render_memory_viewer(&mut create_test_ui(&ctx), &state);
|
||||
components.render_memory_viewer(&mut create_test_ui(&ctx), &mut state);
|
||||
|
||||
// Test register viewer rendering
|
||||
components.render_register_viewer(&mut create_test_ui(&ctx), &state);
|
||||
components.render_register_viewer(&mut create_test_ui(&ctx), &mut state);
|
||||
|
||||
// Test status bar rendering
|
||||
components.render_status_bar(&mut create_test_ui(&ctx), &state);
|
||||
|
|
|
|||
|
|
@ -49,42 +49,6 @@ fn wait_for_pin_settlement() {
|
|||
thread::sleep(Duration::from_nanos(10)); // 10ns settlement time
|
||||
}
|
||||
|
||||
/// Test helper to set control pins for RAM operation
|
||||
/// RAM requires: SYNC=1, CM=1 (chip_select), CI=1 (io_select for RAM vs ROM)
|
||||
fn setup_ram_operation(ram: &Intel4002, sync_high: bool, cm_high: bool) {
|
||||
let sync_pin = ram.get_pin("SYNC").unwrap();
|
||||
let cm_pin = ram.get_pin("CM").unwrap();
|
||||
let ci_pin = ram.get_pin("CI").unwrap();
|
||||
|
||||
// Set control pins
|
||||
{
|
||||
let mut sync_guard = sync_pin.lock().unwrap();
|
||||
let mut cm_guard = cm_pin.lock().unwrap();
|
||||
let mut ci_guard = ci_pin.lock().unwrap();
|
||||
|
||||
sync_guard.set_driver(
|
||||
Some("TEST".to_string()),
|
||||
if sync_high {
|
||||
PinValue::High
|
||||
} else {
|
||||
PinValue::Low
|
||||
},
|
||||
);
|
||||
cm_guard.set_driver(
|
||||
Some("TEST".to_string()),
|
||||
if cm_high {
|
||||
PinValue::High
|
||||
} else {
|
||||
PinValue::Low
|
||||
},
|
||||
);
|
||||
// CI must be HIGH for RAM operations (distinguishes RAM from ROM)
|
||||
ci_guard.set_driver(Some("TEST".to_string()), PinValue::High);
|
||||
}
|
||||
|
||||
wait_for_pin_settlement();
|
||||
}
|
||||
|
||||
/// Test helper to set data bus value
|
||||
fn set_data_bus(ram: &Intel4002, value: u8) {
|
||||
let nibble = value & 0x0F; // Only lower 4 bits
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ use rusty_emu::component::{BaseComponent, Component};
|
|||
use rusty_emu::components::common::intel_400x::*;
|
||||
use rusty_emu::components::memory::intel_4001::{Intel4001, IoDirection, IoMode};
|
||||
use rusty_emu::pin::{Pin, PinValue};
|
||||
use std::any::Any;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::time::Instant;
|
||||
|
|
@ -45,6 +46,10 @@ impl Component for MockComponent {
|
|||
fn is_running(&self) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
fn as_any(&self) -> &dyn Any {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Intel400xAddressHandling for MockComponent {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue