Preface to the Second Edition
The first edition of this book was published in September 1999. With much delight I realized that I had finally written a book that would never need revising! This was in stark contrast to my first book, which was about programming applications for Microsoft Windows. That one had already gone through five editions in just ten years. My second book on the OS/2 Presentation Manager (the what?) became obsolete much more quickly. But Code, I was certain, would last forever.
My original idea with Code was to start with very simple concepts but slowly build to a very deep understanding of the workings of digital computers. Through this steady progression up the hill of knowledge, I would employ a minimum of metaphors, analogies, and silly illustrations, and instead use the language and symbols of the actual engineers who design and build computers. I also had a very clever trick up my sleeve: I would use ancient technologies to demonstrate universal principles under the assumption that these ancient technologies were already quite old and would never get older. It was as if I were writing a book about the internal combustion engine but based on the Ford Model T.
I still think that my approach was sound, but I was wrong in some of the details. As the years went by, the book started to show its age. Some of the cultural references became stale. Phones and fingers supplemented keyboards and mice. The internet certainly existed in 1999, but it was nothing like what it eventually became. Unicode¡ªthe text encoding that allows a uniform representation of all the world¡¯s languages as well as emojis¡ªgot less than a page in the first edition. And JavaScript, the programming language that has become pervasive on the web, wasn¡¯t mentioned at all.
Those problems would probably have been easy to fix, but there existed another aspect of the first edition that continued to bother me. I wanted to show the workings of an actual CPU¡ªthe central processing unit that forms the brain, heart, and soul of a computer¡ªbut the first edition didn¡¯t quite make it. I felt that I had gotten close to this crucial breakthrough but then I had given up. Readers didn¡¯t seem to complain, but to me it was a glaring flaw.
That deficiency has been corrected in this second edition. That¡¯s why it¡¯s some 70 pages longer. Yes, it¡¯s a longer journey, but if you come along with me through the pages of this second edition, we shall dive much deeper into the internals of the CPU. Whether this will be a more pleasurable experience for you or not, I do not know. If you feel like you¡¯re going to drown, please come up for air. But if you make it through Chapter 24, you should feel quite proud, and you¡¯ll be pleased to know that the remainder of the book is a breeze.
Charles Petzold
Preface to the Second Edition
Chapter One: Best Friends
Chapter Two: Codes and Combinations
Chapter Three: Braille and Binary Codes
Chapter Four: Anatomy of a Flashlight
Chapter Five: Communicating Around Corners
Chapter Six: Logic with Switches
Chapter Seven: Telegraphs and Relays
Chapter Eight: Relays and Gates
Chapter Nine: Our Ten Digits
Chapter Ten: Alternative 10s
Chapter Eleven: Bit by Bit by Bit
Chapter Twelve: Bytes and Hexadecimal
Chapter Thirteen: From ASCII to Unicode
Chapter Fourteen: Adding with Logic Gates
Chapter Fifteen: Is This for Real?
Chapter Sixteen: But What About Subtraction?
Chapter Seventeen: Feedback and Flip-Flops
Chapter Eighteen: Let's Build a Clock!
Chapter Nineteen: An Assemblage of Memory
Chapter Twenty: Automating Arithmetic
Chapter Twenty-One: The Arithmetic Logic Unit
Chapter Twenty-Two: Registers and Busses
Chapter Twenty-Three: CPU Control Signals
Chapter Twenty-Four: Loops, Jumps, and Calls
Chapter Twenty-Five: Peripherals...
Chapter Twenty-Six: The Operating System
Chapter Twenty-Seven: Coding
Chapter Twenty-Eight: The World Brain