mirror of
https://github.com/Polprzewodnikowy/SummerCart64.git
synced 2024-11-21 21:49:15 +01:00
[SC64][SW] Added support for Only 64DD IPL mode in deployer. (#43)
And added ability to pipe commands in debug mode.
This commit is contained in:
parent
716123fedf
commit
a4a52fd15a
@ -137,6 +137,11 @@ impl TryFrom<&[u8]> for Heartbeat {
|
||||
}
|
||||
}
|
||||
|
||||
pub enum UserInput {
|
||||
Packet(sc64::DebugPacket),
|
||||
EOF,
|
||||
}
|
||||
|
||||
macro_rules! success {
|
||||
($($a: tt)*) => {
|
||||
println!("{}", format!($($a)*).bright_blue());
|
||||
@ -164,11 +169,11 @@ impl Handler {
|
||||
self.encoding = encoding;
|
||||
}
|
||||
|
||||
pub fn process_user_input(&self) -> Option<sc64::DebugPacket> {
|
||||
let line = match self.line_rx.try_recv() {
|
||||
pub fn process_user_input(&self) -> Option<UserInput> {
|
||||
let raw_line = match self.line_rx.try_recv() {
|
||||
Ok(line) => {
|
||||
if line.len() == 0 {
|
||||
return None;
|
||||
return Some(UserInput::EOF);
|
||||
} else {
|
||||
line
|
||||
}
|
||||
@ -176,6 +181,11 @@ impl Handler {
|
||||
Err(_) => return None,
|
||||
};
|
||||
|
||||
let line = raw_line.trim_end();
|
||||
if line.len() == 0 {
|
||||
return None;
|
||||
}
|
||||
|
||||
let token_count = line.matches("@").count();
|
||||
|
||||
if (token_count % 2) != 0 {
|
||||
@ -235,7 +245,7 @@ impl Handler {
|
||||
);
|
||||
}
|
||||
|
||||
Some(packet)
|
||||
Some(UserInput::Packet(packet))
|
||||
}
|
||||
|
||||
pub fn handle_debug_packet(&mut self, debug_packet: sc64::DebugPacket) {
|
||||
@ -419,7 +429,7 @@ fn stdin_thread(line_tx: Sender<String>) {
|
||||
loop {
|
||||
let mut line = String::new();
|
||||
if stdin().read_line(&mut line).is_ok() {
|
||||
if line_tx.send(line.trim_end().to_string()).is_err() {
|
||||
if line_tx.send(line.to_string()).is_err() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -120,7 +120,6 @@ struct _64DDArgs {
|
||||
ddipl: PathBuf,
|
||||
|
||||
/// Path to the 64DD disk file (.ndd format, can be specified multiple times)
|
||||
#[arg(required = true)]
|
||||
disk: Vec<PathBuf>,
|
||||
|
||||
/// Path to the ROM file
|
||||
@ -405,10 +404,11 @@ fn handle_64dd_command(connection: Connection, args: &_64DDArgs) -> Result<(), s
|
||||
let mut debug_handler = debug::new();
|
||||
|
||||
println!(
|
||||
"{}\n{}\n{}",
|
||||
"{}\n{}\n{}\n{}",
|
||||
"========== [WARNING] ==========".bold().bright_yellow(),
|
||||
"Do not use this mode when real 64DD accessory is connected to the N64".bright_yellow(),
|
||||
"Doing so might permanently damage either N64, 64DD or SC64".bright_yellow()
|
||||
"Doing so might permanently damage either N64, 64DD or SC64".bright_yellow(),
|
||||
"\"Only 64DD IPL\" mode should be safe on development units without IPL builtin".bright_green()
|
||||
);
|
||||
|
||||
sc64.reset_state()?;
|
||||
@ -474,6 +474,13 @@ fn handle_64dd_command(connection: Connection, args: &_64DDArgs) -> Result<(), s
|
||||
|
||||
sc64.calculate_cic_parameters()?;
|
||||
|
||||
if args.disk.len() == 0 {
|
||||
let dd_mode = sc64::DdMode::DdIpl;
|
||||
println!("64DD mode set to [{dd_mode}]");
|
||||
sc64.configure_64dd(dd_mode, None)?;
|
||||
return Ok(())
|
||||
}
|
||||
|
||||
let disk_paths: Vec<String> = args
|
||||
.disk
|
||||
.iter()
|
||||
@ -493,7 +500,7 @@ fn handle_64dd_command(connection: Connection, args: &_64DDArgs) -> Result<(), s
|
||||
|
||||
let dd_mode = sc64::DdMode::Full;
|
||||
println!("64DD mode set to [{dd_mode} / {drive_type}]");
|
||||
sc64.configure_64dd(dd_mode, drive_type)?;
|
||||
sc64.configure_64dd(dd_mode, Some(drive_type))?;
|
||||
|
||||
println!(
|
||||
"{}: {}",
|
||||
@ -587,8 +594,11 @@ fn handle_64dd_command(connection: Connection, args: &_64DDArgs) -> Result<(), s
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
} else if let Some(debug_packet) = debug_handler.process_user_input() {
|
||||
sc64.send_debug_packet(debug_packet)?;
|
||||
} else if let Some(user_input) = debug_handler.process_user_input() {
|
||||
match user_input {
|
||||
debug::UserInput::Packet(debug_packet) => sc64.send_debug_packet(debug_packet)?,
|
||||
debug::UserInput::EOF => break,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -640,8 +650,11 @@ fn handle_debug_command(connection: Connection, args: &DebugArgs) -> Result<(),
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
} else if let Some(debug_packet) = debug_handler.process_user_input() {
|
||||
sc64.send_debug_packet(debug_packet)?;
|
||||
} else if let Some(user_input) = debug_handler.process_user_input() {
|
||||
match user_input {
|
||||
debug::UserInput::Packet(debug_packet) => sc64.send_debug_packet(debug_packet)?,
|
||||
debug::UserInput::EOF => break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -559,13 +559,15 @@ impl SC64 {
|
||||
pub fn configure_64dd(
|
||||
&mut self,
|
||||
dd_mode: DdMode,
|
||||
drive_type: DdDriveType,
|
||||
drive_type: Option<DdDriveType>,
|
||||
) -> Result<(), Error> {
|
||||
self.command_config_set(Config::DdMode(dd_mode))?;
|
||||
self.command_config_set(Config::DdSdEnable(Switch::Off))?;
|
||||
self.command_config_set(Config::DdDriveType(drive_type))?;
|
||||
self.command_config_set(Config::DdDiskState(DdDiskState::Ejected))?;
|
||||
self.command_config_set(Config::ButtonMode(ButtonMode::UsbPacket))?;
|
||||
if let Some(drive_type) = drive_type {
|
||||
self.command_config_set(Config::DdSdEnable(Switch::Off))?;
|
||||
self.command_config_set(Config::DdDriveType(drive_type))?;
|
||||
self.command_config_set(Config::DdDiskState(DdDiskState::Ejected))?;
|
||||
self.command_config_set(Config::ButtonMode(ButtonMode::UsbPacket))?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user