1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
/* Copyright (C) 2020 Rafal Michalski This file is part of SPECTRUSTY, a Rust library for building emulators. For the full copyright notice, see the lib.rs file. */ use super::ZxMemory; #[cfg(feature = "snapshot")] use serde::{Serialize, Deserialize}; /// An interface for memory paging extensions of [ZxMemory]. /// /// Provide an implementation as the associated type [crate::chip::MemoryAccess::MemoryExt]. pub trait MemoryExtension: core::fmt::Debug { /// Read op-code from the given `memory` at the given `pc` address, optionally altering provided memory. #[inline] fn read_opcode<M: ZxMemory>(&mut self, pc: u16, memory: &mut M) -> u8 { memory.read(pc) } // /// Writes to the memory extension port. Should return optionally modified `data` if the extension wants // /// to influence some other chipset functions. // #[inline] // fn write_io<M: ZxMemory>(&mut self, _port: u16, data: u8, _memory: &mut M) -> u8 { // data // } // /// Reads from the memory extension port. // fn read_io<M: ZxMemory>(&mut self, _port: u16, _memory: &mut M) -> u8 { // u8::max_value() // } } /// A placeholder memory extension. Useful as a default. #[derive(Clone, Copy, Default, Debug)] #[cfg_attr(feature = "snapshot", derive(Serialize, Deserialize))] pub struct NoMemoryExtension; impl MemoryExtension for NoMemoryExtension {}