Atari Assembler Editor (a veces escrito como Atari Assembler/Editor ) es un sistema de desarrollo basado en cartuchos ROM lanzado por Atari, Inc. en 1981. Se utiliza para editar, ensamblar y depurar programas 6502 para computadoras Atari de 8 bits sin la necesidad de herramientas adicionales. Fue programado por Kathleen O'Brien de Shepardson Microsystems , la compañía que escribió Atari BASIC , y Assembler Editor comparte muchos conceptos de diseño con la implementación de ese lenguaje.
Los tiempos de ensamblaje son lentos, lo que hace que el cartucho sea un desafío para su uso en programas más grandes. En el manual, Atari recomendó el Editor de ensamblador como una herramienta para escribir subrutinas para acelerar Atari BASIC , [1] que sería mucho más pequeño que las aplicaciones completas. El Atari Macro Assembler se ofreció como una alternativa con mejor rendimiento y más funciones, como macros, pero está basado en disco, está protegido contra copia y no incluye un editor o depurador. A pesar de la recomendación, se escribió software comercial utilizando el Editor de ensamblador, como los juegos Eastern Front (1941) , [2] Caverns of Mars , [3] Galahad and the Holy Grail , [4] y Kid Grid . [5]
El código fuente del editor de ensamblador original fue licenciado a Optimized Systems Software, que envió EASMD basado en él.
El editor de ensamblador es un ensamblador 6502 de dos pasadas en un cartucho de 8 KB . Tanto el código fuente como el código objeto pueden estar en la memoria simultáneamente, lo que permite la edición, el ensamblaje y la ejecución repetidos del código resultante sin acceder a un disco o una unidad de cinta. [6]
El cartucho se inicia en modo EDITAR. El programador introduce líneas de código fuente en el editor tipo Atari BASIC . El texto fuente debe ir precedido de un número de línea o se interpretará como un comando. Al igual que Atari BASIC, Assembler Editor incluye un comando que se puede utilizar para combinar archivos en una única lista de programas más grande. A diferencia de Atari BASIC, Assembler Editor incluye comandos para crear automáticamente números de línea espaciados, así como para renumerar líneas y eliminarlas en masa . Un comando es útil cuando se trabaja con etiquetas. [7]ENTER
FIND
Las instrucciones se enumeran en el orden en que se colocarán en la memoria. El punto de inicio de las instrucciones se especifica con la *=
directiva, por lo que, por ejemplo, el código que se pretende colocar en la "página seis" especial se antepondría con la línea *= $0600
. [8] Los nombres de las variables se pueden asignar a direcciones específicas y esto a menudo se combinaba con un incremento *= *+1
para codificar directamente los desplazamientos en las tablas. [9]
Los valores que siguen a las instrucciones normalmente se interpretan como "el valor en esta dirección de memoria", pero se puede proporcionar un valor numérico real como un "operando inmediato" agregándole un hash, como LDA #12
, que carga el acumulador con el valor decimal 12. El hexadecimal se indica con un signo de dólar, LDA #$12
carga el acumulador con 12 hexadecimal o 18 decimal. Se admite el direccionamiento indirecto mediante paréntesis; LDA ($600)
utiliza los valores en la ubicación $600, $601 para producir una dirección de 16 bits y luego carga el acumulador con el valor encontrado en esa ubicación. [10]
Los errores se notifican con códigos numéricos que se pueden consultar en el manual. Hay 19 códigos específicos del ensamblador y 16 códigos adicionales para errores de entrada/salida del sistema operativo. [11]
El código se ensambla escribiendo el ASM
comando en el editor. [12]
El editor de ensambladores fue ampliamente ridiculizado como el ensamblador más lento de la plataforma. Gran parte de esto se debe a que comparte código con Atari BASIC, también escrito por Shepardson Microsystems. Atari BASIC utiliza rutinas lentas que se utilizan para convertir constantes numéricas en código a una representación decimal codificada en binario interna a través de rutinas del sistema operativo . Todos los números, incluso los números de línea, deben convertirse a decimal codificado en binario. También significa que 1E2
es un número de línea legal. [13]
El depurador , en realidad un monitor , se ingresa con el BUG
comando. [14] El X
comando regresa al modo EDITAR. [15] El depurador permite la visualización y el cambio de registros y ubicaciones de memoria, el rastreo de código, el desensamblaje y el paso único . [16]
Assembler Editor fue escrito por Kathleen O'Brien de Shepardson Microsystems . Atari había contratado a la compañía para que ayudara a adaptar Microsoft 6502 BASIC a una ROM de 8 KB , algo con lo que los programadores de Atari estaban teniendo dificultades. En cambio, Bill Wilkinson sugirió diseñar una versión completamente nueva de BASIC, que se convirtió en Atari BASIC . [17]
Mientras se escribía Atari BASIC, principalmente por Paul Laughton, el marido de O'Brien, O'Brien trabajó en el editor ensamblador. [17] Se escribió perforando códigos en una máquina de cinta perforada , pasando la cinta a través de un quemador de EPROM y luego probando la ROM resultante en un Atari 800. El cartucho se completó antes que Atari BASIC, y O'Brien pasó algún tiempo trabajando en partes de ese proyecto también. [17]
Como parte del trabajo de Shepardson, se incorporaron varias rutinas comunes al sistema operativo de la computadora Atari , incluidas las funciones matemáticas de punto flotante . Estas fueron escritas por O'Brien, el primer código matemático de punto flotante en el que trabajó. [17] El bajo rendimiento de las funciones clave afectó tanto al Atari BASIC como al Editor de ensamblador y fue un tema sobre el que Wilkinson escribió a menudo. [18]
El siguiente es el código 6502 para ¡Hola mundo! escrito para el editor de ensamblador:
10 ; HOLA.ASM 20 ; --------- 30 ; 40 ; ESTE PROGRAMA DE ENSAMBLAJE DE ATARI 50 ; IMPRIMIRÁ EL MENSAJE "HOLA MUNDO" 60 ; EN LA PANTALLA 70 ; 0100 ; CIO ECUA A 0110 ; =========== 0120 *= $0340 ;INICIO DE IOCB 0130 IOCB 0140 ; 0150 ICHID *= *+ 1 ;MANEJADOR DE DISPOSITIVO 0160 ICDNO *= *+ 1 ;NÚMERO DE DISPOSITIVO 0170 ICCOM *= *+ 1 ;COMANDO DE E/S 0180 ICSTA *= *+ 1 ;ESTADO DE E/S 0190 ICBAL *= *+ 1 ;DIRECCIÓN DE BÚFER LSB 0200 ICBAH *= *+ 1 ;DIRECCIÓN DE BÚFER MSB 0210 ICPTL *= *+ 1 ;RUTINA DE COLOCACIÓN LSB 0220 ICPTH *= *+ 1 ;RUTINA DE COLOCACIÓN MSB 0230 ICBLL *= *+ 1 ;LONGITUD DE BÚFER LSB 0240 ICBLH *= * + 1 ;LONGITUD DE BÚFER MSB 0250 ICAX1 *= *+ 1 ;AUX BYTE 1 0260 ICAX2 *= *+ 1 ;AUX BYTE 1 0270 ; 0280 GETREC = 5 ;OBTENER REGISTRO DE TEXTO 0290 PUTREC = 9 ;PONER REGISTRO DE TEXTO 0300 ; 0310 CIOV = $E456 ;VECTOR DE ENTRADA CIO 0320 RUNAD = $02E0 ;DIRECCIÓN DE EJECUCIÓN 0330 EOL = $9B ;FIN DE LÍNEA 0340 ; 0350 ;CONFIGURACIÓN PARA CIO 0360 ; ------------- 0370 *= $0600 0380 INICIO LDX # 0 ;IOCB 0 0390 LDA # PUTREC ;DESEO SALIDA 0400 STA ICCOM , X ;EMITIR CMD 0410 LDA # MSG & 255 ;BYTE BAJO DEL MENSAJE 0420 STA ICBAL , X ; EN ICBAL 0430 LDA # MSG / 256 ;BYTE ALTO 0440 STA ICBAH , X ; EN ICBAH 0450 LDA # 0 ;LONGITUD DEL MENSAJE 0460 STA ICBLH , X ; BYTE ALTO 0470 LDA # $FF ;LONGITUD DE 255 CARACTERES 0480 STA ICBLL , X ; BYTE BAJO 0490 ; 0500 ; LLAMAR A CIO PARA IMPRIMIR 0510 ; ----------------- 0520 JSR CIOV ;LLAMAR A CIO 0530 RTS ;SALIR A DOS 0540 ; 0550 ; NUESTRO MENSAJE 0560 ; ----------- 0570 MSG .BYTE "¡HOLA MUNDO!" , EOL 0580 ; 0590 ; DIRECCIÓN DE EJECUCIÓN INICIAL 0600 ; ---------------- 0610 *= RUNAD 0620 .WORD INICIO 0630 .FIN
Estos comandos se pueden ingresar de forma interactiva para ensamblar el código, ingresar al depurador, ejecutar el programa y luego salir del depurador cuando haya terminado:
ASMBICHOG600incógnita
Poco después de que Shepardson entregara Assembler Editor y Atari BASIC a Atari, Bob Shepardson, el propietario, decidió volver a ser una empresa unipersonal. [19] O'Brien, Laughton y Wilkinson formaron su propia empresa, Optimized Systems Software (OSS), para continuar con el desarrollo de los productos de Atari. Licenciaron el código fuente original de BASIC, Assembler Editor y Atari DOS , que habían escrito colectivamente. [20]
En 1981, OSS lanzó una versión mejorada del editor de ensambladores, EASMD, en disquete . EASMD fue reemplazado por MAC/65 en 1982. MAC/65 era uno de los ensambladores más rápidos de la plataforma. [13] Gran parte del rendimiento mejorado de MAC/65 es el resultado de la tokenización de líneas de código a medida que se ingresan (como es el caso de Atari BASIC) para reducir la cantidad de trabajo necesario en el momento del ensamblaje. [6]
Assembler Editor siguió estando disponible en Atari y aumentó su popularidad a medida que el precio bajó a 10 o 5 dólares estadounidenses en la segunda mitad de la década de 1980. [21]