Si tuviéramos que hacer una computadora de 8 bits con componentes modernos, ¿cuál sería el límite absoluto de RAM, ROM y almacenamiento que una computadora de 8 bits le impondría?

Gracias por A2A.

Si restringe su CPU a ocho líneas de dirección RAM, ocho líneas de datos RAM, ocho líneas de dirección de ocho puertos y ocho líneas de E / S, el chip seguirá teniendo más de 32 pines porque necesita líneas de control para indicar si es leer o escribir (y fuente de alimentación), pero terminas con un chip que es más poderoso que el 8085 o Z80 que se encuentra en el corazón de las máquinas CP / M. Estos chips originales tenían líneas de dirección de RAM reducidas que los limitaban a 64kB * de RAM nativa. Con el direccionamiento completo de 8 bits, esto aumenta a 256kB de RAM, que era enorme en aquellos días. Mediante el uso de líneas de dirección de puerto de E / S, fue posible superar el límite de 64kB al paginar la RAM. Vi una máquina Z80 con 1 MB de RAM.
* Esto fue en los días en que 4kB era la oferta estándar, 16kb era lujo y 64kB era el sueño húmedo de un programador.

Al poner en paralelo dos de estas CPU hipotéticas modernas, 64 GB de RAM están disponibles de forma nativa. Usando la tecnología de grabado súper fino para reducir el tamaño de la matriz de estos chips muy simplificados, aumentar la velocidad del reloj a 3GHz (posiblemente más) no presentaría el mismo problema que dentro de las CPU de transistores de varios miles (millones). De hecho, me sorprende que el video de TV estándar en 24 bits no use tres procesadores de 8 bits, uno para cada uno de los modos Rojo, Verde y Azul. Sería un diseño mucho más simple.

Cuando se trata de almacenamiento (HDD), la capacidad común de un HDD era de alrededor de 5 (a veces) MB. Como cada sector es información que se escribe en serie, no hay ninguna razón por la cual un diseño de HDD contemporáneo no pueda tener sectores de 1 MB (aunque esto se convierte en un desperdicio al almacenar archivos pequeños). La capacidad de utilizar varias direcciones de puerto para manipular el direccionamiento de HDD podría ver fácilmente que una de estas CPU Hypo maneje almacenamiento de varios GB.

Podemos estar condicionados a pensar que la CPU de 8 bits es lenta, torpe y limitada, solo porque nunca estuvieron realmente expuestos a la comunidad Open Source de la misma manera que las CPU de presupuesto como Arduino, ARM, Propeller y PIC-AX tienen estado hoy Estos simples “controladores” se encuentran en el corazón de las impresoras 3D y muchos otros proyectos de CNC.

Es cierto que como el video ahora se está moviendo a una representación de 32 bits (3 * 10 bits más 2 bits para transparencias), tres CPU de 16 bits sincronizadas en paralelo probablemente podrían manejar la mayoría de los requisitos de TV / DVD / Blue Ray y proporcionar una arquitectura mucho más simple . Como la mayoría de ellos ejecuta Linux en segundo plano, ¿alguien escribiría un Kernel apropiado para esta arquitectura?

La informática de 8 bits no está completamente muerta, todavía se encuentra en las aplicaciones de Control Industrial, pero es menos probable que se vea en manos de los consumidores. El controlador en su horno µWave es probablemente de solo 8 bits.

Como se mencionó anteriormente, la paginación de RAM siempre ha sido posible, para superar los límites de cualquier CPU en particular, y la única razón para seguir ampliando la capacidad de la CPU ha sido la naturaleza de los datos modernos que se pasan a través de ella. En este momento, no hay una CPU de 64 bits que sea capaz de direccionar RAM de 64 bits porque la capacidad resultante es tan grande que no cabe en una placa base.

Al mezclar y combinar CPU simplificadas de 8 bits y ponerlas en paralelo, no existe un límite teórico para la capacidad de información que pueden manejar, solo las limitaciones impuestas por el mundo físico.

No hay límite teórico, aparte del límite que imponga a su definición de “computadora de 8 bits”.

Por ejemplo, suponga que desea hablar con una unidad de disco duro. Una unidad de disco duro moderna tiene uno o más procesadores que son mucho, muchas veces más potentes que cualquiera de los procesadores de la era de los 8 bits. Si conecta su CPU de 8 bits a dicha unidad, ¿sigue siendo una “computadora de 8 bits”?

Supongamos que desea agrupar varios procesadores para formar una computadora más grande.

(The Connection Machines CM-1, desde aquí.)

Connection Machines CM-1 tenía 65.536 procesadores, cada uno conectado a 4K de RAM. Esos procesadores ni siquiera eran de 8 bits. Eran CPU de 1 bit. Entonces, si los reemplaza con CPU de 8 bits, ¿sería una computadora de 8 bits?

¿Qué tan rápido debe ser? Por ejemplo, para aprovechar grandes cantidades de memoria y disco, podría querer ejecutar un sistema operativo moderno. Para hacer eso, podría implementar un simulador en la parte superior de una CPU de 8 bits.

(Un ATMEGA1284P conectado a alguna DRAM, desde aquí).

La placa mostrada arriba arranca (aunque lentamente) Linux compilada para ARM, ejecutando un simulador de conjunto de instrucciones ARMv6 de 32 bits en el microcontrolador de 8 bits que ve en la imagen. El microcontrolador también impulsa la DRAM. ¿Es esta una computadora de 8 bits?

O podría ir por otro lado: podría escribir un simulador para una CPU de 8 bits y ejecutarlo en un procesador moderno. Todo mi software se redirigiría a esa CPU simulada de 8 bits. ¿Es una computadora de 8 bits?

Una vez que establezca con precisión las limitaciones de su definición, estará bien encaminado para determinar una respuesta.

Hasta entonces, es difícil dar una respuesta significativa.

“Si tuviéramos que hacer una computadora de 8 bits con componentes modernos, ¿cuál sería el límite absoluto de RAM, ROM y almacenamiento que una computadora de 8 bits le impondría?”

No hay limitación teórica.

Las MCU de 8 bits generalmente direccionan directamente 64k de memoria. Los micros de arquitectura Harvard, con un programa separado y memoria de datos, pueden acceder a 64k de cada uno. Sin embargo, el espacio de direcciones se puede ampliar mediante la banca y la segmentación de múltiples maneras:

  • Operaciones bancarias con circuitos externos: además del bus de direcciones, el decodificador de direcciones utiliza información adicional de modo / configuración (por ejemplo, puertos IO de propósito general) para seleccionar qué memoria direccionar y proporcionar los bits de dirección superiores. El conocido Commodore C64 y muchas otras computadoras de 8 bits utilizaron este método. El C64 presentaba 64k de DRAM y 32k de ROM, y los registros de chip CIA / SID / VIC también se mapearon en memoria, superpuestos entre sí. La memoria para ser visible en una dirección se seleccionó a través de puertos IO. Cualquier CPU sin ningún soporte HW especial para la banca se puede extender de esta manera a una memoria teóricamente ilimitada.
  • El mismo mecanismo bancario puede integrarse en el núcleo MCU. Muchos micros de 8 y 16 bits cuentan con un modelo de memoria almacenada y son capaces de direccionar varios megabytes, que pueden ampliarse aún más si es necesario. Algunos ejemplos: AVR, C167, HCS12, Star12, XC800.
  • La segmentación en x86 está integrada en el nivel del conjunto de instrucciones. Es más rápido y más flexible que configurar el decodificador de direcciones.

El almacenamiento nunca tuvo que asignarse al espacio de direcciones de la CPU. Nunca fue un problema usar más de discos duros 4G con sistemas de 32 bits (aparte de los errores). Una MCU de 8 bits tampoco tendría ningún problema, aparte del bajo rendimiento.

Para responder a su pregunta, primero debemos definir “computadora de 8 bits”:

A finales de los años 70 y principios de los 80, una computadora de 8 bits era una con una CPU de 8 bits, lo que significaba que la CPU tenía registros de datos de 8 bits y, en general, funcionaba con fragmentos de datos de 8 bits. Incluso entonces, sobre todos ellos (al menos los que conozco 🙂) tenían todos los registros de direcciones de 16 bits. Entonces, los 8 bits de una CPU de 8 bits se definieron por el ancho de los registros.

Ciertamente no era el ancho del bus de datos, ya que algunas CPU de 16 bits tenían, por razones de costo, un bus de datos de 8 bits de ancho. La más famosa fue la CPU 8088 utilizada en las primeras PC de IBM. Básicamente, un 8086 (una CPU de 16 bits) con un bus de datos externo de 8 bits de ancho; por lo tanto, cada acceso a la memoria significaba dos accesos de 8 bits para cargar o almacenar un registro completo de 16 bits en lugar de solo uno.

Entonces, ¿cuáles eran los límites entonces?

Para RAM y ROM, el primer límite eran las direcciones de 16 bits, que restringían la RAM y ROM a 64 kByte sin “trucos” adicionales. La mayoría de las veces, no había distinción entre RAM y espacio de direcciones ROM, por lo que era de 64 kByte para ambos juntos.

Pero podría hacer algo llamado “banca”, que era un hardware adicional, que podría usar para intercambiar varias páginas de RAM en el espacio de direcciones de los procesadores. Algunos sistemas incluso eliminaron la ROM del acceso después de iniciar y cargar el sistema operativo, de modo que la CPU tuvo acceso a una página completa de 64 kByte de RAM. Entonces, al menos en teoría podría tener tanta RAM como quisiera, pero la programación era complicada, ya que no podía acceder a toda la RAM de una sola vez: tenía que cambiar las páginas de RAM dentro y fuera de su programa.

Almacenamiento: Eso estaba restringido principalmente por el tamaño máximo de los discos duros disponibles. Eso se midió en Mega Bytes, ya que nadie podía imaginar discos duros con Giga o incluso Terra Bytes.

Los creadores de la PC de IBM, por ejemplo, pensaron que el HD más grande que alguien haya visto era de 32 MBytes, por lo que ese era el HD más grande que se podía seleccionar en el BIOS. En esos días tenía que decirle a su BIOS las dimensiones EXACTAS de su HD: cuántas placas, cuántas pistas / placa, cuántos sectores / pista y demás. Su elección estaba restringida por el BIOS de IBM, que solo tenía entradas para No sé cuántos HD diferentes y todo lo que podía hacer era seleccionar uno de los parámetros de HD dados y el más grande era 32 MByte.

El tamaño del almacenamiento externo también estaba restringido por el sistema operativo que usó, pero eso NO era una restricción de la “bitness” de su CPU.

Eso nos lleva al presente y a la pregunta: ¿podríamos construir una CPU de 8 bits con, por ejemplo, un registro de dirección de 64 bits para acceder directamente a 18.446.744.073.709.551.616 bytes?

Y la respuesta es: sí, podríamos.

¿Sería una buena idea hacerlo?

Y la respuesta a eso es: probablemente no.

A menos que usemos un bus de datos externo con más de 8 bits (lo que podríamos hacer incluso para una CPU de 8 bits), una operación como “Cargar registro A con el contenido de la dirección RAM xyz” tendría un tamaño de 9 bytes o, en otras palabras, 9 de memoria accede solo para leer en el operador completo y un décimo acceso adicional para los datos. Eso es lento, no, ¡es LENTO!

Luego, todos los cálculos se realizarían en fragmentos de 8 bits. Para agregar dos números enteros de 32 bits en la memoria, tendría algo como el siguiente programa ensamblador (una especie de procesador similar al 6502, pero direcciones de 32 bits para acortarlo 🙂):

clc; transporte transparente para la primera adición
lda $ 12345670; carga el primer byte (LSB)
adc $ 12348680; agregue el primer byte (LSB) del segundo número
sta $ 12345690; y almacene el primer byte del resultado
lda $ 12345671; carga el segundo byte
adc $ 12345681; agregar 2do byte
sta $ 12345691; tienda 2do byte
lda $ 12345672; carga el tercer byte
adc $ 12345682; agregue el tercer byte
sta $ 12345692; tienda 3er byte
lda $ 12345673; carga 4to byte (MSB)
adc $ 12345683; agregar 4to byte
sta $ 12345693; tienda 4to (y último byte)

En total, 48 + 20 + 1 accesos de lectura y 4 accesos de escritura a la memoria. Y eso es solo una CPU de 8 bits con direcciones de 32 bits. Sería MUCHO peor con las direcciones de 64 bits.

Como ya dije, podríamos diseñar una CPU de 8 bits con un bus de datos externo más amplio, pero eso hace que el chip sea mucho más complejo y si luego agregamos cosas como cachés, y cualquier otra cosa que tenga una CPU moderna, al chip. tendría una complejidad muy cercana y, por lo tanto, la cantidad de transistores necesarios para un procesador de 64 bits, simplemente no merece la pena.

Entonces, para resumir:

Podríamos construir (y podríamos tener en el pasado) CPU de 8 bits con límites más altos para ROM y / o RAM, pero probablemente no valga la pena.

Los límites en el tamaño de los HD nunca fueron un límite de la CPU; siempre fue un límite de lo que el BIOS y / o el sistema operativo podrían usar.

La mayor ventaja que tienen los componentes modernos sobre los más antiguos es la velocidad, la integración y el consumo de energía. Podríamos, por ejemplo, construir un chip con una CPU 6502 con 32kByte FLASH, 32kByte RAM corriendo a 100 MHz en un solo chip. Este chip sería 100 veces más rápido que la misma compilación con los componentes de 1980 (lo siento, no FLASH 1980, tendría que reemplazar FLASH con EPROM) y todavía usaría solo 1/100 de la potencia del antiguo.

Las CPU de 8 bits todavía se usan en la actualidad. Todavía puede (o más preciso: de nuevo) comprar la antigua CPU 6502 en un proceso de chip más moderno que funciona con una velocidad de hasta 20MHz y la misma compañía vende el núcleo de la CPU como un código VHDL. Puede usar eso para integrarlo en su propio chip o incluso usarlo como un bloque en un diseño FPGA suyo.

Muchas empresas venden CPU de 8 bits para sistemas integrados. Puede ser tan pequeño como un ATtiny4, que es una CPU de 8 bits con 512 Bytes de FLASH (ROM) y 32 Bytes de RAM y E / S de 4 bits en un paquete de 6 pines o tan grande como realmente no sé 🙂

8 bits 2 ^ 8 = 256 valores posibles. 2 ^ 8 = 256 bytes de ram. 1/4 de kilobyte.

No hace falta decir que esto es inútil. La mayoría de los sistemas de 8 bits no son puros de 8 bits. El 6502, por ejemplo, usado en NES y Commodore 64, usa una ruta de datos de 8 bits (lo que significa que usa 8 bits para lógica y otras cosas) pero un bus de direcciones RAM de 16 bits (lo que significa que puede usar 16 bits para dirección RAM). Esto da un 2 ^ 16 más razonable = 65536 bytes = 64 kilobytes de RAM.

En cuanto al almacenamiento, el tipo de procesador no tiene un límite real sobre qué tan grande puede ser el almacenamiento. Incluso durante la era de 32 bits, cuando la RAM estaba limitada a 2 ^ 32 bytes ~ = 4 gigabytes, los discos duros comúnmente excedían eso en órdenes de magnitud. El límite superior es simplemente lo complejo que desea hacer su sistema de archivos.

La persona que dice que no hay límite es incorrecta cuando habla de RAM y ROM. El almacenamiento depende de muchos factores, pero creo que si ejecuta solo una CPU de 8 bits con capacidad de direccionamiento de 16 bits, el sistema operativo debería hacer algo de magia para hacer que el almacenamiento sea más grande. Aunque podría estar equivocado en eso. De cualquier manera hay un límite de memoria de 64k en una CPU de 8 bits aquí hay una pequeña información de Wikipedia


16 bits de dirección, 16 pines de dirección Editar

La mayoría de los microprocesadores de uso general de 8 bits tienen espacios de direcciones de 16 bits y generan 16 líneas de direcciones. Los ejemplos incluyen Intel 8080, Intel 8085, Zilog Z80, Motorola 6800, Microchip PIC18 y muchos otros. Estos procesadores tienen CPU de 8 bits con datos de 8 bits y direccionamiento de 16 bits. La memoria en estas CPU es direccionable a nivel de byte. Esto lleva a un límite de memoria direccionable de 2

dieciséis

× 1 byte = 65,536 bytes o 64 kilobytes “.

El enlace

Límite de RAM – Wikipedia

Una dirección de 8 bits no sirve, por lo que todas las computadoras de 8 bits usan al menos direcciones de 16 bits.

Es posible tener cambio de banco y mapeo de memoria; En los años 80 tenía una enorme memoria RAM de 1 MB en mi máquina Z80 CP / M +, donde la CPU solo podía llegar a 64 KB. El espacio de direcciones se dividió en 4 bloques de 16 KB, y al escribir en un chip ram TTL de alta velocidad, fue posible asignar cualquier bloque de 16 KB de 1 MB en los 4 bloques de 16 KB que la CPU podría abordar.

No hay límite teórico sobre el tamaño de esta técnica; puede mapear Petabytes de ram en los 64 KB que una CPU de 8 bits puede direccionar.

Además, incluso si el bus de datos es de 8 bits, no hay nada que tenga que enviar 8 palabras de 8 bits a una unidad de almacenamiento para acceder a una unidad de almacenamiento Exabyte de 18,000.

Entonces no hay límite teórico.

Esta pregunta no está clara. ¿Te refieres a componentes modernos discretos? Si este es el caso, esta es una posible respuesta MOnSter 6502

Si, por otro lado, es una pregunta general sobre inquietudes arquitectónicas, no entiendo su punto. El Z80, por poner un ejemplo, tenía una CPU de 8 bits pero presentaba un bus de direcciones de 16 bits, lo que permitía 64 KB de RAM.

Algunas CPU derivadas de Z80, que todavía tienen 8 bits como ancho de CPU, pudieron implementar una segmentación similar a la de las CPU 8088/8086 de 16 bits para alcanzar, si mal no recuerdo, un ancho de bus de direcciones de 20 bits, pudiendo así abordar una memoria RAM Megabyte completa.

Los mismos 64KByte de RAM (y ROM) que una computadora de 8 bits “tenía en el pasado”. Todas esas CPU de 8 bits tenían un rango de direcciones de 16 bits, que es lo que limita su rango (combinado) de direcciones RAM y ROM a 65536 bytes. O tendrías que jugar los mismos trucos como “cambio de banco” que se empleó en ese entonces para ayudar a aumentar ese rango (de forma temporal). Solía ​​trabajar con un sistema Z80H que tenía 256 KB de RAM …

Sin embargo, si toma la pregunta con un poco más de soltura, podría considerar, por ejemplo, un AVR ATmega2560 como una “computadora moderna de 8 bits”, en un solo chip, pero para fines más especializados, que tiene mucho de lo que solía tomar La mayoría de los componentes en una vieja computadora de 8 bits (CPU, RAM, ROM) en un solo chip. Pero esos no están diseñados directamente para ser utilizados con una pantalla de video como una “computadora real” …