MicroCartridge

Struct MicroCartridge 

Source
pub struct MicroCartridge { /* private fields */ }
Expand description

This struct represents an emulated Microdrive tape cartridge.

It consist of up to MAX_SECTORS Sectors. Instances of this struct can be “inserted” into one of 8 ZxMicrodrives’s emulator drives.

Implementations§

Source§

impl MicroCartridge

Source

pub fn head_at(&self) -> f32

Returns the current drive’s head position counted in sectors as floating point value.

The fractional part indicates how far the head position is within a sector.

Source

pub fn max_sectors(&self) -> usize

Returns the number of the emulated physical sectors on the tape.

Source

pub fn count_formatted(&self) -> usize

Returns the number of formatted sectors.

Source

pub fn iter_with_indices( &self, ) -> FilterMap<Enumerate<Zip<Iter<'_, Sector>, Iter<'_, u32, Lsb0>>>, &dyn Fn((usize, (&Sector, BitRef<'_, Const, u32>))) -> Option<(u8, &Sector)>>

Returns an iterator of formatted sectors with their original indices.

Source

pub fn is_write_protected(&self) -> bool

Returns true if the cartridge is write protected.

Source

pub fn set_write_protected(&mut self, protect: bool)

Changes the write protected flag of the cartridge.

Source

pub fn is_sector_formatted(&self, sector: u8) -> bool

Returns true if the given sector is formatted.

§Panics

Panics if sector equals to or is above the max_sectors limit.

Source

pub fn new_with_sectors<S>( sectors: S, write_protect: bool, max_sectors: usize, ) -> MicroCartridge
where S: Into<Vec<Sector>>,

Creates a new instance of MicroCartridge with provided sectors.

§Note

Content of the sectors is not verified and is assumed to be properly formatted.

§Panics

The number of sectors provided must not be greater than MAX_USABLE_SECTORS. max_sectors must not be 0 and must be grater or equal to the number of provided sectors and must not be greater than MAX_SECTORS.

Source

pub fn new(max_sectors: usize) -> MicroCartridge

Creates a new instance of MicroCartridge with custom max_sectors number.

§Panics

max_sectors must not be 0 and must not be greater than MAX_SECTORS.

Trait Implementations§

Source§

impl Clone for MicroCartridge

Source§

fn clone(&self) -> MicroCartridge

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MicroCartridge

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for MicroCartridge

Source§

fn default() -> MicroCartridge

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for MicroCartridge

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<MicroCartridge, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Index<u8> for MicroCartridge

Source§

type Output = Sector

The returned type after indexing.
Source§

fn index(&self, index: u8) -> &<MicroCartridge as Index<u8>>::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl IndexMut<u8> for MicroCartridge

Source§

fn index_mut(&mut self, index: u8) -> &mut <MicroCartridge as Index<u8>>::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<'a> IntoIterator for &'a MicroCartridge

Iterates through formatted sectors.

Source§

type Item = &'a Sector

The type of the elements being iterated over.
Source§

type IntoIter = FilterMap<Zip<Iter<'a, Sector>, Iter<'a, u32, Lsb0>>, &'a dyn Fn((&'a Sector, BitRef<'a, Const, u32>)) -> Option<&'a Sector>>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> <&'a MicroCartridge as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl<'a> IntoIterator for &'a mut MicroCartridge

Iterates through formatted sectors.

Source§

type Item = &'a mut Sector

The type of the elements being iterated over.
Source§

type IntoIter = FilterMap<Zip<IterMut<'a, Sector>, Iter<'a, u32, Lsb0>>, &'a dyn Fn((&'a mut Sector, BitRef<'a, Const, u32>)) -> Option<&'a mut Sector>>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> <&'a mut MicroCartridge as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl MicroCartridgeExt for MicroCartridge

Source§

fn file_info<S: AsRef<[u8]>>( &self, file_name: S, ) -> Result<Option<CatFile>, MdrValidationError>

Returns file meta data if the file with file_name exists.
Source§

fn file_type<S: AsRef<[u8]>>( &self, file_name: S, ) -> Result<Option<CatFileType>, MdrValidationError>

Returns a file type if the file with file_name exists.
Source§

fn file_to_tap_writer<S: AsRef<[u8]>, W: Write + Seek>( &self, file_name: S, wr: &mut TapChunkWriter<W>, ) -> Result<bool>

Retrieves content of a binary file and writes it to a TAP chunk writer with a proper TAP header. Read more
Source§

fn file_from_tap_reader<R: Read + Seek>( &mut self, rd: &mut TapChunkReader<R>, ) -> Result<u8>

Stores content read from a TAP chunk reader as a new file on a MicroCartridge. Returns the number of newly occupied sectors on success. Read more
Source§

fn retrieve_file<S: AsRef<[u8]>, W: Write>( &self, file_name: S, wr: W, ) -> Result<Option<(CatFileType, usize)>>

Retrieves content of a file from a MicroCartridge and writes it to wr if the file with file_name exists. Returns the type and the size of the file on success. Read more
Source§

fn store_file<S: AsRef<[u8]>, R: Read>( &mut self, file_name: S, is_save: bool, rd: R, ) -> Result<u8>

Stores content read from rd as a new file on a MicroCartridge. Returns the number of newly occupied sectors on success. Read more
Source§

fn erase_file<S: AsRef<[u8]>>(&mut self, file_name: S) -> u8

Marks all sectors (including copies and unclosed files) belonging to a provided file_name as free. Returns the number of erased sectors.
Source§

fn file_sector_ids_unordered<S: AsRef<[u8]>>( &self, file_name: S, ) -> FileSectorIdsUnordIter<'_>

Returns an iterator of sector indices with unordered blocks of the provided file_name. Read more
Source§

fn file_sectors<S: AsRef<[u8]>>(&self, file_name: S) -> FileSectorIter<'_>

Returns an iterator of sectors with ordered blocks belonging to the provided file_name. Read more
Source§

fn catalog(&self) -> Result<Option<Catalog>, MdrValidationError>

Validates formatted sectors and returns a catalog of files. Read more
Source§

fn catalog_name(&self) -> Result<Option<Cow<'_, str>>, MdrValidationError>

Validates formatted sectors and returns a catalog name if all formatted sectors contain the same header indicating a properly formatted cartridge. Read more
Source§

fn validate_sectors(&self) -> Result<usize, MdrValidationError>

Checks if each formatted sector has flags property set and if all checksums are valid.
Source§

fn count_sectors_in_use(&self) -> usize

Returns the number of sectors being used by file data.
Source§

fn from_mdr<R: Read>(rd: R, max_sectors: usize) -> Result<Self>

Reads the content of an .mdr file into the MicroCartridge sectors. Read more
Source§

fn write_mdr<W: Write>(&self, wr: W) -> Result<usize>

Writes all formatted sectors to an .mdr file using a provided writer. Read more
Source§

fn new_formatted<S: AsRef<[u8]>>(max_sectors: usize, catalog_name: S) -> Self

Creates a new instance of MicroCartridge with formatted sectors. Read more
Source§

impl Serialize for MicroCartridge

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<S, T> IntoSample<S> for T
where S: FromSample<T>,

Source§

fn into_sample(self) -> S

Convert to S a sample type from self.
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,