¿Cómo se evita el teering en los scrolles de Turbo Basic?

Página 2/2
1 |

Por Guillian

Prophet (3434)

Imagen del Guillian

14-01-2015, 11:04

No creo que sea necesario deshabilitar las interrupciones para hacer el scroll si justo antes has hecho un halt. También creo que lo correcto es hacer el halt antes de mover el scroll y no después.

AxelStone wrote:

1.- No enmascara el margen izquierdo, cosa que tampoco me molesta mucho

Lo puedes enmascarar poniendo la línea 40 del ejemplo que puse:

40 VDP(26)=VDP(26)OR2
AxelStone wrote:

2.- En la franja superior, los primeros 4 pixeles diría yo, se produce una pizca de teering.

Eso puede ser porque la rutina de interrupción de la BIOS es un poco pesada y luego mientras escribe en los registros del VPD le pilla el retrazo.

Prueba a cambiar el bucle por este:

FOR I=0 TO 255
'#I &h76,&h3a,I,&h4f,&hf,&hf,&hf,&he6,&h1f,&hd3,&h99,&h3e,&h9a,&hd3,&h99
'#I &h79,&h2f,&he6,&h07,&hd3,&h99,&h3e,&h9b,&hd3,&h99
NEXT I

Así escribe directamente en los registros desde código máquina y va más rápido.

Por AxelStone

Prophet (2956)

Imagen del AxelStone

14-01-2015, 18:16

Lo creas o no ese código es fruto de varias pruebas. Con y sin interrupciones el resultado era el mismo, supongo que es porque la CPU va muy libre ahora mismo. Con el nuevo código que me pasas parece que ya se resuelve lo de los 4 caracteres de arriba. El VDP(26) he tenido que quitarlo porque me sale la pantalla negra como dije en Turbo Basic, en cambio en Basic se ejecuta bien. ¡cualquiera lo entiende!

Gracias por la ayuda :-).

Por pepitor128

Master (155)

Imagen del pepitor128

23-01-2015, 11:57

He encontrado esto por el foro en inglés, no se si servirá:
10 ' This example program shows how to use line interrupts
20 ' Made By : NYYRIKKI 2008
30 '
40 DEFINT A-Z
50 ' This program requires X-BASIC
60 _TURBO ON
70 GOTO 90 ' Little jump to avoid RENUM problem
80 GOTO 410 ' This line will be copied to interrupt hook
90 VDP(9)=10 ' In this example we don't need sprites, so we disable them.
100 ' Let's draw something to screen to see the line interrupt effect
110 SCREEN 8:FORY=0TO255:FORX=0TO255:VPOKEX+Y*256,XXORY:NEXTX,Y
120 '
130 ' Let's disable interrups until we are ready (DI)
140 '#I 243
150 ' We will use general interrupt hook in address &hFD9A (-614)
160 ' This address is called every time when interrupt occurs.
170 ' To use it, we have to copy line 80 to the hook.
180 ' First we need to know in what memory address line 80 is:
190 ' AD = LINE 80 (NOTE: RENUM does not work in this case!!!)
200 '#I 33,@80,34,AD
210 ' ... and then just copy...
220 FOR I=0 TO 4TongueOKE -614+I,PEEK(AD+I):NEXT I
230 ' We want to have line interrupts, so let's enable them.
240 VDP(0)=VDP(0) OR 16
250 ' Let's set the interrupt to happen on line 100
260 VDP(20)=100
270 ' Now we are ready and we can enable interrupts (EI)
280 '#I 251
290 ' Do what ever you want to do here in main program
300 ' In this example we make some noise...
310 SOUND 8,15
320 SOUND 1,RND(1)*8:SOUND 0,RND(1)*255
330 IF INKEY$="" THEN 320
340 ' Before we can exit the program we have to disable line interrupts
350 VDP(0)=VDP(0) AND 239
360 ' ... and release the interrupt hook (put RETurn to it)
370 POKE -614,201
380 ' Now it is safe to exit
390 BEEP:END
400 '
410 ' This is interrupt routine
420 ' Here we make sure, that the example interrupt handler does not end up
430 ' to infinite loop in case of nested interrupts
440 IF IN=0 THEN IN=1:GOSUB 470:IN=0:T=0 ELSE T=T+1:IF T=100 THEN T=0:IN=0
450 RETURN
460 '
470 ' Example interrupt handler:
480 IF (VDP(-1)AND1)=1 THEN 530 ' Is this line interrupt?
490 ' This was not line interrupt, so it's propably VBLANK
500 ' VBLANK happens when screen has been drawn.
510 VDP(24)=0 ' Upper part of screen shows still picture
520 RETURN
530 ' Here we handle line interrupt
540 ' Lower part of screen jumps
550 VDP(24)=PTongue=ABS(SIN(R/20)*100):R=R+1
560 RETURN

Por AxelStone

Prophet (2956)

Imagen del AxelStone

23-01-2015, 12:40

Por lo que veo se orienta a la primera solución que puse, la que habilita / deshabilita interrupciones, pero como dice Guillian con su solución usando solamente el halt el resultado que he obtenido ha sido el mismo. He probado el ejemplo que pones y efectivamente funciona bastante bien.

¡Gracias por el aporte! Smile

Por pepitor128

Master (155)

Imagen del pepitor128

23-01-2015, 12:52

Qué pena que no entienda ni papa de programación ya que tú (Axel) y Kai me habéis hecho que me entre el gusanillo y lo único que he conseguido por ahora es rippear unos gráficos y ponerlos en pantalla animados con un parpadeo cutre (no me entra en la cabeza lo del doble buffer).
Lástima que no haya salido como mi hermano que sí que es un máquina en programación asm msx (bueno en todos los lenguajes de programación que le pongan por delante). Se está currando alguna "cosilla" para msx2 (lo malo el tiempo).
Soy la oveja negra.

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

23-01-2015, 13:12

Animo que estamos todos igual. Aprendiendo.

Por AxelStone

Prophet (2956)

Imagen del AxelStone

23-01-2015, 13:38

pepitor128 wrote:

Qué pena que no entienda ni papa de programación ya que tú (Axel) y Kai me habéis hecho que me entre el gusanillo y lo único que he conseguido por ahora es rippear unos gráficos y ponerlos en pantalla animados con un parpadeo cutre (no me entra en la cabeza lo del doble buffer).
Lástima que no haya salido como mi hermano que sí que es un máquina en programación asm msx (bueno en todos los lenguajes de programación que le pongan por delante). Se está currando alguna "cosilla" para msx2 (lo malo el tiempo).
Soy la oveja negra.

Algunos teneís la manía de infravaloraros, a Endemo le pasa lo mismo. Creo que es más importante poner ganas en lo que haces que ser un crack, ya que al final lo que cuenta es terminar las cosas. Un juego es mucho más que picarte un código maravilloso, ¿tu sabes el currazo de diseño, gráficos y música que hay detrás? Una labor como coger un editor de fases y ponerte a diseñarlas una a una para pasárselas al programador ya es quitarle muuuuucho trabajo.

Qué se yo, si realmente tienes ganas explora qué se te da bien y ofrécete a colaborar en proyectos, si te sirve de indicativo yo estoy próximo a pedir colaboradores justo por eso, son muchos palos que tocar y falta tiempo.

Por curiosidad, quién es tu hermano? Smile

Por Warchild

Paragon (1280)

Imagen del Warchild

23-01-2015, 14:01

Pepitor128, tó es ponerse! Verás como poco a poco vas avanzando. Yo tampoco tengo dotes y lo normal es que saque las cosas con el método ensayo-error. Hasta que tras el mildoscientosypicoavo ensayo, voy y acierto Tongue

Además el método ensayo-acierto tiene que ser aburridísimo Tongue

Por esa rutina de Nyyrikki sabía que puedes usar interrupciones con Turbo-Basic. El poder usar ensamblador permite estas cosas.

Por pepitor128

Master (155)

Imagen del pepitor128

23-01-2015, 22:38

Me gustaría ayudar porque tengo tiempo...pero es que soy un "negao" en programación y en gráficos (...musica, diseño. Vamos un desastre total ;-D)
Mi hermano es samsaga2.

Página 2/2
1 |