diff --git a/emulator/core/src/lib.rs b/emulator/core/src/lib.rs
index ba8a434..8066649 100644
--- a/emulator/core/src/lib.rs
+++ b/emulator/core/src/lib.rs
@@ -20,7 +20,7 @@ pub use crate::devices::{Address, Addressable, Steppable, Interruptable, Debugga
pub use crate::devices::{read_beu16, read_beu32, read_leu16, read_leu32, write_beu16, write_beu32, write_leu16, write_leu32, wrap_transmutable};
pub use crate::error::Error;
pub use crate::interrupts::InterruptController;
-pub use crate::memory::{MemoryBlock, AddressRightShifter, AddressRepeater, Bus, BusPort, dump_slice};
+pub use crate::memory::{MemoryBlock, AddressTranslator, AddressRepeater, Bus, BusPort, dump_slice};
pub use crate::signals::{Observable, Signal, EdgeSignal, ObservableSignal, ObservableEdgeSignal};
pub use crate::system::System;
diff --git a/emulator/systems/genesis/src/peripherals/coprocessor.rs b/emulator/systems/genesis/src/peripherals/coprocessor.rs
index c3c0d13..5788cff 100644
--- a/emulator/systems/genesis/src/peripherals/coprocessor.rs
+++ b/emulator/systems/genesis/src/peripherals/coprocessor.rs
@@ -1,6 +1,6 @@
use std::rc::Rc;
-use std::cell::RefCell;
+use std::cell::{Cell, RefCell};
use moa_core::{warn, info};
use moa_core::{Bus, Signal, Error, ClockTime, Address, Addressable, Transmutable};
@@ -62,16 +62,10 @@ impl Transmutable for CoprocessorCoordinator {
}
-pub struct CoprocessorBankRegister {
- base: Signal
,
-}
+type CoprocessorRegister = Rc>;
-impl CoprocessorBankRegister {
- pub fn new(base: Signal) -> Self {
- Self {
- base,
- }
- }
+pub struct CoprocessorBankRegister {
+ base: CoprocessorRegister,
}
impl Addressable for CoprocessorBankRegister {
@@ -100,16 +94,19 @@ impl Transmutable for CoprocessorBankRegister {
pub struct CoprocessorBankArea {
- base: Signal,
+ base: CoprocessorRegister,
bus: Rc>,
}
impl CoprocessorBankArea {
- pub fn new(base: Signal, bus: Rc>) -> Self {
- Self {
+ pub fn new(bus: Rc>) -> (Self, CoprocessorBankRegister) {
+ let base = Rc::new(Cell::new(0));
+ let register = CoprocessorBankRegister { base: base.clone() };
+ let bank = Self {
base,
bus,
- }
+ };
+ (bank, register)
}
}
diff --git a/emulator/systems/genesis/src/system.rs b/emulator/systems/genesis/src/system.rs
index a8fabbd..cd1ccca 100644
--- a/emulator/systems/genesis/src/system.rs
+++ b/emulator/systems/genesis/src/system.rs
@@ -3,7 +3,7 @@ use std::mem;
use std::rc::Rc;
use std::cell::RefCell;
-use moa_core::{System, Error, Frequency, Signal, MemoryBlock, Bus, Address, Addressable, Device};
+use moa_core::{System, Error, Frequency, MemoryBlock, Bus, Address, Addressable, Device};
use moa_core::host::Host;
use moa_m68k::{M68k, M68kType};
@@ -14,7 +14,7 @@ use moa_peripherals_yamaha::Sn76489;
use crate::utils;
use crate::peripherals::ym7101::Ym7101;
use crate::peripherals::controllers::GenesisControllers;
-use crate::peripherals::coprocessor::{CoprocessorCoordinator, CoprocessorBankRegister, CoprocessorBankArea};
+use crate::peripherals::coprocessor::{CoprocessorCoordinator, CoprocessorBankArea};
pub struct SegaGenesisOptions {
@@ -68,12 +68,12 @@ pub fn build_genesis(host: &mut H, mut options: SegaGenesisOptions) ->
// Build the Coprocessor's Bus
- let bank_register = Signal::new(0);
let coproc_ram = Device::new(MemoryBlock::new(vec![0; 0x00002000]));
let coproc_ym_sound = Device::new(Ym2612::new(host, Frequency::from_hz(7_670_454))?);
let coproc_sn_sound = Device::new(Sn76489::new(host, Frequency::from_hz(3_579_545))?);
- let coproc_register = Device::new(CoprocessorBankRegister::new(bank_register.clone()));
- let coproc_area = Device::new(CoprocessorBankArea::new(bank_register, system.bus.clone()));
+ let (coproc_area, coproc_register) = CoprocessorBankArea::new(system.bus.clone());
+ let coproc_area = Device::new(coproc_area);
+ let coproc_register = Device::new(coproc_register);
let coproc_bus = Rc::new(RefCell::new(Bus::default()));
coproc_bus.borrow_mut().set_ignore_unmapped(true);
|