import { EventInterface } from 'microevent.ts'; import CartridgeInfo from './CartridgeInfo'; import Cpuinterface from '../../cpu/CpuInterface'; import BusInterface from '../../bus/BusInterface'; import RngInterface from '../../../tools/rng/GeneratorInterface'; interface CartridgeInterface { init(): Promise; reset(): void; read(address: number): number; peek(address: number): number; write(address: number, value: number): void; getType(): CartridgeInfo.CartridgeType; setCpu(cpu: Cpuinterface): this; setBus(bus: BusInterface): this; setRng(rng: RngInterface): this; setCpuTimeProvider(provider: () => number): this; notifyCpuCycleComplete(): void; randomize(rng: RngInterface): void; trap: EventInterface; } declare namespace CartridgeInterface { const enum TrapReason { invalidRead = 0, invalidWrite = 1, other = 2 } class TrapPayload { reason: TrapReason; cartridge: CartridgeInterface; message?: string; constructor(reason: TrapReason, cartridge: CartridgeInterface, message?: string); } } export { CartridgeInterface as default };