Mostrando entradas con la etiqueta PDP-11. Mostrar todas las entradas
Mostrando entradas con la etiqueta PDP-11. Mostrar todas las entradas

miércoles, 7 de junio de 2023

¿Cómo instalo RSX-11M Plus en Ubuntu?

¡Trabajadores!

Los hackers no pueden dar nada que la CPU no compile. Lo que el hacker puede hacer es evitar que entre todos los programadores, algunos se lleven la parte del león mientras que otros carguen con la parte del ratón. Toda nuestra obra bajo GPLv3 ha de apreciarse desde ese ángulo. Con estas compilaciones, nuestros hackers - ungidos bajo el signo de la justicia social - no hay hecho mas que programar esa justicia, dando a los usuarios lo que es de los usuarios, y a la CPU lo que es de la CPU.

Esta programación social ha hecho que yo cuente con un gran predicamento entre los hackers, en razón de que les he asegurado la Justicia Social que nunca habían tenido. He obrado con lealtad y sinceridad y he trabajado incansablemente por favorecer a los que desde hace cincuenta años han estado sumergidos y aplastados económicamente. Hoy, que ven que gozan con su código, compilan y depuran mejor. Sienten que se los ha dignificado; y es lógico que así sea. Yo he levantado la bandera de la dignificación del hacker, porque este país necesita hombres y mujeres de compilen, y es la suprema dignidad de la compilación la que estoy creando. No hay ninguna dignidad más alta que compilar.

Sin duda que GNU con Linux es uno de los ambientes principales para lograr esta Justicia, pero incluso antes que Ubuntu fuese una idea, yo ya lo lograba con la DEC PDP-11 de 16 bits poblada con RSX-11M Plus

Se trató de una serie de sistemas operativos multiusuario iniciada en 1973 para resolver procesos computacionales en tiempo real para dichas computadoras. Sin embargo, a lo largo de su dilatada vida comercial se utilizaron como base para el desarrollo de todo tipos de tareas informáticas.

Podremos utilizar el emulador de PDP-11/70 y las cintas de 9track.net y bitsavers.org.

A través de la devolución de la terminal os enseñaré cómo instalar RSX-11M-Plus v4.x, aparecidas generalmente a partir de mediados de 1985. 

En aras de la brevedad que siempre es útil en todo tipo de proyectos, os indicaré en azul lo que deben tipear en el intérprete de comandos "MCR", y en rojo las teclas a presionar. Naturalmente esto puede realizarse en un DEC PDP-11 real de la serie 13, 43, 70 e incluso las modernas 84 o 93, pero es particularmente útil para su émulo moderno PiDP-11/70 basadas en una Raspberry Pi, aunque llevará llevará mas tiempo.

Copiar el kit de instalación al disco

La cinta de distribución contiene un conjunto BRU, la Utilidad de Respaldo y Restauración de RSX, para un sistema base. Se trata en este caso de una versión sola para la unidad de cinta TS11, capaz de bootear desde ella. La cinta utilizada es la BB-J083H-BC (RSX-11M-PLUS V4.2 MT:1600 BRUSYS STANDALONE COPY SYSTEM)

RSX-11M/RSX-11M-PLUS Standalone Copy System V04
 
MCR> 
 
RSX-11M/RSX-11M-PLUS Standalone Configuration and Disk Sizing Program
 
Valid switches are:
        /CSR=nnnnnn to change the default device CSR
 
        /VEC=nnn to change the default device vector
        /FOR=n to change the default magtape formatter number
        /DEV to list all default device CSR and vectors

>

Enter first device: MS0:

Enter second device: DB0:

Hit RETURN and enter date and time as 'TIM HH:MM MM/DD/YY'

>TIM 20:24 05/24/90

Ahora hemos de revisar cualquier bloque dañado en los discos de destino, lo que creará una tabla de bloques dañados. Naturalmente al usar un emulador no deberían existir; no obstante esta operación ha de realizarse para evitarnos que los programas de RSX protesten tontamente por su inexistencia.

>RUN BAD
>
BAD>DB0:
BAD -- DB0: Total bad blocks= 0.
BAD>[presionar Ctrl+z]

A continuación colocamos la cinta de RSX en la unidad TS11 virtual y corremos la BRU. En este caso utilizamos la cinta BB-J081G-BC (RSX-11M-PLUS V4.2 BRU MT:1600 ID:RSX11MPBL58 DIST KIT)

>RUN BRU
>
BRU>/REW MS0: DB0:
BRU - Starting Tape 1 on MS0:

BRU - End of Tape 1 on MS0:

BRU - Completed

BRU>[presionar Ctrl+z]

>

Iniciar el sistema de base

Para ello detenemos el sistema y booteamos desde el sistema recién creado (dispositivo rp0 en Simh). El sistema de base consiste en una imagen ejecutable que cuenta con una configuración segura por defecto, que podía correr en cualquier modelo de la línea PDP-11 (que cuente con los requerimientos básicos para RSX-11M Plus v4.x, claro está). Existen varios controladores de dispositivos ya configurados en la misma, lo que facilitará el proceso de instalación del sistema completo.

RSX-11M-PLUS V4.2  BL58   1024.KW  System:"Baseline"
>RED DB:=SY:
>RED DB:=LB:
>RED DB:=SP:
>MOU DB:"RSX11MPBL58"
>@[2,54]BASTART.CMD
>SET /CRASHDEV=MM0:
SET -- Crash device MM0: has been successfully loaded
>;
>;
>;      RSX-11M-PLUS V4.2 Distribution Kit
>;
>;      This is the baseline system of the RSX-11M-PLUS V4.2
>;      distribution kit. This system contains an assortment of
>;      devices and may in fact be of some use on your target
>;      system. The main purpose of the baseline system, however,
>;      is to provide a working system environment which may be
>;      used to generate a custom-tailored operating system for
>;      your target hardware. We will now provide instructions
>;      to guide you through the startup procedure.
>;
>;
>;      It is important to specify the correct date and time.
>;      Use the format "DD-MMM-YY HH:MM".
>;
>* Please enter the date and time [S]: 24-MAY-90 20:25

Naturalmente, hemos de saber que cualquier versión de RSX-11M-PLUS anterior a la 4.6 no conforman el bug Y2K, por lo cual no aceptan fechas y operaciones nominales por encima del 31 de diciembre de 1999.

>TIME 24-MAY-90 20:25
>;
>;      Now allocate checkpoint space for use by system utilities.
>;
>ACS SY:/BLKS=1024.
>;
>;      The following information is necessary for this command file
>;      to correctly access the remainder of the distribution kit.
>;
>* Did you receive your RSX-11M-PLUS distribution kit on magnetic tape? [Y/N]: Y
>;
>;      Please enter the name of the magnetic tape drive, which should
>;      still contain the distribution tape. The name is of the form:
>;
>;              MM1: or
>;              MS0: etc...
>;
>* Which tape drive contains the distribution tape [S]: MS0:
>;
>;      We will now set the CSR of the controller that will be
>;      used to bring in the remainder of the distribution kit to
>;      the standard value. If your controller is not at this address
>;      it will be necessary for you to manually configure the system
>;      by issuing the appropriate CON commands. Answer Yes to the
>;      manual configuration question to do this. If your controller
>;      is at the standard address, you do not have to do a manual
>;      configuration.
>;
>CON SET RHC CSR=160000
>CON SET MTA CSR=160000
>CON SET MSA CSR=172522
>CON SET MSA VEC=224
>CON SET MUA CSR=160000
>;
>;      We will now bring on line all devices which were generated into
>;      this baseline image and which exist in your hardware system.
>;
>;      If there is hardware in your system occupying a control
>;      register address which conflicts with a standard DIGITAL
(...)
>;      does occur, rebootstrap the baseline system and answer Yes
>;      to this question.  Instructions will then be provided to help
>;      circumvent the problem.
>;
>* Do you need to do manual configuration? [Y/N]: N
>;
>CON ONLINE ALL
>;
>;      Prepare to bring in the remainder of the distribution kit
>;
>* Is your target system disk an RC25, RK07, or RD52? [Y/N]: N
>;
>;      Since the files in the second backup set are not necessary to generate
>;      your system you may wish to skip the verify pass to save time.
>;
>* Do you want to verify the second backup set? [Y/N]: N
>;
>;      We will now mount the tape in MS0: for access by BRU.
>;
>MOU MS0:/FOR/DENS=1600
>;
>;      Ensure that the BRU task is installed.
>;
>INS $BRU
>;
>;      We will now load the remainder of the distribution kit.
>;
>TIME
20:25:40 24-MAY-90
>;
>BRU /BAC:MPBL58SRC/UFD/NOINI/DENS:1600 MS0: SY:
BRU - Starting Tape 1 on MS0:
 
BRU - End of Tape 1 on MS0:
 
BRU - Completed
 
>;
>DMO MS0:/LOCK=UNLOAD
20:25:46  *** MS0:  -- Dismount complete
DMO -- TT0:    dismounted from MS0:    *** Final dismount initiated ***
>;
>TIME
20:25:46 24-MAY-90
>;
>;      We will now create any UFDs that must be created on your disk(s).
>;      You will not see the UFD commands.
>;
>TIME
20:25:46 24-MAY-90
>;
>;
>;      The preparation of the RSX-11M-PLUS kit is now complete.  The next
>;      time this disk is bootstrapped, this dialog will only be repeated
>;      on request.  We will now record the successful installation in the
>;      log file on the new system disk, and either exit if the installation
>;      was done on line, or proceed with the normal startup sequence if the
>;      baseline system was used.
>;
>SET /UIC=[2,54]
>PIP LB:[1,1]KITIDENT.DAT/AP=LB:[2,54]INSTALOG.DAT
>;
>;
>SET /UIC=[200,200]
>;                      PLEASE NOTE
>;
>;      If you have not yet read the system release notes, please do so
>;      now before attempting to perform a SYSGEN or to utilize the new
>;      features of this system.
>;
>;
>;      In order to start the SYSGEN process, type:
>;
>;      >@SYSGEN
>;
>;      When SYSGEN has completed and your generated system is
>;      running, you may wish to edit several DIGITAL-supplied
>;      prototype command and text files to suit your system
>;      and application:
>;
>;      File                    Purpose
>;      ----                    -------
>;      [0,0]RSX11.SYS          An account/password file
>;                              This file does contain privileged accounts.
>;
>;      [1,2]STARTUP.CMD        (This file) Invoked at bootstrap time to
>;                              control bringing up the system.
>;
>;      [1,2]QMGSTART.CMD       Invoked by STARTUP to start up the Queue
>;                              Manager and spooling system.
>;
>;      [1,2]SHUTUP.CMD         Invoked by SHUTUP when taking down the system
>;                              to perform system dependent shutdown tasks.
>;
>;      [1,2]QMGSTOP.CMD        Invoked by SHUTUP to stop the Queue Manager
>;                              and spooling system.
>;
>;      [1,2]LOGIN.TXT          Displayed on user's terminal when logging in.
>;
>;      [1,2]BATCH.TXT          Displayed at the beginning of each batch log
>;                              file.
>;
>;
>ELI /LOG/LIM
>CLI /INIT=DCL/CTRLC/DPR="<15><12>/$ /"
>INS LB:[1,1]RMSRESAB.TSK/RON=YES/PAR=GEN
>INS LB:[1,1]RMSLBL.TSK/RON=YES/PAR=GEN
>INS LB:[1,1]RMSLBM.TSK/RON=YES/PAR=GEN
>INS $QMGCLI
>INS $QMGCLI/TASK=...PRI
>INS $QMGCLI/TASK=...SUB
>QUE /START:QMG
>INS $QMGPRT/TASK=PRT.../SLV=NO
>QUE LP0:/CR/NM
>START/ACCOUNTING
>CON ESTAT LP0:
>QUE BAP0:/BATCH
>QUE BAP0:/AS:BATCH
>@ <EOF>
>
>SHO /DEF
DB0:[200,200]  Nonamed  TT0:
Protection UIC:  [200,200]
>


Correr SYSGEN

Ahora que podemos utilizar el sistema de base (antediluviano equivalente a un Pendrive booteable con GNU/Linux). Sin embargo, este no estará optimizado para nuestra configuración de hardware - si siquiera hará uso de toda la memoria emulada ni contará con todos los servicios de dispositivos configurados. 

Para crear una imagen ejecutable final optimizada para nuestra configuración emulada, habremos de correr la utilidad de generación de sistema. Se trata de una serie de comandos que reciden en el UFD [200,200] (el Directorio de Ficheros de Usuario de RSX, similar a un /usr/bin en los similares a UNIX). 

Ya que gracias al comando sho /def anterior vimos que ya estamos situados en UFD [200,200], de modo que podremos el guion SYSGEN.CMD introduciendo @sysgen, de la siguiente manera:

>@SYSGEN
>;
>; RSX-11M-PLUS  V4.2  BL58  SYSGEN
>;
>; COPYRIGHT (c) 1988
>; DIGITAL EQUIPMENT CORP., MAYNARD MA., 01754
>;
>SET /DPRO=[RWED,RWED,RWE,R]
>;
>; To exit from the SYSGEN procedure at any time, type CTRL/Z.
>;
>; If you are unsure of the answer to a question for which a de-
>; fault answer exists, use the default answer.
>;
>;
>;
>;===================================================
>;  Choosing SYSGEN Options      24-MAY-90 at 20:26
>;===================================================
>;
>;
>;
>; Every question is preceded by a question number (for example SU010)
>; which you can use to find the explanation of the question in the
>; RSX-11M-PLUS System Generation and Installation Guide.
>;
>; An explanation of every question is also available by pressing
>; the ESC key (or the ALTMODE key) in response to the question.
>;
>; If you are unfamiliar with the SYSGEN procedure, the explanation of
>; each question can be printed automatically before the question.
>;
>* SU010   Do you always want the explanation printed? [Y/N D:N]: ? [Presionar Intro]
>;
>; SYSGEN always creates saved answer files containing your responses
>; to the SYSGEN questions:
>;
>;    SYSGENSA1.CMD     Setup questions, Executive options
>;    SYSGENSA2.CMD     Peripheral configuration
>;    SYSGENSA3.CMD     Nonprivileged task builds
>;
>; You should perform a PREPGEN first to create saved answer files, and
>; then perform a SYSGEN, specifying those saved answer files as input
>; to the Executive, peripheral, and nonprivileged task build sections.
>;
>* SU020   Do you want to use a saved answer file as input for
>*         the Executive options? [Y/N D:N]: ? [Presionar Intro]
>;
>* SU040   Do you want to use a saved answer file as input for
>*         the peripheral configuration? [Y/N D:N]: ? [Presionar Intro]
>;
>* SU060   Do you want to use a saved answer file as input for
>*         the nonprivileged task builds? [Y/N D:N]: ? [Presionar Intro]
>;
>* SU080   Do you want to do a PREPGEN? [Y/N D:N]: ? [Presionar Intro]
>;
>* SU090   Enter the name of the disk drive containing your
>*         target system disk [ddnn:] [S R:2-5]: DB0:
>;
>ASN DB0:=IN:
>ASN DB0:=OU:
>ASN DB0:=LB:
>ASN DB0:=WK:
>ASN DB0:=TK:
>ASN DB0:=BC:
>ASN DB0:=LI:
>ASN DB0:=OB:
>ASN DB0:=EX:
>ASN DB0:=MP:
>;
>* SU100   Do you want to run Autoconfigure on the host system
>*         hardware? [Y/N D:N]: Y

La función Autoconfigure descubrirá el CSR y el vector de la mayoría de los dispositivos emulados por nosotros. Estos sólo estaban disponibles en las últimas versiones de RSX.

>;
>; Running Autoconfigure:
>;
>INS $ACF
>ACF
>INS $ACO
>ACO SHOW
Processor Type:  11/84          Memory Size:  1024. Kw
 
Options:
 
        Floating Point Processor (FP11)
        Extended Instruction Set (EIS)
        Extended (22-Bit) Addressing
        Cache Memory
 
Name    Vector     CSR      Unit    Type      Remark
RHA      254      176700
                             0      RP04
                             1      RP04
DLA      160      174400
                             0      RL02
                             1      RL02
                             2      RL01
                             3      RL01
MSA      224      172522
DYA      264      177170
YLA      060      177560
 
>ACO SYSGEN
>;
>* SU110   Do you want to override the Autoconfigure results? [Y/N D:N]: 
>;
>; You can:
>;
>;    o  do a complete SYSGEN
>;
>;    o  continue a previous SYSGEN from where you left off
>;
>;    o  do an individual section of SYSGEN
>;
>;
>* SU120   Do you want to do a complete SYSGEN? [Y/N D:Y]: 
>;
>INS [3,54]MAC/TASK=MACT0
>INS [3,54]PIP/TASK=PIPT0
>INS [3,54]LBR/TASK=LBRT0
>INS [3,54]TKB/TASK=TKBT0
>INS [3,54]VMR/TASK=VMRT0
>;
>;
>;
>;======================================================
>;  Choosing Executive Options      24-MAY-90 at 20:27
>;======================================================
>;
>;
>;
>; The answers to the questions in this section are put in the saved
>; answer file [200,200]SYSGENSA1.CMD.
>;
>; Enter a comment for inclusion in the SYSGENSA1 saved answer file.
>; The comment may contain more than one line.  The "V" in the right
>; margin below marks the maximum line length.  When you are done,
>; press RETURN in response to the prompt.
>;                                                                             V
>* Comment [S R:0.-55.]: rsx de peron
>* Comment [S R:0.-55.]:
>;
>* CE020   Do you want the Full-functionality Executive? [Y/N D:Y]: [Presionar Intro]

Es recomendable escoger la opción por defecto, a no ser que - al estilo RSTS/E - se deseen responder muchísimas interrogantes crípticas.

>;
>* CE120   Do you want support for communications products
>*         (such as DECnet, PSI, and LAT)? [Y/N D:N]: Y
>;
>* CE130   What is the system name? [S R:0-6 D:"RSXMPL"]: RSX1
>;
>* CE264   Do you want IP11 industrial I/O subsystem support? [Y/N D:N]: [Presionar Intro]
>;
>* CE270   Do you want to include XDT? [Y/N D:N]: [Presionar Intro]
>;
>* CE280   Enter the crash notification device CSR
>*         address [O R:160000-177700 D:177564]: [Presionar Intro]
>;
>; Note:  Enter both the device and the logical unit number.
>;        For example, MM0: or DL1:.
>;
>; Note:  Enter XX: if you desire loadable DU:, DL:, MU:, MS: or MM:
>;        crash driver support.
>;
>* CE290   On what device and unit do you want crash dumps
>*         to be written? [S R:2-6]: DL0:

Cuando RSX se cuelgue, se detendrá inmediatamente y solicitará cargar un paquete de disco virgen en el dispositivo. Una vez que se cargue el pack y se ponga la CPU a correr nuevamente (debemos ingresar cont en el prompt sim> de simh) ,  escribirá un volcado de núcleo en dicho dispositivo.

>;
>* CE330   Is your system clock programmable (KW11-P)? [Y/N D:N]: [Presionar Intro]
>;
>* CE350   Is your line frequency 50 Hz? [Y/N D:N]: Y
>;
>;
>;
>;=============================================================
>;  Choosing Peripheral Configuration      24-MAY-90 at 20:28
>;=============================================================
>;
>;
>;
>; The answers to the questions in this section are put in the saved
>; answer file [200,200]SYSGENSA2.CMD.
>;
>; Enter a comment for inclusion in the SYSGENSA2 saved answer file.
>; The comment may contain more than one line.  The "V" in the right
>; margin below marks the maximum line length.  When you are done,
>; press RETURN in response to the prompt.
>;                                                                             V
>* Comment [S R:0.-55.]: Test system for Simh
>* Comment [S R:0.-55.]:
>;
>;
>;   DB:    controllers: RH11, RH70     devices: RP04, RP05, RP06
>;
>;                        RH Configuration
>;
>;                      Physical Unit Number
>;
>;      0       1       2       3       4       5       6       7
>;
>; RHA  DB0:    DB1:
>;
>;
>;
>;
>;   DL:    controllers: RL11, RLV12    devices: RL01, RL02
>;
>;                        DL Configuration
>;
>;                      Physical Unit Number
>;
>;      0       1       2       3       4       5       6       7
>;
>; DLA  DL0:    DL1:    DL2:    DL3:
>;
>;
>;
>;
>;   CR:    controllers: CM11, CR11
>;
>* CP4004  How many CM/CR11 card readers do you have? [O D:0]: [Presionar Intro]
>;
>;
>;   MS:    controllers: TS11, TU80, TSV05, TK25
>;
>;
>;   DY:    controller:  RX211, RXV21   device:  RX02
>;
>;
>;   LA:    controller:  LPA11
>;
>* CP6204  How many LPA11 lab subsystems do you have? [D R:0.-16. D:0.]: [Presionar Intro]
>;
>;
>;   TT:    controllers: DL11, DLV11    controller mnemonic: YL
>;
>* CP6832  Enter terminal type for YLA [S R:4-6 D:"LA120"]: VT100
>;
>;
>;   TT:    controller:  DJ11           controller mnemonic: YJ
>;
>* CP7204  Enter number of DJ11 asynchronous line
>*         multiplexers [D R:0.-16. D:0.]: [Presionar Intro]
>;
>;
>* CP7604  Do you have any intercomputer communication devices? [Y/N D:N]: [Presionar Intro]

Asegúrese de seleccionar no a esta pregunta si tiene pensado correr DECnete debido a que los dispositivos de red no pueden compartirse entre el controlador de RSX y el controlador DECnet.

>;
>;
>; Enter device mnemonics for any user-supplied drivers.  The driver
>; source files must reside in [11,10] and be named ddDRV.MAC and
>; ddTAB.MAC where dd is the device mnemonic.
>;
>; You may enter the mnemonics on more than one line.  When you have
>; listed all the drivers, press RETURN when asked for the device
>; mnemonic.
>;
>; The device mnemonic must not include a colon.
>;
>* CP9604  Enter device mnemonics for user-supplied drivers [S]: [Presionar Intro]
>;
>;
>; The highest vector among the devices you specified in this SYSGEN
>; is 374(octal).  This is the default response for this question.
>;
>* CP9632  What is the highest interrupt vector
>*         address? [O R:374-774 D:374]: [Presionar Intro]
>;
>;
>;
>;================================================================
>;  Assembling the Executive and Drivers      24-MAY-90 at 23:30
>;================================================================
>;
>;
>;
>; The answers to the questions in this section are put in the saved
>; answer file [200,200]SYSGENSA1.CMD.
>;
>PIP RSXMC3.MAC=RSXMC1.MAC,RSXMC2.MAC
>PIP RSXMC.MAC=RSXMC3.MAC,RSXMC0.MAC
>;
>SET /UIC=[1,24]
>PIP [11,10]/NV=[200,200]RSXMC.MAC
>PIP [11,10]/NV=[200,200]SYSTB.MAC
>PIP [11,24]/NV=[200,200]RSXASM.CMD
>PIP [11,24]/NV=[200,200]DRIVERS.ASM
>;
>;
>* AE010   Do you want assembly listings of the Executive and
>*         drivers? [Y/N D:N]: [Presionar Intro]
>;
>ASN NL:=LS:
>;
>;
>* AE030   Do you wish to pause to edit any files before
>*         assembling? [Y/N D:N]: [Presionar Intro]
>;
>SET /UIC=[11,24]
>;
>PIP *.OBJ;*/DE/NM,*.TTY;*
>;
>TIME
23:30:52 24-MAY-90
>;
>MAC @RSXASM
>;
>TIME
23:31:48 24-MAY-90
>;
>MAC @DRIVERS.ASM
>;
>TIME
23:32:31 24-MAY-90
>;
>PIP RSX11M.OBS=*.OBJ
>PIP TTDRV.OBS=*.TTY
>;
>SET /UIC=[200,200]
>PIP /NV=[11,10]RSXMC.MAC
>;
>SET /UIC=[1,24]
>PIP RSXBLD.CMD/PU/NM
>PIP RSX11M.OLB;*/DE/NM
>PIP [200,200]RSXMC.MAC/PU/NM
>;
>LBR RSX11M/CR:256.::256./-EP=[11,24]RSX11M.OBS
>PIP [11,24]RSX11M.OBS;*,*.OBJ;*/DE
>;
>LBR TTDRV/CR:40.:392.:128.=[11,24]TTDRV.OBS
>PIP [11,24]TTDRV.OBS;*,*.TTY;*/DE
>SET /UIC=[200,200]
>;
>;
>;
>;==============================================================
>;  Building the Executive and Drivers      24-MAY-90 at 23:32
>;==============================================================
>;
>;
>;
>; The answers to the questions in this section are put in the saved
>; answer file [200,200]SYSGENSA1.CMD.
>;
>;
>; Allocate space to be used later for the system image file.
>;
>SET /UIC=[1,54]
>PIP RSX11M.TMP/CO/BL:1026.=NL:
>;
>SET /UIC=[200,200]
>;
>SET /UIC=[1,24]
>SET /UIC=[200,200]
>SET /UIC=[1,54]
>PIP SYSVMR.CMD=[200,200]SYSVMR.CMD,VMRTTY.CMD
>;
>SET /UIC=[200,200]
>;
>* BE030   Do you want to pause to edit any files before
>*         task-building? [Y/N D:N]: [Presionar Intro]
>;
>SET /UIC=[1,24]
>PIP [1,24]/NV/NM=[200,200]RSXBLD.CMD,RSX11M,DSP11M,LDR11M
>PIP [1,24]/NV=[200,200]DIR11M.CMD,DR211M,DIRCOM,DR2COM,DIR
>PIP [1,24]/NV=[200,200]DR311M.CMD,DR411M,DR3COM,DR4COM
>PIP [1,24]/NV=[200,200]VEC11M.CMD,DCM11M,VECCOM
>;
>TIME
23:33:39 24-MAY-90
>;
>TKB @RSXBLD
>;
>TIME
23:33:53 24-MAY-90
>;
>TKB @[200,200]DRIVERS.BLD
>;
>TIME
23:33:56 24-MAY-90
>SET /UIC=[200,200]
>;
>;
>;
>;=========================================================
>;  Building the Privileged Task      24-MAY-90 at 23:33
>;=========================================================
>;
>;
>;
>; The answers to the questions in this section are put in the saved
>; answer file [200,200]SYSGENSA1.CMD.
>;
>;
>* BP040   Do you want the maps of the privileged tasks? [Y/N D:N]: [Presionar Intro]
>;
>ASN NL:=MP:
>;
>SET /UIC=[1,24]
>;
>TIME
23:34:00 24-MAY-90
>;
>TKB @SAVBLD
>;
>TIME
23:34:02 24-MAY-90
>;
>ASN LB:=OU:
>SET /UIC=[200,200]
>;
>;
>;
>;============================================================
>;  Rebuilding Supplied System Tasks      24-MAY-90 at 23:34
>;============================================================
>;
>;
>;
>; The answers to the questions in this section are put in the saved
>; answer file [200,200]SYSGENSA3.CMD.
>;
>;
>* BN010   Do you want to rebuild any system tasks? [Y/N D:N]: [Presionar Intro]
>;
>;
>;
>;==========================================================
>;  Creating the System Image File      24-MAY-90 at 23:34
>;==========================================================
>;
>;
>SET /UIC=[1,54]
>;
>PIP RSX11M.TMP;*/DE/NM
>;
>PIP RSX11M.SYS/CO/NV/BL:1026.=RSX11M.TSK
>;
>ASN LB:=SY:
>VMR @SYSVMR
 
Loading Executive data space
Data space loading completed
VMR -- *DIAG*-Installed tasks or commons may no longer fit in partition
SET /TOP=SYSPAR:-*
VMR -- *DIAG*-Loadable driver larger than 4K
LOA TT:
VMR -- *DIAG*-Installed tasks or commons may no longer fit in partition
SET /TOP=DRVPAR:-*
SECPOL 117734 00172000 00100000  SEC POOL
SYSPAR 117670 00272000 00165300  MAIN
       117624 00272000 00111500  RO COM !DIR11M!
       117434 00403500 00005200  TASK   [...LDR]
       117230 00410700 00033100  TASK   [MCR...]
       117024 00444000 00010100  TASK   [TKTN  ]
       116620 00454100 00003200  TASK   [SHF...]
DRVPAR 116540 00457300 00133100  MAIN
       116474 00457300 00006600  RO COM !TTEXT !
(...)
GEN    113010 00612400 07165400  MAIN
       112744 00612400 00002000  RO COM !DYCOM !
...LDR 12.01  117500  SYSPAR 248. 00005200 LB0:-00143315 FIXED
TKTN   07.00  117070  SYSPAR 248. 00010100 LB0:-00055302 FIXED
(...)
NL0:                    OFL     DRIVER
POOL=1200:13510.:13510.:1720
>SET /UIC=[200,200]
>;
>REM MACT0
>REM PIPT0
>REM LBRT0
>REM TKBT0
>REM VMRT0
>;
>; End of SYSGEN
>;
>TIME
23:34:13 24-MAY-90
>;
>ASN =
>;
>@ <EOF>
>


Bootear el nuevo sistema

Ahora para bootear el sistema que acabamos de instalar, como primer medida debemos guardar la nueva imagen ejecutable y escribir el bloque de arranque.

>BOOT [1,54]RSX11M
RSX-11M-PLUS V4.2   BL58
 
 
>
 SAV/WB
RSX-11M-PLUS V4.2  BL58   1024.KW  System:"RSX1  "
>RED DB:=SY:
>RED DB:=LB:
>RED DB:=SP:
>MOU DB:"RSX11MPBL58"
>@DB:[1,2]STARTUP
>;                      PLEASE NOTE
>;
>;      If you have not yet read the system release notes, please do so
>;      now before attempting to perform a SYSGEN or to utilize the new
>;      features of this system.
>;
>;
>* Please enter time and date (HH:MM DD-MMM-YY) [S]: 23:37 24-MAY-90
>TIME 23:37 24-MAY-90
>ACS SY:/BLKS=1024.
>CON ONLINE ALL
>ELI /LOG/LIM
>CLI /INIT=DCL/CTRLC/DPR="<15><12>/$ /"
>INS LB:[1,1]RMSRESAB.TSK/RON=YES/PAR=GEN
>INS LB:[1,1]RMSLBL.TSK/RON=YES/PAR=GEN
>INS LB:[1,1]RMSLBM.TSK/RON=YES/PAR=GEN
>INS $QMGCLI
>INS $QMGCLI/TASK=...PRI
>INS $QMGCLI/TASK=...SUB
>QUE /START:QMG
>INS $QMGPRT/TASK=PRT.../SLV=NO
>QUE LP0:/CR/NM
>START/ACCOUNTING
>CON ESTAT LP0:
>QUE BAP0:/BATCH
>QUE BAP0:/AS:BATCH
>@ <EOF>
>BYE
Have a Good Evening
24-MAY-90 23:37 TT0:  logged off RSX1
>
>HELLO
Account or name: SYSTEM
Password: SYSTEM
 
RSX-11M-PLUS V4.2  BL58   [1,54] System     RSX1
24-MAY-90 23:37  Logged on Terminal TT0:  as SYS1
 
Good Evening
 
 
        *****************************************************************
        *                                                               *
        *                    Welcome to RSX-11M-PLUS                    *
        *                                                               *
        *                  Version 4.2  Base level 58                   *
        *                This is file LB:[1,2]LOGIN.TXT                 *
        *                                                               *
        *****************************************************************

Ya deberíamos poder ver los dispositivos instalados virtualmente:

>SHOW DEV
CO0:     TT0: Loaded
TT0:     [1,1]       [1,1] - Logged in  Loaded
VT0:     Loaded
VT1:     Loaded
RD0:     Loaded
DB0:     Public Mounted Loaded Label=RSX11MPBL58 Type=RP04
         Seek_Optimization=Nearest:10. Overlapped_Seeks
 
DB1:     Loaded Type=RP04
         Seek_Optimization=Nearest:10. Overlapped_Seeks
 
DL0:     Loaded Type=RL02
         Seek_Optimization=Nearest:10.
 
DL1:     Loaded Type=RL02
         Seek_Optimization=Nearest:10.
 
DL2:     Loaded Type=RL01
         Seek_Optimization=Nearest:10.
 
DL3:     Loaded Type=RL01
         Seek_Optimization=Nearest:10.
 
MU0:     Loaded Type=TK50
MS0:     Loaded Type=TS11
DY0:     Loaded Type=RX02
DY1:     Loaded Type=RX02
NL0:     Loaded
TI0:
CL0:     TT0:
SP0:     DB0:
LB0:     DB0:
SY0:     DB0:
>

Podremos entender su uso fácilmente a través del manual correspondiente o de un video instructivo:

Siguiendo estas instrucciones es muy simple hacer peronismo, porque es implementar software propugnado el amor entre todos, es hacer prevalecer los valores de la GPLv3 sobre los materiales, es hablar de justicia y programarla; es, en otras palabras, hacer el bien en todas las CPUs.

viernes, 11 de febrero de 2022

¿Cómo puedo emular RSTS/E en Ubuntu?

Señores oficiales,

Uno de los principios nodales que ha de comprender todo aquel que en el campo de batalla ha de conducir una unidad, es la de no dormirse en laureles victoriosos. Es natural que el soldado busque prolongar la paz que tanto anheló, pero debe comprender que el esfuerzo del pasado no sirve nunca de ejemplo. Ha de continuarse la preparación y la previsión para nuevas luchas que habrán de venir indefectiblemente.

Esto es así porque el hombre vencido - si ha valido la pena como enemigo - jamás quedará vencido si no obtiene justicia, y esta es la base de la paz.

Desde los antiguos griegos se sabe que el soldado dispone de una preparación: el deporte. Las arte del cultismo físico, junto con las marciales fueron - y son - la justa vara con la que puede medirse al soldado. El Oficial ha de contar - además - con la preparación que da el gabinete: el estudio de la historia y de la pericia logística obrarán de maravillas en la formación de un Conductor.

La esgrima es, por antonomasia, la percepción del arte marcial del caballero. Algunos piensan que en el cruce de aceros, los únicos metales son los del florín o del florete. Sin duda se equivocan, ya que el verdadero temple está en el Espíritu del duelista. No importa tanto el músculo de su mano, sino la decisión y empeño que impone a su arte de lucha.

Como tal me he formado y especializado en la Institución a la que nos toca pertencer. Un dato no menor es que entre 1918 y 1928 obtuve en varias oportunidades el título de Campeón Militar de Esgrima. En 1927 conquisté la Copa de Honor de Esgrima en el Círculo Militar. La pedana no tuvo secretos para mí. Pero esto no salió de un repollo, mi tío segundo Conrado Perón, fue maestro de armas y una de las primeras espadas del ejército. Fue él quien me inculcó los pormenores del choque de aceros.

En la informática sucede más o menos lo que en la esgrima. Hay varios filos de distinto peso que elegir - los sistemas operativos - pero lo importante es conocer su técnica a fondo.

Esto lo comprendí cuando empleé RSTS/E, veterano "Sistema de Tiempo Compartido para Compartir Recursos" de la Digital Equipment Corporation. Lo necesario para instalar tan enjundio no podía más que significar la necesidad de templar un alma en la hombría de bien que es necesaria para entregarlo todo en pos de la Felicidad de nuestro Pueblo.

Sin embargo, por aquél entonces, sólo podía correrse en una máquina que contara con la arquitectura de 16 bits que ostentaban las máquinas tipo PDP-11. Eran minicomputadoras portentosas y sólo al alcance del oligarca.

Providencialmente gracias al Justicialismo podremos contar con válidos émulos de ellas para utilizarlas en nuestro sistema GNU con Linux, todo gracias a las bondades del emulador SIMH, del cual profeso como uno de los grandes logros para privilegiar a todos en el arte de la Conducción de los Sistemas Operativos del Ayer.

Vean señores, RSTS/E es un sistema operativo multiusuario a tiempo compartido privativo, desarrollado por terceros en 1970 para la minicomputadora PDP-11 de Digital Equipment Corporation. Podemos trazar su origen al TSS/8 de la DEC PDP-8, aunque actualizado para las mayores posibilidades y potencias que ofrecían los 16 bits de la PDP-11. Su larga vida operativa lo pueden calificar como un verdadero Matusalén, ya que su desarrollo cesó recién en 1992, con la versión 10.2.

La manera más simple es contar con un paquete de RSTS/E ya compilado. En este caso simplemente habremos de descargar el paquete y correrlo en nuestro sisxtema GNU con Linux. 

Instalar RSTS/E v9.3

Se trata de la versión de enero de 1987. Para dar con una versión mínima pero precompilada, abrimos una terminal en nuestro sistema con Ctrl+Alt+t e ingresamos los siguientes Comandos de Organización:

mkdir ~/.simh/ ~/.simh/rsts/ ~/.simh/rsts/v9
cd ~/.simh/rsts/v9/
wget http://www.rsts.org/distros/RSTS_kits/RSTS_V9.3_Kit.zip

unzip RSTS_V9.3_Kit.zip

Ahora podremos ejecutar el RSTS/E v9.3 precompilado. Para ello lo haremos con:

cd ~/.simh/rsts/v9/
./pdp11

El sistema nos solicitará la fecha y hora. Tras ingresarlas cuidando de evitar el bug Y2K (podríamos indicar un año de la década de 1990), nos solicitará si deseamos activar el sistema de tiempo compartido ("Start Timesharing?"), a lo cual debemos responder yes.

Acto seguido se nos solicitará ingresar un usuario ya elaborado. Podremos dar con los accesos de usuario. Los usuarios de este sistema virtualizado serán:

Usuario de sistema
Usuario: [1,5]
Contraseña: SYSUSR

Usuario administrador
Usuario: [1,2]
Contraseña: SYSLIB

Usuario "Invitado"
Usuario: [100,100]
Contraseña: DEMODEMO

Utilizar RSTS/E 9.3

Podremos utilizarlo siguiendo la Guía de Usuario de RSTS/E, o bien la Guía del Administrador de sistema RSTS/E.

Podremos correr la ayuda del intérprete de comandos DCL incorporada al RSTS/E, ingresando el comando HELP.

Para salir de RSTS/E ingresamos el comando LOGOUT. Una vez vueltos a la instancia de login, presionamos Ctrl+e para retornar al emulador SIMH, y salimos del mismo mediante el comando bye.

Instalar RSTS/E v7 en Ubuntu

La versión prototípica de RSTS sin embargo fue la v7 de agosto de 1978. Es indudable que versiones posteriores incorporaron ya elementos más avanzados, pero fue "la siete" la que podríamos considerar su pico operativo y por cierto la versión más duradera. Es que por entonces la arquitectura PDP-11 ya habían sido reformuladas desde el punto de vista del hardware gracias a las nuevas tecnologías de integrados de muy alta escala, y sus LSI-11 se encontraban - comparativamente - "por moneditas".

RSTS/E v7 fue entonces el ámbito con el cual se contó con software de 16 bits de oficina, en un intento por elaborar entornos de cómputo en el lugar de trabajo.

Primero descargamos la distribución de RTST/E v7. No es la última, pero ha sido una versión importante publicada en 1987. A tal fin abrimos una terminal con Ctrl+Alt+t e ingresamos los siguientes comandos de organización:

mkdir ~/.simh/ ~/.simh/rsts/ ~/.simh/rsts/v7
cd ~/.simh/rsts/v7/
wget http://www.rsts.org/distros/RSTS_disks/V70/rsts7.0-07.tar
tar xvf rsts7.0-07.tar

Preparar RSTS/E v7 desde cero

He aquí las indicaciones sobre cómo instalar RSTS desde cero y agregarle paquetes a este sistema pre-compilado.

En primer instancia procedemos a instalamos el paquete del emulador SIMH en nuestro sistema GNU con Linux, y le damos ejecución en el modo DEC PDP-11. Todo lo podremos hacer desde nuestra temrinal presionando Ctrl+Alt+t e ingresando los siguientes Comandos de Organización:

sudo apt update
sudo apt install simh


cd ~/.simh/rsts/v7/Disks
echo ';Inicializador de instalador de RSTSv7' >
~/.simh/rsts/v7/Disks/rsts.ini
echo 'att rl0 disk0' > ~/.simh/rsts/v7/Disks/rsts.ini
echo '
att rl1 rsts_sysgng.dsk' > ~/.simh/rsts/v7/Disks/rsts.ini
echo '
set rl1 lock' > ~/.simh/rsts/v7/Disks/rsts.ini
echo 'set cpu 1m' > ~/.simh/rsts/v7/Disks/rsts.ini
echo 'b11' > ~/.simh/rsts/v7/Disks/rsts.ini

Podremos iniciar ahora el procedimiento de preparación de RSTS/E según el frondoso manual naranja de instalación. Para dar inicio al instalador ingresamos:

cd ~/.simh/rsts/v7/Disks/
pdp11 rsts.ini

Se presentará la siguiente devolución. Al crear el fichero disk0 para la unidad virtual RL02, se nos indicará si queremos sobreescribir la última pista del mismo. Indicamos que introduciendo "y".

PDP-11 simulator V3.8-1
RL: creating new file
Overwrite last track? [N] y

Ahora arrancará el sistema disco de preparación de RSTS v7-0: Deberíamos recibir el prompt "Option:"

Disabling CR
Disabling RK
Disabling HK
Disabling TM

Enabling only console, disks, and tapes.

RSTS v7-0 (DL1)

Option:

3) Formateamos el disco de cero. Habremos de responder la pregunta "por defecto" presionando Ctrl+J (en caso de contar con una videoterminal, presionaremos la tecla LineFeed).

Option: DSK
 <Ingresar fecha>
 <Ingresar hora>


Disk? RL0
Pack ID? DISK0
Pack cluster size? 2
SATT.SYS base?               <Ctrl+J>
MFD password? SYSTEM
MFD cluster size? 16
Pre-extend directories <no>? <Ctrl+J>
PUB, PRI, or SYS? SYS
Library password? SYSTEM
Library UFD cluster size? 16
Date last modified <yes>?    <Ctrl+J>
New files first <no>?         <Ctrl+J>
Patterns? 1
Proceed (Y or N)? Y
 <se muestra ciertos errores>
Continue with DSKINT? Y
Patterns? 1
Proceed (Y or N)? Y

4) Copiamos el sistema al disco de cero solicitando la rutina COP:

Option: COP
    <fecha y hora nuevamente, podemos oprimir Ctrl+J para aceptarlas>
To which disk? RL0

SIMH reiniciará desde el DL0.

Agregamos un fichero de intercambio / volcado de núcleo al disco de cero (esto tenia funcionalidad de salvataje de memoria RAM ante un cuelgue de la PDP-11), solicitando la rutina REF.

Option: REF
    <fecha y hora, de nuevo podemos usar Ctrl+j>
Disk? RL0
Clean? N
 REFRESH suboption? CHA
 SWAP.SYS changes? Y
  Size? 256
  Base?             <Ctrl+J>
 SWAP0.SYS changes? <Ctrl+J>
 SWAP1.SYS changes? <Ctrl+J>
 SWAP3.SYS changes? <Ctrl+J>
 OVR.SYS changes?   <Ctrl+J>
 ERR.SYS changes?   <Ctrl+J>
 BUFF.SYS changes?  <Ctrl+J>
 CRASH.SYS changes? Y
  Size? 35
  Base?             <Ctrl+J>
Other files?         <Ctrl+J>
REFRESH suboption?  <Ctrl+J>

Instalaremos ahora SYSGEN SIL, solicitando la rutina INS.

    Option: INS
    Sil? SYSGEN

El sistema reiniciará indicando "Rebooting...". y reiniciarça, ahora desde ña unidad DL1:

RSTS v7-0 (DL1)
Option:

Configuramos las opciones por defecto del SYSGEN SIL, solicitando la rutina DEF.   

    Option: DEF
    JOB MAX or SWAP MAX changes? Y
     New JOB MAX?                 <Ctrl+J>
     JOB MAX or SWAP MAX changes? 28
    JOB MAX or SWAP MAX changes? <Ctrl+J>
    Run Time System? RT11
    Error message file? ERR
    Installation name?  <Elegir un nombre de sistema>
     Table suboption?            <Ctrl+J>
    Crash dump? y
    Magtape labelling default <none>? ANSI
    Preferred clock <L>?         <Ctrl+J>
    Date format <ALPHABETIC>?    <Ctrl+J>
    Time format <AM/PM>?         <Ctrl+J>
    Power fail delay <1>?        <Ctrl+J>



Ahora iniciamos ya el generador de sistema SYSGEN en nuestro emulador.

Option: <Ctrl+J>
    <ingresamos fecha, hora>
   

El sistema devolverá "?Can't find file or account" y ofrecerá un prompt con un "." (el prompt del sistema operativo DEC RT-11 que se usaba como base de configuración para RSTS/E).

Debemos hacernos peritos en montar el disco de distribución (SYSGNG) como solo-lectura, y utilizarlo para copiar los archivos desde el mismo.

. MOUNT DL1:SYSGNG/RO
. R DL1:CREATE.SAV


Luego de copiar los ficheros, el programa CREATE correrá automáticamente el programa SYSGEN.

Habremos de responder todas las interrogantes que nos solicite SYSGEN, la primera sección principal es importante porque le informa a SYSGEN desde dónde obtener los ficheros y parches:

    Form ?                 #S #    L
    Same system ?          #Y #                   <Ctrl+J>
    Distribution medium ?  #DL#                   <Ctrl+J>
    Output medium ?        #DL#    SY
    Delete files ?          #Y #                   <Ctrl+J>
    LP for SYSGEN ?        *Y *    N
    Generate monitor ?     #Y #                   <Ctrl+J>
    Monitor name ?         #RSTS#                 <Ctrl+J>
    Monitor patching ?     #??#    YES
    Patch file medium ?     #DL#                   <Ctrl+J>
    Pack ID ?              #??#    PATCHG
    Patch file name ?       #$MONITR.CMD#          <Ctrl+j>
    Generate BASIC-PLUS ?  #Y #                   <Ctrl+J>
    BASIC-PLUS RTS name ?  #BASIC#                <Ctrl+J>
    BASIC-PLUS patching ?  #??#    YES
    Patch file medium ?     #Identical to monitor# <Ctrl+J>
    Patch file name ?       #$BASIC.CMD#           <Ctrl+J>
    RSX as default RTS ?   #NO#                   <Ctrl+J>


...el resto de las preguntas simplemente podremos responder ingresando Ctrl+j para aceptar la opción por defecto. Eventualmente, se nos devolverá al prompt de RT-11: un simple ".".

Desde este RT11 muleto, compilamos el sistema corriendo el programa SYSBAT con:

.R SYSBAT

...y se nos presentará salida y luego nos solicitará la unidad para almacenar, inidicamos DL1:

MOUNT AX-D527G-BC ON A DISK DRIVE

READY AND WRITE PROTECT THE DRIVE

Mount DL:"SYSGNG"-write locked
Unit ? DL1


...con esta orden se compilará PIP, LINK, MACRO, LIBR, y SILUS, indicando en el terminal:

MOUNT THE MONITOR PATCH FILE DISK "PATCHG" ON A DISK DRIVE

READY AND WRITE PROTECT THE DRIVE

Mount DL:"PATCHG"-write locked
Unit ? 
 

Nuevamente interrumpiremos el emulador presionando Ctrl+e y cargaremos el disco con los parches del sistema operativo RSTS/E (solucionaban ciertos bugs), Para ello ingresamos los siguientes comandos al prompt SIM> de SIMH:

 sim> att rl1 rsts_patchg.dsk
 sim> c
 DL1

Con este accionar, se emparchará el intérprete de comandos Monitor y el intérprete de BASIC-Plus, presentando todo lo relativo a dicho procedimiento. Finalmente, deberá indicar "Batch job completed."

Sin duda podremos ya apagar el sistema emulado de generación SYSGEN, y correr el programa UTILTY.SAV

. R UTILTY.SAV
*NO LOGINS
*SHUTUP

 

Esto cargará ya el RSTS/E v7 que hemos creado desde el disco DL0. Solicitaremos nuevamente la rutina INS con el instalador creado, y pediremos entonces instalar nuestro propio RSTS/E peronista.

Options: INS
Sil <SYSGEN>? RSTS

Configuraremos las opciones por defecto del RSTS SIL peronista emparchado:

Options: DEF
JOB MAX or SWAP MAX changes? Y
 New JOB MAX?                 <Ctrl+J>
 New SWAP MAX? 31
JOB MAX or SWAP MAX changes? <Ctrl+J>
Run Time System? BASIC
Error message file? ERR
Installation name?  <elegir un nombre>
Table suboption?             <Ctrl+J>
Crash dump? y
Magtape labelling default <none>? ANSI
Preferred clock <L>?         <Ctrl+J>
Date format <ALPHABETIC>?    <Ctrl+J>
Time format <AM/PM>?         <Ctrl+J>
Power fail delay <1>?        <Ctrl+J>

Acto seguido montamos SYSL1G a la unidad RL2 (PATCHG aún permanecerá en DL1), y luego reiniciamos. Para ello ingresamos lo indicado en negrita:

    <presionamos Ctrl+e para detener SIMH>
Simulation stopped, PC: 034534 (WAIT)
 sim> att rl2 rsts_sysl1g.dsk
 sim> set rl2 lock
 sim> b rl0

Tras un instante arrancará nuevamente el sistema desde DL0. Ahora arrancamos el sistema de tiempo compartido.

Options: <Ctrl+J>
    <fecha,hora>

El sistema aparecerá en BASIC con el prompt "Ready":

    ?Can't find file or account
    ?Program lost-Sorry
    
    Ready

Ahora Montaremos los discos SYSL1G y PATCHG en la unidad RL02:

MOUNT DL1:PATCHG/RO
MOUNT DL2:SYSL1G/RO

De ahora en adelante instalamos el sistema BASIC corriendo la aplicación BUILD.BAS desde el disco DL2:

RUN DL2:$BUILD
BUILD   V7.0-07 RSTS V7.0-07 Peron
System Build <No> ? YES
Source Input Device <DL2:>   
<Ctrl+J>
Library Output Device <SY:>  
<Ctrl+J>
Target System Device <SY0:>  
<Ctrl+J>
Library Account <[1,2]> ?    
<Ctrl+J>

 *** Copying file DL2:[1,2]BUILD.CTL to BLD01.TMP ***

Locate logical 'LB:' on <SY:[1,1]>  
<Ctrl+J>
Function (Build/Patch, Patch, Build) <Build/Patch>
<Ctrl+J>
Patch file input location <SY:[200,200]> ? DL1:[1,2]
Save patched sources <No>    
<Ctrl+J>
Run-Time System <BASIC >     
<Ctrl+J>
Locate ERROR Package on <SY:[1,2]>  
<Ctrl+J>
Additional Control File is <None>   
<Ctrl+J>

En este instante, BUILD comenzará a cargar, emparchar e instalar DEC BASIC-PLUS CUSPS. Luego de un tiempo terminará con el mensaje:

!*** BUILD Complete ***"

Finalizada todo este burocrático accionar, podremos apagar el sistema. Lo haremos corriendo la aplicación SHUTUP.

RUN $SHUTUP
Minutes until system shutdown (0-99) <5>?  0

¡Enhorabuena! Encomio lo actuado pues a partir de ahora podrán contar con un un RSTS V7.0 mínimo instalado (ej. como rl0.minsys).

Para ejecutar RSTS v7 ingresa la Option: BOOT. Cuando te solicite Boot Device, indica RL0. Indicará ahora algo como:

RSTS V7.0-07 rsts_peronista (DL0)

Option:

Indica la Option START.

Introduce fecha y hora, y presiona Ctrl+j para responder con la opción por defecto a todas las preguntas de inicialización, hasta que presente el mensaje de prompt:

PLEASE SAY HELLO

E introduce en mayúsculas:

HELLO

Y te presentará finalmente el ingreso al sistema:

RSTS V7.0-07 rsts_peronista  Job 2  KB0  01-Jan-77  04:07 PM
#


Para ejecutar más de dos trabajos necesitaremos agregar algo de espacio de intercambio al sistema. Para hacerlo debemos escoger dónde queremos poner el almacén de intercambios (ya sea en el disco de sistema que acabamos de crear, o en otra unidad).
 
Para poner un intercambio extra al disco de sistema:

  1. Option: REF
  2. <fecha, hora>
  3. Disk? DL0
  4. No usamos clean, elegimos la subopción "CHA"
  5. Seguimos las preguntas con Ctrl+j y cambiamos el tamaño de "SWAP0.SYS" a un valor (ej. 1024 bloques)
  6. arrancamos el sistema
  7. editamos "$RTS.CMD" usando el editor TECO
  8. agregamos la línea "FORCE KB0: ADD SWAPFILE 0 DL0:SWAP0" a la línea posterior a "RUN $UTILTY"

Para colocar una unidad de intercambio extra en otra unidad virtual, primero debemos contar con un fichero de archivo válido (use la opción "DSK" para formatear una). Luego hemos de seguir el procedimiento indicado (con el nombre de disco correcto, para agregar un fichero SWAP0.SYS a la unidad y configurarla en el sistema. Además, habremos de editar $START.CTL para montar el disco nuevo antes que corra RTS.CMD. Por ejemplo, si agregamos un disco DL1 con la etiqueta "PRIVAD" podríamos ingresar la siguiente línea en la parte superior de $START.CTL:


MOUNT DL1:PRIVAT

------------------------------------------------------------------------------

En la medida que tengamos el sistema mínimo, podremos compilar e instalar otros paquetes que anhelemos. Para compilar un paquete habremos de correr el programa $BUILD.

Por ejemplo, si SYSL1G está montado en DL2: y PATCHG se haya montado en DL3:, por lo tanto instalar el paquete HELP , tras el prompt Ready podríamos ingresar SY/D para listar y luego RUN $BUILD para iniciar el programa de compilación, de esta manera:

Ready

SY/D

Disk Structure:
Disk    Open    Free    Cluster Errors  Name    Comments
DL0       2     3480       2      0     SYSTEM  Pub, DLW
DL1       1     4332       2      0     PRIVAT  Pri, DLW
DL2       0     1422       1      0     SYSL1G  Pri, R-O
DL3       0     3800       1      0     PATCHG  Pri, R-O, DLW

Ready

RUN $BUILD
BUILD   V7.0-07B        RSTS V7.0-07 Peron
System Build <No> ?
Source Input Device <SY:> ? DL2:
Library Output Device <SY:> ?
Target System Device <SY0:> ?
Library Account <[1,2]> ?
Control File is ? HELP

*** Copying file DL2:[1,2]HELP.CTL to BLD02.TMP ***

Function (Build/Patch, Patch, Build) <Build/Patch> ?
Patch file input location <SY:[200,200]> ? DL3:[1,2]
Run-Time System <BASIC > ?
Locate HELP Package on <SY:[1,2]> ? SY:[1,8]

%Can't find file or account - SY:[1,8]
Attempt to create account SY:[1,8] <No>? YES
Account SY:[1,8] created with your password
Additional Control File is <None> ?


El programa de compilación correrá y compilará el paquete HELP. Podremos repetir lo mismo con los siguientes programas:

Los siguientes paquetes están disponibles en aras de la justicia social:

En la imagen SYSGNG:
MAINT.CTL = usado para recompilar RSX (no tan útil)
RSX.CTL = el sistema ejecutable de RSX
SORT.CTL = SORT (patches fail since we don't have RMS distribution)
TECO.CTL = el editor TECO (SQU, TYPE, TECKBM...)

En la imagen SYSL1G:
BUILD.CTL = el sistema básico de compilación (debería ya estar instalado)
SPLER.CTL = programas de spooling (QUE, OPSER, BATCH, etc.)
UNSUPP.CTL = programas no soportados (DSKDMP, STATUS, DEMO55)
BIGPRG.CTL = programas "grandes"(RUNOFF, FIT, FLINT, PMDUMP, BPCREF, MAKSIL).
BACKUP.CTL = Paquete de respaldo
DEVTST.CTL = Prueba de dispositivos
HELP.CTL = los ficheros de ayuda

Recordemos corriendolos con RUN. Podremos salir del sistema con RUN $SHUTUP y finalmente Ctrl+e para volver al emulador. Saldremos del emulador SIMH con el comando introduciendo en el prompt sim> el comando BYE.

domingo, 15 de mayo de 2016

¿Cómo emulo el panel de una DEC PDP-8/I y una DEC PDP-11/20 en Ubuntu?

¡Trabajadores!

Todo trabajador ha de contar con tiempo para el ocio y la diversión. Todos aquél pasatiempo que atenue nuestro corazón será positivo.

Entre los míos se encuentra andar en motoneta con mi gorro "pochito" y emular equipos computacionales de antigua factura. 
Esto es así pues me permite entender a un nivel elevado el funcionamiento de diferentes técnicas y tecnologías de programación, necesario conocimiento para ejercer las artes y promover las Ciencias de la Computación.

Previamente he realizado una serie de monografías clasificadas bajo la etiqueta "simh" en la cual he avezador a la Masa en el arte de utilizar el emulador libre de hardware vetusto Simh, y sobre cómo operar los paneles de control de las clásicas minicomputadoras PDP de la Digital Equipment Corporation (DEC).

Gracias a la gente de Blinkenbones se ha simplificado la instalación de las mismas, pues ahora se provee un único instalador para hacer trabajar todo el sistema tanto y facilitar su instalación. Asimismo se deja de lado la multiarquitectura para ofrecer compilaciones de 32 y de 64 bits (e incluso para Raspberry Pi.

Esto nos facilitará la tarea pues ahora de un sólo tirón podremos instalar todos los paneles para las diferentes microcomputadoras, junto con sus manuales de operación y guiones que facilitarán el trabajo con ellos. Todo lo podremos hacer rápidamente desde la Consola Terminal de Linux.

Para ello abrimos una con Ctrl+Alt+T e ingresamos los comandos de Organización que correspondan:

Primero instalamos dependencias:

sudo dpkg --add-architecture i386 ;
sudo apt-get update ;
sudo apt-get install libx11-dev libpth-dev xorg-dev gcc libjpeg-dev libpthread-workqueue-dev x11proto-core-dev x11proto-bigreqs-dev freeglut3 freeglut3-dev ;
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 ;
sudo apt-get install libpcap0.8:i386 ;
sudo apt-get install libxext6:i386 libxtst6:i386 libxi6:i386 ;

sudo apt install openjdk-8-jre ;

Luego creamos un directorio para los paneles y nos dirigimos a el:

mkdir ~/.simh/ ~/.simh/panelsim/ ;
cd ~/.simh/panelsim/ ;



El siguiente paso variará de acuerdo a si nuestro sistema GNU con Linux actual es de 32 o de 64 bitios:
  • Si dispongo de Ubuntu de 64 bits debo ingresar estos comandos:
wget https://github.com/j-hoppe/BlinkenBone/releases/download/1.6/panelsim_ubuntu-x64.tgz ;
tar -xvf panelsim_ubuntu-x64.tgz -z ;
  • ...en tanto, si dispongo de Ubuntu de 32 bits - en tanto - debo ingresar estos comandos:
wget https://github.com/j-hoppe/BlinkenBone/releases/download/1.6/panelsim_ubuntu-x86.tgz ;
tar -xvf panelsim_ubuntu-x64.tgz -z ;


Conforme hayamos descargado todo y descomprimido, por única vez debo preparar el resto del sistema, lo podré hacer con el comando:

sudo ./prepare.sh

Tras introducir nuestra contraseña, el programa revisará si tenemos instalados todos los componentes necesarios (rpcbind, Java, y otros). Si faltase alguno nos propondrá instalarlo mediante el siguiente mensaje.
'rpcbind' not found, I'm going to install it. OK? Enter = yes, ^C = no.


Para instalar los componentes necesarios presionamos Enter.

Configuramos el lanzador de Java 8 pues de momento no funciona con Java 11):

sudo update-alternatives --config java

El sistema nos mostrará las versiones que tenemos instaladas ahora, y nos permitirá optar entre ellas. Por ejemplo, la pantalla nos demuestra que tenemos tres opciones para la alternativa Java:

Existen 2 opciones para la alternativa java (que provee /usr/bin/java).

  Selección   Ruta                                            Prioridad  Estado
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      modo automático
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      modo manual
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      modo manual

Pulse para mantener el valor por omisión [*] o pulse un número de selección:


En este caso, debemos presionar "2" para elegir la JDK de versión 8.

DEC PDP-8/I con juego ADVENTURE:

La DEC PDP-8/I fue una de las variantes de la PDP-8 original (la primer microcomputadora exitosa, en arquitectura de 12 bits). Introducida en 1968, mejoraba a la original de 1965 en el empleo de circuitos integrados de escala media "Flip-Chips" con lógica transistor-transistor, en lugar de la lógica diodo-transistor anterior. Se distinguió como un equipo ingeniado especialmente para lograr un bajo coste (para la época) y permitir la mayor cantidad de funcionalidades posibles.

Se la podía armar en un gabinete del tamaño de una heladera, que podía contener la unidad central de proceso con su panel de mando, el perforador/lector "veloz" de cintas de papel PC01 o PC04 y diferente instrumental y accesorios.
Para manipular el contenido del banco de memoria núcleo de hasta 4K, y para hacer uso básico de los periféricos de entrada/salida, se empleaban los conmutadores del panel frontal.


A través de su sistema operativo DEC OS8, La PDP-8/I se conectaba a una terminal teletipo como la ASR33 capaz de recibir las órdenes del operador, e imprimían los resultados de los programas y el entorno operativo en papel continuo. Muy posteriormente se agregaron videoterminales con monitores de tubos de rayos catódicos.

Como memoria de masa empleaba cintas de papel perforado, que contenían el software libre. Estos se podían copiarse libremente con la unidad perforadora/lectora, la cual era imprescindible para no tener que ingresar los programas con los conmutadores toda vez que se encendía el equipo..

Para activar el panel de la PDP-8/I, conmutar el uso de periféricos de terminal teletipo y "cargar" la cinta de papel perforado en el lector, cargar en el banco de memoria de núcleo la clásica aventura de texto "Colossal Cave Adventure" y correr dicho programa, podremos usar los siguientes Comandos de Organización:
cd ~/.simh/panelsim/
sudo ./pdp8i_os8advent.sh





DEC PDP-11/20 con BASIC en tira de papel perforado

En este caso contaremos con una representación funcional del panel de la mainframe DEC PDP-11/20 de 1973, que empleaba bus UNIBUS. Se trata de la unidad central de proceso de la minicomputadora con una arquitectura de de 16 bits, con microprocesador KA11 sin microcódigo (pues empleaba lógica transistorizada soldada), sin operaciones de coma flotante, ni memoria protegida. La PDP-11/20 podía direccionar hasta 64 kilobytes de memoria.
De este equipo contaremos con una reproducción lo mejor emulada posible, teniendo en cuenta - de nuevo - que la lógica soldada a punto es incapaz de emularse completamente en un emulador digital por razones obvias. Estéticamente contaremos con el modelo tardío de panel con sus incónicos colores lilas y púrpuras (el primero de 1970 era un esquema a dos tonos de verde).

Conmutadores

Los conmutadores del panel de la PDP-11/20 tienen la misma forma que los de la DEC PDP-8/e. Los conmutadores POWER/LOCK, LOAD ADDR, EXAM, DEPOSIT, LOAD, ENABLE/HALT y START operan de la misma manera que en la PDP-11/40. El conmutador S-INST/S-CYCLE en tanto carece de función real: SimH no puede avanzar paso a paso en lógica soldada. Cada función CONT (continuar) en modo HALT avanza un solo paso de instrucción.

El conmutador con llave puede rotarse en sentido antihorario haciendo clic a la izquierda del centro de la llave, y en sentido horario haciendo clic en la parte derecha de la llave. Poniéndolo en "LOCK" desactivamos todos los conmutadores. Y si se lo disponemos en "OFF" se detiene la simulación en SimH (casi).

Muchos de ustedes se preguntarán ¿si la PDP-11/20 era una minicomputadora de 16 bits, porqué cuenta con 18 conmutadores de direccionamiento en su panel frontal? Esto es así pues los ingenieros de DEC previeron los bits 17 y 16 como reserva para futuras expansiones de memorias que nunca vieron la luz. Se planeó expandir el espacio de direccionamiento de los 64 Kilobytes originales hasta los 256 Kilobytes.

Aún así la PDP-11 vivió mucho más de lo planificado. El rango de direccionamiento del bus UNIBUS estaba limitado a unos 18 bits, pero con un bus de memoria local se podían direccionar hasta 22 bits. En 1978 la se introdujo la nueva DEC VAX con una arquitectura mucho más expandida, por lo que abandonaron los planes de extender la PDP-11 y se la dejó morir por falta de memoria durante los siguientes 20 años.

Lámparas

Las lámparas ADDRESS y DATA funcionan como en todos los paneles de las máquinas DEC PDP, si bien en la PDP-11/20 se trataban realmente de lámparas  incandescentes (en modelos posteriores se las reemplazarían por diodos emisores de luz, mucho más confiables).

Nuevamente, la PDP-11/20 es una máquina de 16 bits, por lo tanto de la misma manera que con los conmutadores, las lámparas ADDRESS 17 y 16 carecen de función, pero siempre permanecen encendidas si se configura una dirección de memoria en la página de E/S, de modo que las direcciones 177777..160000 se mostrarán como 777777..760000.

La PDP-1/20 carecía de memoria virtual. Por lo tanto no existen espacio de datos MMU ni I/D, ni selector de modo KERNEL/SUPER/USER que aparecería en modelos posteriores.

Aún así existen algunos indicadores en la mitad derecha del panel que nos ayudan a rastrear el procesamiento interno durante el modo "paso de un solo ciclo". Esto realmente sólo se necesitaba al depurar errores en la circuitería. Como se mencionó, la CPU 11/20 no implementaba microcódigo, sino que hacía uso de lógica soldada; de modo que en lugar de un flujo microprogramado, se ejecutan un opcode en fases fijas, cada una de ellas caracterizada por diferentes señales de ciclaje. Estas se indican con las lamparas:
  • FETCH: carga un opcode de la memoria
  • EXECUTE: corre los datos desde los registros a través del ALU y los anota de vuelta.  
  • SOURCE/DESTINATION, ADDRESS: ciclos de memoria adicional para acceder a los operando desde la memoria y datos del índice. 
SimH no simulará nada de esta operatoria, de modo que se nospresentará un patrón fijo de lámparas brillando cuando se active la función RUN como reproducción meramente estética. El modo de ciclos a paso simple tampoco está implementado.

La DEC PDP-11/20 representa un esquema de uso clásico de principios de los 1973, con perforador/lector de cintas de papel, terminal teletipo, e intérprete BASIC de 4 kilobytes almacenado en cinta de papel perforado.

El proceso de carga no requería sistema operativo, y consistía en leer dos cintas, una con un cargador absoluto, y luego el intérprete de BASIC.

El proceso en el lector "veloz" de cintas de papel perforado podía durar un par de minutos. En nuestro caso nos llevará poco menos de unos segundos en el emulador. Para hacer todo el procedimiento, podremos usar los siguientes Comandos de Organización:

cd ~/.simh/panelsim/
sudo ./pdp1120_papertape_basic.sh

...si tuviésemos una terminal teletipo, esta imprimiría los datos de conexión en la resma de papel continuo:


...tras hacernos cargo de la información de status, al final debería imprimirse el prompt del BASIC:

PDP-11 BASIC, VERSION 007A
*O 


...debemos entonces presionamos Enter para darle inicio al intérprete BASIC de 4K, y la PDP-11/20 debería indicarnos:
READY

Recordemos que todas las órdenes en lenguaje BASIC DEC11 deben ser tipeadas en mayúsculas (debemos activar Bloq Mayús). pues este equipo no disponía de minúsculas. No proceder de esta manera nos devolvería un error.

Podremos introducir un programa en BASIC para evaluar el uso de dicho intérprete en la PDP-11/20. Por ejemplo, podremos pegarle en la consola el siguiente programa para buscar números primos:

10 REM PRIMOS.BAS CALCULAR NROS PRIMOS
15 PRINT "PDP-11/20 CON 4K DE RAM"
16 PRINT "PROGRAMA NUMEROS PRIMOS"
17 PRINT "COPYLEFT UBUNTU PERONISTA"
20 PRINT "LIMITE";
30 INPUT L
40 PRINT 2;
50 REM PRUEBA SOLO NROS IMPARES N
60 FOR N = 3 TO L STEP 2
70 REM DIVIDE SOLO POR D = 3, 5, 7, ...
80   FOR D = 3 TO SQR(N+1) STEP 2
90     IF N/D = INT(N/D) THEN GOTO 130
100 NEXT D
110 PRINT N;".";
120 GOTO 140
130 PRINT "..";
140 NEXT N
145 PRINT "NO HAY MAS NROS PRIMOS"
150 END
160 REM FINAL DEL PROGRAMA


...Una vez introducido el programa en la memoria de la PDP-11/20, podremos listarlo con LIST y correrlo (en la jerga, darle ejecución) con RUN. Nos pedirá un número máximo para buscar los primos (por ejemplo, podríamos poner 999). El programa procesará la matemática requerida y nos devolverá todos los números primos.


Para escribir programas en BASIC DEC11, nos será útil contar con el Manual de Programación BASIC DEC-11-AJPB-D PDP-11.

Otros equipos antiguos emulados en Ubuntu

Ahora bien, hemos de tener en cuenta que el paquete de emuladores que hemos instalado cuenta también con otras minicomputadoras DEC clásicas y también otros sistemas operativos, naturalmente más potentes en los equipos que siguieron. En particular, también me he extendido sobre otros equipos emulados. En aras de la sencillez y el orden - que es base del progreso sostenido- os indicaré cronológicamente y muy brevemente sobre las características de dichos sistemas, y también indicaré cómo ejecutar los emuladores de paneles en este artículo:

DEC PDP-11/40: 
Se trata de la minicomputadora de 18 bits de 1973, con lógica micro codificada en silicio en un procesador KB11 y hasta 128 kilowords de memoria. Me he extendido sobre ella en este artículo.
Se trata de un equipo clásico de que existieron numerosos clones y sistemas operativos. Podremos emularla con su sistema operativo DEC RT-11SJ o con el UNIX V6 de Bell Labs. Para darles inicio puedo ejecutar los siguientes comandos:

cd ~/.simh/panelsim/

sudo ./pdp1140_rt11.sh

Para poder operar el panel de dicho equipo RT11SJ podremos visitar el artículo específico ya mencionado.

...también podremos correrla con Unix V6.

cd ~/.simh/panelsim/

sudo ./pdp1140_unixv6.sh

Cuando aparezca el prompt "@", hemos de ingresar "rkunix". Nos loguearemos como "root", sin contraseña.
En el prompt de Unix V6 "#", ingresamos "stty -lcase" para poder usar minúsculas. Para lograr un entendimiento mayor de Unix V6, podremos visitar este otro artículo.


DEC PDP-10 con Consola de Control KI10:

Se trataba de procesador PDP-10 de segunda generación, con hasta 4 Megawords de memoria paginada administrable y bus MASSbus. Estaba construida a partir de chips TTL en plaquetas propietarias Flip Chip, capacitado para correr el sistema operativo TOPS-10.
Para dar inicio al panel y al sistema operativo TOPS10, debemos usar los siguientes Comandos de Organización:

cd ~/.simh/panelsim/

sudo ./pdp10ki10_tops10.sh

...cuando en la terminal aparezca el prompt BOOT> escribimos BOOT

Ya he explicado en más detalle cómo utilizar fundamentalmente este panel aquí.


DEC PDP-11/70:
Se trata de la minicomputadora de 36 bits aparecida en 1977 dotada de microprocesador KB11-C, con 2K de caché y hasta 4 megabytes de memoria RAM. Emulada aquí con su panel y el sistema operativo DEC RSX11M. Ya me he extendido sobre ella aquí.
Podremos ejecutar el panel y el sistema operativo emulado con los siguientes comandos:


cd ~/.simh/panelsim/

sudo ./pdp1170_rsx11m.sh


Microcomputadoras MITS Altair 8800, IMSAI 8080, Cromemco Z-1.

Se trata de ejemplares fundacionales en el mundo de la microcomputación hogareña aparecidos en series a partir de 1976, destinados al uso hobbista. Son diversos equipos con bus S-100 con microprocesadores de 8 bits Intel 8008 o Zilog Z80, memoria entre los 4 y los 16KB. memoria de masa en papel perforado, cinta magnética en casette, y eventualmente diskettes de 8 pulgadas. Como sistemas operativos emplean distintos entornos, siendo el más extendido y estandarizado fue el CP/M de Digital Re$earch.


Sobre el uso de estos equipos me he extendido aquí, y sobre el empleo de CP/M 2.2 en microcomputadoras con procesador Z80 emulado me he versado aquí.


Microcomputadoras clónicas IBM con M$-DOS

Se trata de los equipos clónicos que seguían el estándar establecido en 1982 por la Computadora Personal ("PC") de IBM, con su bus ISA. No disponían ya de paneles para introducir los datos, sino que se habían afianzado en el paradigma del empleo del monitor de video y el teclado como dispositivos de Entrada/Salida a un microprocesador Intel i8086/8088 de 16 bits sin memoria protegida. Como medios de almacenamiento se empleaban diskettes magnéticos de 5,25 pulgadas.

Si bien se la previó para emplear varios sistemas operativos, por accionar comercial el que terminó imponiéndose como estándar fue el Sistema Operativo de Disco (DOS) de Micro-$oft. Ya he explicado cómo emular el M$-DOS aquí e incluso cómo usarlo para ejecutar juegos de la era.

Sobre estos equipos compatibles se continuó mejorando su base con nuevas arquitecturas extendidas de 16 bits, y luego entre la que se distingue la i80386, con modo de memoria protegida y paginada de 32 bits. Este ya permitía realizar entonces tareas de multitarea real y correr gestores de ventanas para aplicaciones de 16 bits. De ellos sin duda el más extendido fue Window$ 3.11 sobre el cual ya me he extendido.