m68kdecode
Version:
Port of deplinenoise/m68kdecode to Typescript
40 lines (34 loc) • 1.21 kB
text/typescript
import { Displacement } from "./types";
export function getBits(word: number, first: number, length: number): number {
const s = word >> first;
const mask = (1 << length) - 1;
return s & mask;
}
/// Convenience function (for tests and decoding cases) to generate a simple displacement value.
export const simpleDisp = (disp: number): Displacement => ({
baseDisplacement: disp,
outerDisplacement: 0,
indexer: null,
indirection: null,
});
/// Convenience function (for tests and decoding cases) to generate a displacement with a data
/// register and scale.
export const drDispScale = (
dr: number,
disp: number,
scale: number
): Displacement => ({
baseDisplacement: disp,
outerDisplacement: 0,
indexer: { kind: "DR", reg: dr, scale },
indirection: null,
});
/// Convenience function (for tests and decoding cases) to generate a displacement with a data
/// register.
export const drDisp = (dr: number, disp: number): Displacement =>
drDispScale(dr, disp, 0);
// Signed integer conversion
export const i16 = (v: number) => (v << 16) >> 16;
export const u16 = (v: number) => v & 0xffff;
export const i8 = (v: number) => (v << 24) >> 24;
export const u8 = (v: number) => v & 0xff;