En mayo de 1984, comencé a codificar el BIOS de PC de Phoenix Technologies ( era Phoenix Software en ese momento ) como consultor ( hice esto para entender qué implicaba la compatibilidad de software de PC, ya que quería diseñar placas base compatibles con PC que fueran mejores ) .
El BIOS fue un reemplazo del BIOS original de la computadora PC de IBM para ser vendido como BIOS legal de terceros para otros fabricantes. Fue codificado completamente en el lenguaje ensamblador MASM de Microsoft, y vinculado con el PLINK-86 de Phoenix, un enlazador avanzado.
El vinculador PLINK-86 tenía varias características agregadas para facilitar la vinculación del código de ensamblaje del BIOS. Podría alinear el código a una palabra o límite de palabra doble con directivas colocadas en el código manualmente (principalmente por velocidad, agregando NOP a los espacios anteriores). También podría forzar el código a una ubicación específica (permitiendo que los programadores salten al mismo lugar que el BIOS de IBM) y me diría el espacio libre o el desbordamiento entre ese lugar y el código anterior. También me permitió llenar espacios no utilizados con valores como NOP (Sin operación) o HLT (Detener) u otro valor de byte, para controlar otros usos inesperados del BIOS.
Phoenix requirió un programador que nunca había visto el código de BIOS de IBM publicado, lo cual no había hecho ( en enero de 1984, no pude encontrar el manual de referencia de IBM en ninguna de las tiendas locales en ese momento, lo cual fue algo bueno, de lo contrario No podría haber tomado el trabajo ). Como ingeniero electrónico digital (además de experto en ser un codificador de software de ensamblaje), escribí el código para ser tolerante con el hardware y el software mal diseñados. Otras personas especificaron las funciones y los problemas de compatibilidad en un documento que codifiqué.
Desde 1979, había escrito muchas BIOS CP / M, BIOS CP / M 3.0, MP / M BIOS, así como archivos de configuración genéricos para el programa de comunicación Modem7 en lenguaje ensamblador 8080. Además, había realizado una codificación limitada de ensamblaje 8086 mientras estaba en la División de Sistemas de Misiles Raytheon. Esto me dio precisamente el conjunto de habilidades correcto para escribir el primer BIOS del mundo, copiado legalmente, disponible para cualquier fabricante para su compra. La legalidad de la copia se discute en el libro Invisible Edge.
El código tenía que caber en una ROM de 8k y era extremadamente estricto (tanto que podría trabajar en él durante horas tratando de guardar un byte; la ROM XT de 16k y la ROM AT 64k no tenían tales problemas). Escribí todo el BIOS de la PC en 3 meses.
Probablemente fue 100% “libre de errores”, algo muy difícil de validar. Sin embargo, con tantos usuarios de Phoenix BIOS después de su lanzamiento, se estaba probando a fondo.
Recuerdo que la mayoría de los “errores” se debieron a programas que usaban incorrectamente el BIOS (que se encontró más típicamente en los primeros días de la PC hasta 1992), o las definiciones de compatibilidad. Por ejemplo, el código de IBM se bloquearía, donde mi código devolvió un código de error para varias llamadas a funciones que no se definieron o se utilizaron incorrectamente. ¿Cuál es el correcto o más útil? Chocar nunca tuvo un propósito, excepto decirle que algo es malo. Devolver un código de error (suponiendo que el programa lo revisó) como lo hizo Phoenix BIOS fue mucho más útil.
Otro ejemplo es cuando se usa el teclado numérico Alt para ingresar un código ASCII, IBM cambió el caso del carácter dependiendo de los estados de las teclas shift y Capslock (y no de una manera normal y esperada que podría agregar), lo que hace que no sentido. Sin embargo, algunos fabricantes querían esa operación extraña, por lo que se agregó como una opción del fabricante. (Obviamente, el código de teclado numérico alternativo de IBM cayó en su código de manejo de teclado estándar, y debe haber tenido banderas o código que nunca procesó los estados de mayúsculas y mayúsculas correctamente para el teclado numérico alternativo). Hubo muchos casos como este.
Y había programas (típicamente juegos) que saltaban a la mitad del código del BIOS, o que hacían referencia a algún byte del código del BIOS directamente. El mal uso del BIOS por parte de los programas definió esencialmente el concepto de lo que significaba la compatibilidad (y, por lo tanto, fue Phoenix quien sabía lo que significaba la verdadera compatibilidad, no IBM), pero estos eran claramente valores atípicos. Sin embargo, me esforcé por agregar esos usos extraños a la compatibilidad del BIOS. Con el tiempo, a medida que los programas se actualizaban y los programadores, que trataban con múltiples BIOS de origen (como IBM, Compaq, Phoenix, Award, AMI y más tarde, otros), comenzaron a codificar adecuadamente sus programas para usar los BIOS correctamente, por lo que esto se volvió menos importante.
Muchos fabricantes de PC usarían el código de BIOS de IBM para probar la compatibilidad de su hardware, y a menudo se sorprendían cuando IBM no funcionaba y el BIOS de Phoenix sí lo hacía. Pero Phoenix BIOS fue escrito para adaptarse dinámicamente a pequeñas diferencias de hardware, o simplemente tener un código que funcionaría incluso con esas diferencias de hardware, que el BIOS de IBM no tenía que hacerlo.
El código se escribió para mantener llena la cola de búsqueda previa del procesador para ejecutarla lo más rápido posible, así como para realizar un trabajo de procesamiento menor durante el retroceso horizontal y vertical del controlador de video para minimizar el flash de la pantalla. Las operaciones de movimiento de memoria se optimizaron para realizar la mayor parte del trabajo como movimientos de palabra doble (32 bits) o palabra (16 bits), y se alinearon palabras o palabras dobles según el procesador.
Además, el código tenía muchos ecualizadores de ensamblaje (interruptores) para que los fabricantes pudieran elegir exactamente qué características / compatibilidad, etc., querían tener. El código promedió aproximadamente 25 caracteres de texto de comentario por byte que se ensambló ( cifra de 4 a 6 bytes por línea de ensamblador, lo que significa de 100 a 150 caracteres de texto de comentario por línea ), lo que lo hace altamente documentado (en caso de que el proceso de copia se lleve a los tribunales ) De hecho, hice una instantánea de copia de seguridad del código todos los días, por lo que el proceso podría estar bien documentado. El código encajaría fácilmente en un disquete de 360k, disquete de 5.25 ″ (hasta que comencé a trabajar en el BIOS de AT).
Aunque no lo hice totalmente solo, en unos 3 meses más, escribí el BIOS XT (tenía soporte para disco duro), pero otro consultor, Al Weiner, escribió la mayor parte del soporte para disco duro desde un marco esqueleto que le di. En diciembre de 1984, comencé a escribir el AT BIOS, que tenía el apoyo de Stan Lyness (quien escribió el código del disco duro y el código para volver al modo real desde el modo protegido en el 80286) y otra persona que escribió el AT CMOS código de configuración El AT BIOS se completó en mayo de 1985.
El Phoenix AT BIOS agregó nuevas características, como la configuración de CMOS en ROM y accesible mediante una secuencia de teclado en el arranque, la capacidad de cambiar la velocidad de la CPU / Sistema por teclado para aquellos sistemas que podrían ser cambiados por software (el AST 286 Premium que diseñé la placa base tenía esta característica), así como soporte temprano para aumentar el tamaño de los discos duros cuando comenzaron a exceder las limitaciones del BIOS de IBM, la configuración de memoria automática para varios tamaños de memoria, etc.
Impacto del BIOS Phoenix
Las BIOS Phoenix permitieron el crecimiento completo de la industria de la clonación de PC y, por lo tanto, tuvieron un tremendo impacto en la industria. Otros BIOS de terceros escritos por otras compañías después del lanzamiento de Phoenix BIOS fueron generalmente menos compatibles, más lentos y con menos características (algunos fueron escritos en ensamblaje, otros en C). Si el primer BIOS legal de terceros no se hubiera escrito bien, la industria de clonación de PC podría no haber despegado nunca, los otros BIOS de clonación nunca se habrían escrito, y todos podríamos estar utilizando Apple Macs o alguna otra plataforma.
Con el crecimiento de los clones de PC, y por lo tanto, la industria electrónica (procesamiento, memoria, almacenamiento masivo, integración a gran escala) puede haber sido el impulso para DVD, Blue-Ray, HDTV, teléfonos inteligentes, cámaras digitales, IoT, incluso el crecimiento meteórico de internet ( difícil de hacer sin computadoras baratas en el escritorio de todos ), Windows ( sin una plataforma estándar, Microsoft nunca pudo haberlo creado y crecido como lo hicieron ), todo pudo haber resultado de la creación de un pequeño Pieza de 8k de código de software, el BIOS Phoenix .
Anexo 1:
Como ingeniero informático, mi objetivo de por vida era crear el hardware para habilitar la Inteligencia Artificial (IA). Creí que esto habría involucrado algún tipo de Computación Óptica usando Procesadores de Señal Óptica (OSP), ya que pueden realizar operaciones paralelas masivas, esencialmente lógica de múltiples valores, FFT , invertir grandes matrices, etc.
Sin embargo, el Watson de IBM (el que venció a los mejores jugadores de Jeopardy) es el más cercano que tenemos actualmente, compuesto por miles de servidores, esencialmente PC. Por lo tanto, una pieza de software que creé esencialmente permitió este objetivo de por vida, no cualquier hardware que haya creado. ¿Quien lo hubiera pensado?
Anexo 2:
Cuando comencé a programar el BIOS Phoenix, mis habilidades de programación de ensamblaje 8080 / Z80 estaban bastante perfeccionadas, pero mis habilidades de ensamblaje x86 para escribir el BIOS mucho menos.
Muchos aspectos del código fueron encabezados de comentarios, equivalentes de puertos de E / S y ubicaciones de memoria, etc. Para desarrollar mis habilidades x86, comencé a diseñar las estructuras de mis funciones y comencé a codificar algunas de las funciones más simples del BIOS. Con el tiempo, desarrollé las funciones más complicadas. En el camino, volvería a codificar porciones a medida que aprendiera mejores técnicas e instrucciones más eficientes.
Usaría fgrep y búsqueda global y reemplazo para ubicar el código en varios archivos del código y podría modificarlos muy rápidamente para mejorar la calidad.
Algunos hardware no estaban perfectamente documentados, por lo que escribiría un código pequeño o probaría manualmente el hardware para ver con precisión cómo respondía a varios comandos de E / S.
En 3 meses, se realizó el BIOS de PC ROM (tamaño 8k), y estaba muy bien versado en los matices de las instrucciones de ensamblado y montaje de instrucciones x86.
Anexo 3:
Phoenix BIOS fue más rápido, tenía más funciones y menos errores que otros BIOS escritos de otras compañías, incluida IBM.
Según mi trabajo posterior con el diseño de placas base y el manejo de otras BIOS que no sean Phoenix que los fabricantes de placas base usarían, parece que las otras BIOS (algunas escritas en C), no fueron escritas por programadores que entendieron los matices del hardware o de los programadores de aplicaciones y tenía mucha menos experiencia. Algunos pueden haber sido, de hecho, un “camello” (un caballo diseñado por un comité; en otras palabras, muchos programadores en lugar de básicamente uno).
Mi experiencia previa al escribir BIOS CP / M y código de configuración genérico para el módem 7, junto con mi experiencia en hardware y la comprensión de las secuencias de ejecución de la CPU, todo contribuyó a mi
- Capacidad para escribir código más eficiente (espacio y velocidad)
- Características de diseño que las placas base o los usuarios pueden necesitar (ya sea solicitado o no)
- Piense tanto como un diseñador de placa base y un programador de aplicaciones, pudiendo predecir cosas que podrían afectar la compatibilidad antes de que existieran.
- Agregue más selecciones de configuración de tiempo de ensamblaje para fabricantes
Anexo 4:
Calculo que produje alrededor de 15 a 20 líneas de código de ensamblaje comentado en línea terminado por día. Esto no incluye las líneas adicionales de Equates, Macros, comentarios de encabezado y otras líneas sin código, que no fueron insignificantes. Y esas líneas de código por día, también incluyen todos los gastos generales de la lectura (y comprensión) de la documentación del hardware, las pruebas de velocidad y compatibilidad, y las copias de seguridad diarias.
Referencias
- La legalidad de la copia y el concepto de propiedad intelectual (IP) y la copia del BIOS de IBM se discuten en el libro The Invisible Edge: llevando su estrategia al siguiente nivel ( haga clic en el primer resultado de búsqueda ).
- Para obtener una respuesta más completa sobre cómo escribir un BIOS, consulte
¿Cómo se escribe el BIOS para una placa base de computadora? ¿Cómo se escribió el primer BIOS?
- Esto explica por qué los únicos sistemas que quedan son PC, Apple Macintosh y procesadores ARM.
¿Por qué falló Digital Equipment Corporation (DEC)?
- Esto explica la historia temprana de la PC y la creación del primer sistema informático S-100, la computadora MITS Altair
¿Subieron las ventas de computadoras después de la invención de los videojuegos?
- Esto describe las primeras necesidades de un botón “turbo”, mi diseño de la placa base AST 286 Premium (computadora PC más rápida de 1987), y por qué la persona promedio se preocupa por el tiempo de memoria para su PC
Historia de la informática: ¿Qué hizo el botón “turbo” en las PC de principios de los 90?
- Mejora de la velocidad del código del BIOS
¿Cómo funciona la predicción de rama en las CPU modernas? ¿Pueden los compiladores trabajar con procesadores para mejorar la predicción?
- Entrar y salir de problemas de modo protegido
¿Por qué el BIOS inicializa la CPU en modo real?
- Describe cómo se codificó el BIOS Phoenix para mejorar la ejecución
¿Cómo funciona la predicción de rama en las CPU modernas? ¿Pueden los compiladores trabajar con procesadores para mejorar la predicción?
- Describe el uso del modo protegido y los problemas en las primeras computadoras PC-AT
¿Por qué el BIOS inicializa la CPU en modo real?
- Describe cómo comencé en computadoras
¿Qué edad tenías cuando sabías lo que querías hacer para una carrera?