Lenguaje ensamblador para QL

Subforo oficial del Sinclair QL: realiza aquí las consultas relativas a tu QL.

Moderador: Sir Cilve Sinclair

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Lenguaje ensamblador para QL

Mensaje por radastan » Dom Mar 30, 2008 11:07 am

Bien, he encontrado una web sencillita donde explica el lenguaje ensamblador del procesador 68000 (usando en el QL):

http://www.geocities.com/SiliconValley/Way/7211/

Aunque dicha web regala un ensamblador sencillo que podemos usar en PC y luego pasar los binarios al QL, estaría interesado en saber que ensamblador hay para QL.

Por cierto, de paso expongo como usar ensamblador con el QL, lo he sacado de aquí:

http://www.speccy.org/sinclairql/man/sqlpa/cap4.htm#42

RESERVA DE MEMORIA PARA EL PROGRAMA ENSAMBLADOR
__________________________________________________

rutina=RESPR(longitud)

Sirve para definir el procedimiento "rutina" que apunta a un programa ensamblador que ocupa "longitud" octetos como máximo. La memoria es asignada por el sistema operativo y es residente (no para la ejecución del QDOS o del SuperBASIC).

LLAMADA AL PROGRAMA ENSAMBLADOR
__________________________________

Se realiza con:

CALL dirección,D1,D2,D3,D4,D5,D6,D7,A0,A1,A2,A3,A4,A5

dirección es la posición de memoria donde tenemos la rutina (o el nombre del procedimiento que ya apunta a dicha rutina).
D1 a D7 se corresponden con los registros de la CPU, y sirven para pasar datos a la rutina (32 bits)
Se pueden emplear también los registros de dirección A0 a A5.

No se emplea D0 porque se usa como registro de error.

LECTURA DEL PROGRAMA ENSAMBLADOR DESDE UN ARCHIVO
___________________________________________________

Usamos la instrucción:

LBYTES mdv1_programa,memoria

carga el fichero "programa" desde el microdrive 1 a partir de la posición de memoria asignada por "memoria"

COMO GRABAR UN FICHERO EXE PARA USAR CON EL COMANDO EXEC
__________________________________________________________

SEXEC mdv1_prog,principio,longitud,espacio de datos

donde 'prog' es el nombre del fichero almacenado en el microdrive 1, 'principio' es la dirección desde donde se salva el programa (y donde será cargado después), 'longitud' es la longitud total del área y 'espacio de datos' es la cantidad de memoria requerida por el programa salvado.

EJECUTAR UN PROGRAMA ENSAMBLADOR CON EL COMANDO EXEC
_______________________________________________________

EXEC carga y ejecuta un programa. Al programa se le asigna una parte de tiempo del procesador, pero el BASIC permanece operacional. Esto es debido a una de las principales características del QDOS - el hecho de soportar multitarea. Esencialmente, es una rutina dentro del sistema operativo, llamada planificador. Se invoca normalmente 50 veces cada segundo por medio de interrupciones. Cuando toma control, mira todos los jobs que hay en la máquina y decide cual de ellos debe ejecutarse (de acuerdo con la prioridad). El Job seleccionado se ejecutará durante el siguiente cincuentavo de segundo.

Por ejemplo:

EXEC MDV1_prog1

cargará el programa 'prog1' y comenzará a ejecutarlo, compartiendo su tiempo con el BASIC y los otros trabajos en el QL.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

afx
Sabreman
Mensajes: 396
Registrado: Dom Feb 24, 2008 10:56 pm

Re: Lenguaje ensamblador para QL

Mensaje por afx » Lun Mar 31, 2008 2:23 am

Nunca me he atrevido con el ensamblador en el Ql, supongo que será cosa de estudiarlo con cariño.

Para los novatos en este tema, como yo, se agradecería "enormente" la publicación de un simple programa "Hola mundo" con la típica "guía para burros" de cómo compilar, cómo enlazar, qué ensamblador usar, utilidades recomendadas etc etc ... Al menos para poder arrancar sin "estallarse" uno mucho.

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por radastan » Sab Abr 05, 2008 10:55 pm

Bueno, bueno, bueno, ya he leído de pasada el libro de "Assembly Languaje Programming", me lo he pillado original y nuevecito, lo cual me ha resuelto muchas dudas:

- Bada, te equivocaste, el QL SI PUEDE entrar en modo supervisor y tomar el control total de los recursos... lo jodio es que no se como afecta eso al coprocesador, ya que habría que comunicarse con él a pelo al no poder usar las llamadas dle sistema para leer el teclado y esas cosas. De todas formas es interesante para los que quieran hacer una demo usando el 100% de la máquina.

- Que facilito es manejar la pantalla en el QL, ya mismo os paso una rutinilla de sprites super simplona.

- Lo sencillo que es hacer rutinas reubicables en el 68000 (68008 en nuestro caso), no tiene nada que ver con el Z80 en este aspecto.

Y así un largo etcétera, ya iré desentrañando más cosas, pero por lo menos ya veo factible hacer algunos de mis juegos en proyecto también para QL.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por badaman » Dom Abr 06, 2008 12:30 am

radastan escribió:el QL SI PUEDE entrar en modo supervisor y tomar el control total de los recursos


Siempre se aprende algo. Esto que dices lo desconocía. ¿Cómo se realiza exactamente eso? ¿Que ventajas aporta al programador de juegos, de demos ,etc... más allá de las facilidades del sistema que no puedan ser ejecutadas en modo usuario?

radastan escribió:Que facilito es manejar la pantalla en el QL, ya mismo os paso una rutinilla de sprites super simplona.


Sí, no dejes que se enfríe.

radastan escribió:Lo sencillo que es hacer rutinas reubicables en el 68000 (68008 en nuestro caso), no tiene nada que ver con el Z80 en este aspecto. Y así un largo etcétera, ya iré desentrañando más cosas, pero por lo menos ya veo factible hacer algunos de mis juegos en proyecto también para QL.


Me encanta ver que te animas con el QL. Como ya estás empezando a descubrir, es una máquina que te va a dar muchas sorpresas positivas y con ella vas a ir descubriendo una verdadera alternativa a los ordenadores profesionales de la época.
Sinclair QL, la respuesta profesional de los 80

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por radastan » Dom Abr 06, 2008 1:23 am

badaman escribió:
radastan escribió:el QL SI PUEDE entrar en modo supervisor y tomar el control total de los recursos


Siempre se aprende algo. Esto que dices lo desconocía. ¿Cómo se realiza exactamente eso? ¿Que ventajas aporta al programador de juegos, de demos ,etc... más allá de las facilidades del sistema que no puedan ser ejecutadas en modo usuario?


El modo supervisor permite:

- Acceder a todo el registro de estado
- Acceso a todo el mapa de memoria
. Cambiar la prioridad de las interrupciones

Se realiza con un TRAP #0, pero implica una serie de cosas que en su mayoría están relacionadas con el stack (sólo tenemos 64 bytes de margen en el stack entrando en este modo). Otra cosa interesante es que podemos volver al modo usuario con ANDI#$DFFF,SR

Para los foraneos del tema decir que un TRAP es como una interrupción por software.

Entrar en modo supervisor nos brinda muchas cosas, especialmente velocidad (no hay sistema operativo corriendo por debajo) e incluso saltarnos el sistema operativo y ejecutar otro sin necesidad de cambiar la ROM.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Lenguaje ensamblador para QL

Mensaje por na_th_an » Mié Abr 09, 2008 1:45 pm

Para hacer juegos sería lo ideal: saltarse QDOS y tener TOTAL acceso a los recursos de la máquina.

Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por badaman » Mié Abr 09, 2008 6:07 pm

Entiendo en cierto modo la fascinación que despierta escudriñar el interior de un nuevo ordenador que no conocíamos y compararlo con lo que hemos visto hasta ahora, para hacer nuestro particular examen clínico, en el fútil intento de establecer una especie de ranking de probabilidades o de escalafón de potencialidades.

Lamentablemente esto es algo que no comparto, pues ni es factible hacer juicios de lo que no se conoce ni es posible establecer equivalencias entre sistemas heterogéneos. La historia retro con otros sistemas nos ha demostrado que esto no es buena idea.

Que un Amiga mola más en cuanto a juegos que un QL es algo que nadie pone en duda. Que la avalancha de títulos en el mercado para Spectrum no tiene parangón en el mundo del QL es tan obvio como el sentido de este post:

Para realizar buenos juegos está más que demostrado que lo único necesario es tener imaginación y ganas.

Está claro que el QL no cuenta con DirectX. Ni siquiera tiene a Paula y Denise como co-stars en su circuitería. Que le vamos a hacer. El QL es lo que es. Y no es poca cosa.

Si la escusa para no hacer software para el QL es que no podemos acceder al modo Supervisor, pues apaga y vámonos.

No empezemos la casa por el tejado. Promocionemos la programación en SuperBASIC o en C/M. El acceso a las rutinas del S.O. que no son pocas ni nada despreciables, y luego veremos si podemos enchufarle al QL un par de toberas retropropulsoras en el retruécano pirolítico de la caja de cambios.
Sinclair QL, la respuesta profesional de los 80

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por radastan » Mié Abr 09, 2008 7:03 pm

Bada, a los programadores nos gusta saber hasta donde podemos llegar, otra cosa es que usemos todos los recursos.

Un ejemplo: imagina que hago una rutina de sprites con buffer de pantalla y resulta que las llamadas del sistema me joden el volcado y obtengo parpadeo en muchas ocasiones... lo mismo pasando la rutina de volcado a modo supervisor soluciono la papeleta, oye, y luego vuelvo al modo usuario en el resto del juego.

No se trata de ver los límites, de comparar, se trata de saber las capacidades de la máquina ante la que te enfrentas y así programar algo dentro de sus límites.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por badaman » Mié Abr 09, 2008 7:47 pm

El caso es que empecé mi post diciendo "Entiendo en cierto modo la fascinación que despierta..."

Sinceramente Radastán. Dejando a un lado tus rutinas para Sprites, las cuales, por otro lado, por sus características reducidas, como tú mismo has anunciado, no van a hacer excesivos acopios de recursos, y tampoco emplearán llamadas al S.O... ¿En cuantos juegos de los que se presentan a tu concurso de programación se llegan a implementar rutinas que deshabilitan el sistema operativo y se lanzan a monopolizar la CPU? ¿casi todos, algunos, pocos, raramente?

Si por aquello de echarle imaginación llega a suceder lo que dices de necesitar solventar problemas graves, y debes tirar por el lado salvaje de la programación de sistemas... ¿es el modo supervisor la única opción? En fin, yo veo esta opción algo muy extremo y puntual.

Pero lo que quiero decir con todo esto no es que esté mal tener curiosidad, sino ver a donde nos lleva esa curiosidad. Si la idea es que la gente se anime a programar con el QL no creo que datos como ese tengan mucha relevancia. Mas bien aportan información confusa que requiere de un nivel de comprensión de la máquina que no es accesible a todo el mundo, ni siquiera a mi, para no ir mas lejos, y por otro lado lleva a conclusiones como la de na_th_an acerca de los requisitos para hacer juegos en el QL.
Sinclair QL, la respuesta profesional de los 80

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por radastan » Mié Abr 09, 2008 8:01 pm

badaman escribió:¿En cuantos juegos de los que se presentan a tu concurso de programación se llegan a implementar rutinas que deshabilitan el sistema operativo y se lanzan a monopolizar la CPU? ¿casi todos, algunos, pocos, raramente?


Es que mis concursos son de BASIC... y en un ZX Spectrum siempre tienes el 100% de la CPU disponible desde código máquina, es que son dos máquinas distintas.

Te hago otra pregunta: ¿cuántos juegos de MS-DOS se saltaban el sistema operativo y no permitían volver a él? ese es el simil para que lo comprendas.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por badaman » Mié Abr 09, 2008 8:14 pm

Es que mis concursos son de BASIC


A eso voy yo. Eso es lo que tenemos que potenciar ahora. Tiempo habrá para entrar en detalles técnicos más golosos.

e hago otra pregunta: ¿cuántos juegos de MS-DOS se saltaban el sistema operativo y no permitían volver a él? ese es el simil para que lo comprendas.


Veo que con las metáforas y los ejemplos nos perdemos.

Siendo como bien dices el QL distinto del Spectrum, ¿no lo es igualmente (distinto) del PC? Entonces no es posible la comparación a ese nivel. Y yo no lo hacia, es decir, yo no comparaba maquinas, comparaba necesidades de programación.

Es mucho mas simple que todo eso. La pregunta es:

¿Qué se necesita para hacer un juego?

Mi respuesta es imaginación y ganas.

Y para eso vale y sobra con el SuperBASIC y la tabla de caracteres para empezar.
Sinclair QL, la respuesta profesional de los 80

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por radastan » Mié Abr 09, 2008 9:42 pm

badaman escribió:Es mucho mas simple que todo eso. La pregunta es:

¿Qué se necesita para hacer un juego?

Mi respuesta es imaginación y ganas.

Y para eso vale y sobra con el SuperBASIC y la tabla de caracteres para empezar.


Es que, aunque te resulte chocante, habría más juegos en QL si simplemente cierta librería en C para cierto toolkit soportara QL... es que no todos programan en BASIC.

Es más, cuando te pase la rutina de sprites... no estará escrita en BASIC, aunque esté pensada para ser usada desde él.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Lenguaje ensamblador para QL

Mensaje por na_th_an » Mié Abr 09, 2008 9:53 pm

badaman escribió:El caso es que empecé mi post diciendo "Entiendo en cierto modo la fascinación que despierta..."

Sinceramente Radastán. Dejando a un lado tus rutinas para Sprites, las cuales, por otro lado, por sus características reducidas, como tú mismo has anunciado, no van a hacer excesivos acopios de recursos, y tampoco emplearán llamadas al S.O... ¿En cuantos juegos de los que se presentan a tu concurso de programación se llegan a implementar rutinas que deshabilitan el sistema operativo y se lanzan a monopolizar la CPU? ¿casi todos, algunos, pocos, raramente?

Si por aquello de echarle imaginación llega a suceder lo que dices de necesitar solventar problemas graves, y debes tirar por el lado salvaje de la programación de sistemas... ¿es el modo supervisor la única opción? En fin, yo veo esta opción algo muy extremo y puntual.

Pero lo que quiero decir con todo esto no es que esté mal tener curiosidad, sino ver a donde nos lleva esa curiosidad. Si la idea es que la gente se anime a programar con el QL no creo que datos como ese tengan mucha relevancia. Mas bien aportan información confusa que requiere de un nivel de comprensión de la máquina que no es accesible a todo el mundo, ni siquiera a mi, para no ir mas lejos, y por otro lado lleva a conclusiones como la de na_th_an acerca de los requisitos para hacer juegos en el QL.


Es una conclusión lógica, ni más ni menos :D Si tienes todo el procesador para tí solo, tendrás mucha más potencia disponible. Cuando los PCs iban a pedales también se hacían, mira si no todos los juegos españoles que se ejecutaban arrancando desde el diskette, pasándose por el fideo el MSDOS. Había pocos recursos, la cosa era no malgastar lo que no te podías permitir malgastar. Y eso que MSDOS es monolítico y monotarea, lo que significa que casi ni ocupa recursos.

QDOS es un sistema operativo genial, pero también es (lógicamente) más demandante de recursos. Si yo por ejemplo voy a hacer una aplicación de procesador de textos, me encanta la multitarea porque es ideal trabajar con programas relacionados al tiempo sin tener que guardar, cerrar el programa y abrir el otro (como ocurría cuando trabajábamos en MSDOS con el Word Perfect y queríamos meter un dibujete, por ejemplo), o simplemente mostrar un reloj.

Pero si lo que quiero es hacer un juego, cuando alguien juega no hace nada más mientras, ni lo suele necesitar. Entonces, veo totalmente lícito obviar el tiempo de procesador y la memoria que se lleva QDOS, porque es algo que estamos malgastando mientras jugamos.

Te pongo un ejemplo muy claro de algo similar: La consola XBox (la original). No es más que un Pentium III (un Celeron, y ni eso: está BASTANTE capado si lo comparamos con un Pentium III puro y duro) con una tarjeta gráfica equiparable a una GeForce 3 Ti y 64 Megas de RAM. Sin embargo, un juego de XBox para que se vea igual en un PC necesita un equipo mucho más potente. Dudo que un PC Pentium III con 64 Mb y una GeForce 3 Ti pueda mover un juego como Ninja Gaiden Black. ¿La razón? Sencilla: en tu PC estás ejecutando un sistema operativo multi tarea como puede ser Windows XP. En la XBox se emplea un core de Windows 2000 optimizado para funcionar en MONOTAREA. Estás jugando: sólo necesitas un proceso.

No creo que sea negativo hablar de estas cosas. Y yo no he dicho que sea un requisito contar con el 100% de los recursos para tí. He dicho que es "lo ideal" :)

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Lenguaje ensamblador para QL

Mensaje por na_th_an » Mié Abr 09, 2008 9:56 pm

badaman escribió:¿Qué se necesita para hacer un juego?

Mi respuesta es imaginación y ganas.

Y para eso vale y sobra con el SuperBASIC y la tabla de caracteres para empezar.


Estoy de acuerdo, pero quedan más bonitos con gráficos multicolor y un sonido decente.

Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

Re: Lenguaje ensamblador para QL

Mensaje por badaman » Mié Abr 09, 2008 10:31 pm

na_th_an escribió:Estoy de acuerdo, pero quedan más bonitos con gráficos multicolor y un sonido decente.


Cosas que pueden conseguirse fácilmente con los propios comandos del SuperBASIC.


na_th_an escribió:Es una conclusión lógica, ni más ni menos :D Si tienes todo el procesador para tí solo, tendrás mucha más potencia disponible.


jugabilidad != potencia

na_th_an escribió:QDOS es un sistema operativo genial, pero también es (lógicamente) más demandante de recursos. Si yo por ejemplo voy a hacer una aplicación de procesador de textos, me encanta la multitarea porque es ideal trabajar con programas relacionados al tiempo sin tener que guardar, cerrar el programa y abrir el otro (como ocurría cuando trabajábamos en MSDOS con el Word Perfect y queríamos meter un dibujete, por ejemplo), o simplemente mostrar un reloj.

Pero si lo que quiero es hacer un juego, cuando alguien juega no hace nada más mientras, ni lo suele necesitar. Entonces, veo totalmente lícito obviar el tiempo de procesador y la memoria que se lleva QDOS, porque es algo que estamos malgastando mientras jugamos.


Piensa que el juego puede no ser la única tarea que esté funcionando en el ordenador, y que es posible que detrás estés ejecutando otras aplicaciones.

na_th_an escribió:Te pongo un ejemplo muy claro de algo similar: La consola XBox (la original). No es más que un Pentium III (un Celeron, y ni eso: está BASTANTE capado si lo comparamos con un Pentium III puro y duro) con una tarjeta gráfica equiparable a una GeForce 3 Ti y 64 Megas de RAM. Sin embargo, un juego de XBox para que se vea igual en un PC necesita un equipo mucho más potente. Dudo que un PC Pentium III con 64 Mb y una GeForce 3 Ti pueda mover un juego como Ninja Gaiden Black. ¿La razón? Sencilla: en tu PC estás ejecutando un sistema operativo multi tarea como puede ser Windows XP. En la XBox se emplea un core de Windows 2000 optimizado para funcionar en MONOTAREA. Estás jugando: sólo necesitas un proceso.


No se si hemos perdido la perspectiva o que, pero vamos, digo yo que si algo se puede hacer en un Spectrum o un MSX y corre a buena velocidad en un QL también lo hará ¿no? aún con un S.O. detrás y en multitarea, pues tiene una CPU más potente.

Si queremos más atención del planificador de tareas sólo tenemos que incrementar la prioridad de nuestro juego y listos.

na_th_an escribió:No creo que sea negativo hablar de estas cosas. Y yo no he dicho que sea un requisito contar con el 100% de los recursos para tí. He dicho que es "lo ideal" :)


Desde luego que no es malo hacerlo. A ver, que yo me pongo muy serio cuando expreso mis ideas pero no se entienda eso como enfado ni molestia.

Pero si te llevo la contraria tampoco te molestes. Y es que "lo ideal" no es eso. Lo ideal es que, integrandose con el S.O. funcione bien, y sobre todo, que sea un juego entretenido.
Sinclair QL, la respuesta profesional de los 80

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados