68kcounter
Version:
68000 ASM source code cycle counter
54 lines (53 loc) • 1.49 kB
TypeScript
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[];