Y el equipo con el BASIC más rápido es...
Publicado: 03 Nov 2012, 16:03
Llevo un tiempo intentando exprimir al máximo las posibilidades del BASIC de distintos sistemas de 8 y 16 bits.
Con la experiencia que me da el haber programado el mismo programa en varios equipos me surgió la idea de hacer varias pruebas para comprobar que equipo tiene el BASIC más rápido.
Así, en una primera fase he decidido ejecutar un par de sencillos programas en multitud de sistemas, cronómetro en mano, para obtener la respuesta a mi pregunta.
El test se compone de estos dos programas de 5 líneas cada uno:
1) Poner texto en pantalla
Un doble bucle que situa una "X" en una posición determinada de la pantalla. En total se repito 32x16=512 veces. He tenido en cuenta que el AT del SPECTRUM, es el LOCATE del MSX, el PLOT del ORIC, etc., que en unos pones X,Y y en otros Y,X. Y que en unos la primera posición es la 0 y en otros la 1. Los valores los he adaptado a la resolución del DRAGON y el LASER 200.
10 FOR F=1 TO 16
20 FOR I=1 TO 32
30 PRINT AT F,I;"X"
40 NEXT I
50 NEXT F
2) Calcular e imprimir el resultado en pantalla
Se realiza, sobre el valor de una variable, un cálculo consistente en una multiplicación, una división y una resta. Esto se repite 99 veces y se va mostrando el resultado en pantalla.
10 A=1
20 B=A*2/3-4
30 PRINT B
40 A=A+1
50 IF A<100 THEN GOTO 20
Cada prueba se ha realizado con la pantalla inicialmente en blanco y se ha repetido entre 3 y 5 veces para sacar una media del tiempo empleado, ya que como no soy un robot, mi cuerpo necesita unos ciclos para activar los músculos que pulsarán los botones START y STOP del cronómetro.
Os muestro los resultados en "segundos:decimas", ordenados de más a menos rápido.
Resultados PROGRAMA-1: (Poner un carácter en pantalla)
01:23 = ATARI ST (usando GFA BASIC)
02:03 = BBC MICRO
02:80 = SHARP MZ-700
03:54 = ACORN ELECTRON
04:14 = ORIC-1
04:47 = MSX (03:54 usando variables integer)
04:56 = COMMODORE 16
04:91 = ATARI 800
05:20 = AMSTRAD CPC-464+
05:38 = DRAGON 32 (Incluye F*32+I, sino 02:04)
05:46 = THOMSON TO8
05:52 = COMMODORE 128
05:54 = SPECTRUM
06:03 = SINCLAIR QL
06:77 = MATTEL AQUARIUS (Reemplazada línea 30 por POKE 12288+F*40+I,65, sino 01:70)
07:34 = ALPHATRONIC PC
10:49 = LASER 200 (* leer en conclusiones)
28:66 = TEXAS INSTRUMENTS TI-99/4A
48:42 = ZX-81 (08:22 en modo FAST)
Resultados PROGRAMA-2: (Calcular e imprimir el resultado en pantalla)
01:92 = BBC MICRO
02:60 = ATARI ST (usando GFA BASIC)
02:90 = MATTEL AQUARIUS
02:95 = ACORN ELECTRON
03:91 = DRAGON 32
04:15 = AMSTRAD CPC-464+
04:24 = AMSTRAD PCW-8256
05:45 = COMMODORE 64
05:60 = MSX (05:26 usando variables integer)
05:91 = COMMODORE 16
06:16 = LASER 200
06:59 = ATARI 800
07:03 = COMMODORE 128
07:52 = SPECTRUM
07:96 = SHARP MZ-700
08:29 = ALPHATRONIC PC
10:14 = SINCLAIR QL
10:42 = THOMSON TO8
11:29 = ORIC-1
22:79 = TEXAS INSTRUMENTS TI-99/4A
62:32 = ZX-81 (11:48 en modo FAST)
Conclusiones:
- La bestia negra de los 8 bits es sin lugar a dudas el BBC MICRO.
- El ZX-81 come a parte, aunque en modo FAST funciona 6 veces más rápido.
- El DRAGON-32 no posiciona los caracteres en pantalla por coordenada X,Y sino que lo hace con una posición absoluta. En el primer ejercicio se ha optado por simular un posicionamiento mediante el cálculo F*32+I. Y a pesar de haber realizado 512 multiplicaciones y sumas, ha tardado poco más que la mayoría. Esto indica que un programa bien realizado lo hará funcionar casi tan rápido como el BBC MICRO.
- El MATTEL AQUARIUS no puede posiciona un caracteres en una posición determinada de la pantalla. Para ello hay que hacerlo POKEando directamente en la memoria de pantalla. He substituidola línea 30 por "POKE 12288+F*40+I,65". A pesar de haber realizado 512 multiplicaciones y 1024 sumas, ha tardado poco más que la mayoría.De una forma más óptima habría sido más rápido que la mayoría.
- El caso del posicionamiento en pantalla del LASER 200 es igual al del DRAGON 32, pero teniendo en cuenta que para imprimir 512 "X" una a continuación de la otra ya ha tardado casi 11 segundos, no he probado a hacerlo con el mismo cálculo que el DRAGON-32. Esto mismo lo hace un MATTEL AQUARIUS en solo 1:70 segundos.
- Hay ordenadores con un rápido acceso a pantalla, pero al hacer cálculos su rendimiento cae. Caso del ORIC-1 y el SHARP MZ-700, entre otros. Supongo que las rutinas del calculador no deben estar bien depuradas.
- En el caso de los MSX, se ha ejecutado el test dos veces, uno normal y el otro usando variables "integer %". En el primer test el rendimiento mejora un 20%, y en el segundo test, limitando los integer a la variable A, el rendimiento mejora un 10%. Es de suponer que en otros sistemas que admite el uso de variables integer el rendimiento también debería mejorar.
- Teniendo en cuenta la diferencia de velocidad entre los dos ejercicios en un mismo equipos, no descarto realizar algún ejercicio más para comprobar otras características, y mejorar el promedio total.
Más adelante me gustaría hacer un test de rutinas gráficas.
Continuará...
Con la experiencia que me da el haber programado el mismo programa en varios equipos me surgió la idea de hacer varias pruebas para comprobar que equipo tiene el BASIC más rápido.
Así, en una primera fase he decidido ejecutar un par de sencillos programas en multitud de sistemas, cronómetro en mano, para obtener la respuesta a mi pregunta.
El test se compone de estos dos programas de 5 líneas cada uno:
1) Poner texto en pantalla
Un doble bucle que situa una "X" en una posición determinada de la pantalla. En total se repito 32x16=512 veces. He tenido en cuenta que el AT del SPECTRUM, es el LOCATE del MSX, el PLOT del ORIC, etc., que en unos pones X,Y y en otros Y,X. Y que en unos la primera posición es la 0 y en otros la 1. Los valores los he adaptado a la resolución del DRAGON y el LASER 200.
10 FOR F=1 TO 16
20 FOR I=1 TO 32
30 PRINT AT F,I;"X"
40 NEXT I
50 NEXT F
2) Calcular e imprimir el resultado en pantalla
Se realiza, sobre el valor de una variable, un cálculo consistente en una multiplicación, una división y una resta. Esto se repite 99 veces y se va mostrando el resultado en pantalla.
10 A=1
20 B=A*2/3-4
30 PRINT B
40 A=A+1
50 IF A<100 THEN GOTO 20
Cada prueba se ha realizado con la pantalla inicialmente en blanco y se ha repetido entre 3 y 5 veces para sacar una media del tiempo empleado, ya que como no soy un robot, mi cuerpo necesita unos ciclos para activar los músculos que pulsarán los botones START y STOP del cronómetro.
Os muestro los resultados en "segundos:decimas", ordenados de más a menos rápido.
Resultados PROGRAMA-1: (Poner un carácter en pantalla)
01:23 = ATARI ST (usando GFA BASIC)
02:03 = BBC MICRO
02:80 = SHARP MZ-700
03:54 = ACORN ELECTRON
04:14 = ORIC-1
04:47 = MSX (03:54 usando variables integer)
04:56 = COMMODORE 16
04:91 = ATARI 800
05:20 = AMSTRAD CPC-464+
05:38 = DRAGON 32 (Incluye F*32+I, sino 02:04)
05:46 = THOMSON TO8
05:52 = COMMODORE 128
05:54 = SPECTRUM
06:03 = SINCLAIR QL
06:77 = MATTEL AQUARIUS (Reemplazada línea 30 por POKE 12288+F*40+I,65, sino 01:70)
07:34 = ALPHATRONIC PC
10:49 = LASER 200 (* leer en conclusiones)
28:66 = TEXAS INSTRUMENTS TI-99/4A
48:42 = ZX-81 (08:22 en modo FAST)
Resultados PROGRAMA-2: (Calcular e imprimir el resultado en pantalla)
01:92 = BBC MICRO
02:60 = ATARI ST (usando GFA BASIC)
02:90 = MATTEL AQUARIUS
02:95 = ACORN ELECTRON
03:91 = DRAGON 32
04:15 = AMSTRAD CPC-464+
04:24 = AMSTRAD PCW-8256
05:45 = COMMODORE 64
05:60 = MSX (05:26 usando variables integer)
05:91 = COMMODORE 16
06:16 = LASER 200
06:59 = ATARI 800
07:03 = COMMODORE 128
07:52 = SPECTRUM
07:96 = SHARP MZ-700
08:29 = ALPHATRONIC PC
10:14 = SINCLAIR QL
10:42 = THOMSON TO8
11:29 = ORIC-1
22:79 = TEXAS INSTRUMENTS TI-99/4A
62:32 = ZX-81 (11:48 en modo FAST)
Conclusiones:
- La bestia negra de los 8 bits es sin lugar a dudas el BBC MICRO.
- El ZX-81 come a parte, aunque en modo FAST funciona 6 veces más rápido.
- El DRAGON-32 no posiciona los caracteres en pantalla por coordenada X,Y sino que lo hace con una posición absoluta. En el primer ejercicio se ha optado por simular un posicionamiento mediante el cálculo F*32+I. Y a pesar de haber realizado 512 multiplicaciones y sumas, ha tardado poco más que la mayoría. Esto indica que un programa bien realizado lo hará funcionar casi tan rápido como el BBC MICRO.
- El MATTEL AQUARIUS no puede posiciona un caracteres en una posición determinada de la pantalla. Para ello hay que hacerlo POKEando directamente en la memoria de pantalla. He substituidola línea 30 por "POKE 12288+F*40+I,65". A pesar de haber realizado 512 multiplicaciones y 1024 sumas, ha tardado poco más que la mayoría.De una forma más óptima habría sido más rápido que la mayoría.
- El caso del posicionamiento en pantalla del LASER 200 es igual al del DRAGON 32, pero teniendo en cuenta que para imprimir 512 "X" una a continuación de la otra ya ha tardado casi 11 segundos, no he probado a hacerlo con el mismo cálculo que el DRAGON-32. Esto mismo lo hace un MATTEL AQUARIUS en solo 1:70 segundos.
- Hay ordenadores con un rápido acceso a pantalla, pero al hacer cálculos su rendimiento cae. Caso del ORIC-1 y el SHARP MZ-700, entre otros. Supongo que las rutinas del calculador no deben estar bien depuradas.
- En el caso de los MSX, se ha ejecutado el test dos veces, uno normal y el otro usando variables "integer %". En el primer test el rendimiento mejora un 20%, y en el segundo test, limitando los integer a la variable A, el rendimiento mejora un 10%. Es de suponer que en otros sistemas que admite el uso de variables integer el rendimiento también debería mejorar.
- Teniendo en cuenta la diferencia de velocidad entre los dos ejercicios en un mismo equipos, no descarto realizar algún ejercicio más para comprobar otras características, y mejorar el promedio total.
Más adelante me gustaría hacer un test de rutinas gráficas.
Continuará...