#![feature(bigint_helper_methods)]
#![feature(seek_stream_len)]
#![feature(unchecked_shifts)]

mod devices;
mod emulators;
mod types;
mod load_program;

pub use devices::*;
pub use emulators::*;
pub use types::*;
pub use load_program::*;

use bedrock_core::*;
use log::*;
use phosphor::*;

use std::num::NonZeroU32;
use std::path::{Path, PathBuf};
use std::time::{Duration, Instant};

pub const BATCH_SIZE: usize = 1000;
pub const MIN_TICK_DURATION: Duration = Duration::from_millis( 4 );
pub const MIN_FRAME_DURATION: Duration = Duration::from_millis( 14 );
pub const MAX_FRAME_DURATION: Duration = Duration::from_millis( 500 );
pub const DEFAULT_SCREEN_SIZE: ScreenDimensions = ScreenDimensions::new(800,600);
pub const DEFAULT_SCREEN_SCALE: NonZeroU32 = unsafe { NonZeroU32::new_unchecked(1) };

pub type ScreenPosition = geometry::Point<u16>;
pub type ScreenDimensions = geometry::Dimensions<u16>;