export interface RunOptions {
    /** Emulator executable binary */
    bin?: string;
    /** Additional CLI args to pass to emulator program. Remote debugger args are added automatically */
    args: string[];
    /** Directory to mount as hard drive 0 (SYS) */
    mountDir?: string;
    /** Callback executed on process exit */
    onExit?: () => void;
}
export interface DebugOptions extends RunOptions {
    serverPort: number;
    remoteProgram: string;
}
export declare type EmulatorType = "fs-uae" | "winuae";
/**
 * Base emulator class
 */
export declare abstract class Emulator {
    /**
     * Running emulator process
     */
    private childProcess?;
    /**
     * Return default path for emulator binary for platform
     */
    protected abstract defaultBin(): string;
    /**
     * Generated args to pass when running
     */
    protected abstract runArgs(opts: RunOptions): string[];
    /**
     * Generated args to pass when debugging
     */
    protected abstract debugArgs(opts: DebugOptions): string[];
    /**
     * Factory
     */
    static getInstance(type: EmulatorType): Emulator;
    /**
     * Start emulator with remote debugger
     */
    debug(opts: DebugOptions): Promise<void>;
    /**
     * Start emulator process
     */
    run(opts: RunOptions): Promise<void>;
    /**
     * Check suitablity of emulator binary path
     */
    protected checkBin(bin: string): boolean;
    /**
     * Terminate process
     */
    destroy(): void;
}
/**
 * FS-UAE emaultor program
 */
export declare class FsUAE extends Emulator {
    protected defaultBin(): string;
    protected checkBin(bin: string): boolean;
    protected runArgs(opts: RunOptions): string[];
    protected debugArgs(opts: DebugOptions): string[];
}
/**
 * WinUAE Emulator program
 */
export declare class WinUAE extends Emulator {
    protected defaultBin(): string;
    protected checkBin(bin: string): boolean;
    protected runArgs(opts: RunOptions): string[];
    protected debugArgs(opts: DebugOptions): string[];
}
