Electronika-60-años 80

Electronika-60 La primera computadora personal

Articulo publicado por Nikola Ew, y rescatado por ingeniu, buceando en las entrañas de Archive.org. Acerca de la electronika-60. De las primeras computadoras personales. Cuna de, entre otros, el tetris tal y como lo conocemos.

La primera computadora – “Electrónica-60”

computadora-electronika-60En esta página, me gustaría contarles brevemente sobre la muy extendida computadora Electronics-60 en ese momento; me refiero a VUMS, DVK y otros basados ​​en ella. En la actualidad, por supuesto, las posibilidades de este “personal” son ridículas, pero sin embargo, mucho en esto merece atención. Además, esta es la máquina en la que aprendí a programar 🙂

Noto de inmediato que este artículo de ninguna manera pretende ser una descripción técnica completa y absolutamente precisa, y casi nadie lo necesita. Bueno, si aún lo necesita, me refiero al semi-libro, magnífico en contenido y terrible en diseño, el semi-folleto “Procesador central M2”. Fue leído (para un principiante) muy duro, pero había TODO en él. Absolutamente TODO. Incluso un ejemplo de un circuito de dispositivo externo.

Entonces, primero gracioso. Aquí hay algunos extractos de la descripción del procesador central M2, sobre la base de la cual se construyeron las computadoras anteriores.

Y esta es una lista real de mi programa, que midió (o al menos intentó medir) la velocidad del procesador para varios métodos de direccionamiento. Hasta donde recuerdo, esto estaba relacionado con DVK-2

Capacidad de RAM residente,
K palabras4 4Numero de equipos81Velocidad, op / seg.250,000números de bits con
coma flotante32El número de LSI (grandes
circuitos integrados)5 5Dimensiones del tablero, mm240 x 280

El complejo informático VUMS, construido sobre la base de Electronics-60, se veía así:

Alimento – de la red trifásica 380V

Consumo de energía
: no más de 1750 W

Sin embargo, sus dimensiones podrían reducirse
significativamente: la
unidad del sistema  (3) y el GMD-70 (2) se elevaron más, la
pantalla (4) se colocó en un estante y la
impresora podría ser más pequeña …

Bueno, ahora brevemente sobre arquitectura, principalmente desde el punto de vista del programador.

La unidad del sistema, en la imagen, esto (3) era una canasta en la que se insertaban las placas del procesador y los periféricos. La placa del procesador siempre se colocó en la parte superior, porque el sistema de interrupción en Electronics-60 difería del IBM más familiar ahora. Si es completamente primitivo, entonces las líneas de solicitud de interrupción (al procesador) y las líneas de interrupción (del procesador) atravesaron la canasta, digamos, de arriba a abajo, respectivamente, se le dio la máxima prioridad a la placa más cercana al procesador. Y la placa periférica misma informó el vector de interrupción al procesador, por lo que no podría haber una situación de falta de líneas IRQ: había 256 vectores. Sí, aún así, cuando el procesador accedió a una dirección, ya sea RAM o un dispositivo externo, el equipo tuvo que generar una señal “SIP” (sincronización pasiva), cuya ausencia causó una interrupción “acceso a una ubicación de memoria inexistente”. En la arquitectura de IBM, el procesador simplemente no nota nada.

Electronika_60En la unidad del sistema (a la derecha) había tres interruptores: encendido, modo paso a paso y temporizador encendido. Cambiando al modo de paso; de hecho, era un programa de monitor conectado en ROM, si puede llamarlo así. Con su ayuda, fue posible ver y cambiar el contenido de la memoria y los registros, recorrer el programa en pasos, ejecutar pruebas, cargar, etc.

Para el programador, Electronics-60 consistía en ocho registros R0-R7 de 16 bits, la palabra de estado del procesador, la RAM y los registros de dispositivos externos, que estaban ubicados en los 4 kB superiores del espacio de direcciones.

Los registros R0-R5 eran registros de propósito general (RON), R6 es el puntero de pila SP, R7 es el contador de instrucciones de la PC. Pero a diferencia del AX, BX habitual … todos los registros eran absolutamente idénticos, es decir, podía escribir ADD # 10, PC y obtener JMP. Aunque esto no fue recomendado. Por cierto, en los comandos de dos operandos, tanto el receptor como la fuente podrían estar en la memoria; en los procesadores descendientes de 8086, esto todavía no existe, excepto por los comandos de “cadena” suficientemente peculiares.

Las celdas de memoria podrían dirigirse a bytes y palabras. . Los registros también se pueden abordar como un byte, pero solo para el más joven. Pero las instrucciones del procesador siempre han sido de doble byte.

El formato del operando es:

 

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Código del equipo

 

operando único:

 

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Código del equipo direccionamiento RON

 

dos operandos (fuente src, receptor dst):

 

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Código del equipo direccionamiento
src
RON dst direccionamiento RON

 

Se puede ver inmediatamente de lo anterior por qué estas máquinas no utilizaron el sistema hexadecimal, sino el sistema de representación de datos octales: se codificaron tres dígitos con un dígito, y todo resultó muy claramente. Y la visibilidad era muy necesaria cuando era necesario editar el código con bolígrafos.

Pero la descripción más digna en ese procesador son los métodos de direccionamiento. Espero no estropear nada por mucho tiempo …

Métodos de direccionamiento Procesador M2


Código de direccionamiento binario
Titulo
Descripción
Ejemplo
000
Registrarse
El operando está registrado
mov R0, R4
010
Incremento automático
La dirección del operando está en el registro, después de la ejecución, el registro aumenta en 1 (operación de byte) o 2 (palabra)
mov R0, (R4) +
100
Auto-decremento
Lo mismo, pero el caso se reduce ANTES de ejecutar el comando
mov R0, - (R4)
110
Indice
La dirección del operando es la suma del registro y la palabra que sigue al comando
mov R0, 10 (R4)
001
Registrarse indirectamente
La dirección del operando en el registro
mov R0, (R4)

 o

 mov R0, @ R4
011
Incremento automático indirecto
La dirección de la dirección (!) Está en el registro, después de ejecutar el comando, el registro se incrementa de manera similar al código 010
mov R0, @ (R4) +
101
Auto-decremento indirecto
Igual que el código 100
mov R0, @ - (R4)
111
Indización indirecta
La dirección de la dirección del operando es la suma del registro y la palabra que sigue al comando
mov R0, @ 10 (R4)
Los siguientes modos de direccionamiento pueden distinguirse como especiales, ya que utilizan R7 (PC) como un registro, que indica la dirección de la instrucción que se ejecutará
010111 (27 8 )
directo
el operando sigue la palabra de instrucción. De hecho, esto se incrementa automáticamente usando una PC
mov # 1, R0
011 111 (37 8 )
absoluto
la palabra que sigue a la palabra de comando es la dirección absoluta del operando
mov R0, @ # 1000
110 111 (67 8 )
pariente
la dirección del operando es la suma de la PC y el desplazamiento en la palabra que sigue a la instrucción. ¡El código es movible!
mov R0, ADRES
111 111 (77 8 )
Relativamente indirecto
La dirección de la dirección del operando se calcula como la suma de la PC y la palabra que sigue al comando
mov R0, @ ADRES

 

El sistema procesador M2

 

(B) : un comando puede ejecutarse con una palabra o byte, determinado por el bit más significativo del comando. En la columna “Código” se indica con un asterisco *

R – registro de uso general

SS – 6 dígitos que determinan la fuente

DD – 6 bits que definen el receptor

XXX : compensaciones de 8 bits en las instrucciones de bifurcación

MSP – palabra de estado del procesador

NN : desplazamiento de 6 bits

 

Placa de procesador

Mnemotécnicos Código (8 dígitos) Nombre
Detener 000000 Parar: cambia al modo de monitor del teclado
ESPERA 000001 Esperando interrupción
Rti 000002 Regreso de la interrupción
BPT 000003 Interrupción de depuración (punto de interrupción)
IOT 000004 Interrumpir para E / S
RESET 000005 Restablecer (generar una señal de restablecimiento en el bus)
RTT 000006 Regrese de la interrupción con el conjunto T-bit de SSP: parece que se usó en depuradores
Jmp 0001DD Transición incondicional
Rts 00020R Retorno de subrutina
Jsr 004RDD La apelación a la subrutina. Trabajó muy astuto, ¡vea la descripción a continuación!
EMT 104000-104377 Interrupción de comando
Trampa 104400-1077777 Interrupción de comando
Nop 000240 Sin operación Esto es en realidad un comando “borrar sin descargar la palabra de estado del procesador”, ver más abajo
CLC 000241 Descarga MOP “C” (palabras de estado del procesador)
CLV 000242 Purificación de los bits correspondientes del BSC. De hecho, puede borrar varios a la vez, determinados por los cuatro bits menos significativos del comando. Y si no limpias ninguno, obtienes NOP
CLZ 000244
CLN 000250
Sec. 000261 Absolutamente similar a los comandos de limpieza
Sev 000262
Sez 000264
Sen 000270
Hisopo 0003DD Intercambiar bytes bajos y altos
CLR (B) * 050DD Limpieza
COM (B) * 051DD Invertir
INC (B) * 052DD Incremento
Dic (b) * 053DD Decremento
NEG (B) * 054DD Cambiar signo
ADC (B) * 055DD Agregar transferencia
SBC (B) * 056DD Resta de transferencia
TST (B) * 057DD Verificación: de hecho, la instalación de signos en el contenido de DD. ¡El hecho es que el equipo de reenvío cambió los atributos N y Z del BSC! Lo cual es realmente extraño.
ROR (B) * 060DD Desplazamiento cíclico a la derecha por descarga C
ROL (B) * 061DD Mismo izquierda
ASR (B) * 062DD Desplazamiento aritmético a la derecha (división por 2)
ASL (B) * 063DD Igual a la izquierda (multiplicación por 2)
MARCA 0064NN Recuperación de SP: nunca he usado este comando. Algo complicado 🙂
Sxt 0067DD Extensión de señal
MTPS 1064SS Escribir BSP / Leer BSP.
Dado el cambio en el BSC, el comando de reenvío a menudo tenía que usar estos comandos
Mfps 1067DD
MOV (B) * 1SSDD Envío. Además de cambiar el BSC, hubo otra sutileza: enviar un byte al registro causó la expansión automática del personaje
CMP (B) * 2SSDD Comparación
BIT (B) * 3SSDD Comprobación de bits (AND lógico, sin cambiar los operandos)
BIC (B) * 4SSDD Brocas de limpieza
BIS (B) * 5SSDD Ajuste de bits
Xor 074RDD O exclusivo
AGREGAR 06SSDD Suma (funciona solo con palabras, como resta)
SUB 16SSDD Resta
BR 0004XXX La ramificación es incondicional. En todas las instrucciones de bifurcación, el byte menos significativo del comando es un número con signo, que define la distancia de la transferencia de control.
Bne 0010XXX Ramificación si no es igual
BEQ 0014XXX Ramificación si es igual
Bge 0020XXX Ramificación si es mayor o igual
BLT 0024XXX Ramificando si menos
BGT 0030XXX Ramificando si más
Ble 0034XXX Ramificación si es menor o igual
Bpl 1000XXX Ramificación si más
IMC 1004XXX Ramificación si menos
Bhi 1010XXX Ramificación si más (sin firmar)
Blos 1014XXX Ramificación si es menor o igual (sin signo)
Bvc 1020XXX Ramificación si no hay desbordamiento
Bvs 1024XXX Ramificación si se desborda
Bhis 1030XXX Ramificación si es mayor o igual (sin signo)
BLO 1034XXX Ramificación si menos (sin firmar)
Sollozo 077RNN Registre decremento y ramificación, si no es 0. NN – 6 bits, ramificación siempre hacia atrás
Mul 070RSS Multiplicación de enteros. Si el registro R es par, entonces en R la parte inferior del resultado, y en R + 1 la más alta. Si R es impar, solo la parte menor del resultado
Div 071RSS División entera, el registro R es necesariamente par. En R + 1, la parte más alta del dividendo y el resto después de la operación.
Ceniza 072RSS Desplazamiento aritmético por N dígitos (N – 5 dígitos + signo)
ASHC 073RSS Desplazamiento aritmético por N dígitos de una palabra doble
Fadd 07500R Operaciones de punto flotante. Hasta donde recuerdo, R señaló un bloque de 4 palabras, en el que se colocaron dos números en formato de coma flotante. No recuerdo más precisamente. Sí, los comandos, comenzando con ASH, no estaban en absoluto: en el procesador M1 definitivamente no estaban allí.
FSUB 07501R
Fmul 07502R
Fdiv 07503R

Electronika-60-años 80Como todo … espero no haber olvidado nada. Y también me gustaría detenerme en la transición del equipo al subprograma, porque fue, digamos, no del todo común …

Dirección de JSR Rn

Mediante este comando:

1) el contenido de Rn se
introdujo en la pila 2) la dirección de retorno se ingresó en el registro Rn (el siguiente comando después de JSR)
3) la dirección de salto se introdujo en la PC

Entonces, el familiar CALL (JSR PC) fue esencialmente un caso especial. Si tenemos en cuenta que la dirección de transición podría establecerse mediante cualquier método de direccionamiento, entonces podría pervertir lo que quiera. Por ejemplo, con un comando para borrar toda la RAM de la máquina. La dirección de la parte superior de la memoria + 2 se ingresó en la pila, 004016 (JSR R0, @ SP) se ingresó en la dirección cero de la memoria, 0 se ingresó en el registro R0 y se lanzó el “programa”.

R0 se escribió en la pila, es decir, en la celda de memoria superior, y la dirección tomada de la pila se ingresó en la PC, es decir, el mismo cero y el comando se ejecutó nuevamente. La pila se llenó con ceros hasta llegar a la dirección cero, escribiendo así el comando HALT y haciendo la transición a él. La ejecución del programa se detuvo allí.

O, por ejemplo, este comando:

PC JSR, @ (SP) +

Proporciona transferencia de control a una dirección desde la parte superior de la pila, dejando su dirección de retorno allí, lo que permite que dos rutinas transfieran el control entre sí en cualquier lugar. Para hacer esto, solo necesita insertar la dirección del principio de uno en la pila y transferir el control al otro. Y puedes hacer procesos paralelos 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *