diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt
index ffe74e6..cd70384 100644
--- a/tool/CMakeLists.txt
+++ b/tool/CMakeLists.txt
@@ -38,10 +38,14 @@ add_executable(aaruformattool
wiiu/convert.c
wiiu/reader.c
wiiu/reader.h
+ ngcw/convert.c
${CMAKE_CURRENT_SOURCE_DIR}/../src/lib/aes128.c
${CMAKE_CURRENT_SOURCE_DIR}/../src/ps3/ps3_crypto.c
${CMAKE_CURRENT_SOURCE_DIR}/../src/ps3/ps3_encryption_map.c
${CMAKE_CURRENT_SOURCE_DIR}/../src/wiiu/wiiu_crypto.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/../src/ngcw/lfg.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/../src/ngcw/ngcw_junk.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/../src/ngcw/wii_crypto.c
termbox2.h
)
diff --git a/tool/aaruformattool.h b/tool/aaruformattool.h
index f93bdbe..0b4f091 100644
--- a/tool/aaruformattool.h
+++ b/tool/aaruformattool.h
@@ -46,5 +46,6 @@ int inject_media_tag(const char *tag_type, const char *media_tag_file, c
int convert_ps3(const char *input_path, const char *output_path, const char *disc_key_hex, const char *data1_key_hex,
const char *ird_path);
int convert_wiiu(const char *input_path, const char *output_path, const char *disc_key_hex);
+int convert_ngcw(const char *input_path, const char *output_path);
#endif // LIBAARUFORMAT_TOOL_AARUFORMATTOOL_H_
diff --git a/tool/commands.c b/tool/commands.c
index 8cd4a00..7c75f95 100644
--- a/tool/commands.c
+++ b/tool/commands.c
@@ -266,6 +266,26 @@ int cmd_convert_wiiu(int argc, char *argv[])
return result;
}
+int cmd_convert_ngcw(int argc, char *argv[])
+{
+ struct arg_str *input_filename = arg_str1(NULL, NULL, "", "Input ISO or AaruFormat image");
+ struct arg_str *output_filename = arg_str1(NULL, NULL, "