En programación informática , un programa autorreubicable es un programa que reubica sus propias instrucciones y datos dependientes de la dirección cuando se ejecuta, y por lo tanto es capaz de cargarse en la memoria en cualquier dirección. [ 1 ] [ 2 ] En muchos casos, el código autorreubicable es también una forma de código automodificable .
Descripción general
La autorreubicación es similar al proceso de reubicación que utiliza el enlazador - cargador cuando un programa se copia desde el almacenamiento externo a la memoria principal; la diferencia radica en que es el propio programa cargado, y no el cargador del sistema operativo o del intérprete de comandos , el que realiza la reubicación.
Una forma de autorreubicación ocurre cuando un programa copia el código de sus instrucciones de una secuencia de ubicaciones a otra dentro de la memoria principal de una computadora, y luego transfiere el control del procesador de las instrucciones que se encuentran en las ubicaciones de memoria de origen a las que se encuentran en las ubicaciones de memoria de destino. De esta manera, los datos con los que opera el algoritmo del programa son la secuencia de bytes que lo definen.
La reubicación estática suele ocurrir en el momento de la carga (después de que el sistema operativo haya cargado el software y le haya cedido el control, pero aún antes de que finalice su inicialización), a veces también cuando se cambia la configuración del programa en una etapa posterior durante el tiempo de ejecución . [ 3 ] [ 4 ]
Ejemplos
Cargadores de arranque
Por ejemplo, la autorreubicación se emplea a menudo en las primeras etapas del arranque de sistemas operativos en arquitecturas como las de los ordenadores compatibles con IBM PC , donde los cargadores de arranque de cadena de nivel inferior (como el registro de arranque maestro (MBR), el registro de arranque de volumen (VBR) y las etapas de arranque iniciales de sistemas operativos como DOS ) se desplazan de su lugar para cargar la siguiente etapa en la memoria.
Extensiones CP/M
En CP/M , la herramienta de depuración dinámica (DDT) se reubicaba dinámicamente en la parte superior de la memoria disponible mediante la reubicación de límites de página para maximizar el área de programa transitoria (TPA) para que los programas se ejecutaran. [ 5 ] [ 6 ]
En 1988, el procesador de línea de comandos alternativo ZCPR 3.4 para el sistema Z introdujo los llamados programas de tipo 4 , que también eran auto-reubicables a través de un stub integrado. [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ]
Controladores DOS x86
En DOS , la auto-reubicación también la utilizan a veces los controladores más avanzados y las extensiones de sistema residentes (RSX) o los programas terminadores y residentes (TSR) que se cargan "alto" en la memoria superior de manera más efectiva que lo posible para los cargadores "altos" proporcionados externamente (como LOADHIGH / HILOAD , INSTALLHIGH / HIINSTALL o DEVICEHIGH / HIDEVICE etc. [ 12 ] desde DOS 5) para maximizar la memoria disponible para las aplicaciones. Esto se debe a que el sistema operativo no tiene conocimiento del funcionamiento interno de un controlador que se va a cargar y, por lo tanto, tiene que cargarlo en un área de memoria libre lo suficientemente grande como para contener todo el controlador como un bloque, incluido su código de inicialización, incluso si este se liberaría después de la inicialización. Para los TSR, el sistema operativo también tiene que asignar un prefijo de segmento de programa (PSP) y un segmento de entorno . [ 13 ] Esto podría provocar que el controlador no se cargue en el área de memoria libre más adecuada o incluso impedir que se cargue en la parte superior. Por el contrario, un controlador de reubicación automática puede cargarse en cualquier lugar (incluida la memoria convencional ) y luego reubicar solo su porción residente (normalmente mucho más pequeña) en un área de memoria libre adecuada en la memoria superior. Además, los TSR de reubicación automática avanzados (incluso si ya están cargados en la memoria superior por el sistema operativo) pueden reubicar la mayor parte de su propio segmento PSP y búfer de línea de comandos y liberar su segmento de entorno para reducir aún más la huella de memoria resultante y evitar la fragmentación . [ 14 ] Algunos TSR de reubicación automática también pueden cambiar dinámicamente su "naturaleza" y transformarse en controladores de dispositivos incluso si originalmente se cargaron como TSR, liberando así normalmente también algo de memoria. [ 4 ] Finalmente, es técnicamente imposible que un cargador externo reubique controladores en memoria expandida (EMS), área de memoria alta (HMA) o memoria extendida (a través de DPMS o CLOAKING ), porque estos métodos requieren que pequeños fragmentos específicos del controlador permanezcan en la memoria convencional o superior para coordinar el acceso al área de destino de reubicación, [ 15 ] [ nb 1 ] [ nb 2 ]y en el caso de los controladores de dispositivos también porque el encabezado del controlador siempre debe permanecer en el primer megabyte. [ 15 ] [ 13 ] Para lograr esto, los controladores deben diseñarse especialmente para admitir la reubicación automática en estas áreas. [ 15 ]
Algunos controladores avanzados de DOS también contienen un controlador de dispositivo (que el sistema operativo cargaría en el desplazamiento +0000h) y un TSR (cargado en el desplazamiento +0100h) que comparten internamente una porción de código común como un binario fat . [ 13 ] Si el código compartido no está diseñado para ser independiente de la posición , requiere algún tipo de corrección de dirección interna similar a la que de otro modo habría llevado a cabo un cargador reubicador ; esto es similar a la etapa de corrección de la autorreubicación, pero con el código ya cargado en la ubicación de destino por el cargador del sistema operativo (en lugar de hacerlo el propio controlador).
Programas IBM DOS/360 y OS/360
IBM DOS/360 no tenía la capacidad de reubicar programas durante la carga. A veces se mantenían varias versiones de un programa, cada una compilada para una dirección de carga ( partición ) diferente. Una clase especial de programas, llamados programas autorreubicables, se codificaban para reubicarse después de la carga. [ 16 ] IBM OS/360 reubicaba los programas ejecutables cuando se cargaban en la memoria. Solo se requería una copia del programa, pero una vez cargado, el programa no se podía mover (lo que se denomina código independiente de la posición de un solo uso ).
Otros ejemplos
Como ejemplo extremo de autorreubicación (múltiple), también llamada autorreubicación dinámica, es posible construir un programa informático de manera que no permanezca en una dirección fija de memoria, incluso mientras se ejecuta, como por ejemplo se utiliza en las pruebas de memoria del gusano . [ 17 ] [ 18 ] [ 19 ] [ 20 ] El gusano Apple también es un autorreubicador dinámico. [ 21 ]
Véase también
- Eliminación dinámica de código muerto
- RPLOADER : una API de DR-DOS para ayudar al código de arranque remoto/de red a reubicarse durante el arranque de DOS.
- Recogida de basura
- Autorreplicación
- Autorreferencia
- Quine (informática)
Notas
- ↑ Una excepción al requisito de un stub es cuando la memoria expandida se convierte en memoria superior permanente por el administrador de memoria a través de EMSUMB y, por lo tanto, se accede a ella efectivamente como memoria superior , no a través de EMS .
- ↑ Hay dos excepciones al requisito de stub para que un controlador se cargue en el HMA : Un stub no es necesario cuando la memoria alta está permanentemente habilitada en máquinas sin lógica de puerta A20 , sin embargo, como esta condición no se cumple en general, los controladores DOS genéricos no pueden aprovecharla (a menos que prueben explícitamente esta condición de antemano). De lo contrario, un stub tampoco es necesario en DR DOS 6.0 y superior, cuando las extensiones del sistema residentes (como SHARE y NLSFUNC ) solo enganchan la interrupción multiplexada INT 2Fh, porque luego pueden utilizar una interfaz de puerta trasera para engancharse a la cadena de interrupciones en el espacio del kernel para que el manejador de puerta A20 del kernel proporcione la funcionalidad del stub. [a] Aun así, el controlador tiene que realizar una auto-reubicación para funcionar correctamente en el HMA.
Referencias
- ^ Dhamdhere, Dhananjay M. (1999). Programación de Sistemas y Sistemas Operativos . Educación. Nueva Delhi, India: Tata McGraw-Hill . pag. 232.ISBN 0-07-463579-4ISBN 978-0-07-463579-7Archivado del original el 1 de febrero de 2020. Consultado el 8 de noviembre de 2011 .(658 páginas)
- ^ Dhamdhere, Dhananjay M. (2006). Sistemas operativos: un enfoque basado en conceptos . Educación. Nueva Delhi, India: Tata McGraw-Hill . pag. 231.ISBN 0-07-061194-7ISBN 978-0-07-061194-8Archivado del original el 20/02/2020 . Consultado el 20/02/2020 .(799 páginas)
- ↑ Paul, Matthias R.; Frinke, Axel C. (1997-10-13) [1991], FreeKEYB – Controlador mejorado de teclado y consola para DOS (Manual del usuario) (6.5 ed.) (Nota: FreeKEYB es un controlador configurable dinámicamente basado en Unicode que admite la mayoría de diseños de teclado , páginas de códigos y códigos de país . Utilizando un ensamblador de macros estándar , así como un marco de herramientas de análisis de preprocesamiento y posprocesamiento automático para generar metadatos de dependencia y transformación de código que se incrustan en el archivo ejecutable junto con el código binario y un cargador autodesechable, relajado y reubicable , el controlador admite ser cargado e instalado de diversas maneras como TSR o controlador de dispositivo , e implementa técnicas avanzadas de auto-reubicación (incluida la memoria DOS normal , UMB , memoria de vídeo no utilizada o memoria sin formato, utilizando también la sobrecarga de prefijos de segmentos de programa y la recombinación de segmentos de entorno ) y la eliminación dinámica de código muerto a nivel de byte en tiempo de carga , así como código auto-modificable y reconfigurabilidad en tiempo de ejecución para minimizar su huella de memoria dependiendo del hardware, el sistema operativo y la configuración del controlador, así como del conjunto de características y la configuración regional seleccionados).
- 1 2 Paul, Matthias R.; Frinke, Axel C. (2006-01-16), FreeKEYB – Controlador avanzado internacional de teclado y consola DOS (Manual del usuario) (7.ª ed. (preliminar))
- ↑ Kildall, Gary Arlen (febrero de 1978) [1976]. "Una técnica sencilla para la reubicación estática de código máquina absoluto" . Dr. Dobb's Journal of Computer Calisthenics & Orthodontia . 3 (2). People's Computer Company : 10–13 (66–69). ISBN 0-8104-5490-4. #22 ark:/13960/t8hf1g21p . Recuperado el 19-08-2017 .. Presentado originalmente en: Kildall, Gary Arlen (1977) [22–24 de noviembre de 1976]. "Una técnica simple para la reubicación estática de código máquina absoluto". Escrito en la Escuela Naval de Posgrado , Monterey, California, EE. UU. En Titus, Harold A. (ed.). Actas de la conferencia: Décima Conferencia Anual de Asilomar sobre Circuitos, Sistemas y Computadoras: Artículos presentados del 22 al 24 de noviembre de 1976. Hotel y Recinto de Conferencias Asilomar, Pacific Grove, California, EE. UU.: Western Periodicals Company. págs. 420–424 . ISSN 1058-6393 . Recuperado el 6 de diciembre de 2021 . (609 páginas). (Este método de "redimensionamiento", denominado reubicación de límites de página , podía aplicarse estáticamente a una imagen de disco CP/M-80 mediante MOVCPM para maximizar el TPA disponible para la ejecución de programas. También era utilizado dinámicamente por la herramienta de depuración dinámica (DDT) del depurador CP/M para reubicarse en memoria superior. Bruce H. Van Natta, de IMS Associates, desarrolló independientemente el mismo enfoque para generar código PL/M reubicable . Como reubicación de límites de párrafo, otra variante de este método fue utilizada posteriormente por las TSR de auto-reubicación HMA dinámicas, como KEYB , SHARE y NLSFUNC , en DR DOS 6.0 y versiones posteriores. Matthias R. Paul y Axel C. Frinke concibieron e implementaron independientemente un método de reubicación de desplazamiento mucho más sofisticado y granular a nivel de byte, basado en un enfoque similar, para la eliminación dinámica de código muerto, con el fin de minimizar dinámicamente el espacio de ejecución de los controladores residentes y las TSR (como FreeKEYB).)
- ↑ Huitt, Robert; Eubanks, Gordon ; Rolander, Thomas "Tom" Alan ; Laws, David; Michel, Howard E.; Halla, Brian; Wharton, John Harrison ; Berg, Brian; Su, Weilian; Kildall, Scott ; Kampe, Bill (25-04-2014). Laws, David (ed.). "Legacy of Gary Kildall: The CP/M IEEE Milestone Dedication" (PDF) (transcripción de video). Pacific Grove, California, EE. UU.: Computer History Museum . Número de referencia CHM: X7170.2014. Archivado (PDF) del original el 27-12-2014 . Recuperado el 19-01-2020 .
[…] Laws: […] "
reubicación dinámica
" del SO. ¿Puedes decirnos qué es eso y por qué fue importante? […]
Eubanks
: […] lo que hizo
Gary
[…] fue […] asombroso. […] Recuerdo el día en la
escuela
que entró al laboratorio dando saltos y dijo: «He descubierto cómo
reubicar
». Aprovechó el hecho de que el único byte siempre iba a ser el
byte de orden superior
. Y así creó un
mapa de bits
. […] No importaba cuánta memoria tuviera la computadora, el sistema operativo siempre podía moverse a la memoria alta. Por lo tanto, se podía comercializar esto […] en máquinas con diferentes cantidades de memoria. […] No se podía vender un
CP/M
de 64K y un CP/M de 47K. Sería ridículo tener una compilación dura en las direcciones. Así que Gary descubrió esto una noche, probablemente en medio de la noche pensando en algo de programación, y esto realmente hizo posible la comercialización de CP/M. Realmente creo que sin esa reubicación habría sido un problema muy difícil. Para que la gente lo comprara, les parecería complicado, y si se añadía más memoria, habría que buscar un sistema operativo diferente. […]
Intel
[…] tenía los
bytes invertidos
, ¿verdad?, para las direcciones de memoria. Pero siempre estaban en el mismo lugar, así que se podía reubicar en un
límite de 256 bytes
, para ser precisos. Por lo tanto, siempre se podía reubicar con solo un mapa de bits de dónde estaban esos […] Leyes: Sin duda, la explicación más elocuente que he tenido sobre la reubicación dinámica […]
(33 páginas)
- ↑ Sage, Jay (mayo-junio de 1988). Carlson, Art (ed.). "ZCPR 3.4 – Programas de tipo 4" . The Computer Journal (TCJ) – Programación, soporte al usuario, aplicaciones . ZCPR3 Corner (32). Columbia Falls, Montana, EE. UU.: 10-17 . ISSN 0748-9331 . ark:/13960/t1wd4v943 . Consultado el 29 de noviembre de 2021 .
- ↑ Mitchell, Bridger (julio-agosto de 1988). Carlson, Art (ed.). "Z3PLUS y reubicación: información sobre ZCPR3PLUS y cómo escribir código Z80 auto-reubicable" . The Computer Journal (TCJ) - Programación, soporte al usuario, aplicaciones . Advanced CP/M (33). Columbia Falls, Montana, EE. UU.: 9-15 . ISSN 0748-9331 . ark:/13960/t36121780 . Consultado el 9 de febrero de 2020 .
- ↑ Sage, Jay (septiembre-octubre de 1988). Carlson, Art (ed.). "Más sobre código reubicable, archivos PRL, ZCPR34 y programas de tipo 4" . The Computer Journal (TCJ) – Programación, soporte al usuario, aplicaciones . ZCPR3 Corner (34). Columbia Falls, Montana, EE. UU.: 20-25 . ISSN 0748-9331 . ark:/13960/t0ks7pc39 . Consultado el 9 de febrero de 2020 .
- ↑ Sage, Jay (enero-febrero de 1992). Carlson, Art; McEwen, Chris (eds.). "Diez años de ZCPR" . The Computer Journal (TCJ) – Programación, soporte al usuario, aplicaciones . Z-System Corner (54). S. Plainfield, Nueva Jersey, EE. UU.: Socrates Press: 3-7 . ISSN 0748-9331 . ark:/13960/t89g6n689 . Consultado el 29 de noviembre de 2021 .
- ↑ Sage, Jay (mayo-junio de 1992) [marzo-junio de 1992]. Carlson, Art; McEwen, Chris (eds.). "Programas de tipo 3 y tipo 4" . The Computer Journal (TCJ) – Programación, soporte al usuario, aplicaciones . Z-System Corner – Algunas nuevas aplicaciones de programas de tipo 4 (55). S. Plainfield, Nueva Jersey, EE. UU.: Socrates Press: 13-19 . ISSN 0748-9331 . ark:/13960/t4dn54d22 . Recuperado el 29-11-2021 .
- ↑ "Capítulo 10 Gestión de la memoria" . Guía del usuario de Caldera DR-DOS 7.02 . Caldera, Inc. 1998 [1993, 1997]. Archivado del original el 30 de agosto de 2017. Consultado el 30 de agosto de 2017 .
- 1 2 3 Paul, Matthias R. (2002-04-06). "Re: [ fd-dev ] ANUNCIO: CuteMouse 2.0 alpha 1" . freedos-dev . Archivado del original el 2020-02-07 . Recuperado el 2020-02-07 .
[...] Agregue un encabezado de controlador de dispositivo SYS al controlador, de modo que CTMOUSE pueda estar
en uno solo , un
TSR
normal
y un controlador de dispositivo, similar a nuestro controlador de teclado avanzado FreeKEYB. [...] Esto no es realmente necesario en
DR DOS
porque
INSTALL
= es compatible desde DR
DOS 3.41+ y DR
DOS conserva el orden de las directivas
[
D
]
CONFIG.SYS
[...] pero [...] mejoraría la [...] flexibilidad en los sistemas
MS-DOS
/
PC DOS
, que [...] siempre ejecutan las directivas
DEVICE
= antes de cualquier instrucción INSTALL=, independientemente de su orden en el archivo. […] El software puede requerir que el controlador del ratón esté presente como controlador de dispositivo, ya que los controladores de ratón siempre han sido controladores de dispositivo desde hace mucho tiempo. Estos controladores de ratón tenían nombres específicos según el protocolo que utilizaban ("
PC$MOUSE
" para
el Modo de Sistemas de Ratón,
por ejemplo), y algunos programas pueden buscar estos controladores para determinar el tipo de ratón correcto. […] Otra ventaja es que los controladores de dispositivo suelen consumir menos memoria (sin
entorno
, sin
PSP
). […] Básicamente, se trata de un encabezado de archivo complejo, un código diferente para analizar la línea de comandos, un punto de entrada y una línea de salida diferentes, y algunas técnicas de segmentación para superar la diferencia ORG 0 / ORG 100h. La auto-carga de un controlador de dispositivo es un poco más compleja, ya que hay que dejar el encabezado del controlador donde está y solo reubicar el resto del controlador. […]
- ↑ Paul, Matthias R. (18 de agosto de 2001). "Re: [ fd-dev ] Sobre GRAFTABL y DISPLAY.SYS (anteriormente: Cambio de páginas de códigos en FreeDOS)" . freedos-dev . Consultado el 4 de septiembre de 2017.
[…] Al menos,
MS-DOS 6.0
+
GRAFTABL
se reubica en partes de su segmento
PSP
(desplazamiento +60h y superiores) para minimizar su tamaño residente. […]
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) (Nota: Una versión posterior a DR-DOS 7.03 de GRAFTABL 2.00+ también admite la reubicación dinámica). - 1 2 3Pablo, Matías R. (2 de febrero de 2002). "Treiber dynamisch nachladen" [ Cargar controladores dinámicamente ] (en alemán). Grupo de noticias : de.comp.os.msdos . Consultado el 2 de julio de 2017 .
{{cite newsgroup}}CS1 maint: servicio de archivado obsoleto ( enlace ) (Nota: Ofrece una descripción general de los métodos de carga alta en DOS, incluyendo el uso de comandos LOADHIGH, etc., y métodos de autorreubicación en UMB que utilizan la API XMSUMB . También analiza métodos más sofisticados necesarios para que los TSR se reubiquen en el HMA utilizando la reubicación de desplazamiento intrasegmento ). - ↑ Boothe Management Systems (1 de noviembre de 1972). "Rendimiento: ¿Está obteniendo todo lo que merece? – DOSRELO" . Computerworld – El semanario para la comunidad informática (anuncio). Vol. VI, n.º 44. San Francisco, California, EE. UU.: Computerworld, Inc. pág. 9. Archivado del original el 6 de febrero de 2020. Consultado el 7 de febrero de 2020.
[…] DOSRELO proporciona un método para que los programas problemáticos
de DOS
se reubiquen automáticamente. DOSRELO logra la capacidad de reubicación automática para todos los programas, independientemente del lenguaje, agregando lógica de punto de entrada al
código objeto
del programa antes de que el
editor de enlaces
lo catalogue en la
biblioteca de imágenes principales
. […]
- ↑ La prueba de memoria del gusano (PDF) . Gráfico vectorial . 21/10/2015. Archivado (PDF) del original el 15/05/2019 . Consultado el 13/12/2021 .(3 páginas) (Nota: Tomado de un manual de servicio de Vector Graphic 3. )
- ↑ Wilkinson, William "Bill" Albert (2003) [1996, 1984]. "El gusano H89: Prueba de memoria del H89" . Página de Bill Wilkinson en Heath Company . Archivado del original el 13 de diciembre de 2021. Recuperado el 13 de diciembre de 2021. [
…] Además de obtener una instrucción, el
Z80
usa la mitad del ciclo para
actualizar
la
RAM dinámica
. […] dado que el Z80 debe pasar la mitad de cada ciclo
de obtención de instrucciones
realizando otras tareas, no tiene tanto tiempo para obtener un
byte de instrucción
como para obtener un byte de datos. Si uno de los
chips de RAM
en la ubicación de memoria a la que se accede es un poco lento, el Z80 puede obtener el patrón de bits incorrecto cuando obtiene una instrucción, pero obtiene el correcto cuando lee datos. […] la prueba de memoria integrada no detectará este tipo de problema […] es estrictamente una prueba de lectura/escritura de datos. Durante la prueba, todas las instrucciones se obtienen de la
ROM
, no de la RAM […] lo que hace que el
H89
pase la prueba de memoria, pero siga funcionando de forma errática en algunos programas. […] Este es un programa que prueba la memoria reubicándose a través de la RAM. Al hacerlo, la CPU imprime la dirección actual del programa en el
CRT
y luego obtiene la instrucción en esa dirección. Si los circuitos integrados de la RAM están bien en esa dirección, la CPU reubica el programa de prueba en la siguiente ubicación de memoria, imprime la nueva dirección y repite el procedimiento. Pero, si uno de los circuitos integrados de la RAM es lo suficientemente lento como para devolver un patrón de bits incorrecto, la CPU malinterpretará la instrucción y se comportará de forma impredecible. Sin embargo, es probable que la pantalla se bloquee mostrando la dirección del circuito integrado defectuoso. Esto reduce el problema a ocho circuitos integrados, lo que supone una mejora con respecto a tener que comprobar hasta 32. […] El […] programa realizará una
prueba de gusano
empujando una instrucción RST 7 (REINICIO 7) desde el extremo inferior de la memoria hasta la última dirección que funciona. El resto del programa permanece estático y se encarga de mostrar la ubicación actual del comando RST 7 y su
reubicación
. Cabe mencionar que el programa se denomina prueba de gusano porque, a medida que la instrucción RST 7 asciende por la memoria, deja tras de sí un
rastro
de
NOPs
(NO OPERATION). […]
- ↑ Steinman, Jan W. (1986-09-01). Escrito en West Linn, Oregon, EE. UU. "The Worm Memory Test" . The Right to Assemble (TRTA). Dr. Dobb's Journal of Software Tools for the Professional Programmer . 11 (9). Redwood City, California, EE. UU.: M&T Publishing, Inc. / The People's Computer Company : 114–115 (662–663). ISSN 1044-789X . #119. ark:/13960/t74v34p9p CODEN DDJOEB . Recuperado el 13 de diciembre de 2021 . (2 páginas)
- ↑ Steinman, Jan W. (1986). "III. Rutinas y técnicas útiles para el 68000, 16. La prueba de memoria del gusano" (PDF) . Escrito en West Linn, Oregón, EE. UU. Manual de programación del Dr. Dobb para el 68000. Nueva York, EE. UU.: Brady Book / Prentice Hall Press / Simon & Schuster, Inc. págs. 341–350 . ISBN 0-13-216649-6. LCCN 86-25308 . Archivado (PDF) del original el 13-12-2021 . Recuperado el 13-12-2021 . (1+5+10+1 páginas)
- ↑ Dewdney, Alexander Keewatin (marzo de 1985). "Recreaciones informáticas: un bestiario de virus, gusanos y otras amenazas a las memorias informáticas" de la Guerra Central . Scientific American . 285 : 38–39 . Archivado del original el 4 de julio de 2017. Consultado el 4 de julio de 2017 .
Lecturas adicionales
- Harrell III, John B. (octubre de 1983). "DOSPLUS 3.5" . 80 Micro . Revisión (45). 1001001, Inc .: 160, 162, 164–168 , 170. ISSN 0744-7868 . ark:/13960/t8z906r42 . Recuperado el 6 de febrero de 2020 .
- Smith, Lee; Haines, Lionel (1989-02-02) [1987-08-14]. Formato de imagen de aplicación RISC OS (anteriormente formato de imagen Arthur) (Memorando técnico) (1.00 ed.). Cambridge, Reino Unido: Acorn Computers Limited , Programming Languages Group. PLG-AIF. Archivado del original el 30-08-2017 . Recuperado el 30-08-2017 .
- Propiedades del formato de imagen ARM . 1993. Archivado del original el 31 de agosto de 2017. Consultado el 31 de agosto de 2017 .
- Huck, Alex (14 de agosto de 2016). "Controladores compatibles con CP/M – PRL2COM" . Homecomputer DDR (en alemán). Archivado del original el 21 de febrero de 2020. Recuperado el 21 de febrero de 2020 ;Pohlers, Volker (24-04-2017) [20-02-2012, 2009, 2002, 1988-07-26, 1987-10-11]. "PRL2COM" . Homecomputer DDR (en alemán). Archivado del original el 21-02-2020 . Recuperado el 21-02-2020 .
- Programación informática