diff --git a/src/app.rs b/src/app.rs index ec9fddc..569a798 100644 --- a/src/app.rs +++ b/src/app.rs @@ -41,10 +41,15 @@ pub struct Application { persistence: Persistence, viewports: HashMap, focused: Option, + init_debug_port: Option, } impl Application { - pub fn new(client: EmulatorClient, proxy: EventLoopProxy) -> Self { + pub fn new( + client: EmulatorClient, + proxy: EventLoopProxy, + debug_port: Option, + ) -> Self { let icon = load_icon().ok().map(Arc::new); let persistence = Persistence::new(); let mappings = MappingProvider::new(persistence.clone()); @@ -63,6 +68,7 @@ impl Application { persistence, viewports: HashMap::new(), focused: None, + init_debug_port: debug_port, } } @@ -86,9 +92,12 @@ impl ApplicationHandler for Application { self.persistence.clone(), SimId::Player1, ); - let wrapper = Viewport::new(event_loop, self.icon.clone(), Box::new(app)); - self.focused = Some(wrapper.id()); - self.viewports.insert(wrapper.id(), wrapper); + self.open(event_loop, Box::new(app)); + if let Some(port) = self.init_debug_port { + let mut server = GdbServerWindow::new(SimId::Player1, self.client.clone()); + server.start(port); + self.open(event_loop, Box::new(server)); + } } fn window_event( diff --git a/src/main.rs b/src/main.rs index e9abf8e..0d97e7d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,7 +22,11 @@ mod window; #[derive(Parser)] struct Args { + /// The path to a virtual boy ROM to run. rom: Option, + /// Start a GDB/LLDB debug server on this port. + #[arg(short, long)] + debug_port: Option, } fn set_panic_handler() { @@ -101,6 +105,6 @@ fn main() -> Result<()> { let event_loop = EventLoop::with_user_event().build().unwrap(); event_loop.set_control_flow(ControlFlow::Poll); let proxy = event_loop.create_proxy(); - event_loop.run_app(&mut Application::new(client, proxy))?; + event_loop.run_app(&mut Application::new(client, proxy, args.debug_port))?; Ok(()) } diff --git a/src/window/gdb.rs b/src/window/gdb.rs index c96c169..9d6fa0f 100644 --- a/src/window/gdb.rs +++ b/src/window/gdb.rs @@ -21,6 +21,12 @@ impl GdbServerWindow { server: GdbServer::new(sim_id, client), } } + + pub fn start(&mut self, port: u16) { + self.server.stop(); + self.port_str = port.to_string(); + self.server.start(port); + } } impl AppWindow for GdbServerWindow {