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
oder 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!