summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs47
1 files changed, 33 insertions, 14 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 4ff35eb..20e4e4e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,23 +1,28 @@
#![feature(bigint_helper_methods)]
-#![feature(unchecked_shifts)]
#![feature(seek_stream_len)]
-#![feature(io_error_more)]
+#![feature(unchecked_shifts)]
mod debug;
mod devices;
mod emulators;
-mod metadata;
+mod types;
-pub use debug::DebugState;
+pub use debug::*;
pub use devices::*;
pub use emulators::*;
-pub use metadata::*;
+pub use types::*;
+
+use bedrock_core::*;
+use log::*;
+use phosphor::*;
use std::num::NonZeroU32;
-use std::time::Duration;
+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 TICK_DURATION: Duration = Duration::from_nanos( 1_000_000_000/256 );
+pub const MIN_FRAME_DURATION: Duration = Duration::from_millis( 10 );
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) };
@@ -25,10 +30,24 @@ pub const DEFAULT_SCREEN_SCALE: NonZeroU32 = unsafe { NonZeroU32::new_unchecked(
pub type ScreenPosition = geometry::Point<u16>;
pub type ScreenDimensions = geometry::Dimensions<u16>;
-#[macro_export]
-macro_rules! error {
- ($source:expr, $($tokens:tt)*) => {{
- eprint!("[ERROR] [{}]: ", $source);
- eprintln!($($tokens)*);
- }};
+
+pub fn run_program(bytecode: &[u8], config: EmulatorConfig) {
+ let mut args = switchboard::Switchboard::from_env();
+ args.named("verbose").short('v');
+ if args.get("verbose").as_bool() {
+ log::set_log_level(log::LogLevel::Info);
+ }
+
+ match Phosphor::new() {
+ Ok(phosphor) => {
+ info!("Starting graphical emulator");
+ let mut emulator = GraphicalEmulator::new(config, false);
+ emulator.load_program(&bytecode);
+ emulator.run(phosphor, true);
+ }
+ Err(err) => {
+ eprintln!("EventLoopError: {err:?}");
+ fatal!("Could not start graphical event loop");
+ }
+ }
}