Added console for displaying the system state

Corrected behaviour and tests
This commit is contained in:
Jan-Peter von Hunnius 2025-09-29 19:02:00 +02:00
parent 8193bcda46
commit 0278a96a8d
24 changed files with 1074 additions and 2918 deletions

View file

@ -20,17 +20,6 @@ struct TestPin {
type Pin = TestPin;
impl Pin {
fn new() -> Self {
Self {
value: PinValue::HighZ,
driver: None,
}
}
fn read(&self) -> PinValue {
self.value
}
fn set_driver(&mut self, driver: Option<String>, value: PinValue) {
self.driver = driver.map(|name| (name, value));
self.value = value;
@ -134,20 +123,20 @@ mod tests {
// Test address assembly with valid nibbles
assert_eq!(
handler.assemble_full_address(Some(0x0F), Some(0x23)),
Some(0x0F23)
handler.assemble_full_address(Some(0x0F), Some(0x03)),
Some(0xF3)
);
assert_eq!(
handler.assemble_full_address(Some(0x12), Some(0x34)),
Some(0x1234)
handler.assemble_full_address(Some(0x02), Some(0x04)),
Some(0x24)
);
assert_eq!(
handler.assemble_full_address(Some(0x00), Some(0x00)),
Some(0x0000)
Some(0x00)
);
assert_eq!(
handler.assemble_full_address(Some(0xFF), Some(0xFF)),
Some(0xFFFF)
handler.assemble_full_address(Some(0x0F), Some(0x0F)),
Some(0xFF)
);
// Test with missing nibbles
@ -237,26 +226,6 @@ mod tests {
assert_eq!(create_driver_name("CPU", "CONTROL"), "CPU_CONTROL");
}
#[test]
fn test_clock_edge_detection_logic() {
// Test edge detection logic without hardware dependencies
// PHI1: Low -> High (rising edge)
assert!(PinValue::High == PinValue::High && PinValue::Low == PinValue::Low);
// PHI1: High -> Low (falling edge)
assert!(PinValue::Low == PinValue::Low && PinValue::High == PinValue::High);
// PHI2: Low -> High (rising edge)
assert!(PinValue::High == PinValue::High && PinValue::Low == PinValue::Low);
// PHI2: High -> Low (falling edge)
assert!(PinValue::Low == PinValue::Low && PinValue::High == PinValue::High);
// No edge cases
assert!(PinValue::High == PinValue::High && PinValue::High == PinValue::Low);
assert!(PinValue::Low == PinValue::Low && PinValue::Low == PinValue::High);
}
#[test]
fn test_data_bus_bit_operations() {
// Test bit manipulation for data bus operations
@ -350,8 +319,8 @@ mod tests {
assert!(address_latch_time.is_some());
// Verify the assembled address
let assembled = handler.assemble_full_address(Some(0x12), Some(0x34));
assert_eq!(assembled, Some(0x1234));
let assembled = handler.assemble_full_address(Some(0x02), Some(0x04));
assert_eq!(assembled, Some(0x24));
}
#[test]
@ -376,7 +345,7 @@ mod tests {
&recent_time,
access_time
),
false
true
);
// Note: Testing with elapsed time would require sleeping or mocking time