¿Cómo se escribe el BIOS para una placa base de computadora? ¿Cómo se escribió el primer BIOS?

No puedo responder cómo se escribió el primer BIOS para una placa base de PC, pero puedo decirte cómo se hizo la tercera legal (puede haber algunas otras, legales o no, antes de 1984), y por extracción, cómo se hicieron todos. ( En realidad, los no legales probablemente solo se copiaron de IBM, con quizás algunos pequeños cambios, por lo que no fue idéntico y luego se volvieron a ensamblar. Así que supongo que eso no se está realmente “escribiendo” )

Escribí el BIOS original de Phoenix Technologies (en ese momento Phoenix Software) para PC, XT y AT ROM a partir de mayo de 1984, y los completé en mayo de 1985. Consulte Creación del BIOS de Phoenix para obtener más detalles.

Las BIOS de IBM, Compaq y Phoenix se escribieron en lenguaje ensamblador x86, aunque algunas legales escritas después de Phoenix BIOS pueden haberse escrito en C.

BIOS de IBM
Para IBM, comenzaron creando una lista de funciones necesarias. Estos pueden ser leer una tecla, escribir un carácter en la pantalla, obtener la entrada del controlador de juegos analógicos, leer / escribir un sector desde un disquete o disco duro, etc. Luego trataron de generalizar algunas cosas con tablas (como la fuente de 128 caracteres ASCII superior) ), puntos de entrada de función, etc. Después de hacer eso, comenzaron a codificar. El ensamblador utilizado probablemente era un ensamblador cruzado o uno de un sistema de desarrollo Intel x86.

BIOS de Compaq y Phoenix
Para las BIOS Compaq y Phoenix, cada compañía necesitaba que un equipo analizara el código de la BIOS de IBM y escribiera una especificación completa de funciones, con ubicaciones específicas para algunas de ellas (debido a que los malos programadores saltan directamente a esas ubicaciones para sus programas en lugar de extraer esas ubicaciones de vectores de interrupción o punteros). Luego, un programador que nunca había visto el código del BIOS ROM de IBM comienza a escribirlo, una función a la vez (para mí, comencé con las funciones más simples y trabajé con las más complicadas).

La legalidad de la copia y el concepto de propiedad intelectual (PI) se discuten en el libro Invisible Edge .

Compaq probablemente usó el MASM de Microsoft para escribir su BIOS. Su copia funcional no debe haber sido perfecta, ya que muchos programas de aplicación debían verificar el BIOS de Compaq y cambiar ligeramente su funcionamiento. Siendo el segundo BIOS compatible con PC (incluida la PC de IBM), los programadores de aplicaciones estaban dispuestos a hacer un ajuste (¡en lugar de hacerlo de la manera correcta!).

La diferencia del BIOS Phoenix
Phoenix BIOS fue escrito como un BIOS de terceros para ser vendido a muchos fabricantes de placas base. Fue escrito en MASM y vinculado con PLINK-86 de Phoenix, un enlazador avanzado. El código se escribió en muchos archivos separados (generalmente correspondientes a cada función del BIOS o código distinto, por ejemplo, prueba de memoria).

Lo escribí para tolerar todos los programas que usaban referencias extrañas al BIOS (mucho más que Compaq). Como diseñador de hardware y programador, haría muchas preguntas al equipo de especificaciones de Phoenix que nunca concibieron. Por ejemplo, ¿quedan valores no aleatorios en un registro después de una función de BIOS que algún programador podría usar, y cualquier otro uso extraño de una función de BIOS que pudiera concebir (incluso si aún no lo hubiera utilizado un programador)? programa existente)? Además, tenía programas de prueba que ejecutaban varias llamadas de función y verificaban los resultados, además de medir su tiempo para aumentar la velocidad.

Los fabricantes de placas base a menudo usaban partes ligeramente diferentes que la PC de IBM para ahorrar dinero. Como ingeniero de hardware, escribiría el código para ser tolerante con el hardware que podría actuar ligeramente diferente. Lo hice usando técnicas limpias para acceder al hardware, o probando las diferencias de hardware antes de usarlas.

Creo que, basándose en ver el código binario de otras BIOS en la depuración de placas base con BIOS que no son de Phoenix (antes de que Phoenix adquiriera algunas de ellas) como AMI, Award y MRBIOS, estas otras BIOS fueron escritas por personas que eran estrictamente programadores (y no código más limpio: podría ser una mala programación o el uso de un compilador de C). No tenían una comprensión real de cómo funciona la electrónica (según su código) y, por lo tanto, eran menos compatibles y menos adaptables que el BIOS Phoenix.

Apéndice:
En respuesta a la pregunta comentario
“No podemos programar nada si nunca hubiéramos tenido un sistema operativo en la máquina, ¿cómo se escribió el primer BIOS?”

Las primeras aplicaciones informáticas programables originales (que podrían ser un programa de arranque, BIOS o sistema operativo) se escribieron en código ensamblado a mano. Se escribiría un ensamblador muy simple de una pasada (también ensamblado a mano) y luego se recrearía en el mismo ensamblador para un ensamblador mejor y más capaz.

Después de eso, algunas veces se puede hacer un mini-OS, en cuyo punto se pueden hacer versiones más extensas. Un BIOS es esencialmente un mini OS sin un sistema de archivos, por lo que un sistema de archivos no necesita ser mucho más. De hecho, el DOS original era solo un contenedor para muchas de las funciones del BIOS, con un sistema de archivos que usaba las primitivas de E / S de disco del BIOS.

En tiempos más modernos, los ensambladores cruzados y los compiladores cruzados están hechos para nuevas computadoras objetivo. Estos se ejecutan en los sistemas informáticos existentes para crear software para una computadora de destino (por ejemplo, una PC). Así es como Bill Gates escribió el primer lenguaje informático popular para el hogar, MITS Altair Basic, en 1975.

Y una vez que tenga un sistema operativo simple como MS-DOS ejecutándose en computadoras basadas en x86 (no necesariamente una PC), puede usar ensambladores y compiladores nativos para crear código nuevo. Así fue como se escribieron los BIOS Phoenix originales. Después de eso, el código se emuló en la computadora en la que se ensambló, o se creó una ROM y se colocó en una PC IBM o clonada y se probó allí.

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 .
  • Para ver una discusión sobre mi trabajo en la creación del BIOS Phoenix, vea
    ¿Qué es lo mejor que has creado solo como programador?
  • Esto explica una breve descripción del historial de PC temprano
    ¿Subieron las ventas de computadoras después de la invención de los videojuegos?
  • Esto explica por qué los únicos sistemas que quedan son PC, Apple Macintosh y procesadores ARM.
    ¿Por qué falló Digital Equipment Corporation (DEC)?
  • 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?

Para saber cómo se escribió el primer BIOS, debe buscar y leer un libro de Scott Mueller sobre la reparación de computadoras. Encuentre información en el siguiente texto que fue extraído de ese libro para referencias.

Aunque decimos que estos chips están en blanco cuando son nuevos, técnicamente están precargados con 1 binarios. En otras palabras, un chip ROM de 1Mb usado en una PC vendría con 1 millón (en realidad 1,048,576) ubicaciones de bits, cada una con un binario 1. Luego se puede programar una PROM en blanco, que es el acto de escribir en ella. Esto generalmente requiere una máquina especial llamada programador de dispositivos, programador de ROM o grabadora de ROM.

La programación de la ROM a veces se denomina grabación porque es técnicamente una descripción adecuada del proceso. Puede pensar en cada bit binario de 1 bit como un fusible, que está intacto. La mayoría de los chips funcionan con 5 voltios, pero cuando se programa una PROM, se coloca un voltaje más alto (normalmente 12 voltios) en las diversas direcciones dentro del chip. Este voltaje más alto realmente quema o quema los fusibles en los lugares deseados, convirtiendo cualquier 1 dado en 0. Aunque puede convertir un 1 en 0, debe tener en cuenta que el proceso es irreversible; es decir, no puede convertir un 0 en un 1. cuando sea necesario en el chip.

Los chips PROM a menudo se denominan chips programables de una sola vez (OTP) por este motivo. Pueden programarse una vez y nunca borrarse. La mayoría de las PROM son económicas (alrededor de $ 3 para una típica PROM de placa base de PC), por lo que si desea cambiar el programa en una PROM, la descarta y programa una nueva con los nuevos datos.

El acto de programar una PROM lleva de unos pocos segundos a unos pocos minutos, dependiendo del tamaño del chip y del algoritmo que utiliza el dispositivo de programación. Un programador PROM típico tiene múltiples sockets. Esto se llama un programador de pandillas, y puede programar varios chips a la vez, ahorrando tiempo si tiene varios chips para escribir con los mismos datos. Los programadores menos costosos están disponibles con un solo socket, lo cual está bien para la mayoría de los usos individuales “.

Soy casi tan viejo como Quora User, así que también he usado una computadora sin BIOS. Ferranti FM1600 B como sucede. Eso tenía un “BIOS” que constaba de aproximadamente 12 instrucciones cableadas (soldadas, en realidad) en un interruptor giratorio. Eso fue suficiente para leer una cinta de papel. Alguien probablemente escribió el programa en binario en su cabeza y sacó su soldador. Si no le gustó lo que había en la cinta de papel y no quería esperar un día para obtener una nueva versión, puede cambiar el programa en ejecución usando los interruptores en el panel frontal. En binario, por supuesto. Hemos memorizado todos los códigos de operación: JUMP fue 0011101 o algo así.

Entonces, tienes una computadora. Usted escribe un programa para un BIOS para una nueva máquina, probablemente en ensamblador (un paso desde binario o hexadecimal), y lo ensambla en código binario. Luego envía el archivo binario a un programador de EPROM como este (imagen de Elnec):

a través de un cable (en los viejos tiempos, tal vez un enlace serie RS232). Toma un chip programable, lo coloca en el zócalo, presiona “programa”, sácalo e insértalo en la placa base. Nunca programé un BIOS real, pero escribí código para EPROM y los quemé (mi primera PC en 1980 tenía un programador, porque los discos duros no se habían inventado; bueno, sí, pero cuestan más que un pequeño automóvil, por lo que fue más fácil grabar un programa en PROM que cargarlo en una cinta de cassette de audio o teclearlo a mano cada vez). Como otros decían, usarías un ensamblador cruzado, uno que crea código para un sistema diferente al que estabas usando, si aún no tuvieras una computadora en funcionamiento del nuevo tipo. Es decir, podría haber escrito el BIOS para un 80286 en un 8086, o un BIOS para el primer 8080 en un mainframe IBM o PDP-8. También lo hice: utilicé un ensamblador cruzado en un RSX-11 para crear el código IBM370 para un procesador integrado.

Bios se desarrolló en 1975, antes de que una computadora no hubiera tenido tal cosa. Tienes que ver la BIOS como el sistema operativo básico. Antes de ese programa básicamente le daría una computadora opciones.

Creo que la forma más fácil de explicar esto es retroceder entre 35 y 40 años. En este momento, las computadoras no tenían BIOS la mayor parte del tiempo, pero allí se ingresaron físicamente máquinas enormes y un conjunto de datos, por lo que tendría una máquina electrónica con una interfaz mecánica. En esta interfaz, ingresaría un soporte de datos físicos, por ejemplo, usemos una tarjeta perforada – Wikipedia – Por cierto, estos han existido durante más de 200 años, y aunque en ese momento los medios electrónicos y magnéticos que transportan datos ya existían Esto debería ilustrar cómo funciona realmente un programa. Básicamente, le das a una computadora un conjunto de instrucciones de qué pasaría si y si luego, mientras deshabilitas a otros. Tenga en cuenta que una CPU es básicamente un montón de interruptores de encendido / apagado.

Entonces tiene 100 interruptores de encendido / apagado seguidos. así que digamos para un cierto resultado que desea tener que si los interruptores 1 y 2 están encendidos y el interruptor 26 está apagado y ningún otro interruptor está activo (usado), se muestra el color verde, por lo que la tarjeta mecánica desactivaría todos los interruptores excepto 1 , 2 y 26. entonces permitiría que otra parte de la computadora muestre el resultado si se cumplen las condiciones.

Y así es como funciona un programa. tenga en cuenta que este ejemplo no es en absoluto un ejemplo real ni correcto, solo quería ilustrar de manera muy general y básica cómo funciona un programa. Entonces, habiendo establecido eso, volvamos a lo que es un Bios.

Una BIOS es un programa que le da a la computadora muchas instrucciones básicas y permite que un programa complejo use todas las diferentes partes y chips de una computadora y permite que estas diferentes partes se comuniquen entre sí, por lo que un conjunto extremadamente complejo de qué pasaría si si entonces las condiciones. Estos se pueden escribir creando un código de bits. Hoy en día este código de bit (un bit es un código de 8 conjuntos de encendido / apagado (E / S = 1/0 llamados bytes), por lo que básicamente tiene un código para cada pequeño transistor en comunicación con otro que desencadenará resultados, estos resultados resulta en una acción física, es decir, mover electrones (electricidad) en su hardware. Ahora recordemos que las computadoras hoy en día tienen almacenamiento electrónico o magnético de datos, por lo que todo lo que necesita es una interfaz que pueda leer que, una vez antes, esto era mecánico, hoy en día es magnético o electrónico.

Entonces, la primera BIOS probablemente se escribió como un concepto en papel y luego se transfirió en bits compuestos por bytes y luego se ingresó en un medio de almacenamiento y se conectó a través de una interfaz a la computadora.

Espero que esto te lo explique. Traté de mantenerlo muy básico y simple y en realidad es mucho más complejo, pero espero que te dé una idea del concepto utilizado 🙂

Prácticamente lo mismo que cualquier otro programa, excepto que no hay un sistema operativo ni controladores de dispositivos, por lo que es más como escribir software integrado. Probablemente habría un pequeño código de ensamblador, pero sobre todo probablemente C o C ++.

En primer lugar, su suposición de que una computadora necesita un sistema operativo para funcionar es incorrecta. Si no tiene un sistema operativo, entonces necesita construir todo el control de entrada y salida en su programa. Si se trata de un conjunto estático de dispositivos que realmente no es un problema y básicamente la forma en que las computadoras integradas han funcionado en el pasado.

A continuación, no es necesario tener una computadora para cargar instrucciones en un chip. La ROM programable y borrable programable se puede programar una dirección a la vez mediante el uso de interruptores y un botón pulsador que señala el terminal de carga.

Una vez que tenga uno para trabajar, puede usarlo para programar uno más sofisticado.

En realidad, podría construir un lector de rollos de papel utilizando la tecnología 1800.

A2A: no está escrito en el mismo sistema para el que está dirigido.