UNPKG

68kcounter

Version:
54 lines (53 loc) 1.49 kB
import { Mnemonic } from "../syntax"; import { InstructionStatement } from "../parse/nodes"; import { Variables } from "../parse/evaluate"; /** * Timing vector: * cycles, reads, writes */ export declare type Timing = [number, number, number]; /** * Result of timing lookup for an instruction */ export interface InstructionTiming { values: Timing[]; labels: string[]; calculation?: Calculation; } /** * Describes how the timings are calculated */ export interface Calculation { base: Timing[]; ea?: Timing; multiplier?: Timing; /** Known number or range */ n?: number | [number, number]; } export declare function popCount(x: number): number; /** * Look up timing information for a parsed instruction statement */ export declare function instructionTimings(statement: InstructionStatement, vars: Variables): InstructionTiming | null; /** * Convert timing to string per the 68000 documentation * * clock(read/write) */ export declare const formatTiming: (timing: Timing) => string; /** * Add two timing vectors */ export declare function addTimings(a: Timing, b: Timing): Timing; /** * Multiply a timing vector by a scalar value */ export declare function multiplyTiming(t: Timing, scalar: number): Timing; /** * Calculate timing n value from register range used in MOVEM */ export declare function rangeN(range: string): number; /** * Get text labels for multiple timings */ export declare function timingLabels(op: Mnemonic): string[];