[−][src]Struct spectrusty::chip::ula::Ula
Generic 16k/48k Ferranti ULA (Uncommitted Logic Array).
M
- ZxMemoryB
- BusDeviceX
- MemoryExtensionV
- VideoFrame
The type used for <B as BusDevice>::Timestamp
should at least
satisfy the condition: From<VFrameTs<V>>
.
Trait Implementations
impl<A, M, B, X, V> AudioFrame<A> for Ula<M, B, X, V> where
A: Blep,
V: VideoFrame,
[src]
A: Blep,
V: VideoFrame,
fn ensure_audio_frame_time(&self, blep: &mut A, sample_rate: u32, cpu_hz: f64)
[src]
fn get_audio_frame_end_time(&self) -> FTs
[src]
fn end_audio_frame(&self, blep: &mut B) -> usize
[src]
impl<B, M, D, X, V> AyAudioFrame<B> for Ula<M, D, X, V> where
B: Blep,
D: AyAudioBusDevice + BusDevice,
D::Timestamp: From<VFrameTs<V>>,
V: VideoFrame,
[src]
B: Blep,
D: AyAudioBusDevice + BusDevice,
D::Timestamp: From<VFrameTs<V>>,
V: VideoFrame,
fn render_ay_audio_frame<L: AmpLevels<B::SampleDelta>>(
&mut self,
blep: &mut B,
chans: [usize; 3]
)
[src]
&mut self,
blep: &mut B,
chans: [usize; 3]
)
impl<M: Clone, B: Clone, X: Clone, V: Clone> Clone for Ula<M, B, X, V>
[src]
impl<M, B, X, V> ControlUnit for Ula<M, B, X, V> where
M: ZxMemory,
B: BusDevice,
B::Timestamp: From<VFrameTs<V>>,
X: MemoryExtension,
V: VideoFrame,
[src]
M: ZxMemory,
B: BusDevice,
B::Timestamp: From<VFrameTs<V>>,
X: MemoryExtension,
V: VideoFrame,
type BusDevice = B
A type of a chain of emulated peripheral devices should be declared here. Read more
fn bus_device_mut(&mut self) -> &mut Self::BusDevice
[src]
fn bus_device_ref(&self) -> &Self::BusDevice
[src]
fn into_bus_device(self) -> Self::BusDevice
[src]
fn reset<C: Cpu>(&mut self, cpu: &mut C, hard: bool)
[src]
fn nmi<C: Cpu>(&mut self, cpu: &mut C) -> bool
[src]
fn execute_next_frame<C: Cpu>(&mut self, cpu: &mut C)
[src]
fn ensure_next_frame(&mut self)
[src]
fn execute_single_step<C: Cpu, F: FnOnce(CpuDebug)>(
&mut self,
cpu: &mut C,
debug: Option<F>
) -> Result<(), ()>
[src]
&mut self,
cpu: &mut C,
debug: Option<F>
) -> Result<(), ()>
impl<M, B, X, V> Debug for Ula<M, B, X, V> where
M: ZxMemory,
B: BusDevice,
X: MemoryExtension,
V: VideoFrame,
[src]
M: ZxMemory,
B: BusDevice,
X: MemoryExtension,
V: VideoFrame,
impl<M, B, X, V> Default for Ula<M, B, X, V> where
M: Default,
B: Default,
X: Default,
[src]
M: Default,
B: Default,
X: Default,
impl<'de, M, B, X, V> Deserialize<'de> for Ula<M, B, X, V> where
V: VideoFrame,
M: Deserialize<'de>,
B: Deserialize<'de>,
X: Deserialize<'de>,
V: Default,
[src]
V: VideoFrame,
M: Deserialize<'de>,
B: Deserialize<'de>,
X: Deserialize<'de>,
V: Default,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
[src]
__D: Deserializer<'de>,
impl<M, B, X, V> EarIn for Ula<M, B, X, V> where
V: VideoFrame,
[src]
V: VideoFrame,
fn set_ear_in(&mut self, ear_in: bool, delta_fts: u32)
[src]
fn feed_ear_in<I>(&mut self, fts_deltas: I, max_frames_threshold: Option<usize>) where
I: Iterator<Item = NonZeroU32>,
[src]
I: Iterator<Item = NonZeroU32>,
It's most optimal to be done after ensure_next_frame is called, but is not necessary.
Panics
Panics if adding the delta would exceed the TsCounter max_value (Ts::max_value() as u32 * V::HTS_COUNT as u32).
fn purge_ear_in_changes(&mut self, ear_in: bool)
[src]
fn read_ear_in_count(&self) -> u32
[src]
fn read_ear_mode(&self) -> ReadEarMode
[src]
fn set_read_ear_mode(&mut self, mode: ReadEarMode)
[src]
impl<A, M, B, X, V> EarInAudioFrame<A> for Ula<M, B, X, V> where
A: Blep,
V: VideoFrame,
[src]
A: Blep,
V: VideoFrame,
fn render_ear_in_audio_frame<L: AmpLevels<A::SampleDelta>>(
&self,
blep: &mut A,
channel: usize
)
[src]
&self,
blep: &mut A,
channel: usize
)
impl<A, M, B, X, V> EarMicOutAudioFrame<A> for Ula<M, B, X, V> where
A: Blep,
V: VideoFrame,
[src]
A: Blep,
V: VideoFrame,
fn render_earmic_out_audio_frame<L: AmpLevels<A::SampleDelta>>(
&self,
blep: &mut A,
channel: usize
)
[src]
&self,
blep: &mut A,
channel: usize
)
impl<M, B, X, V: VideoFrame> FrameState for Ula<M, B, X, V>
[src]
fn current_frame(&self) -> u64
[src]
fn set_frame_counter(&mut self, fc: u64)
[src]
fn frame_tstate(&self) -> (u64, FTs)
[src]
fn current_tstate(&self) -> FTs
[src]
fn set_frame_tstate(&mut self, ts: FTs)
[src]
fn is_frame_over(&self) -> bool
[src]
impl<M: ZxMemory, B, X> HostConfig for Ula<M, B, X, UlaVideoFrame>
[src]
const CPU_HZ: u32
[src]
const FRAME_TSTATES: FTs
[src]
fn effective_cpu_rate(multiplier: f64) -> f64
[src]
fn effective_frame_duration_nanos(multiplier: f64) -> u32
[src]
fn effective_frame_duration(multiplier: f64) -> Duration
[src]
fn frame_duration_nanos() -> u32
[src]
fn frame_duration() -> Duration
[src]
impl<M, B, X, V> Io for Ula<M, B, X, V> where
M: ZxMemory,
B: BusDevice,
B::Timestamp: From<VFrameTs<V>>,
V: VideoFrame,
[src]
M: ZxMemory,
B: BusDevice,
B::Timestamp: From<VFrameTs<V>>,
V: VideoFrame,
type Timestamp = VideoTs
This type is being used for timestamping I/O operations. See also [Clock::Timestamp].
type WrIoBreak = ()
A value of this type is returned when a break is being requested by [Io::write_io].
type RetiBreak = ()
A value of this type is returned when a break is being requested by [Io::reti].
fn is_irq(&mut self, VideoTs { vc: vc, hc: hc }: VideoTs) -> bool
[src]
fn read_io(&mut self, port: u16, ts: VideoTs) -> (u8, Option<NonZeroU16>)
[src]
fn write_io(
&mut self,
port: u16,
data: u8,
ts: VideoTs
) -> (Option<()>, Option<NonZeroU16>)
[src]
&mut self,
port: u16,
data: u8,
ts: VideoTs
) -> (Option<()>, Option<NonZeroU16>)
fn irq_data(
&mut self,
pc: u16,
timestamp: Self::Timestamp
) -> (u8, Option<NonZeroU16>)
&mut self,
pc: u16,
timestamp: Self::Timestamp
) -> (u8, Option<NonZeroU16>)
fn reti(
&mut self,
address: u16,
timestamp: Self::Timestamp
) -> Option<Self::RetiBreak>
&mut self,
address: u16,
timestamp: Self::Timestamp
) -> Option<Self::RetiBreak>
impl<M, B, X, V> KeyboardInterface for Ula<M, B, X, V>
[src]
fn get_key_state(&self) -> ZXKeyboardMap
[src]
fn set_key_state(&mut self, keymap: ZXKeyboardMap)
[src]
impl<M, B, X, V> Memory for Ula<M, B, X, V> where
M: ZxMemory,
X: MemoryExtension,
V: VideoFrame,
[src]
M: ZxMemory,
X: MemoryExtension,
V: VideoFrame,
type Timestamp = VideoTs
This type is being used for timestamping memory operations. See also [Clock::Timestamp].
fn read_debug(&self, addr: u16) -> u8
[src]
fn read_mem(&self, addr: u16, _ts: VideoTs) -> u8
[src]
fn read_mem16(&self, addr: u16, _ts: VideoTs) -> u16
[src]
fn read_opcode(&mut self, pc: u16, ir: u16, ts: VideoTs) -> u8
[src]
fn write_mem(&mut self, addr: u16, val: u8, ts: VideoTs)
[src]
impl<M, B, X, V> MemoryAccess for Ula<M, B, X, V> where
M: ZxMemory,
X: MemoryExtension,
[src]
M: ZxMemory,
X: MemoryExtension,
type Memory = M
type MemoryExt = X
fn memory_ext_ref(&self) -> &Self::MemoryExt
[src]
fn memory_ext_mut(&mut self) -> &mut Self::MemoryExt
[src]
fn memory_mut(&mut self) -> &mut Self::Memory
[src]
fn memory_ref(&self) -> &Self::Memory
[src]
fn memory_with_ext_mut(&mut self) -> (&mut Self::Memory, &mut Self::MemoryExt)
[src]
impl<'a, M: 'a, B: 'a, X: 'a, F: 'a> MicOut<'a> for Ula<M, B, X, F> where
F: VideoFrame,
[src]
F: VideoFrame,
type PulseIter = MicPulseIter<Iter<'a, VideoTsData2>, F>
fn mic_out_pulse_iter(&'a self) -> Self::PulseIter
[src]
impl<M, B, X, V> ScreenDataProvider for Ula<M, B, X, V> where
M: ZxMemory,
X: MemoryExtension,
[src]
M: ZxMemory,
X: MemoryExtension,
fn get_screen_mode(&self) -> ScrMode
[src]
fn set_screen_mode(&mut self, mode: ScrMode) -> bool
[src]
fn screen_primary_ref(&self) -> &ScreenArray
[src]
fn screen_primary_mut(&mut self) -> &mut ScreenArray
[src]
fn screen_secondary_ref(&self) -> &[u8; 6912]
[src]
fn screen_secondary_mut(&mut self) -> &mut [u8; 6912]
[src]
fn screen_palette_ref(&self) -> &[u8; 64]
[src]
fn screen_palette_mut(&mut self) -> &mut [u8; 64]
[src]
impl<M, B, X, V> Serialize for Ula<M, B, X, V> where
V: VideoFrame,
M: Serialize,
B: Serialize,
X: Serialize,
[src]
V: VideoFrame,
M: Serialize,
B: Serialize,
X: Serialize,
fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error> where
__S: Serializer,
[src]
__S: Serializer,
impl<M, B, X, V> UlaControl for Ula<M, B, X, V>
[src]
fn has_late_timings(&self) -> bool
[src]
fn set_late_timings(&mut self, late_timings: bool)
[src]
fn ula128_mem_port_value(&self) -> Option<Ula128MemFlags>
[src]
fn set_ula128_mem_port_value(&mut self, _value: Ula128MemFlags) -> bool
[src]
fn ula3_ctrl_port_value(&self) -> Option<Ula3CtrlFlags>
[src]
fn set_ula3_ctrl_port_value(&mut self, _value: Ula3CtrlFlags) -> bool
[src]
fn scld_ctrl_port_value(&self) -> Option<ScldCtrlFlags>
[src]
fn set_scld_ctrl_port_value(&mut self, _value: ScldCtrlFlags) -> bool
[src]
fn scld_mmu_port_value(&self) -> Option<u8>
[src]
fn set_scld_mmu_port_value(&mut self, _value: u8) -> bool
[src]
fn ulaplus_reg_port_value(&self) -> Option<UlaPlusRegFlags>
[src]
fn set_ulaplus_reg_port_value(&mut self, _value: UlaPlusRegFlags) -> bool
[src]
fn ulaplus_data_port_value(&self) -> Option<u8>
[src]
fn set_ulaplus_data_port_value(&mut self, _value: u8) -> bool
[src]
impl<M, B, X, V> UlaControlExt for Ula<M, B, X, V> where
M: ZxMemory,
B: BusDevice,
B::Timestamp: From<VFrameTs<V>>,
V: VideoFrame,
[src]
M: ZxMemory,
B: BusDevice,
B::Timestamp: From<VFrameTs<V>>,
V: VideoFrame,
fn prepare_next_frame<C: MemoryContention>(
&mut self,
vtsc: VFrameTsCounter<V, C>
) -> VFrameTsCounter<V, C>
[src]
&mut self,
vtsc: VFrameTsCounter<V, C>
) -> VFrameTsCounter<V, C>
fn ensure_next_frame_vtsc(
&mut self
) -> VFrameTsCounter<Self::VideoFrame, Self::Contention>
[src]
&mut self
) -> VFrameTsCounter<Self::VideoFrame, Self::Contention>
impl<'a, M, B, X, V> UlaPlusInner<'a> for Ula<M, B, X, V> where
M: ZxMemory,
X: MemoryExtension,
V: VideoFrame,
[src]
M: ZxMemory,
X: MemoryExtension,
V: VideoFrame,
type ScreenSwapIter = Empty<VideoTs>
fn is_ula_port(port: u16) -> bool
[src]
fn ula_write_earmic(&mut self, flags: UlaPortFlags, ts: VideoTs)
[src]
fn push_screen_change(&mut self, _ts: VideoTs)
[src]
fn update_last_border_color(&mut self, border: BorderColor) -> bool
[src]
fn page1_screen0_shadow_bank(&self) -> Option<bool>
[src]
fn page1_screen1_shadow_bank(&self) -> Option<bool>
[src]
fn page3_screen0_shadow_bank(&self) -> Option<bool>
[src]
fn page3_screen1_shadow_bank(&self) -> Option<bool>
[src]
fn frame_cache_mut_mem_ref(
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory)
[src]
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory)
fn shadow_frame_cache_mut_mem_ref(
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory)
[src]
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory)
fn beg_screen_shadow(&self) -> bool
[src]
fn cur_screen_shadow(&self) -> bool
[src]
fn video_render_data_view(
&mut self
) -> VideoRenderDataView<'_, Self::ScreenSwapIter, Self::Memory, Self::VideoFrame>
[src]
&mut self
) -> VideoRenderDataView<'_, Self::ScreenSwapIter, Self::Memory, Self::VideoFrame>
impl<M: ZxMemory, D, X, V: VideoFrame> Video for Ula<M, D, X, V>
[src]
type VideoFrame = V
The type implementing VideoFrame, that is being used by the chipset emulator.
type Contention = UlaMemoryContention
The type implementing MemoryContention, that is being used by the chipset emulator.
fn border_color(&self) -> BorderColor
[src]
fn set_border_color(&mut self, border: BorderColor)
[src]
fn render_video_frame<'a, B: PixelBuffer<'a>, P: Palette<Pixel = B::Pixel>>(
&mut self,
buffer: &'a mut [u8],
pitch: usize,
border_size: BorderSize
)
[src]
&mut self,
buffer: &'a mut [u8],
pitch: usize,
border_size: BorderSize
)
fn current_video_ts(&self) -> VideoTs
[src]
fn current_video_clock(&self) -> VFrameTsCounter<V, UlaMemoryContention>
[src]
fn set_video_ts(&mut self, vts: VideoTs)
[src]
fn flash_state(&self) -> bool
[src]
const PIXEL_DENSITY: u32
[src]
fn render_size_pixels(border_size: BorderSize) -> (u32, u32)
[src]
fn pixel_density() -> u32
[src]
fn visible_screen_bank(&self) -> usize
[src]
Auto Trait Implementations
impl<M, B, X, V> RefUnwindSafe for Ula<M, B, X, V> where
B: RefUnwindSafe,
M: RefUnwindSafe,
V: RefUnwindSafe,
X: RefUnwindSafe,
B: RefUnwindSafe,
M: RefUnwindSafe,
V: RefUnwindSafe,
X: RefUnwindSafe,
impl<M, B, X, V> Send for Ula<M, B, X, V> where
B: Send,
M: Send,
V: Send,
X: Send,
B: Send,
M: Send,
V: Send,
X: Send,
impl<M, B, X, V> Sync for Ula<M, B, X, V> where
B: Sync,
M: Sync,
V: Sync,
X: Sync,
B: Sync,
M: Sync,
V: Sync,
X: Sync,
impl<M, B, X, V> Unpin for Ula<M, B, X, V> where
B: Unpin,
M: Unpin,
V: Unpin,
X: Unpin,
B: Unpin,
M: Unpin,
V: Unpin,
X: Unpin,
impl<M, B, X, V> UnwindSafe for Ula<M, B, X, V> where
B: UnwindSafe,
M: UnwindSafe,
V: UnwindSafe,
X: UnwindSafe,
B: UnwindSafe,
M: UnwindSafe,
V: UnwindSafe,
X: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> DeserializeOwned for T where
T: for<'de> Deserialize<'de>,
[src]
T: for<'de> Deserialize<'de>,
impl<U, I> FrameState for U where
I: FrameState,
U: InnerAccess<Inner = I>,
[src]
I: FrameState,
U: InnerAccess<Inner = I>,
fn current_frame(&self) -> u64
[src]
fn set_frame_counter(&mut self, fc: u64)
[src]
fn frame_tstate(&self) -> (u64, i32)
[src]
fn current_tstate(&self) -> i32
[src]
fn set_frame_tstate(&mut self, ts: i32)
[src]
fn is_frame_over(&self) -> bool
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<S, T> IntoSample<S> for T where
S: FromSample<T>,
[src]
S: FromSample<T>,
fn into_sample(self) -> S
[src]
impl<T> LoadScr for T where
T: ScreenDataProvider,
[src]
T: ScreenDataProvider,
fn load_scr<R>(&mut self, src: R) -> Result<(), Error> where
R: Read + Seek,
[src]
R: Read + Seek,
fn save_scr<W>(&self, dst: W) -> Result<(), Error> where
W: Write,
[src]
W: Write,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<B, U> UlaAudioFrame<B> for U where
B: Blep,
U: AudioFrame<B> + EarMicOutAudioFrame<B> + EarInAudioFrame<B> + AyAudioFrame<B>,
[src]
B: Blep,
U: AudioFrame<B> + EarMicOutAudioFrame<B> + EarInAudioFrame<B> + AyAudioFrame<B>,
impl<U> UlaCommon for U where
U: UlaControl + FrameState + ControlUnit + MemoryAccess + Video + KeyboardInterface + EarIn + for<'a> MicOut<'a>,
[src]
U: UlaControl + FrameState + ControlUnit + MemoryAccess + Video + KeyboardInterface + EarIn + for<'a> MicOut<'a>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,