Encontré un gran programador llamado Steve Wozniak

Érase una vez, cuando las computadoras eran grandes y los negocios eran aburridos, sucedió algo inesperado. Los jóvenes piratas informáticos han encontrado una manera de ensamblar computadoras personales en microprocesadores baratos de teletipos y semáforos. Uno de ellos fue Steve Wozniak. Estos tipos tomaron las limitaciones de sus computadoras como un desafío, se sentaron e hicieron que estos pequeños chips hicieran cosas increíbles. Esto es lo que publicó el Dr. Dobb's Journal en agosto de 1976 :



Este es un conjunto de procedimientos aritméticos en números reales. El microprocesador (6502, lo mismo que en Apple I y II) solo podía funcionar con bytes, es decir, enteros entre 0 y 255. Peor aún, solo podía sumarlos y restarlos. Pero con esta biblioteca puedes calcular 1.26271099.56, o incluso sacar la raíz cuadrada de pi. Sorprendentemente, un autor del programa llamado Steve Wozniak ajustó las funciones básicas (suma, resta, multiplicación y división) en 239 bytes, utilizando un total de 127 instrucciones.

Esta es una pieza de programación bastante impresionante. Después de leerlo varias veces, puedo decir que él es simplemente brillante. Por ejemplo, los ciclos de los procedimientos de multiplicación y división se activan 23 veces, una vez por cada bit en el resultado. ¿Crees que Woz gastará dos bytes escribiendo 23 constantes en ambos lugares? Por supuesto que no! Carga la constante 23 en la rutina preliminar que usan ambos bucles:



Como otro ejemplo, los algoritmos deben tomar los valores absolutos de M1 y M2. Podrías escribir

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

Woz no repite así. Escribe un procedimiento que toma el valor absoluto de M1 y luego cambia M1 y M2. Luego llama a este procedimiento dos veces , por lo que se obtiene el mismo resultado con la mitad de la cantidad de código. Además, reemplazar M1 y M2 también es necesario en otros lugares, por lo que el código hace un doble trabajo.

Por supuesto, tal factorización intensiva hace que sea difícil rastrear el flujo, pero es sorprendente lo lejos que este código está adelantado a su tiempo. Al leer otros artículos en la edición de 1976, puede encontrar una tonelada de código no tan bien escrito. Esto es comprensible: la gente acaba de descubrir cómo aprovechar los nuevos microprocesadores. Y en medio de todo este diamante, que bien podría ser digno de un hacker moderno del demoscene. A modo de comparación, aquí está el mismo nivel de ingenio total que en este increíble código 6502 30 años después.

Suficiente de la historia. ¿Por qué estudié cuidadosamente este antiguo código en 2019? El hecho es que estoy trabajando en un nuevo compañero para I²CDriver y SPIDriver , y él tuvo que realizar operaciones de punto flotante en el procesador EFM8 Silicon Labs de 8 bits (basado en 8051), que utilicé en proyectos anteriores. Ahora realiza fácilmente estos cálculos, al igual que la biblioteca 6502. No necesitaba un código tan pequeño y optimizado, pero ahora funciona bastante rápido, un poco más rápido que la biblioteca Keil similar . ¡El gran código nunca muere!

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


All Articles