diff --git a/src/term.c b/src/term.c
index f222fb46..28aa6253 100644
--- a/src/term.c
+++ b/src/term.c
@@ -733,18 +733,26 @@ static int cmd_help(PROGRAMMER * pgm, struct avrpart * p,
 static int cmd_spi(PROGRAMMER * pgm, struct avrpart * p,
         int argc, char * argv[])
 {
-  pgm->setpin(pgm, PIN_AVR_RESET, 1);
-  spi_mode = 1;
-  return 0;
+  if (pgm->setpin != NULL) {
+    pgm->setpin(pgm, PIN_AVR_RESET, 1);
+    spi_mode = 1;
+    return 0;
+  }
+  avrdude_message(MSG_INFO, "`spi' command unavailable for this programmer type\n");
+  return -1;
 }
 
 static int cmd_pgm(PROGRAMMER * pgm, struct avrpart * p,
         int argc, char * argv[])
 {
-  pgm->setpin(pgm, PIN_AVR_RESET, 0);
-  spi_mode = 0;
-  pgm->initialize(pgm, p);
-  return 0;
+  if (pgm->setpin != NULL) {
+    pgm->setpin(pgm, PIN_AVR_RESET, 0);
+    spi_mode = 0;
+    pgm->initialize(pgm, p);
+    return 0;
+  }
+  avrdude_message(MSG_INFO, "`pgm' command unavailable for this programmer type\n");
+  return -1;
 }
 
 static int cmd_verbose(PROGRAMMER * pgm, struct avrpart * p,