Mensajepor DaDMaN » Mié 19 Sep , 2007 5:54 pm
Bueno... como ando un poco cabreadillo ya con el tema de la velocidad... He hecho una prueba.
dinoneno, me duele en el alma decirlo (lo juro), de verdad, pero el codigo que genera el compilador es bastante lento.
Hay un compilador de BASIC, llamado: FABACOM (Fast Basic Compiler). Compila bajo CPM.
Pues bien... He compilado la version Locomotive BASIC del programa del mapeado (el que dibuja el mapa) y tio... va muchisimo mas rapido que el compilado con el CPCBASIC. ¿Y por qué no empleo entonces ese compilador? Porque te mete 8Kbytes de biblioteca delante y cualquier programa compilado ocupa minimo 8Kbytes.
Estoy convencido que el tema del sprite al moverse, es tema de velocidad, pero pq el codigo generado es lento (insisto en que el bucle for - next que generas es extremadamente lento y hemos mirado por encima mi coleguilla Augusto y yo y el codigo en general no está demasiado optimizado).
Dejo snapshot de la version compilada con el FABACOM para que veais la diferencia (el dibujado de pantalla es casi instantáneo!).
dinoneno, también te dejo el DSK del compilador para que le pegues un vistazo. Tal vez te sirva y puedes optimizar tu compilador hasta limites insospechados (ojalá, en serio). El propio DSK lleva el CPM, asi que "|CPM" y luego "BC.COM" para ejecutar el compilador. Hay un archivo TXT con el manual, pero te lo resumo en:
"The compiler is executed from CP/M (either CP/M 2.2 or CP/M Plus). This is
achieved by booting up CP/M (insert a system disc and type |CPM) and inserting
the disc with your program on. Your program should be a standard BASIC program
file (you don't need to save it as ASCII) with the file extension ".BAS". Then
type
BC <filename>
where <filename> is the name of your program, without extension.
There are two possible options:
L - this will make the compiled program omit line numbers and so save space
E - this is used if you do not want to use interrupts (AFTER, EVERY, ON SQ)
These are used as follows:
BC <filename> /L
BC <filename> /E
BC <filename> /LE
3.1/3.2 Commands supported
All Locomotive BASIC commands are supported, except:
AUTO, CHAIN, CHAIN MERGE, CONT, DELETE, EDIT, LIST, LOAD (BASIC program),
MERGE, RENUM, RESUME NEXT, SAVE (BASIC program), TROFF, TRON
The extra commands of BASIC 1.1 are supported, however, if you wish to maintain
compatibility with the 464, you should not use FILL, MASK, or transparent
graphics paper commands.
4.0 Speed advice
If at all possible, use integer variables. The speed difference is quite
considerable, as this example shows:
Floating point:
10 FOR i=0 TO 10000
20 NEXT i
Uncompiled 11.1s, compiled 8.2s
Integer:
10 FOR i%=0 TO 10000
20 NEXT i%
Uncompiled 5.9s, compiled 1.1s"
Venga, que me apetece muchisimo seguir con tu compilador, pero necesita algo más de chicha para que sea viable.
Salu2!
-
Adjuntos
-
- mapa_cpcbasic.zip
- La rutina de dibujado compilada con el CPCBASIC, para que podáis comparar la velocidad.
- (7.64 KiB) Descargado 107 veces
-
- fabacom.zip
- El compilador FABACOM
- (23.16 KiB) Descargado 115 veces
-
- mapa_fabacom.zip
- La rutina de dibujado de mapeado compilada con FABACOM. Es un SNAPSHOT.
- (12.84 KiB) Descargado 98 veces