Trait spectrusty::chip::plus::UlaPlusInner
source · pub trait UlaPlusInner<'a>: Video + MemoryAccess {
type ScreenSwapIter: Iterator<Item = VideoTs> + 'a;
Show 13 methods
fn ula_write_earmic(&mut self, flags: UlaPortFlags, ts: VideoTs);
fn push_screen_change(&mut self, ts: VideoTs);
fn update_last_border_color(&mut self, border: BorderColor) -> bool;
fn page1_screen0_shadow_bank(&self) -> Option<bool>;
fn page1_screen1_shadow_bank(&self) -> Option<bool>;
fn page3_screen0_shadow_bank(&self) -> Option<bool>;
fn page3_screen1_shadow_bank(&self) -> Option<bool>;
fn frame_cache_mut_mem_ref(
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory);
fn shadow_frame_cache_mut_mem_ref(
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory);
fn beg_screen_shadow(&self) -> bool;
fn cur_screen_shadow(&self) -> bool;
fn video_render_data_view(
&'a mut self
) -> VideoRenderDataView<'a, Self::ScreenSwapIter, Self::Memory, Self::VideoFrame>;
fn is_ula_port(port: u16) -> bool { ... }
}
Expand description
Implemented by chipsets that UlaPlus can enhance.
Required Associated Types§
type ScreenSwapIter: Iterator<Item = VideoTs> + 'a
Required Methods§
sourcefn ula_write_earmic(&mut self, flags: UlaPortFlags, ts: VideoTs)
fn ula_write_earmic(&mut self, flags: UlaPortFlags, ts: VideoTs)
Sets the state of EarMic flags and optionally records an EarMic change.
sourcefn push_screen_change(&mut self, ts: VideoTs)
fn push_screen_change(&mut self, ts: VideoTs)
Records a shadow screen swap.
sourcefn update_last_border_color(&mut self, border: BorderColor) -> bool
fn update_last_border_color(&mut self, border: BorderColor) -> bool
Updates the border color, returns true
if the border color has changed.
sourcefn page1_screen0_shadow_bank(&self) -> Option<bool>
fn page1_screen0_shadow_bank(&self) -> Option<bool>
Returns Some(is_shadow)
if a screen memory is accessible at page address: 0x4000-0x5FFF.
sourcefn page1_screen1_shadow_bank(&self) -> Option<bool>
fn page1_screen1_shadow_bank(&self) -> Option<bool>
Returns Some(is_shadow)
if a screen memory is accessible at page address: 0x6000-0x7FFF.
sourcefn page3_screen0_shadow_bank(&self) -> Option<bool>
fn page3_screen0_shadow_bank(&self) -> Option<bool>
Returns Some(is_shadow)
if a screen memory is accessible at page address: 0xC000-0xDFFF.
sourcefn page3_screen1_shadow_bank(&self) -> Option<bool>
fn page3_screen1_shadow_bank(&self) -> Option<bool>
Returns Some(is_shadow)
if a screen memory is accessible at page address: 0xE000-0xFFFF.
sourcefn frame_cache_mut_mem_ref(
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory)
fn frame_cache_mut_mem_ref(
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory)
Returns a mutable reference to the normal frame cache and a memory reference.
sourcefn shadow_frame_cache_mut_mem_ref(
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory)
fn shadow_frame_cache_mut_mem_ref(
&mut self
) -> (&mut UlaFrameCache<Self::VideoFrame>, &Self::Memory)
Returns a mutable reference to the shadow frame cache and a memory reference.
sourcefn beg_screen_shadow(&self) -> bool
fn beg_screen_shadow(&self) -> bool
Returns true if the shadow screen is displayed at the beginning of the video frame.
sourcefn cur_screen_shadow(&self) -> bool
fn cur_screen_shadow(&self) -> bool
Returns true if the shadow screen is currently being displayed.
sourcefn video_render_data_view(
&'a mut self
) -> VideoRenderDataView<'a, Self::ScreenSwapIter, Self::Memory, Self::VideoFrame>
fn video_render_data_view(
&'a mut self
) -> VideoRenderDataView<'a, Self::ScreenSwapIter, Self::Memory, Self::VideoFrame>
Returns references to components necessary for video rendering.
Provided Methods§
sourcefn is_ula_port(port: u16) -> bool
fn is_ula_port(port: u16) -> bool
Returns true
if port
matches the ULA port.
Examples found in repository?
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
fn write_io(&mut self, port: u16, data: u8, ts: VideoTs) -> (Option<()>, Option<NonZeroU16>) {
if U::is_ula_port(port) {
let border = BorderColor::from_bits_truncate(data);
self.change_border_color(border, ts);
self.ula.ula_write_earmic(UlaPortFlags::from_bits_truncate(data), ts);
}
else if ScldCtrlPortAddress::match_port(port) && !self.ulaplus_disabled {
self.write_scld_ctrl_port(ScldCtrlFlags::from(data), ts);
}
else if PlusRegisterPortAddress::match_port(port) && !self.ulaplus_disabled {
self.write_plus_regs_port(UlaPlusRegFlags::from(data), ts);
}
else if PlusDataPortAddress::match_port(port) && !self.ulaplus_disabled {
self.write_plus_data_port(data, ts);
}
else {
return self.ula.write_io(port, data, ts)
}
(None, None)
}