La familia Saturn de microprocesadores de 4 bits ( datapath ) fue desarrollada por Hewlett-Packard en la década de 1980, primero para la computadora de mano HP-71B , lanzada en 1984, y más tarde para varias calculadoras HP (empezando por la HP-18C ). Sucedió a la familia de procesadores Nut utilizados en calculadoras anteriores. La HP48SX y la HP48S fueron los últimos modelos en utilizar procesadores Saturn fabricados por HP, los modelos posteriores utilizaron procesadores fabricados por NEC . La serie HP 49 utilizó inicialmente la CPU Saturn hasta que la fábrica de NEC [nb 1] ya no pudo fabricar el procesador por razones técnicas en 2003. A partir del modelo HP 49g+ en 2003, las calculadoras cambiaron a un procesador Samsung S3C2410 con un núcleo ARM920T (parte de la arquitectura ARMv4T ) que ejecutaba un emulador del hardware Saturn en software. En 2000, las HP 39G y HP 40G fueron las últimas calculadoras que se introdujeron basadas en el hardware Saturn fabricado por NEC. Las últimas calculadoras que se introdujeron con el emulador Saturn fueron las HP 39gs , HP 40gs y HP 50g en 2006, así como la revisión de 2007 de la hp 48gII . La HP 50g fue la última calculadora vendida por HP que utilizó este emulador cuando se suspendió en 2015 debido a que Samsung detuvo la producción del procesador ARM en el que se basaba. [1] [2] [3]
El hardware Saturn tiene un diseño serial de nibble [4] a diferencia de su predecesor Nut , que era serial de bits . [5] Internamente, la CPU Saturn tiene cuatro buses de datos de 4 bits que permiten un rendimiento de casi 1 ciclo por nibble con uno o dos buses que actúan como fuente y uno o dos que actúan como destino. [4] La palabra direccionable más pequeña es un nibble de 4 bits que puede contener un dígito decimal codificado en binario (BCD). Cualquier unidad de datos en los registros más grande que un nibble, hasta 64 bits, se puede operar como un todo, sin embargo, la CPU Saturn realiza la operación en serie en una base de nibble por nibble internamente. [4]
La arquitectura Saturn tiene un ancho de registro interno de 64 bits y 20 bits de dirección, y la memoria se direcciona con una granularidad de 4 bits (nibble). Las instrucciones ALU de Saturn admiten un ancho de datos variable y funcionan con entre uno y 16 nibbles de una palabra. Los chips de CPU Saturn originales proporcionaban un bus de datos externo de cuatro bits, pero los SoC basados en Saturn posteriores incluyeron la conversión de bus en chip a un bus de datos externo de 8 bits y un bus de direcciones externo de 19 bits.
La arquitectura Saturn tiene cuatro GPR (Registros de Propósito General) de 64 bits , denominados A, B, C y D. Además, también hay cinco registros "scratch" de 64 bits denominados R0, R1, R2, R3 y R4. Estos sólo pueden almacenar datos. Si se requiere una operación ALU para los datos de un registro scratch, entonces el registro en cuestión debe transferirse primero a un GPR. Otros registros incluyen un registro "puntero" de 1 nibble denominado P, que se utiliza normalmente para seleccionar un nibble en un GPR o un rango de nibbles (o para alinear datos inmediatos en un nibble específico en un GPR, con ajuste de tiempo). Para el acceso a la memoria, hay dos registros punteros de datos de 20 bits denominados D0 y D1. La arquitectura Saturn también tiene un registro contador de programa o PC que puede interoperar con los GPR. También hay una pila de retorno de hardware de 20 bits, LIFO, circular, de 8 niveles denominada RSTK que se utiliza cuando se emite una instrucción de llamada de subrutina. Además, la CPU Saturn está equipada con un registro de estado de software de 16 bits llamado ST y un registro de estado de hardware de 1 nibble llamado HS, que contiene el indicador SB o "sticky bit" que indica si un binario 1 se desplazó a la derecha de un GPR. Además, la arquitectura Saturn tiene un registro OUT de 12 bits y un registro IN de 16 bits, que en los SoC Yorke y Clarke se utilizan para capturar la entrada del teclado y también para controlar el avisador acústico. También hay un registro de indicador de acarreo de 1 bit.
Además de lo anterior, la CPU Saturn tiene un sistema de interrupción simple y sin prioridades. Cuando se produce una interrupción, la CPU termina de ejecutar la instrucción actual, guarda el contador de programa en la pila de retorno de hardware (RSTK) y salta a la dirección 0x0000Fh, donde el valor anterior está en nibbles. [4] La CPU también interactúa directamente con la lógica de escaneo del teclado.
El siguiente diagrama muestra los registros (cada cuadrado blanco representa 4 bits/un nibble, excepto el indicador Carry, que es de 1 bit):
Formato y campos de registro GPR de 64 bits de Saturno:
Los datos de los registros de propósito general pueden accederse a través de campos que caen en los límites de nibble, mientras que los registros scratch solo permiten operaciones de carga y almacenamiento. Los campos, como se muestra en el diagrama anterior, son W (GPR completo de 64 bits), A (dirección, primeros 5 nibbles de un GPR), S (signo de mantisa, nibble más significativo de un GPR), XS (signo de exponente, nibble 2 de un GPR), M (mantisa, nibbles 3–14 de un GPR), X (exponente, primeros 3 nibbles de un GPR) y B (primer byte de un GPR). Además, existe el campo P que selecciona un nibble de un GPR en función del valor de 4 bits del registro P. También existe el campo WP que selecciona nibbles del 0 al nibble seleccionado en el registro P. Los 64 bits (16 nibbles) pueden contener números de punto flotante codificados en formato BCD compuestos por un nibble de signo (que es "9" si el número es negativo), 12 dígitos de mantisa y un exponente de complemento a 10 de 3 dígitos almacenado en formato BCD (±499). [6] La representación interna de los valores de punto flotante BCD es una mantisa de 15 dígitos con un nibble de signo en un registro combinado con un exponente de 20 bits, en formato de complemento a 10, en otro registro. El uso de BCD en lugar de la representación binaria directa es ventajoso para las calculadoras, ya que evita los problemas de redondeo que ocurren en la conversión binario/decimal .
Las direcciones de instrucciones y datos de la CPU Saturn también se basan en nibbles. Los tres registros de puntero (incluido el contador de programa) y los registros de dirección tienen un ancho de 20 bits. Debido a esto, la arquitectura Saturn puede direccionar 1 M de nibbles o, equivalentemente, 512 K bytes. Más allá de ese tamaño (por ejemplo, en el 48GX), se utiliza la conmutación de bancos .
La computadora portátil HP-71B original y la HP-28C tenían el procesador Saturn como un chip separado. En las series HP 48S/SX, 48G/GX y HP-28S, HP-27S, HP-42S, HP-32SII y HP-20S, el núcleo de CPU Saturn está integrado como parte de un circuito integrado (IC) SoC más complejo .
La siguiente es una implementación entera de un algoritmo de raíz cuadrada decimal BCD en la sintaxis de ensamblaje de Saturn Jazz / HP Tools:
** En lo siguiente se supone que AW contiene el argumento (< 1E14).** El resultado (IP(SQRT(AW))) está en CW: SETDEC Lenguaje de señas W C=AW A=A+AW A=A+AW A=A+CW ASR-W C=0 W P= 13 LC(1) 5 - Paquete de trabajo de RSE C=C-1 P -- C=C+1 P A=CA W Gobierno central -- A=A+CW RSE W P=P-1 P=P-1 Gobierno central - Conjunto A=en sentido horario
La CPU Saturn original dio su nombre a toda la arquitectura del conjunto de instrucciones . Los chips posteriores tuvieron sus propios nombres en código:
Los nombres en código de las CPU están inspirados en los miembros de la Expedición Lewis y Clark de 1804-1806, la primera expedición terrestre de los Estados Unidos a la costa del Pacífico y de regreso. Los nombres en código de las CPU/emuladores virtuales se inspiraron en el prototipo "New-Yorke" de SoC de 8 MHz basado en Saturn que nunca llegó a producción. [12] Según uno de los miembros de la ACO (Operación de Calculadora Australiana), "Big Apple" se derivó del nombre en código "New-Yorke" del prototipo de SoC de 8 MHz basado en Saturn en una referencia a la ciudad de Nueva York, de ahí los nombres "Big apple", "Mid Apple" y "Little Apple". [12]
Si el exponente es negativo, se codifica como "1000 - ABS(exponente)"
[1]