Fonts desde SuperBasic
Moderador: Sir Cilve Sinclair
-
- Sabreman
- Mensajes: 396
- Registrado: Dom Feb 24, 2008 10:56 pm
Fonts desde SuperBasic
Para "adornar" algo más los programas desarrollados con SuperBasic, sobre todo los juegos, quedaría bastante bien emplear tipos de letras distintos de los que aporta el sistema.
¿Alguien tiene ejemplos de código de cómo crear y usar fonts distintos de los estándar del QL desde SuperBasic?.
¿Alguien tiene ejemplos de código de cómo crear y usar fonts distintos de los estándar del QL desde SuperBasic?.
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Fonts desde SuperBasic
Puedes hacerlo de dos formas: Con TK2 y sin él.
Con el TK2 es muy fácil. te recuerdo la página con la información:
http://www.speccy.org/sinclairql/manuales/tk2/sec14.htm
Sin él, hay que hacer unos pokes para llamar a la rutina correspondiente del QDOS.
Tengo un código por aquí que, si bien funciona, no cuento con el código ensamblador y poco más puedo decirte de él.
Te lo pongo por si te sirve de alguna forma:
Aquí el fichero digital_chr.
Más fuentes en la web de Dilwyn:
http://www.dilwyn.uk6.net/fonts/index.html
Saludos
Con el TK2 es muy fácil. te recuerdo la página con la información:
http://www.speccy.org/sinclairql/manuales/tk2/sec14.htm
Sin él, hay que hacer unos pokes para llamar a la rutina correspondiente del QDOS.
Tengo un código por aquí que, si bien funciona, no cuento con el código ensamblador y poco más puedo decirte de él.
Te lo pongo por si te sirve de alguna forma:
Código: Seleccionar todo
100 ad=RESPR(10)
110 r=RESPR(2306)
120 POKE_W ad,8196
130 POKE_W ad+2,20035
140 POKE_W ad+4,28672
150 POKE_W ad+6,20085
160 LBYTES digital_chr,r
170 CALL ad,0,0,0,37,0,0,0,65537,r
Aquí el fichero digital_chr.
Más fuentes en la web de Dilwyn:
http://www.dilwyn.uk6.net/fonts/index.html
Saludos
Última edición por badaman el Jue Ene 15, 2009 12:08 pm, editado 1 vez en total.
Sinclair QL, la respuesta profesional de los 80
-
- Jack The Nipper
- Mensajes: 112
- Registrado: Mar Abr 08, 2008 9:00 am
Re: Fonts desde SuperBasic
Hola a todos. Por fin he vencido mi perrería y me he registrado.
Al grano.
El código máquina integrado en el programita SuperBASIC
y al hacer la llamada CALL se asignan los valores siguientes a los registros:
antes de ejecutarlo.
El valor 65537 indica que se cambia la fuente de caracteres del canal #1, si quieres cambiar la de otro canal tienes que cambiar este número.
La descripción del TRAP la puedes ver en http://www.speccy.org/sinclairql/man/sq ... tm#sdfount.
Saludos
Al grano.
El código máquina integrado en el programita SuperBASIC
es este:badaman escribió:Código: Seleccionar todo
100 ad=RESPR(10)
110 r=RESPR(2306)
120 POKE_W ad,8196
130 POKE_W ad+2,20035
140 POKE_W ad+4,28672
150 POKE_W ad+6,20085
160 LBYTES digital_chr,r
170 CALL ad,0,0,0,37,0,0,0,65537,r
Código: Seleccionar todo
2004 MOVE.L D4,D0
4E43 TRAP #3
7000 MOVEQ.L #0,D0
4E75 RTS
DS.W 1
y al hacer la llamada CALL se asignan los valores siguientes a los registros:
Código: Seleccionar todo
D1 = 0
D2 = 0
D3 = 0
D4 = $25
D5 = 0
D6 = 0
D7 = 0
A0 = $00010001
A1 = r
antes de ejecutarlo.
El valor 65537 indica que se cambia la fuente de caracteres del canal #1, si quieres cambiar la de otro canal tienes que cambiar este número.
La descripción del TRAP la puedes ver en http://www.speccy.org/sinclairql/man/sq ... tm#sdfount.
Saludos
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Fonts desde SuperBasic
Hola Zerover. Qué sorpresa verte por aquí. Bienvenido.
Así pues, pasas con el CALL a D4 el número de la llamada a la subrutina del QDOS (25), y mueves el contenido de D4 a D0 con el código máquina. Luego llamas al TRAP (3) correspondiente y devuelves el control.
Parece muy simple.
¿para qué es el MOVEQ.L #0,D0, para borrar el contenido de D0?
¿Que es DS.W 1?
¿Como se pondría el valor de un canal distinto en CALL 00020002 por ejemplo para el #2?
Gracias de antemano.
Zerover escribió:Código: Seleccionar todo
2004 MOVE.L D4,D0
4E43 TRAP #3
7000 MOVEQ.L #0,D0
4E75 RTS
DS.W 1
Así pues, pasas con el CALL a D4 el número de la llamada a la subrutina del QDOS (25), y mueves el contenido de D4 a D0 con el código máquina. Luego llamas al TRAP (3) correspondiente y devuelves el control.
Parece muy simple.
¿para qué es el MOVEQ.L #0,D0, para borrar el contenido de D0?
¿Que es DS.W 1?
¿Como se pondría el valor de un canal distinto en CALL 00020002 por ejemplo para el #2?
Gracias de antemano.
Última edición por badaman el Jue Abr 10, 2008 11:53 am, editado 1 vez en total.
Sinclair QL, la respuesta profesional de los 80
-
- Jack The Nipper
- Mensajes: 112
- Registrado: Mar Abr 08, 2008 9:00 am
Re: Fonts desde SuperBasic
badaman escribió:Hola Zerover. Qué sorpresa verte por aquí. Bienvenido.
Bien hallado.
badaman escribió:¿para qué es el MOVEQ.L #0,D0, para borrar el contenido de D0?
Cuando se llama a una subrutina en código máquina desde SuperBASIC, siempre se pone en D0 el código del posible error que se haya producido antes de volver con RTS. Si no hay error se pone 0. Los códigos de los errores son los que se pueden ver en http://www.speccy.org/sinclairql/man/sqlpa/apG.htm.
En este caso se supone que siempre se realiza la operación correctamente, y por eso se pone 0, aunque podríamos no poner esa instrucción y dejar en D0 el valor devuelto por el TRAP, así veríamos si ha habido algún problema al usarlo.
badaman escribió:¿Que es DS.W 1?
Significa "Reservar 1 hueco de tamaño PALABRA" (Data Storage size Word 1).
No sé por qué está ahí, pero en SuperBASIC has reservado 10 bytes y el código sólo ocupa 8, con lo que hay una palabra reservada ahí.
badaman escribió:¿Como se pondría el valor de un canal distinto en CALL 00020002 por ejemplo para el #2?
Ahora mismo no recuerdo ese detalle, pero es cuestión de experimentar. Si quitas la instrucción MOVEQ #0,D0 y llamas a la subrutina con un número válido comprobarás el efecto en la ventana correspondiente y si no es válido te saldrá un mensaje de error.
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Fonts desde SuperBasic
No sé por qué está ahí, pero en SuperBASIC has reservado 10 bytes y el código sólo ocupa 8, con lo que hay una palabra reservada ahí.
Pero eso no está implementado en los POKEs ¿no? Lo pregunto más que nada para no liar.
Se ve que al que hizo el código en SuperBASIC se le ocurrió reservar dicho espacio para algo. Vete a saber ahora.
Si quitas la instrucción MOVEQ #0,D0 y llamas a la subrutina con un número válido comprobarás el efecto en la ventana correspondiente y si no es válido te saldrá un mensaje de error.
Lo dicho, no parece nada complicado.
Gracias Zerover.
Sinclair QL, la respuesta profesional de los 80
-
- Jack The Nipper
- Mensajes: 112
- Registrado: Mar Abr 08, 2008 9:00 am
Re: Fonts desde SuperBasic
badaman escribió:Pero eso no está implementado en los POKEs ¿no?
Exacto, por eso he puesto DS y no DC. DS no es una instrucción en ensamblador, es una directiva.
-
- Sabreman
- Mensajes: 396
- Registrado: Dom Feb 24, 2008 10:56 pm
Re: Fonts desde SuperBasic
Esto es ¡¡fantástico!! , muchos estamos descubriendo un montón de cosas nuevas. Ahora es cosa de ponerse a probar.
-
- Sabreman
- Mensajes: 396
- Registrado: Dom Feb 24, 2008 10:56 pm
Re: Fonts desde SuperBasic
Zerover escribió:El valor 65537 indica que se cambia la fuente de caracteres del canal #1, si quieres cambiar la de otro canal tienes que cambiar este número.
¿Qué valor habría que poner para el canal #7 por ejemplo?, he estado probando y no doy con esos valores (con canal#1 todo va bien).
- badaman
- Sabreman
- Mensajes: 499
- Registrado: Mar Ene 29, 2008 10:58 am
- Contactar:
Re: Fonts desde SuperBasic
El patrón parece ser $00070007 si el canal elegido es el 7. para otros canales sustituir el 7 por el correspondiente valor
Sólo hay que convertirlo a decimal: (65536 x 7) + 7
Un ejemplo del resultado en el canal 2
Programa revisado:
Sólo hay que convertirlo a decimal: (65536 x 7) + 7
Un ejemplo del resultado en el canal 2
Programa revisado:
Código: Seleccionar todo
100 ch=7
110 ch=(65536*ch)+ch
120 ad=RESPR(8)
130 r=RESPR(2306)
140 POKE_W ad,8196
150 POKE_W ad+2,20035
160 POKE_W ad+4,28672
170 POKE_W ad+6,20085
180 LBYTES digital_chr,r
190 CALL ad,0,0,0,37,0,0,0,ch,r
Última edición por badaman el Vie Abr 11, 2008 10: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: Fonts desde SuperBasic
Si lo que queremos es devolver el tipo de fuente original al canal, sólo tenemos que pasar el valor 0 a A1:
CALL ad,0,0,0,37,0,0,0,ch,0
En la línea anterior hemos cambiado la dirección del juego de caracteres por el valor 0.
Saludos
CALL ad,0,0,0,37,0,0,0,ch,0
En la línea anterior hemos cambiado la dirección del juego de caracteres por el valor 0.
Saludos
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 19 invitados