{"id":28223,"date":"2007-01-30T10:00:00","date_gmt":"2007-01-30T10:00:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/oldnewthing\/2007\/01\/30\/unusual-uses-for-a-ball-point-pen-breaking-into-the-debugger\/"},"modified":"2021-02-08T10:37:41","modified_gmt":"2021-02-08T18:37:41","slug":"20070130-00","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20070130-00\/?p=28223","title":{"rendered":"Unusual uses for a ball-point pen: Breaking into the debugger"},"content":{"rendered":"<p>Before PCI there was ISA. The pinout for ISA slots had one very convenient property: If you shorted the last two pins in an open ISA slot, you generated an NMI. (This trick is <a href=\"http:\/\/www.microsoft.com\/whdc\/system\/CEC\/dmpsw.mspx\"> alluded to in passing in this discussion of generating crash dumps from hardware<\/a>.)<\/p>\n<p>It so happened that the tip of a ball-point pen was the ideal shape for accomplishing this. You inserted the tip of the pen at the very end of an open slot (the end nearest the back of the computer) and slowly dragged it towards the front of the computer until it shorted the nearest pair of pins.<\/p>\n<table style=\"border: solid .75pt black; border-right: none;\" border=\"0\">\n<tbody>\n<tr style=\"border-top: solid .75pt black; height: 1ex;\">\n<td rowspan=\"3\" valign=\"center\">O\u2192<\/td>\n<td bgcolor=\"black\">\u00a0<\/td>\n<td>&nbsp;<\/td>\n<td bgcolor=\"black\">\u00a0<\/td>\n<td>&nbsp;<\/td>\n<td bgcolor=\"black\">\u00a0<\/td>\n<td>\u00a0\u00a0\u00a0<\/td>\n<\/tr>\n<tr style=\"height: .5ex;\">\n<td style=\"font-size: 10%;\"><!-- empty --><\/td>\n<\/tr>\n<tr style=\"height: 1ex;\">\n<td bgcolor=\"black\">\u00a0<\/td>\n<td>&nbsp;<\/td>\n<td bgcolor=\"black\">\u00a0<\/td>\n<td>&nbsp;<\/td>\n<td bgcolor=\"black\">\u00a0<\/td>\n<td>\u00a0\u00a0\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>If you had the Windows\u00a095 debugger connected to the system (known as <code>WDEB386<\/code>), it caught the NMI and broke into the debugger. Doesn&#8217;t matter if interrupts were disabled; you got your debugger. NMI stands for &#8220;non-maskable interrupt&#8221; and it&#8217;s the &#8220;non-maskable&#8221; part that is important here, for it means that there&#8217;s nothing that will prevent it from happening\u00b9. Very handy if a device driver got itself stuck in an infinite loop. You could tell the real device driver developers from the posers by seeing who carried a ball-point pen with them. (I&#8217;ll talk more about NMI in a future entry.)<\/p>\n<p>I was reminded of this little hardware trivia by a colleague who pointed out that his first encounter with me was me trying to break into a machine that had wedged by asking him to perform this little maneuver. Over the phone. From 1600 miles away. He was convinced it was some sort of prank.<\/p>\n<p>Bonus ISA trivia: During the transition period from ISA to PCI, motherboards supported both buses. If you looked at a computer from this era, you saw eight ISA slots and eight PCI slots&#8230; and eight brackets in the cover for the cards to mount into. How did that work? Shouldn&#8217;t there be sixteen mounting brackets?<\/p>\n<p>Those PCI folks were so clever. If you looked at an ISA card from above, with the back plate of the computer facing away from you, it looked like this:\u00a0<span style=\"font-family: Lucida Sans Unicode;\">\u2308<\/span> The board itself formed the vertical stroke, and the little metal mounting bracket formed the horizontal stroke. The mounting bracket on the case therefore sat slightly to the right of the ISA slot. The PCI folks made their cards a mirror image of the ISA card: If you looked at a PCI card from above, it looked like this:\u00a0<span style=\"font-family: Lucida Sans Unicode;\">\u2309<\/span> The mounting bracket on the case sat to the <strong>right<\/strong> of the PCI slot.<\/p>\n<p>In this way, you were able to accommodate eight ISA slots and eight PCI slots with only eight mounting brackets. Each mounting bracket supported the PCI slot to its left <strong>or<\/strong> the ISA slot to its right.<\/p>\n<p>\u00b9For pedants: Yes, you could actually get a machine so badly wedged that even the NMI had no effect, but you needed the help of poorly-behaving hardware devices.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ah, the ISA bus&#8230;<\/p>\n","protected":false},"author":1069,"featured_media":111744,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[2],"class_list":["post-28223","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-history"],"acf":[],"blog_post_summary":"<p>Ah, the ISA bus&#8230;<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/28223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/users\/1069"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/comments?post=28223"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/28223\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media\/111744"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media?parent=28223"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=28223"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=28223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}