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

Page 1/2
| 2

By AxelStone

Prophet (2641)

AxelStone's picture

12-01-2015, 20:25

Buenas chavales, sigo experimentando con el Turbo Basic y le ha tocado al scroll lateral en 2+. He encontrado una rutina que equivale al set scroll, que no la soporta turbo basic, y es más o menos esta: VDP(27)=(N+7)\8: VDP(28)=-N AND 7

El problema es que el scroll se genera con teering, si no me equivoco en ASM se lee un registro para esperar el dibujado de pantalla, ¿puede ser? ¿El equivalente en Turbo Basic?

Gracias.

Login or register to post comments

By AxelStone

Prophet (2641)

AxelStone's picture

12-01-2015, 20:32

Pongo la documentación de los registros del 2+:

reg b7 b6 b5 b4 b3 b2 b1 b0
25 - CMD VDS YAE YJK WTE MSK SP2
26 - - H08 H07 H06 H05 H04 H03
27 - - - - - H02 H01 H00

Para setear el bit de espera (b2) se supone que hay que poner WTE en el 25, H05 en el 26 y H02 en el 27. ¿Alguien me lo traduce en un comando turbo basic?

By Warchild

Paragon (1264)

Warchild's picture

12-01-2015, 21:12

Creo que tu problema puede ser que deberías ejecutar el scroll durante el tiempo del v-blank, ya que si no éste se realiza mientras se está dibujando la pantalla y por eso se produce ese efecto. Sería cuestión de que te miraras el tema de interrupciones para que tu rutina se ejecute durante el v-blank.

By Kai Magazine

Paragon (1242)

Kai Magazine's picture

12-01-2015, 21:55

axel, te han respondido en el foro ingles a esta pregunta, pero en ASM.
Si lo traduces a turbobasic o haces una rutina en ASM hazmelo saber Smile

By Guillian

Prophet (3203)

Guillian's picture

12-01-2015, 23:04

Podéis hacer un HALT justo antes de escribir en los registros. Si las interrupciones están deshabilitadas tendréis que poner un EI (#FB) antes.

10 SCREEN 5
20 SET PAGE 1,1
30 LINE(0,0)-(255,211),15
40 VDP(26)=VDP(26)OR2
50 FOR I=0 TO 255
60 '#I &H76
70 VDP(27)=I\8
80 VDP(28)=I AND 7 XOR 7
90 NEXT I

By AxelStone

Prophet (2641)

AxelStone's picture

13-01-2015, 08:51

Kai Magazine wrote:

axel, te han respondido en el foro ingles a esta pregunta, pero en ASM.
Si lo traduces a turbobasic o haces una rutina en ASM hazmelo saber Smile

Lo he visto, a ver si me aclaro cómo usarlo. Supongo que lo más sencillo es probar con ponerlo inline en turbo basic.

Guillian wrote:

Podéis hacer un HALT justo antes de escribir en los registros. Si las interrupciones están deshabilitadas tendréis que poner un EI (#FB) antes.

10 SCREEN 5
20 SET PAGE 1,1
30 LINE(0,0)-(255,211),15
40 VDP(26)=VDP(26)OR2
50 FOR I=0 TO 255
60 '#I &H76
70 VDP(27)=I\8
80 VDP(28)=I AND 7 XOR 7
90 NEXT I

Sigue generando teering, puede tener que ver con las interrupciones que mencionas?

By Guillian

Prophet (3203)

Guillian's picture

13-01-2015, 09:24

@AxelStone: ¿Lo estás ejecutando con un _RUN?

By AxelStone

Prophet (2641)

AxelStone's picture

13-01-2015, 09:55

Con _RUN es curioso, pero no hace nada. Igual es cosa del emulador, tengo un OpenMSX algo antiguo en este equipo, cuando vuelva a casa lo ejecuto con la última versión y te cuento. Gracias!

By Guillian

Prophet (3203)

Guillian's picture

13-01-2015, 11:01

Si ves todo de color blanco puede ser que la primera página de la VRAM esté en ese color y no se vea la línea. Prueba a ponerla en negro o a añadir al final de la línea 30 un ",,XOR"

By AxelStone

Prophet (2641)

AxelStone's picture

13-01-2015, 11:24

Que va, el caso es que con run se ve la linea, pero con call run no se ve, ponga el color de fondo que ponga o añadiendo el XOR.

By AxelStone

Prophet (2641)

AxelStone's picture

13-01-2015, 19:00

Vale aquí pongo un código que funciona mucho mejor, con lo que comenta Guillian y una cosilla que me han comentado:

10 SCREEN 5
20 COLOR ,,0
30 VDP(9)=VDP(9)OR&H20
40 BLOAD"fondo.PL5",S
50 COLOR=RESTORE
60 BLOAD"fondo.SC5",S
70 CALL TURBO ON
80 DEFINT A-Z
90 FOR N%=1 TO 400
100 '#I 243
110 VDP(27)=N%\8
120 VDP(28)=N% AND 7 XOR 7
130 '#I 251
140 '#I 118
150 NEXT N%
160 CALL TURBO OFF
170 A$=INPUT$(1)


La sincronía es bastante mejor. Básicamente a cada ciclo se desactivan / activan interrupciones y se hace un halt de la CPU, para esperar el vblank. Me siguen mosqueando 2 cosas:
1.- No enmascara el margen izquierdo, cosa que tampoco me molesta mucho
2.- En la franja superior, los primeros 4 pixeles diría yo, se produce una pizca de teering.

Pero vamos, bastante mejor que lo que teniamos ayer desde luego.

Page 1/2
| 2
My MSX profile