Assembler Development Kit de Metacomco
Moderador: Sir Cilve Sinclair
-
- Jack The Nipper
- Mensajes: 112
- Registrado: Mar Abr 08, 2008 9:00 am
Assembler Development Kit de Metacomco
Hay varios hilos en los que se habla del ensamblador y pienso que esto puede interesar (aunque la noticia la podía haber dado el 16 de agosto de 2007 pido perdón si esto ya se ha hablado y yo me he enterado ahora).
Los que tengáis el ensamblador de Metacomco y no tengáis el libro del kit de desarrollo podéis descargarlo en http://it.groups.yahoo.com/group/sinclair-italy/files/.
A los que no tengáis ese software también os puede venir bien como libro instructivo.
Los que tengáis el ensamblador de Metacomco y no tengáis el libro del kit de desarrollo podéis descargarlo en http://it.groups.yahoo.com/group/sinclair-italy/files/.
A los que no tengáis ese software también os puede venir bien como libro instructivo.
-
- Sabreman
- Mensajes: 396
- Registrado: Dom Feb 24, 2008 10:56 pm
Re: Assembler Development Kit de Metacomco
Gracias Zerover por el enlace. A ver si poco a poco se va escaneando todo ese material del QL.
Con respecto al ensamblador, nunca me he atrevido a profundizar mucho. Para los que son como yo (que no van más allá del C o del Basic) no estaría mal que alguien (??) nos hiciera un pequeño tutorial del tipo "guía para torpes" (o guía para burros ) de todo el proceso de ensamblar, enlazar, ... en el QL un pequeño programa del tipo "Hola Mundo", empleando un ensamblador como el de Metacomco. (A ver si algunos de los expertos en ensamblador se anima a ello).
PD:
Se que es mucha cara, pero lo digo para no tener que leer medio capítulo del manual para sólo compilar algo muy simple ( ... es que habemos algunos que padecemos de "gandulería" extrema ).
Saludos.
Con respecto al ensamblador, nunca me he atrevido a profundizar mucho. Para los que son como yo (que no van más allá del C o del Basic) no estaría mal que alguien (??) nos hiciera un pequeño tutorial del tipo "guía para torpes" (o guía para burros ) de todo el proceso de ensamblar, enlazar, ... en el QL un pequeño programa del tipo "Hola Mundo", empleando un ensamblador como el de Metacomco. (A ver si algunos de los expertos en ensamblador se anima a ello).
PD:
Se que es mucha cara, pero lo digo para no tener que leer medio capítulo del manual para sólo compilar algo muy simple ( ... es que habemos algunos que padecemos de "gandulería" extrema ).
Saludos.
-
- Jack The Nipper
- Mensajes: 112
- Registrado: Mar Abr 08, 2008 9:00 am
Re: Assembler Development Kit de Metacomco
Aquí está el HolaMundo.
Lo editáis con flp1_ed y lo grabáis en el fichero flp2_holamundo_asm, por ejemplo.
Lo compiláis con flp1_asm dándole el nombre flp2_holamundo_bin.
Este código se ejecuta con CALL desde SuperBASIC.
Código: Seleccionar todo
MT_FRJOB EQU $05
IO_SSTRG EQU $07
LEA.L SALUDO,A3 apuntamos a la frase a escribir con A3
MOVE.W (A3),D2 número de octetos a mandar
MOVEQ.L #-1,D3 periodo de espera infinito
MOVEA.L #$00010001,A0 identificador del canal #1
LEA.L 2(A3),A1 apuntar a la cadena de octetos
MOVEQ.L #IO_SSTRG,D0 enviar la cadena de octetos (Send STRinG)
TRAP #3 Traps de E/S
RTS vuelve a SuperBASIC
SALUDO DC.W 12 las cadenas de texto van precedidas por un número de tamaño W indicando la longitud
DC.B 'Hola, Mundo.'
END
Lo editáis con flp1_ed y lo grabáis en el fichero flp2_holamundo_asm, por ejemplo.
Lo compiláis con flp1_asm dándole el nombre flp2_holamundo_bin.
Este código se ejecuta con CALL desde SuperBASIC.
Código: Seleccionar todo
10 hola = RESPR(40)
20 LBYTES flp2_holamundo_bin,hola
30 CALL hola
-
- Jack The Nipper
- Mensajes: 112
- Registrado: Mar Abr 08, 2008 9:00 am
Re: Assembler Development Kit de Metacomco
Esta es la versión ampliada para poder ser ejecutada con EXEC.
Se compila de igual forma y se ejecuta con
Código: Seleccionar todo
MT_FRJOB EQU $05
IO_SSTRG EQU $07
LEA.L SALUDO,A3 apuntamos a la frase a escribir con A3
MOVE.W (A3),D2 número de octetos a mandar
MOVEQ.L #-1,D3 periodo de espera infinito
MOVEA.L #$00010001,A0 identificador del canal #1
LEA.L 2(A3),A1 apuntar a la cadena de octetos
MOVEQ.L #IO_SSTRG,D0 enviar la cadena de octetos (Send STRinG)
TRAP #3 Traps de E/S
MOVEQ.L #-1,D1 tarea actual
MOVEQ.L #0,D3 ningún error
MOVEQ.L #MT_FRJOB,D0 forzar el final de la tarea (Force Release JOB)
TRAP #1 Traps de gestión de procesos
RTS vuelve a SuperBASIC (poniendo esta línea el programa se podrá ejecutar de las dos maneras - CALL y EXEC)
SALUDO DC.W 12 las cadenas de texto van precedidas por un número de tamaño W indicando la longitud
DC.B 'Hola, Mundo.'
END
Se compila de igual forma y se ejecuta con
Código: Seleccionar todo
EXEC_W flp2_holamundo_bin
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Assembler Development Kit de Metacomco
¿Que ensamblador estás usando? ¿el de GST?
El ASM de Metacomco que yo tengo tienen sólo estos archivos:
asma_ovl
asmb_ovl
asmc_ovl
asm_metacomco
El de Computer One tiene menos archivos si cabe:
c1ass
¿ed es un editor externo quizás? Yo uso qed, que supongo que sirve igual.
Con el asm de metacomco además me da un error al compilar:
¿Será alguna peculiaridad del propio ensamblador?
El ASM de Metacomco que yo tengo tienen sólo estos archivos:
asma_ovl
asmb_ovl
asmc_ovl
asm_metacomco
El de Computer One tiene menos archivos si cabe:
c1ass
¿ed es un editor externo quizás? Yo uso qed, que supongo que sirve igual.
Con el asm de metacomco además me da un error al compilar:
Código: Seleccionar todo
****** Warning: 'END' statement missing.
¿Será alguna peculiaridad del propio ensamblador?
Sinclair QL, la respuesta profesional de los 80
-
- Jack The Nipper
- Mensajes: 112
- Registrado: Mar Abr 08, 2008 9:00 am
Re: Assembler Development Kit de Metacomco
Lo he hecho de cabeza mirando el libro. Según lo que he leído debería haber por lo menos cuatro ficheros: ed, asm, linker e install. Cierto es que el libro menciona algo de tres overlays, y que no caben los tres a la vez en memoria en un QL básico, pero no explica el funcionamiento, supongo que eso viene en la guía del usuario. Yo no tengo el de Metacomco, tengo el de GST y es ligeramente diferente.badaman escribió:¿Que ensamblador estás usando? ¿el de GST?
El ASM de Metacomco que yo tengo tienen sólo estos archivos:
asma_ovl
asmb_ovl
asmc_ovl
asm_metacomco
El de Computer One tiene menos archivos si cabe:
c1ass
Precisamente el editor que viene con el GST es el de Metacomco y he podido comprobar que el capítulo dedicado a su uso es igual. Pero vale cualquier editor de texto plano y, por lo menos con GST, hay que guardar con extensión _asm.badaman escribió:¿ed es un editor externo quizás? Yo uso qed, que supongo que sirve igual.
badaman escribió:Con el asm de metacomco además me da un error al compilar:Código: Seleccionar todo
****** Warning: 'END' statement missing.
¿Será alguna peculiaridad del propio ensamblador?
Olvidé poner el END al final.
EDITO: He estado revisando el código y no olvidé ponerlo. No sé por qué dio el error.
Última edición por Zerover el Vie Nov 07, 2008 11:34 pm, editado 1 vez en total.
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Assembler Development Kit de Metacomco
asumo que el "asm" puede ser el mismo que "asm_metacomco" renombrado, pero ed y link no los tengo. Veré como hacerme de ellos.
Respecto al END, yo lo he añadido al final, tal cual esta en el listado, y da el mismo Warning. ¿A que END se refiere entonces?
Respecto al END, yo lo he añadido al final, tal cual esta en el listado, y da el mismo Warning. ¿A que END se refiere entonces?
Sinclair QL, la respuesta profesional de los 80
-
- Sabreman
- Mensajes: 396
- Registrado: Dom Feb 24, 2008 10:56 pm
Re: Assembler Development Kit de Metacomco
¡¡Yuhuuu!! .... ... ¡¡ Funciona !!
¡¡Gracias Zerover!!.
Fue todo bien a la primera. A mi no me da ese warning que comenta badaman.
PD:
Un buen principio para empezar a tirar del hilo. A ver si a estas alturas ahora (después de viejos) nos vamos a enganchar al ensamblador ...
¡¡Gracias Zerover!!.
Fue todo bien a la primera. A mi no me da ese warning que comenta badaman.
PD:
Un buen principio para empezar a tirar del hilo. A ver si a estas alturas ahora (después de viejos) nos vamos a enganchar al ensamblador ...
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Assembler Development Kit de Metacomco
Salvador Merino me informa que en el volumen 2, numero 2 de la revista QLave está disponible una amplia introducción en castellano al uso del ensamblador de Metacomco que bien puede servir de manual del programa.
Descarga directa: http://www.speccy.org/sinclairql/qlave/ ... o_1986.pdf
A veces no sabemos ni lo que tenemos.
Descarga directa: http://www.speccy.org/sinclairql/qlave/ ... o_1986.pdf
A veces no sabemos ni lo que tenemos.
Sinclair QL, la respuesta profesional de los 80
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Assembler Development Kit de Metacomco
Zerover escribió:Olvidé poner el END al final.
EDITO: He estado revisando el código y no olvidé ponerlo. No sé por qué dio el error.
Bueno, despues de largo rato de pruebas con el ensamblador ya he dado con el problema.
Probé inicialmente a dejar una línea detrás de END y compilarlo, pero el error obtenido era el mismo de antes, por lo que descarté este problema.
Seguidamente pedí al ensamblador que me volcase el listado de compilación, lo que me devolvió un nuevo error:
Código: Seleccionar todo
PAGE 1 QL MACRO ASSEMBLER VERSION 1.7
LOC OBJECT STMT SOURCE STATEMENT
=0005 1 MT_FRJOB EQU $05
=0007 2 IO_SSTRG EQU $07
3
E 4 LEA.L SALUDO,A3 apuntamos a la frase a escribir con A3
0000' 3413 5 MOVE.W (A3),D2 número de octetos a mandar
0002' 76FF 6 MOVEQ.L #-1,D3 periodo de espera infinito
0004' 207C 0001 0001 7 MOVEA.L #$00010001,A0 identificador del canal #1
000A' 43EB 0002 8 LEA.L 2(A3),A1 apuntar a la cadena de octetos
000E' 7007 9 MOVEQ.L #IO_SSTRG,D0 enviar la cadena de octetos (Send STRinG)
0010' 4E43 10 TRAP #3 Traps de E/S
11
0012' 72FF 12 MOVEQ.L #-1,D1 tarea actual
0014' 7600 13 MOVEQ.L #0,D3 ningún error
0016' 7005 14 MOVEQ.L #MT_FRJOB,D0 forzar el final de la tarea (Force Release JOB)
0018' 4E41 15 TRAP #1 Traps de gestión de procesos
16
001A' 17
PAGE 2 QL MACRO ASSEMBLER VERSION 1.7 ERROR-DIAGNOSTICS
E097 on line 4: Undefined Symbol in Operand Field
1 error found in this Assembly
Pensé que el problema serían los comentarios, quizás a causa de los acentos o el tipo de codificación de caracteres, así pues eliminé todos los comentarios y compiló sin problemas.
Probé entonces a sustituir los acentos y otros simbolos por letras sin acentuar, pero el error volvió.
Repasé los comentarios para ver que cosa podría dar error, y me fijé que en el listado de compilación el código se interrumpía en la línea 17:
Código: Seleccionar todo
RTS vuelve a SuperBASIC (poniendo esta línea el programa se podrá ejecutar de las dos maneras - CALL y EXEC)
Descarté los paréntesis como posible causa del problema, pues ya en otras lineas los había y no daban error.
Probé entonces a sustituir las palabras "CALL" y "EXEC" que aparecen al final de esa línea y por fin la cosa funcionó, y compiló correctamente, sin errores ni warnings.
De alguna forma el ensamblador interpreta estas palabras en el comentario (o son palabras reservadas) y produce un error.
Así pues, para que el programa compile correctamente en el emsamblador de Metacomco, almenos en la versión 1.7 que es la que yo tengo, debemos quitar esas palabras del comentario.
Por cierto, el error de la línea 4:
Código: Seleccionar todo
E 4 LEA.L SALUDO,A3 apuntamos a la frase a escribir con A3
..
E097 on line 4: Undefined Symbol in Operand Field
Imagino que se da porque al cortarse el programa en la línea 17 no llega a definirse "SALUDO".
Y con el warning:
Código: Seleccionar todo
****** Warning: 'END' statement missing
Tres cuartos de lo mismo.
Última edición por badaman el Dom Nov 09, 2008 4:56 am, editado 1 vez en total.
Sinclair QL, la respuesta profesional de los 80
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Assembler Development Kit de Metacomco
Bueno, pues otro error que me aparece, esta vez al ejecutar el programa:
Me dice:
Aunque el mensaje "Hola, Mundo." aparece correctamente.
Los cambios que yo he realizado al programa en las líneas 10 y 20 no alteran su funcionamiento:
Reservo 48 bytes pues es el tamaño de mi ejecutable una vez compilado.
si usamos:
El programa funciona perfectamente.
El error entonces debe estar en el propio código o en su defecto en el resultado compilado.
Zerover escribió:Este código se ejecuta con CALL desde SuperBASIC.Código: Seleccionar todo
10 hola = RESPR(40)
20 LBYTES flp2_holamundo_bin,hola
30 CALL hola
Me dice:
Código: Seleccionar todo
En línea 30 no finalizado
Aunque el mensaje "Hola, Mundo." aparece correctamente.
Los cambios que yo he realizado al programa en las líneas 10 y 20 no alteran su funcionamiento:
Código: Seleccionar todo
10 hola = RESPR(48)
20 LBYTES holamundo_bin,hola
30 CALL hola
Reservo 48 bytes pues es el tamaño de mi ejecutable una vez compilado.
si usamos:
Código: Seleccionar todo
EXEC holamundo_bin
El programa funciona perfectamente.
El error entonces debe estar en el propio código o en su defecto en el resultado compilado.
Sinclair QL, la respuesta profesional de los 80
- radastan
- Phantomas
- Mensajes: 2232
- Registrado: Lun May 07, 2007 5:34 pm
- Contactar:
Re: Assembler Development Kit de Metacomco
badaman escribió:El error entonces debe estar en el propio código o en su defecto en el resultado compilado.
El problema está en el propio código, hay que generar una respuesta a la llamada para que no de error en SuperBASIC al volver. Es decir, poner a cero el registro D0 con:
CLR.L D0
Hazlo justo antes del RST.
El registro D0 es usado por SuperBasic como registro de error, si no lo pones a cero antes de volver... error.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
-
- Sabreman
- Mensajes: 396
- Registrado: Dom Feb 24, 2008 10:56 pm
Re: Assembler Development Kit de Metacomco
Efectivamente ahora recuerdo, a mi no me falló porque desde el primer momento quité esos comentarios (el editor me metió basura al copiar y pegar).badaman escribió:De alguna forma el ensamblador interpreta estas palabras en el comentario (o son palabras reservadas) y produce un error.
OK, ahora ningún problema al invocar la versión "exec" desde SuperBasic. La primera versión de Zerover no da ese mensaje de error aunque no se ponga CLR,L D0 ... ¿por qué?radastan escribió:CLR.L D0
Hazlo justo antes del RST.
Una duda más. Desde el basic yo uso
Código: Seleccionar todo
10 LRESPR flp1_holamundo_bin
Con la versión original del programita SuperBasic que utiliza "LBYTES ... CALL ..." me da un error si tengo otros programas residentes (como PE, Qascade, ..). Tengo que eliminar todos esos jobs para que funcione esa versión (con LRESPR ningún problema).
En teoría, ¿no es equivalente usar "LRESPR" a "LBYTES ... CALL"? ¿Cual es la diferencia entonces?
-
- Jack The Nipper
- Mensajes: 112
- Registrado: Mar Abr 08, 2008 9:00 am
Re: Assembler Development Kit de Metacomco
badaman escribió:Bueno, pues otro error que me aparece, esta vez al ejecutar el programa:Zerover escribió:Este código se ejecuta con CALL desde SuperBASIC.Código: Seleccionar todo
10 hola = RESPR(40)
20 LBYTES flp2_holamundo_bin,hola
30 CALL hola
Me dice:Código: Seleccionar todo
En línea 30 no finalizado
Aunque el mensaje "Hola, Mundo." aparece correctamente.
Antes de volver a SuperBASIC hay que poner en D0 el código de error, en este caso devuelve como error el error que se hubiera producido al llamar al TRAP #1. Si se llama con EXEC se ejecuta con su propio número de tarea y si se llama con CALL desde SuperBASIC es la tarea 0. La función MT.FRJOB fuerza el borrado de una tarea excepto si es la tarea 0 (SuperBASIC), por eso da error al usar el programita con CALL. Para este caso debería haber puesto D0 a 0 explícitamente:
Código: Seleccionar todo
...
TRAP #1
MOVEQ.L #0,D0
RTS
afx escribió:La primera versión de Zerover no da ese mensaje de error aunque no se ponga CLR,L D0 ... ¿por qué?
En el primer ejemplo no he cambiado D0 para que apareciera un posible error producido al llamar a IO.SSTRG. De modo que si la llamada a IO.SSTRG ha ido bien devuelve un error de 0 y éste se transmite a la vuelta a SuperBASIC.
Quizás no he calculado bien el número de bytes y sean más de 40. Al añadir la llamada a MT.FRJOB en el segundo ejemplo seguro que son más de 40. No pasa nada si hacéis RESPR con una cantidad mayor de la necesaria.afx escribió:Una duda más. Desde el basic yo usoCódigo: Seleccionar todo
10 LRESPR flp1_holamundo_bin
Con la versión original del programita SuperBasic que utiliza "LBYTES ... CALL ..." me da un error si tengo otros programas residentes (como PE, Qascade, ..). Tengo que eliminar todos esos jobs para que funcione esa versión (con LRESPR ningún problema).
En teoría, ¿no es equivalente usar "LRESPR" a "LBYTES ... CALL"? ¿Cual es la diferencia entonces?
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Assembler Development Kit de Metacomco
Ahora va perfecto. No lo he probado con el PE, pero imagino que ya no dará problemas.
¿Qué diferencia hay entre usar CLR.L D0 o usar MOVEQ.L #0,D0?
Se puede saber el tamaño del archivo compilado con el comando del TK2 WSTAT:
lo que devuelve:
Asi pues, 48 es el tamaño en bytes que debemos poner en la línea 10 del programa SuperBASIC:
Añado:
Ya sabeis que las extensiones en QDOS no van como en MS-DOS y, salvo para algunos programas que las contemplan internamente, llamar a un ejecutable "programa" o bien "programa_exe" da lo mismo (a nivel de subdirectorios, con el uso de DDOWN, la cosa cambia). En este caso, puesto que el programa se ejecuta también con EXE podíamos haber llamado igualmente al binario "holamundo_exe" para que fuese más reconocible.
¿Qué diferencia hay entre usar CLR.L D0 o usar MOVEQ.L #0,D0?
Se puede saber el tamaño del archivo compilado con el comando del TK2 WSTAT:
Código: Seleccionar todo
WSTAT holamundo_bin
lo que devuelve:
Código: Seleccionar todo
holamundo_bin
48 2008 Nov 09 03:37:00
Asi pues, 48 es el tamaño en bytes que debemos poner en la línea 10 del programa SuperBASIC:
Código: Seleccionar todo
10 hola=RESPR(48)
Añado:
Ya sabeis que las extensiones en QDOS no van como en MS-DOS y, salvo para algunos programas que las contemplan internamente, llamar a un ejecutable "programa" o bien "programa_exe" da lo mismo (a nivel de subdirectorios, con el uso de DDOWN, la cosa cambia). En este caso, puesto que el programa se ejecuta también con EXE podíamos haber llamado igualmente al binario "holamundo_exe" para que fuese más reconocible.
Última edición por badaman el Dom Nov 09, 2008 4:59 pm, editado 2 veces en total.
Sinclair QL, la respuesta profesional de los 80
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 15 invitados