feat: look for gba bios in data path
This commit is contained in:
parent
557b90a39f
commit
78b849b6ff
|
@ -93,7 +93,7 @@ pub const Scheduler = struct {
|
||||||
// invalidates the slice we're iterating over
|
// invalidates the slice we're iterating over
|
||||||
_ = self.queue.removeIndex(i);
|
_ = self.queue.removeIndex(i);
|
||||||
|
|
||||||
log.debug("Removed {?}@{}", .{ event.kind, event.tick });
|
// log.debug("Removed {?}@{}", .{ event.kind, event.tick });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
35
src/main.zig
35
src/main.zig
|
@ -70,8 +70,24 @@ pub fn main() void {
|
||||||
|
|
||||||
config.load(allocator, cfg_file_path) catch |e| exitln("failed to load config file: {}", .{e});
|
config.load(allocator, cfg_file_path) catch |e| exitln("failed to load config file: {}", .{e});
|
||||||
|
|
||||||
const paths = handleArguments(allocator, data_path, &result) catch |e| exitln("failed to handle cli arguments: {}", .{e});
|
var paths = handleArguments(allocator, data_path, &result) catch |e| exitln("failed to handle cli arguments: {}", .{e});
|
||||||
defer if (paths.save) |path| allocator.free(path);
|
defer paths.deinit(allocator);
|
||||||
|
|
||||||
|
// if paths.bios is null, then we want to see if it's in the data directory
|
||||||
|
if (paths.bios == null) blk: {
|
||||||
|
const bios_path = std.mem.join(allocator, "/", &.{ data_path, "zba", "gba_bios.bin" }) catch |e| exitln("failed to allocate backup bios dir path: {}", .{e});
|
||||||
|
defer allocator.free(bios_path);
|
||||||
|
|
||||||
|
_ = std.fs.cwd().statFile(bios_path) catch |e| switch (e) {
|
||||||
|
error.FileNotFound => { // ZBA will crash on attempt to read BIOS but that's fine
|
||||||
|
log.err("file located at {s} was not found", .{bios_path});
|
||||||
|
break :blk;
|
||||||
|
},
|
||||||
|
else => exitln("error when checking \"{s}\": {}", .{ bios_path, e }),
|
||||||
|
};
|
||||||
|
|
||||||
|
paths.bios = allocator.dupe(u8, bios_path) catch |e| exitln("failed to duplicate path to bios: {}", .{e});
|
||||||
|
}
|
||||||
|
|
||||||
const log_file = switch (config.config().debug.cpu_trace) {
|
const log_file = switch (config.config().debug.cpu_trace) {
|
||||||
true => std.fs.cwd().createFile("zba.log", .{}) catch |e| exitln("failed to create trace log file: {}", .{e}),
|
true => std.fs.cwd().createFile("zba.log", .{}) catch |e| exitln("failed to create trace log file: {}", .{e}),
|
||||||
|
@ -153,13 +169,16 @@ pub fn main() void {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handleArguments(allocator: Allocator, data_path: []const u8, result: *const clap.Result(clap.Help, ¶ms, clap.parsers.default)) !FilePaths {
|
fn handleArguments(allocator: Allocator, data_path: []const u8, result: *const clap.Result(clap.Help, ¶ms, clap.parsers.default)) !FilePaths {
|
||||||
const rom_path = romPath(result);
|
const rom_path = try romPath(allocator, result);
|
||||||
log.info("ROM path: {?s}", .{rom_path});
|
errdefer if (rom_path) |path| allocator.free(path);
|
||||||
|
|
||||||
const bios_path = result.args.bios;
|
const bios_path: ?[]const u8 = if (result.args.bios) |path| try allocator.dupe(u8, path) else null;
|
||||||
if (bios_path) |path| log.info("BIOS path: {s}", .{path}) else log.warn("No BIOS provided", .{});
|
errdefer if (bios_path) |path| allocator.free(path);
|
||||||
|
|
||||||
const save_path = try std.fs.path.join(allocator, &[_][]const u8{ data_path, "zba", "save" });
|
const save_path = try std.fs.path.join(allocator, &[_][]const u8{ data_path, "zba", "save" });
|
||||||
|
|
||||||
|
log.info("ROM path: {?s}", .{rom_path});
|
||||||
|
log.info("BIOS path: {?s}", .{bios_path});
|
||||||
log.info("Save path: {s}", .{save_path});
|
log.info("Save path: {s}", .{save_path});
|
||||||
|
|
||||||
return .{
|
return .{
|
||||||
|
@ -203,10 +222,10 @@ fn ensureConfigDirExists(config_path: []const u8) !void {
|
||||||
try dir.makePath("zba");
|
try dir.makePath("zba");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn romPath(result: *const clap.Result(clap.Help, ¶ms, clap.parsers.default)) ?[]const u8 {
|
fn romPath(allocator: Allocator, result: *const clap.Result(clap.Help, ¶ms, clap.parsers.default)) !?[]const u8 {
|
||||||
return switch (result.positionals.len) {
|
return switch (result.positionals.len) {
|
||||||
0 => null,
|
0 => null,
|
||||||
1 => result.positionals[0],
|
1 => try allocator.dupe(u8, result.positionals[0]),
|
||||||
else => exitln("ZBA received too many positional arguments.", .{}),
|
else => exitln("ZBA received too many positional arguments.", .{}),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,13 @@ pub fn escape(title: [12]u8) [12]u8 {
|
||||||
pub const FilePaths = struct {
|
pub const FilePaths = struct {
|
||||||
rom: ?[]const u8,
|
rom: ?[]const u8,
|
||||||
bios: ?[]const u8,
|
bios: ?[]const u8,
|
||||||
save: ?[]const u8,
|
save: []const u8,
|
||||||
|
|
||||||
|
pub fn deinit(self: @This(), allocator: Allocator) void {
|
||||||
|
if (self.rom) |path| allocator.free(path);
|
||||||
|
if (self.bios) |path| allocator.free(path);
|
||||||
|
allocator.free(self.save);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const io = struct {
|
pub const io = struct {
|
||||||
|
|
Loading…
Reference in New Issue