diff -urpbd binutils-2.9.5.0.31-orig/opcodes/i386-dis.c binutils-2.9.5.0.31/opcodes/i386-dis.c
--- binutils-2.9.5.0.31-orig/opcodes/i386-dis.c	Thu Jan 13 20:43:43 2000
+++ binutils-2.9.5.0.31/opcodes/i386-dis.c	Mon Apr 17 14:50:58 2000
@@ -1514,6 +1514,12 @@ static const struct dis386 dis386_twobyt
   { "(bad)", XX, XX, XX }
 };
 
+static const struct dis386 dis386_l4[] = {
+    /* 00 */
+    { "", XX, XX, XX },
+    { "int3", XX, XX, XX }
+};
+
 static const unsigned char onebyte_has_modrm[256] = {
   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
   /*       -------------------------------        */
@@ -2205,6 +2211,100 @@ print_insn_i386 (pc, info)
         dp = &dis386_twobyte_att[*++codep];
       need_modrm = twobyte_has_modrm[*codep];
       uses_f3_prefix = twobyte_uses_f3_prefix[*codep];
+    }
+  else
+  if (*codep == 0xcc)
+    {
+      /* L4KD's hacks */
+      FETCH_DATA (info, codep + 3);	/* get two more bytes */
+      need_modrm = 0;
+      uses_f3_prefix = 0;
+
+      dp = &dis386_l4[0];
+      switch (*++codep)
+      {
+      case 0x3c:
+	  switch(*++codep)
+	  {
+	  case  0:	oappend ("l4kd   outchar(%al)");	break;
+	  case  1:	oappend ("l4kd   outstring(%eax)");	break;
+	  case  2:	oappend ("l4kd   outcstring(%eax)");	break;
+	  case  3:	oappend ("l4kd   clear_page");		break;
+	  case  4:	oappend ("l4kd   cursor");		break;
+	  case  5:	oappend ("l4kd   outhex32(%eax)");	break;
+	  case  6:	oappend ("l4kd   outhex20(%eax)");	break;
+	  case  7:	oappend ("l4kd   outhex16(%eax)");	break;
+	  case  8:	oappend ("l4kd   outhex12(%eax)");	break;
+	  case  9:	oappend ("l4kd   outhex8(%eax)");	break;
+	  case 10:	oappend ("l4kd   outhex4(%eax)");	break;
+	  case 11:	oappend ("l4kd   outdec(%eax)");	break;
+	  case 12:	oappend ("l4kd   incharety");		break;
+	  case 13:	oappend ("l4kd   inchar");		break;
+	  case 14:	oappend ("l4kd   inhex32");		break;
+	  case 15:	oappend ("l4kd   inhex16");		break;
+	  case 16:	oappend ("l4kd   inhex8");		break;
+	  case 17:	oappend ("l4kd   inhext");		break;
+	  case ' ' ... 0x7f:
+	  {
+	      char msg[2] = {*codep,0};
+	      oappend ("l4kd   ko('"); oappend (msg); oappend ("')");
+	  }; break;
+	  default:
+	      oappend ("l4kd   ???");			break;
+	  };
+	  break;
+
+      case 0x90:
+      {
+	  int len;
+	  
+	  if (*++codep == 0xeb)
+	  {
+	      oappend ("l4kd   kd_display(\"");
+	      
+	      FETCH_DATA (info, codep + 2);
+	      len = *++codep;
+	      
+	      FETCH_DATA (info, codep + len + 1);
+	      {
+		  char msg[len + 1];
+		  strncpy(msg, codep + 1, len);
+		  msg[len] = 0;
+		  oappend (msg);
+		  codep += len;
+	      };
+	      oappend ("\")");
+	  }
+	  else
+	  {
+	      codep -= 2;
+	      dp = &dis386_l4[1];
+	  };
+
+      }; break;
+      case 0xeb:
+      {
+	  int len;
+	  oappend ("l4kd   enter_kdebug(\"");
+	  
+	  FETCH_DATA (info, codep + 2);
+	  len = *++codep;
+
+	  FETCH_DATA (info, codep + len + 1);
+ 	  {
+	      char msg[len + 1];
+	      strncpy(msg, codep + 1, len);
+	      msg[len] = 0;
+	      oappend (msg);
+	      codep += len;
+	  };
+	  oappend ("\")");
+      }; break;
+      default:
+	  codep--;
+	  dp = &dis386_l4[1];
+	  break;
+      }
     }
   else
     {

