nes-emu
Version:
A NES emulator
94 lines (92 loc) • 2.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
const KB = 1024;
const SCREEN_WIDTH = 256;
const SCREEN_HEIGHT = 240;
const PPU_FRAME_RATE = 60.098;
const APU_SAMPLE_RATE = 44100;
const TILE_LENGTH = 8;
const ATTRIBUTE_TABLE_BLOCK_SIZE = 32;
const ATTRIBUTE_TABLE_REGION_SIZE = 16;
/** NES Emulation constants. */
var _default = exports.default = {
SCREEN_WIDTH,
SCREEN_HEIGHT,
TOTAL_PIXELS: SCREEN_WIDTH * SCREEN_HEIGHT,
BUTTONS: 8,
KB,
ROM_MAGIC_NUMBER: "NES",
ROM_HEADER_SIZE: 16,
ROM_TRAINER_SIZE: 512,
PRG_ROM_PAGE_SIZE: 16 * KB,
CHR_ROM_PAGE_SIZE: 8 * KB,
CHR_RAM_PAGES: 1,
CARTRIDGE_RAM_SIZE: 8 * KB,
FREQ_CPU_HZ: 1789773,
FREQ_PPU_HZ: 5369318,
FREQ_APU_HZ: 894887,
PPU_STEPS_PER_CPU_CYCLE: 3,
APU_STEPS_PER_CPU_CYCLE: 0.5,
CPU_ADDRESSED_MEMORY: 64 * KB,
CPU_STACK_START_ADDRESS: 0x0100,
CPU_MAPPER_START_ADDRESS: 0x4020,
CPU_INTERRUPT_CYCLES: 7,
PPU_FRAME_RATE,
PPU_ADDRESSED_PALETTE_RAM_START_ADDRESS: 0x3f00,
PPU_OAM_SIZE: 256,
PPU_LAST_CYCLE: 340,
PPU_LAST_SCANLINE: 260,
OAMDMA_CPU_CYCLES: 513,
PPU_CYCLE_CLEAR_FLAGS: 1,
PPU_CYCLE_VBLANK: 1,
PPU_CYCLE_RENDER_BACKGROUND: 0,
PPU_CYCLE_RENDER_SPRITES: 0,
PPU_CYCLE_MAPPER_TICK: 260,
APU_SAMPLE_RATE,
APU_MAX_VOLUME: 15,
APU_MIN_TIMER: 8,
APU_MAX_TIMER: 0x7ff,
TILE_LENGTH,
TILE_SIZE: 16,
SPRITE_WIDTH: 8,
SPRITE_SIZE: 4,
MAX_SPRITES: 64,
MAX_SPRITES_PER_SCANLINE: 8,
COLOR_TRANSPARENT: 0,
NAME_TABLES_START_ADDRESS: 0x2000,
NAME_TABLE_TOTAL_TILES_X: SCREEN_WIDTH / TILE_LENGTH,
NAME_TABLE_SIZE: 1024,
ATTRIBUTE_TABLE_BLOCK_SIZE,
ATTRIBUTE_TABLE_TOTAL_BLOCKS_X: SCREEN_WIDTH / ATTRIBUTE_TABLE_BLOCK_SIZE,
ATTRIBUTE_TABLE_REGION_SIZE,
ATTRIBUTE_TABLE_TOTAL_REGIONS_X: ATTRIBUTE_TABLE_BLOCK_SIZE / ATTRIBUTE_TABLE_REGION_SIZE,
ATTRIBUTE_TABLE_REGION_SIZE_BITS: 2,
ATTRIBUTE_TABLE_SIZE: 64,
PATTERN_TABLES_START_ADDRESS: 0x0000,
PATTERN_TABLE_SIZE: 0x1000,
PALETTE_BACKGROUND_START: 0,
PALETTE_FOREGROUND_START: 4,
PALETTE_SIZE: 4,
LOOPY_ADDR_COARSE_X_OFFSET: 0,
LOOPY_ADDR_COARSE_X_MASK: 0b11111,
LOOPY_ADDR_COARSE_Y_OFFSET: 5,
LOOPY_ADDR_COARSE_Y_MASK: 0b11111,
LOOPY_ADDR_BASE_NAME_TABLE_ID_OFFSET: 10,
LOOPY_ADDR_BASE_NAME_TABLE_ID_MASK: 0b11,
LOOPY_ADDR_FINE_Y_OFFSET: 12,
LOOPY_ADDR_FINE_Y_MASK: 0b111,
SPRITE_BYTE_Y: 0,
SPRITE_BYTE_TILE_ID: 1,
SPRITE_BYTE_ATTRIBUTES: 2,
SPRITE_BYTE_X: 3,
SPRITE_ATTR_PALETTE_BITS_START: 0,
SPRITE_ATTR_PALETTE_BITS_SIZE: 2,
SPRITE_ATTR_PRIORITY_BIT: 5,
SPRITE_ATTR_HORIZONTAL_FLIP_BIT: 6,
SPRITE_ATTR_VERTICAL_FLIP_BIT: 7,
SPRITE_8x16_PATTERN_TABLE_MASK: 0b1,
SPRITE_8x16_TILE_ID_MASK: 0xfe
};