diff --git a/desmume/src/cli/main.cpp b/desmume/src/cli/main.cpp
index da9663bd0..987b1ae79 100644
--- a/desmume/src/cli/main.cpp
+++ b/desmume/src/cli/main.cpp
@@ -112,6 +112,7 @@ struct my_config {
   u16 arm7_gdb_port;
 
   int disable_sound;
+  int engine_3d;
 
 #ifdef INCLUDE_OPENGL_2D
   int opengl_2d;
@@ -138,6 +139,8 @@ init_config( struct my_config *config) {
 
   config->cflash_disk_image_file = NULL;
 
+  config->engine_3d = 0;
+
 #ifdef INCLUDE_OPENGL_2D
   config->opengl_2d = 0;
   config->soft_colour_convert = 0;
@@ -159,8 +162,11 @@ fill_config( struct my_config *config,
     if ( strcmp( argv[i], "--help") == 0) {
       printf( "USAGE: %s <nds-file>\n", argv[0]);
       printf( "OPTIONS:\n");
-      printf( "   --disable-sound         Disables the sound emulation\n");
+      printf( "   --disable-sound     Disables the sound emulation\n");
       printf( "   --disable-limiter   Disables the 60 fps limiter\n");
+      printf( "   --3d-engine=ENGINE  Enables software 3d rasterizer, available ENGINES:\n");
+      printf( "                         0 = 3d disabled - default\n");
+      printf( "                         1 = internal desmume software rasterizer\n");
 #ifdef INCLUDE_OPENGL_2D
       printf( "   --opengl-2d         Enables using OpenGL for screen rendering\n");
       printf( "    --soft-convert     Use software colour conversion during OpenGL\n");
@@ -207,6 +213,18 @@ fill_config( struct my_config *config,
     else if ( strcmp( argv[i], "--disable-limiter") == 0) {
       config->disable_limiter = 1;
     }
+    else if ( strncmp( argv[i], "--3d-engine=", 12) == 0) {
+      char *end_char;
+      int engine = strtoul( &argv[i][12], &end_char, 10);
+
+      if ( engine == 0 || engine == 1) {
+        config->engine_3d = engine;
+      }
+      else {
+        fprintf( stderr, "3d engine can be 0 or 1\n");
+        good_args = 0;
+      }
+    }
     else if ( strncmp( argv[i], "--fwlang=", 9) == 0) {
       char *end_char;
       int lang = strtoul( &argv[i][9], &end_char, 10);
@@ -635,7 +653,7 @@ int main(int argc, char ** argv) {
     SPU_ChangeSoundCore(SNDCORE_SDL, 735 * 4);
   }
 
-  NDS_3D_ChangeCore(1);
+  NDS_3D_ChangeCore(my_config.engine_3d);
 
   if (NDS_LoadROM( my_config.nds_file, MC_TYPE_AUTODETECT, 1, my_config.cflash_disk_image_file) < 0) {
     fprintf(stderr, "error while loading %s\n", my_config.nds_file);