Articulo de referencia

Formato binario de Microsoft

En informática , el formato binario de Microsoft ( MBF ) es un formato para números de punto flotante que se utilizaba en los lenguajes BASIC de Microsoft , incluidos MBASIC , G...

En informática , el formato binario de Microsoft ( MBF ) es un formato para números de punto flotante que se utilizaba en los lenguajes BASIC de Microsoft , incluidos MBASIC , GW-BASIC y QuickBASIC antes de la versión 4.00. [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ]

Existen dos versiones principales del formato. La versión original fue diseñada para sistemas con memoria limitada y almacenaba números en 32  bits (4 bytes), con una mantisa  de 23 bits , un signo de 1 bit y un exponente de 8 bits . La versión extendida (12k) de BASIC incluía un tipo de precisión doble de 64 bits. 

Durante el período en que se estaba adaptando de la plataforma Intel 8080 al procesador MOS 6502 , las computadoras comenzaron a incluir más memoria como característica estándar. Esta versión se ofrecía con el formato original de 32 bits o un formato expandido opcional de 40 bits (5 bytes). El formato de 40 bits era utilizado por la mayoría de las computadoras domésticas de las décadas de 1970 y 1980. Estas dos versiones se conocen a veces como "6 dígitos" y "9 dígitos", respectivamente. [ 8 ]

En los ordenadores con procesador x86 , QuickBASIC , antes de la versión 4, reintrodujo el formato de doble precisión utilizando una mantisa de 55 bits en un formato de 64 bits (8 bytes). El formato MBF se abandonó durante la transición a QuickBASIC  4, que utilizaba el formato estándar IEEE 754 , introducido unos años antes.

Historia

Bill Gates y Paul Allen estaban trabajando en Altair BASIC en 1975. Desarrollaban el software en la Universidad de Harvard en una DEC PDP-10 que ejecutaba su emulador de Altair . [ 9 ] Una de las cosas que les faltaba era código para manejar números de coma flotante, necesario para admitir cálculos con números muy grandes y muy pequeños, [ 9 ] lo que sería particularmente útil para la ciencia y la ingeniería. [ 10 ] [ 11 ] Uno de los usos propuestos para Altair era como calculadora científica. [ 12 ]

Panel frontal del Altair 8800

En una cena en Currier House , una residencia estudiantil de Harvard, Gates y Allen se quejaron con sus acompañantes de que tenían que escribir este código [ 9 ] y uno de ellos, Monte Davidoff , les dijo que ya había escrito rutinas de punto flotante y convenció a Gates y Allen de que era capaz de escribir el código de punto flotante de Altair BASIC. [ 9 ] En ese momento, aunque IBM había introducido sus propios programas, no existía un estándar para números de punto flotante, por lo que Davidoff tuvo que crear el suyo propio. Decidió que 32 bits permitirían suficiente rango y precisión. [ 13 ] Cuando Allen tuvo que hacer una demostración ante MITS , fue la primera vez que se ejecutó en un Altair real. [ 14 ] Pero funcionó, y cuando introdujo 'PRINT 2+2', la rutina de suma de Davidoff dio la respuesta correcta. [ 9 ]

Una copia del código fuente de Altair BASIC reapareció en 1999. A finales de la década de 1970, Harry Lewis, antiguo tutor y decano de Gates , la encontró detrás de unos muebles en una oficina de Aiden y la guardó en un archivador. Tras olvidarse prácticamente de su existencia durante mucho tiempo, Lewis tuvo la idea de exhibir la lista en el vestíbulo. En cambio, se decidió conservar la lista original y producir varias copias para su exhibición y preservación, después de que la bibliotecaria y conservadora Janice Merrill-Oldham señalara su importancia. [ 15 ] [ 16 ] Un comentario en el código fuente atribuye a Davidoff la autoría del paquete matemático de Altair BASIC. [ 15 ] [ 16 ]

Sistema Radio Shack Tandy TRS-80 Modelo I

Altair BASIC despegó, y pronto la mayoría de las primeras computadoras domésticas ejecutaban alguna forma de Microsoft BASIC. [ 17 ] [ 18 ] El puerto BASIC para la CPU 6502 , como la utilizada en la Commodore PET , ocupaba más espacio debido a la menor densidad de código de la 6502. Debido a esto, probablemente no cabría en un solo chip ROM junto con el código de entrada y salida específico de la máquina. Dado que se necesitaba un chip adicional, había espacio adicional disponible, y este se utilizó en parte para extender el formato de punto flotante de 32 a 40 bits. [ 8 ] Este formato extendido no solo fue proporcionado por Commodore BASIC 1 y 2, sino que también fue compatible con Applesoft BASIC I y II desde la versión 1.1 (1977), KIM-1 BASIC desde la versión 1.1a (1977) y MicroTAN BASIC desde la versión 2b (1980). [ 8 ] Poco después, los puertos Z80 , como Level II BASIC para TRS-80 (1978), introdujeron el formato de 64 bits de doble precisión como un tipo de datos separado del de 32 bits de precisión simple. [ 19 ] [ 20 ] [ 21 ] Microsoft utilizó los mismos formatos de punto flotante en su implementación de Fortran [ 22 ] y para su ensamblador de macros MASM , [ 23 ] aunque su hoja de cálculo Multiplan [ 24 ] [ 25 ] y su implementación de COBOL utilizaron punto flotante decimal codificado en binario (BCD). [ 26 ] Aun así, durante un tiempo MBF se convirtió en el formato de punto flotante de facto en las computadoras domésticas, hasta el punto de que la gente todavía ocasionalmente encuentra archivos y formatos de archivo heredados que lo utilizan. [ 27 ] [ 28 ] [ 29 ] [ 30 ] [ 31 ] [ 32 ]

Minicomputadora VAX-11/780

En un desarrollo paralelo, Intel había comenzado el desarrollo de un coprocesador de punto flotante en 1976. [ 33 ] [ 34 ] William Morton Kahan , como consultor de Intel, sugirió que Intel utilizara el punto flotante del VAX de Digital Equipment Corporation (DEC). El primer VAX, el VAX-11/780, acababa de salir a finales de 1977, y su punto flotante era muy apreciado. Los formatos de punto flotante del VAX se diferenciaban de MBF solo en que tenía el signo en el bit más significativo. [ 35 ] [ 36 ] Sin embargo, buscando comercializar su chip al mercado más amplio posible, se le pidió a Kahan que elaborara las especificaciones. [ 33 ] Cuando los rumores del nuevo chip de Intel llegaron a sus competidores, estos iniciaron un esfuerzo de estandarización, llamado IEEE 754 , para evitar que Intel ganara demasiado terreno. Como un exponente de 8 bits no era lo suficientemente amplio para algunas operaciones deseadas para números de doble precisión, por ejemplo, para almacenar el producto de dos números de 32 bits, [ 1 ] la propuesta de Intel y una contrapropuesta de DEC usaron 11 bits, como el formato de punto flotante de 60 bits probado en el tiempo del CDC 6600 de 1965. [ 34 ] [ 37 ] [ 38 ] La propuesta de Kahan también proporcionó infinitos, que son útiles cuando se trata de condiciones de división por cero; valores que no son números, que son útiles cuando se trata de operaciones no válidas; números denormalizados , que ayudan a mitigar los problemas causados ​​por el subdesbordamiento; [ 37 ] [ 39 ] [ 40 ] y un sesgo de exponente mejor equilibrado , que podría ayudar a evitar el desbordamiento y el subdesbordamiento al tomar el recíproco de un número. [ 41 ] [ 42 ]

Para cuando se lanzó QuickBASIC 4.00 , el estándar IEEE 754 ya se había adoptado ampliamente ; por ejemplo, se incorporó al coprocesador 387 de Intel y a todos los procesadores x86 a partir del 486. Las versiones 4.0 y 4.5 de QuickBASIC utilizan variables de coma flotante IEEE 754 de forma predeterminada, pero (al menos en la versión 4.5) existe una opción de línea de comandos /MBF para el IDE y el compilador que cambia de números de coma flotante IEEE a MBF, para admitir programas escritos anteriormente que dependen de detalles de los formatos de datos MBF. Visual Basic también utiliza el formato IEEE 754 en lugar de MBF.

Detalles técnicos

Los números MBF constan de un exponente de base 2 de 8 bits , un bit de signo (mantisa positiva: s = 0; mantisa negativa: s = 1) y una mantisa de 23, [ 43 ] [ 8 ] 31 [ 8 ] o 55 bits [ 43 ] de la significando . Siempre hay un bit 1 implícito a la izquierda de la mantisa explícita, y el punto de base se encuentra antes de este bit asumido . El exponente se codifica con un sesgo de 128 , de modo que los exponentes −127…−1 se representan por x = 1…127 (01h…7Fh) , los exponentes 0…127 se representan por x = 128…255 (80h…FFh) , con un caso especial para x = 0 (00h) que representa que el número entero es cero.

El formato de doble precisión MBF proporciona una escala menor que el formato IEEE 754 , y aunque el formato en sí proporciona casi un dígito decimal adicional de precisión, en la práctica los valores almacenados son menos precisos porque los cálculos IEEE utilizan resultados intermedios de 80 bits, y MBF no. [ 1 ] [ 3 ] [ 43 ] [ 44 ] A diferencia del punto flotante IEEE, MBF no admite números desnormalizados , infinitos ni NaN . [ 45 ]

Formato MBF de precisión simple (32 bits, "BASIC de 6 dígitos"): [ 43 ] [ 8 ]

Formato MBF de precisión extendida (40 bits, " BASIC de 9 dígitos"): [ 8 ]

Formato MBF de doble precisión (64 bits): [ 43 ] [ 1 ]

Ejemplos

Véase también

Referencias

  1. 1 2 3 4 "Formato binario IEEE vs. Microsoft; Problemas de redondeo (completo)" . Soporte de Microsoft . Microsoft . 21/11/2006. ID de artículo KB35826, Q35826. Archivado del original el 28/08/2020 . Consultado el 24/02/2010 .
  2. "(Completo) Tutorial para comprender los errores de punto flotante IEEE" . Base de conocimientos . Microsoft . 16 de agosto de 2005. ID de artículo KB42980, Q42980. Archivado del original el 28 de agosto de 2020. Consultado el 2 de junio de 2016 .
  3. 1 2 "Convertir números de punto flotante de C++ anteriores a IEEE-754 a/desde C#" . stackoverflow.com . 21/04/2010. Archivado del original el 28/08/2020 . Consultado el 02/06/2016 .(Nota: La segunda referencia podría interpretarse erróneamente como que QB 4.0 podría usar MBF internamente, pero solo usa IEEE. Simplemente tiene algunas funciones de conversión para convertir números de coma flotante IEEE a cadenas que contienen datos MBF, por ejemplo, MKDMBF$ además de MKD$ , que simplemente copia los bytes del valor IEEE a una cadena).
  4. "La documentación de MASM 6.1 señala que la versión 5.1 fue la última versión de MASM compatible con MBF" (PDF) . people.sju.edu . Consultado el 2 de junio de 2016 .
  5. Manual del usuario de GW-BASIC, Apéndice D.3 Llamadas a funciones USR.
  6. BASIC Segunda edición (mayo de 1982), IBM: Apéndice C-15 (NB. Este es el manual de BASICA).
  7. "Rutas ROM (matemáticas enteras)" . Trs-80.com . Consultado el 2 de junio de 2016 .
  8. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Steil, Michael (2008-10-20). "Crea tu propia versión de Microsoft BASIC para 6502" . pagetable.com. Archivado del original el 30-05-2016 . Recuperado el 30-05-2016 .
  9. 1 2 3 4 5 Isaacson, Walter (2013-09-20). "El amanecer de una revolución" . Harvard Gazette . news.harvard.edu. Archivado del original el 28-08-2020 . Recuperado el 30-05-2016 .
  10. Rall, Louis B. (1987). "Una introducción al lenguaje de computación científica Pascal-SC" . Computers & Mathematics with Applications . 14 (1). Mathematics Research Center, University of Wisconsin-Madison , Madison, Wisconsin: Pergamon Journals Ltd : 53–69 . doi : 10.1016/0898-1221(87)90181-7 .(17 páginas)
  11. Leung, K. Ming (2005-02-03) [2000]. "Números de punto flotante en computadoras digitales" (PDF) . cis.poly.edu . Departamento de Ciencias de la Computación e Información, Universidad Politécnica. Archivado (PDF) del original el 14-12-2018 . Recuperado el 02-06-2016 .
  12. Becraft, Michael B. (26 de agosto de 2014). Bill Gates: Una biografía . Abc-Clio. ISBN 978-1-44083014-3. Consultado el 30 de mayo de 2016 .
  13. "El paquete matemático" . altairbasic.org . 2014. Archivado del original el 28 de agosto de 2020. Consultado el 30 de mayo de 2016 .(Nota: Altair BASIC 3.2 (Edición 4K).)
  14. Orlowski, Andrew (11 de mayo de 2001). "La leyenda de Microsoft Altair BASIC habla sobre Linux, CPRM y esa foto tan aterradora: una entrevista muy rara con Monte Davidoff" . The Register . Archivado del original el 28 de agosto de 2020. Recuperado el 30 de mayo de 2016 .
  15. 1 2 Orlowski, Andrew (13 de mayo de 2001). "Raiders of the Lost Altair BASIC Source Code - They came, they saw… they disassembled" . The Register . Archivado del original el 28 de agosto de 2020. Recuperado el 30 de mayo de 2016 .
  16. 1 2 Griffiths, Ian (2000-05-08). "Quest for the Holy Source - Ian's trip to Harvard" . Archivado del original el 2 de enero de 2002. Recuperado el 30 de mayo de 2016 .
  17. "Grandes personas personalmente responsables del avance del arte de las primeras computadoras" . Oldcomputers.net . 18 de julio de 2020. Archivado del original el 28 de agosto de 2020. Consultado el 30 de mayo de 2016 .
  18. "Basic 7.0 para Windows" . comp.lang.basic.powerbasic.narkive.com . Archivado del original el 28 de agosto de 2020. Consultado el 30 de mayo de 2016 .
  19. Manual de hardware de Radio Shack: Manual de referencia BÁSICO de nivel II (1.ª ed.). Fort Worth, Texas: Radio Shack . 1978. Archivado del original el 28 de agosto de 2020. Consultado el 30 de mayo de 2016 . 
  20. Manual de referencia BÁSICO de nivel II (PDF) . Radio Shack . 1979. Consultado el 2 de junio de 2016 .{{cite book}}: |website=ignorado ( ayuda )
  21. Manual de referencia de BASIC-80 (MBASIC) (PDF) . Consultado el 30 de mayo de 2016 .
  22. Manual del usuario de Microsoft FORTRAN-80 versión 3.4 (PDF) . Noviembre de 1980. págs. 45, 55. Consultado el 30 de mayo de 2016 . {{cite book}}: |website=ignorado ( ayuda )
  23. Pätzold, Michael, ed. (Abril de 1993). "Zettelsammlung MS-DOS und AT" (en alemán). Gruppe Datenverarbeitung am MPI für Strömungsforschung Göttingen, Max-Planck-Institut. Archivado desde el original el 20 de febrero de 2005 . Consultado el 7 de octubre de 2015 .
  24. "Manual de Tandy 200 Multiplan" (PDF) . classiccmp.org . Consultado el 2 de junio de 2016 .
  25. Especificaciones del código C de Microsoft , página 13. (Nota: Multiplan no se compiló a código máquina, sino a un tipo de código de bytes que era ejecutado por un intérprete, para que Multiplan fuera portable entre el hardware tan diverso de la época. Este código de bytes distinguía entre el formato de punto flotante específico de la máquina para realizar los cálculos y un formato externo (estándar), que era el decimal codificado en binario (BCD). Las instrucciones PACK y UNPACK convertían entre ambos formatos).
  26. Microsoft COBOL-80 (PDF) . 1978. págs. 26, 32. Consultado el 30 de mayo de 2016 . {{cite book}}: |website=ignorado ( ayuda )
  27. Lee, Patrick Y. "Diseño de archivo de paquete de correo QWK" (TXT) . textfiles.com . Consultado el 2 de junio de 2016 .
  28. "Formato CSI Millennium (CSIM) con extensiones CSI Y2K" . csidata.com . Boca Raton, Florida: Commodity Systems, Inc. 17 de noviembre de 1998. Archivado del original (TXT) el 5 de marzo de 2016. Consultado el 2 de junio de 2016. [ …] Este documento describe el formato de datos CompuTrac abandonado, que hasta hace poco era utilizado activamente por el software de gráficos MetaStock de Equis. […]
  29. Billard, Russ (04-05-2016) [13-07-2001]. "Conversión de formato binario de Microsoft a formato IEEE usando VB 6" . Archivado del original el 28-08-2020 . Recuperado el 30-05-2016 .
  30. JerMyster (2003-07-02). "¡Ayuda! ¿Alguien sabe cómo convertir el antiguo valor M/S MBF de Qbasic a VB6?" . Tek-Tips . Foro de Visual Basic (clásico). Archivado del original el 28-08-2020 . Recuperado el 30-05-2016 .
  31. GL88. "Lectura de formato binario (QBasic) con C#" . Social.msdn.microsoft.com . Consultado el 30 de mayo de 2016 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  32. "Rmetrics - Lectura del formato de datos de MetaStock en R" . R.789695.n4.nabble.com. 30 de septiembre de 2013. Consultado el 30 de mayo de 2016 .
  33. 1 2 "Intel y punto flotante: actualización de uno de los estándares más exitosos de la industria: la visión tecnológica para el estándar de punto flotante" (PDF) . Intel . 2016. Archivado del original (PDF) el 4 de marzo de 2016. Recuperado el 30 de mayo de 2016 .(11 páginas)
  34. 1 2 "Una entrevista con el Viejo del Punto Flotante" . cs.berkeley.edu. 1998-02-20 . Recuperado el 2016-05-30 .
  35. "Números de punto flotante VAX" . nssdc.gsfc.nasa.gov . Archivado del original el 28 de agosto de 2020. Consultado el 2 de junio de 2016 .(Nota: El VAX-11/780 aún no implementaba el formato "G". Si bien esto no se aprecia directamente en las tablas, ya que las estructuras se han dividido en palabras de dos bytes, el orden de bytes es en realidad el mismo que en las CPU modernas. No hay suficiente espacio en el rango del exponente para NaN, infinito, infinitos o números desnormalizados ) .
  36. "VAX11 780" (PDF) . Ece.cmu.edu . Consultado el 2 de junio de 2016 .
  37. 1 2 "IEEE 754: Una entrevista con William Kahan" (PDF) . dr-chuck.com . Consultado el 2 de junio de 2016 .
  38. Thornton, James E. (1970). Escrito en el Laboratorio de Diseño Avanzado, Control Data Corporation. Diseño de una computadora: El Control Data 6600 (PDF) (1.ª ed.). Glenview, Illinois: Scott, Foresman and Company . LCCN 74-96462 . Archivado (PDF) del original el 28 de agosto de 2020. Recuperado el 2 de junio de 2016 .  (1+13+181+2+2 páginas)
  39. Kahan, William Morton . "¿Por qué necesitamos un estándar de aritmética de punto flotante?" (PDF) . cs.berkeley.edu . Consultado el 2 de junio de 2016 .
  40. Kahan, William Morton ; Darcy, Joseph D. "Cómo el punto flotante de Java perjudica a todos en todas partes" (PDF) . cs.berkeley.edu . Consultado el 2 de junio de 2016 .
  41. Turner, Peter R. (21 de diciembre de 2013). Análisis numérico y procesamiento paralelo: Conferencias impartidas en The Lancaster… . Springer. ISBN 978-3-66239812-8. Consultado el 30 de mayo de 2016 .
  42. "Nombres para formatos estandarizados de punto flotante" (PDF) . cs.berkeley.edu . Consultado el 2 de junio de 2016 .
  43. 1 2 3 4 5 6 Personal de Borland (1998-07-02) [1994-03-10]. "Conversión entre formatos binarios de Microsoft e IEEE" . Base de datos de información técnica (TI1431C.txt). Embarcadero USA / Inprise (originalmente: Borland ). ID 1400. Archivado del original el 2019-02-20 . Recuperado el 2016-05-30 . […] _fmsbintoieee(float *src4, float *dest4) […] Formato binario de MS […] orden de bytes => m3 | m2 | m1 | exponente […] m1 es el byte más significativo => sbbb|bbbb […] m3 es el byte menos significativo […] m = byte de mantisa […] s = bit de signo […] b = bit […] MBF tiene un sesgo de 128 e IEEE tiene un sesgo de 127. […] MBF coloca el punto decimal antes del bit asumido , mientras que IEEE coloca el punto decimal después del bit asumido. […] ieee_exp = msbin[3] - 2; /* en realidad, msbin[3]-1-128+127 */ […] _dmsbintoieee(double *src8, double *dest8) […] Formato binario MS […] orden de bytes => m7 | m6 | m5 | m4 | m3 | m2 | m1 | exponente […] m1 es el byte más significativo => smmm|mmmm […] m7 es el byte menos significativo […] MBF tiene un sesgo de 128 e IEEE tiene un sesgo de 1023. […] MBF coloca el punto decimal antes del bit asumido, mientras que IEEE lo coloca después del bit asumido. […] ieee_exp = msbin[7] - 128 - 1 + 1023; […]
  44. "Grupos de Google" . Groups.google.com . Consultado el 2 de junio de 2016 .
  45. Bucknall, Julian M. (2018-11-03) [2007-10-23]. "Understanding single precision MBF" . boyet.com. Archivado del original el 2019-02-20 . Recuperado el 2016-05-30 . […] Formato único IEEE 754 […] El exponente está sesgado por 127. Se asume un bit 1 antes del punto de base (por lo que la mantisa asumida es 1.ffff… donde las f son los bits de fracción ) […] Formato binario de Microsoft (precisión simple) […] El exponente está sesgado por 128. Se asume un bit 1 después del punto de base (por lo que la mantisa asumida es 0.1ffff… donde las f son los bits de fracción) […] la mantisa IEEE es el doble de la mantisa MBF. […] para convertir de MBF a IEEE simple […] reste 2 al exponente (uno por el cambio de polarización, uno por el factor de mantisa) y luego reorganice los bits de signo y exponente. La fracción no cambia. Para convertir de IEEE simple a MBF, […] sume 2 al exponente (uno por el cambio de polarización, uno por el factor de mantisa) y luego reorganice los bits de signo y exponente. La fracción no cambia. […]
  46. 1 2 3 4 5 6 7 8 Steil, Michael, ed. (2008-10-20). "msbasic/float.s" . MIST64 . Archivado del original el 28-08-2020 . Recuperado el 28-08-2020 a través de github.com.(Nota: Listados de desensamblaje comentados para el 6502, fusionados a partir de varias versiones de Microsoft BASIC para el 6502 entre 1977 y 1982 para recrear copias exactas byte a byte de las ROM originales para 10 máquinas diferentes de distintos fabricantes).
  47. 1 2 3 Steil, Michael, ed. (2008-10-20). "msbasic/trig.s" . MIST64 . Archivado del original el 28-08-2020 . Recuperado el 28-08-2020 a través de github.com.(Nota: Listados de desensamblaje comentados para el 6502, fusionados a partir de varias versiones de Microsoft BASIC para el 6502 entre 1977 y 1982 para recrear copias exactas byte a byte de las ROM originales para 10 máquinas diferentes de distintos fabricantes).

Lecturas adicionales

  • Allen, Paul ; Gates, Bill ; Davidoff, Monte (marzo de 2019) [1975]. Harris, Reuben; Mangin, Charles (eds.). "Altair BASIC 3.2 (4K) - Desensamblaje anotado" . altairbasic.org . Archivado del original el 29 de marzo de 2024. Recuperado el 29 de marzo de 2024 .
  • Harris, Reuben, ed. (2014) [1975]. "The Math Package" . altairbasic.org . Archivado del original el 29 de marzo de 2024. Recuperado el 29 de marzo de 2024 .
  • Microsoft proporciona una biblioteca de vínculos dinámicos para Visual Basic de 16 bits que contiene funciones para convertir datos entre el formato MBF y el estándar IEEE 754.
    • Esta biblioteca encapsula las funciones de conversión MBF en la CRT de Visual C(++) de 16 bits.
    • Estas funciones de conversión redondearán un número de doble precisión IEEE como ¾ ⋅ 2 −128 a cero en lugar de a 2 −128 .
    • No admiten números desnormalizados en absoluto: el número de precisión simple IEEE o MBF 2 −128 se convertirá a cero, aunque se pueda representar en cualquiera de los dos formatos.
    • Esta biblioteca está diseñada únicamente para su uso con Visual Basic; se espera que los programas C(++) llamen directamente a las funciones CRT.
  • https://github.com/option8/Altair-BASIC