Ich habe einen großartigen Programmierer namens Steve Wozniak gefunden

Es war einmal, als Computer groß waren und das Geschäft langweilig wurde, passierte etwas Unerwartetes. Junge Hacker haben einen Weg gefunden, PCs auf billigen Mikroprozessoren aus Teletypen und Ampeln zusammenzubauen. Einer von ihnen war Steve Wozniak. Diese Jungs nahmen die Einschränkungen ihrer Computer als Herausforderung, setzten sich und ließen diese winzigen Chips erstaunliche Dinge tun. Folgendes hat Dr. Dobbs Journal im August 1976 veröffentlicht :



Dies ist eine Reihe von arithmetischen Prozeduren für reelle Zahlen. Der Mikroprozessor (6502, wie in Apple I und II) konnte nur mit Bytes arbeiten, dh mit ganzen Zahlen zwischen 0 und 255. Schlimmer noch, er konnte sie nur addieren und subtrahieren. Aber mit dieser Bibliothek können Sie berechnen 1.26271099.56oder nimm sogar die Quadratwurzel von pi. Überraschenderweise passte ein Programmautor namens Steve Wozniak die Grundfunktionen (Addition, Subtraktion, Multiplikation und Division) mit insgesamt 127 Anweisungen in 239 Bytes an.

Dies ist eine ziemlich beeindruckende Programmierung. Nachdem ich es mehrmals gelesen habe, kann ich sagen, dass er einfach brillant ist. Zum Beispiel werden Zyklen von Multiplikations- und Divisionsprozeduren 23 Mal ausgelöst, einmal für jedes Bit im Ergebnis. Glaubst du, Woz wird zwei Bytes damit verbringen, an beiden Stellen die Konstante 23 zu schreiben? Natürlich nicht! Es lädt die Konstante 23 in die vorläufige Routine, die beide Schleifen verwenden:



Als weiteres Beispiel sollten Algorithmen die absoluten Werte von M1 und M2 annehmen. Könnten Sie schreiben

  M1 = abs (M1);
 M2 = abs (M2); 

Woz wiederholt sich nicht so. Er schreibt eine Prozedur, die den absoluten Wert von M1 annimmt und dann M1 und M2 ändert. Dann wird diese Prozedur zweimal aufgerufen , sodass das gleiche Ergebnis mit der Hälfte der Codemenge erzielt wird. Darüber hinaus muss M1 und M2 auch an anderer Stelle ersetzt werden, sodass der Code einen doppelten Job ausführt.

Natürlich macht es solch ein intensives Factoring schwierig, den Fluss zu verfolgen, aber es ist erstaunlich, wie weit dieser Code seiner Zeit voraus ist. Wenn Sie andere Artikel in der Ausgabe von 1976 lesen, finden Sie eine Menge nicht so gut geschriebenen Codes. Das ist verständlich: Die Leute haben gerade herausgefunden, wie sie die neuen Mikroprozessoren nutzen können. Und inmitten all dieses Diamanten, der eines modernen Hackers aus der Demoszene durchaus würdig sein könnte. Zum Vergleich: Hier ist das gleiche Maß an Einfallsreichtum wie in diesem erstaunlichen 6502-Code 30 Jahre später.

Genug von der Geschichte. Warum habe ich diesen alten Code 2019 sorgfältig studiert? Tatsache ist, dass ich an einem neuen Begleiter für I²CDriver und SPIDriver arbeite und er Gleitkommaoperationen auf dem 8-Bit-EFM8-Prozessor von Silicon Labs (basierend auf 8051) ausführen musste, den ich in früheren Projekten verwendet habe. Jetzt führt es diese Berechnungen einfach durch, genau wie die 6502-Bibliothek. Ich brauchte keinen so kleinen und optimierten Code, aber jetzt funktioniert es ziemlich schnell, etwas schneller als die ähnliche Keil-Bibliothek . Großartiger Code stirbt nie!

Source: https://habr.com/ru/post/de459584/


All Articles