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

صفحة 1/2
| 2

بواسطة AxelStone

Prophet (3199)

صورة AxelStone

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 أوregister لوضع تعليقاتك

بواسطة AxelStone

Prophet (3199)

صورة AxelStone

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?

بواسطة Warchild

Paragon (1298)

صورة Warchild

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.

بواسطة Kai Magazine

Paragon (1428)

صورة Kai Magazine

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

بواسطة Guillian

Prophet (3529)

صورة Guillian

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

بواسطة AxelStone

Prophet (3199)

صورة AxelStone

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?

بواسطة Guillian

Prophet (3529)

صورة Guillian

13-01-2015, 09:24

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

بواسطة AxelStone

Prophet (3199)

صورة AxelStone

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!

بواسطة Guillian

Prophet (3529)

صورة Guillian

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"

بواسطة AxelStone

Prophet (3199)

صورة AxelStone

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.

بواسطة AxelStone

Prophet (3199)

صورة AxelStone

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.

صفحة 1/2
| 2