ORIC - Help !!!

Avatar de Usuario
Chema
Mensajes: 2237
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1816 veces
Agradecimiento recibido: 586 veces
Contactar:

Re: ORIC - Help !!!

Mensajepor Chema » 13 May 2019 11:34

Último mensaje de la página anterior:

A ver... no entiendo bien qué quieres hacer. Si lo que quieres es modificar esas direcciones para que el PRINT lo haga donde tú quieres, no te va a funcionar porque el SO usa un puntero interno a la línea, más un desplazamiento para la columna, para realizar su trabajo siempre que puede. Es posible que algunas funciones usen ese puntero pre-calculado y no los valores de las variables.

Para cambiar el cursor desde basic se usa PRINT @, de forma que:

Código: Seleccionar todo

   5 CLS                               
   10 PRINT @10,10;"HOLA";             
   20 PRINT " A RETROWIKI"             

Pone el cursor de texto en la posición 10, 10 e imprime allí la cadena "HOLA A RETROWIKI".

La rutina en $CC59 en la ROM del Atmos implementa el posicionamiento del cursor de texto para la orden PRINT @ y, entre otras cosas, actualiza esas variables del sistema y los punteros internos en página cero para lo que te cuento arriba.

O sea, en resumen (que se me va la pinza), si quieres colocar el cursor en una posición determinada para el comando PRINT, hay que usar PRINT @. Como bien dices PLOT lleva siempre las coordenadas y es independiente de PRINT en este sentido.

Otra cosa es que en el Oric-1 no existe este comando PRINT @. Peeeero, en el manual viene una implementación de un comando equivalente. De todos modos tienes algo más de información en el libro de Geoff Phillips (que te recomiendo). en el capítulo 2.15 dice:

On version 1.1 machines the PRINT @ facility allows you to print at any place on the screen. This is also provided on 1.0 machines by way of an add-on machine code routine in the manual, but no explanation is given on how it works. If you wish to use the general PRINT subroutine in a machine code program, you will need to know a little about how PRINT works in this respect.
There are two locations which control where the next PRINT goes to: #268 – the number of lines down – and #269 – the number of lines across. These are relative to the start of the screen as defined by #26D (version 1.0) or #27A (version 1.1). On version 1.1 machines you also have to write the address of the start of the line to #12,3.
On version 1.0 follow this example of moving to D lines down and A characters across:
100 POKE #268,D – 1:PRINT:POKE #269,A
Here is the same line for version 1.1:
100 POKE#268,D:POKE#269,A:DOKE#12,DEEK(#27A)+(D – 1) *40
To avoid large numbers of solid blocks appearing everywhere, it is recommended that you turn off the cursor before moving around the screen.


Las he probado en el emulador y ambas funcionan en sus respectivas ROM. Eso sí, la segunda, con una multiplicación por 40, se me antoja lenta, así que cuidado con ella. La rutina de la ROM de PRINT@ usa una subrutina que hace la multiplicación rápida.

Te dejo el enlace a donde puedes descargar el libro que te comento. Es la penúltima entrada:
http://www.defence-force.org/computing/ ... /index.htm

dancresp
Mensajes: 5370
Registrado: 13 Nov 2010 02:08
Agradecido : 169 veces
Agradecimiento recibido: 296 veces

Re: ORIC - Help !!!

Mensajepor dancresp » 13 May 2019 12:00

Ostras, no sabía que existe el comando PRINT@ en el ORIC !!!

Bueno, no soy más la tabarra con el tema. Como me haría ilusión que funcione en los dos modelos, haré dos rutinas y usaré la que corresponda según el modelo.

Gracias !!! -drinks

Avatar de Usuario
Chema
Mensajes: 2237
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1816 veces
Agradecimiento recibido: 586 veces
Contactar:

Re: ORIC - Help !!!

Mensajepor Chema » 13 May 2019 12:08

Vaya, el post de minter y tu respuesta llegaron mientras editaba yo la mía :)
dancresp escribió:Lo que si que veo en el artículo es que pone que el CHARSET ocupa 1920 bytes, que son 240 caracteres, cuando yo creía que solo disponía de 128. Haciendo un PRINT de todos veo que se repiten. Ahora me queda probar si el juego está dos veces, o si la segunda parte (CHAR>127) es una copia de los primeros 128 caracteres.


Lo del juego de caracteres es una historia... a ver si me acuerdo bien. Hay dos juegos de caracteres, el normal (estándar) con las letras y símbolos de texto usuales, y el alternativo con caracteres semigráficos. Para usar el segundo tienes que estar en modo LORES 1. En ambos casos el espacio para los 32 primeros caracteres no se puede usar, porque esos códigos son utilizados como comandos para la ULA (los códigos de control o de escape). Los valores del 128 en adelante hasta el 255 son equivalentes a los 0-127, pero se pintarían en vídeo inverso.

Así que nos quedamos con 96 caracteres redefinibles en cada juego, total de 192 mezclando ambos, que es lo que tuve que hacer yo en Oricium (ir cambiando de LORES 0 -casi idéntico al TEXT- a LORES 1 en líneas alternas).

Todo muy cómodo, sencillo y optimizado.... En fin... :-?


Volver a “Oric”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado