HABLEMOS DE... MEGABASIC EN WAFADRIVE, DISCOS Y OTROS TRUCOS ---------------------------------------------------------------------------------- Tras haber dedicado tantos textos dedicados al Betabasic, toca ahora el turno de tratar sobre el MegaBasic y su compatibilidad o modo de hacerlo compatible con Wafadrive y otros sistemas de disco. y empiezo con... P. I Traducion del texto publicado originalmente en Your Sinclair #3. " La bolsa de correos del MegaBasic de Mike Leaman es casi tan poderosa como su programa. Asi que este mes el esta aqui para ayudarles con algunos de sus problemas y perplejidades, asi como tambien compartir algunas pistas de programacion con las que tal vez no habian encontrado... aun! La reaccion al YS MegaBasic ha sido tan grande que es ya hora de tomarme el tiempo para responder muchas de sus dudas sobre los procesos internos del programa. Asi que si alguien tiene algun problema o hay algo que no puedan comprender y desean que yo se los aclare, escribame aqui en YS y hare mi mejor intento. Pero no me vean como a una tia en agonia (puede ser dificil, Mike! Ed), envienme tambien sus propias Mega pistas y trucos para poder compartirlos. Hay un problema que ha aparecido una y otra vez en mi correo. Justo me han escrito a mi, Saffron Walden y A. Raven de Basildon, preguntando cuando voy a convertir el MegaBasic para el Wafadrive de Rotronic. Ellos lo intentaron adaptar sin mucho exito. Y bueno pues, la espera termino. Acabo de escribir el codigo para que ya no tengan que esperar un siglo cargando el programa de la cinta. He aqui unos simples pasos que deberan seguir. Conecten su Speccy al Wafadrive. Tipeen NEW* y enseguida rebobinen su conta de MegaBasic hasta el comienzo y tipeen: CLEAR 39999: LOAD "" CODE Ahora que ya tienes el MegaBasic en la memoria... es hora de hacer un poco de dura labor por tu parte... tipea el sigte. programa: 10 REM WAFADRIVE CONVERSI0N 20 REM PROGRAM 24-9-85 30 REM 40 LET c=0: FOR z=58064 TO 58092 50 READ b: POKE z, b: LET c=c+b 60 NEXT z 70 IF c=2319 THEN PRINT "BLOCK 1 IS OK!": GOTO 90 80 PRINT "ERROR IN LINES 9000 OR 9010": STOP 90 LET c=0: FOR Z=47000 TO 47061 100 READ b: POKE z,b: LET c=c+b 110 NEXT z 120 IF c=7018 THEN PRINT "BLOCK 2 IS OK!": GOTO 9999 130 PRINT "ERROR IN LINES 9020 TO 9040": STOP 9000 DATA 58,0,0,254,243,40,21,0,0,0,0,0,0 9010 DATA 0,0,0,0,0,0,0,221,225,241,42,76,233,251,201,213 9020 DATA 245,254,10,32,10,58,207,92,254,79,32,3,205,74 9030 DATA 20,33,0,0,253,116,55,253,116,38,34,11,92,215,176,22,193,4,33,205,13 9040 DATA 35,203,126,40,251,16,249,126,205,134,12,35,203,126,40,247,237, 123,61,92,51,51,33,248,209,229,199 9999 POKE 47278,0: POKE 47279,0 Vamos que no les tomo demasiado tiempo, cierto? Ahora hagan RUN y salven el nuevo codigo del MegaBasic en el Wafa tipeando SAVE# "MB", 45000, 20368 Todo lo que necesitamos ahora es un nuevo cargador para el Wafadrive, tipeamos NEW# y con esto borramos el programa de conversion. Finalmente, tipeamos y salvamos este programa cargador: 10 POKE 23737,152 20 POKE 23738,183 30 CLEAR 44999 40 L0AD *"MB" 50 RUN USR 56100 Con esto ya no pueden refrenarse de comprar una copia del MegaBasic por el simple hecho de no poder convertirlo a Wafadrive... pues porque tal excusa ya no funciona mas. Y tampoco se por que los propietarios del Opus disk estan con la cara larga. Tan pronto como pueda poner mis manos en uno de tales aparatos, hare una rutina de conversion para Opus tambien! Steven Port me ha escrito desde Greenwhich para preguntarme donde el puede encontrar los otros dos fonts del MegaBasic. El quiere usarlas en sus propios programas. Para empezar, quisiera saber por que razon quieres escribir programas pero no en MegaBasic? Eh?! Solo por esta vez te lo voy a decir. El font tipo Amstrad empieza en el 45000 el del BBC comienza en 48000. Ambos son de 768 bytes de largo. Digamos que quieres salvar el juego de caracteres del BBC a una cinta, tienes que usar SAVE "Beeb" CODE 48000,768. Ahora ya saben por que me llaman la "fuente" de todo conocimiento! Pasamos entonces al departmento de quejas. Muchos de uds. se han estado quejando por el hecho de que cada vez que activan su MegaSpectrum, tienen que usar el comando KEY para definir las teclas definibles por el usuario. Asi que... hay alguna forma de salvar las teclas definidas para que se puedan cargar todo de un tiron? Ah, si... hay una forma! Las teclas definidas por el usuario estan almacenadas a partir de 59956 y hay 256 bytes para cada tecla. Eso significa que si quieren salvar todas las diez keys, solo tienen que usar: SAVE "KEYS" CODE 59956,2560 Y ahora una pista para todos uds. que indulgen en el extra~o habito de hackear... digo, por que deberia Chris Wood tener el monopolio sobre el tema?! Aqui les muestro como pueden personalisar su copia del YS MegaBasic redefiniendo los mensajes de error, los cuales empiezan en 52987 y terminan en 53164. Al final hay una marca creada a~adiendole 128 al codigo ASCII del ultimo caracter del mensaje. Por eso, les ofrezco un peque~o programa que imprime en pantalla cada mensaje de error con su direccion inicial: 10 LET P=52987 20 PRINT P 30 LET Z-PEEK P: LET P=P+1 40 IF Z>127 THEN VDU_(Z-128): PRINT 'P:G0 TO 30 50 VDU_Z:G0 TO 30 Ahora todo lo que tienen que hacer es POKEar los valores ASCII del mensaje que se quiere cambiar en las pos. correctas. Es aun mas divertido si le dan a un amigo una copia de este MegaBasic modificado. G. Gapper de Glos no esta muy seguro acerca de DEFG y desea que le haga una rapida explicacion al respecto. Bueno, el comando DEFG es un medio rapido de definir UDGs. En el Basic Sinclair normal se definen los UDGs como 'a' usando las sigtes. lineas: 10 FOR A=USR "A" TO USR "A"+7 20 READ B:POKE A,B 30 NEXT A 40 DATA 255,129,129,129,129,129,129,255 Ahora esta subrutina lee los datos de los graficos y los POKEa en el area correcta de la memoria, encima toma 4 lineas de Basic! Con YS MegaBasic se puede hacer exactamente lo mismo con una sola linea, y aqui lo vemos: DEFG_"a", 255,129,129,129,129,129,129,255 DEFG requiere de 9 parametros. El primer parametro es una cadena indicando el grafico a definir y a continuacion estan los datos numericos del grafico. Seguimos con otra queja. A S.G. Wylie de Ramsgate no le gusta como se super ponen las 3 ventanas. Lo que tienen que hacer es decirle al sistema que quieren usar la misma ventana para todas las salidas. Y para hacer eso, tienes que usar el comando FX que es usado para controlar el sist. MegaBasic. El comando es seguido de 2 parametros, el primero indica la funcion que requieres y la segunda es el dato requerido por la funcion. Echale una mirada a esto: FX_0,n - define cual ventana es usada para entrada FX_1,n - " " " " " " listado automatico FX_2,n - " " " " " " salida FX_3,n - " " " " " por el MONitor Digamos que quieres usar una ventana para todas las 4 funciones, entonces tienes que usar algo como estas lineas: FX_0,2:FX_1,2:FX_2,2:FX_3,2 Con eso, la unica ventana de salida (vent.2) es usada y se acabo el problems de las ventanas superpuestas. Y si quieres fijar el cursor de copiado para que use tinta amarilla, entonces usa: CURRENT_1:INK 6 Cuando ya estas feliz con tu version de YS MegaBasic, entonces todo lo que tienes que hacer es salvarlo todo con su propio cargador y... Bingo, ya tienes tu propio MegaBasic modificado! " P. II Los discos Megabasic fue originalmente el proyecto mascota de la revista britanica Your Spectrum. Y se le dedicaron varios articulos durante la vida de esta revista, pero cuando cambio a Your Sinclair, literalmente todo cambio, poco a poco se la fue dejando a un lado hasta no dedicarsele mas un solo articulo salvo menciones. Fue pensado para trabajar en principio con cintas y microdrives. El problema fue cuando los usuarios quisieron usarlo con otros sistemas como el wafadrive o los disco como Opus. MegaBasic 1.1, 4 y Wafadrive El parche fue pensado para el MegaBasic 3, pero funciona tambien tanto con la version anterior 1.1 y su sucesor 4.0. En el caso de MB v4, hay que cambiar la linea 30 del cargador del sigte. modo: 30 CLEAR 44995 y salvar el codigo al wafer asi: SAVE# "MB", 44996, 20373 En cuanto a MB v1.1 reemplazamos todo el cargador por una sola linea: 10 POKE 23737,152: POKE 23738,183: CLEAR 44999: PRINT FLASH 1; "Loading MegaBasic Version 1.1": L0AD *"MB": RUN USR 56100 el codigo lo salvamos con: SAVE# "MB", 44996, 20373 Hasta este punto, tenemos que el MB funciona con cintas, microdrives y ahora tambien con Wafadrive. No puede capturar los errores del wafadrive aunque no se cuelga ni nos saca del MB, pero si se interrumpe el programa. Falta entonces (la razon de toda esta investigacion) saber si funciona tambien con discos y con que sistemas de disco es operativo. Empiezo pues con... Timex FDD El parche para Wafadrive funciona perfectamente con el Timex. Los errores de disco son tratados como SYNTAX ERROR, el cual al ser un mensaje exclusivo de MB, no puede ser capturado por RESTART. Sin embargo, no cuelga ni se sale del MB, pero si me interrumpe el programa. Por suerte, Timex ofrece su propio metodo de capturar errores de disco. Didaktik D80 Necesita igualmente del parche del Wafadrive para operar correctamente. Sin modificar posiblemente solo funcione con TAPEMUL. El problema es que CAT no da los nombres completos sino truncados a solo 5 caracteres. Los errores de disco no muestran el mensaje igual que sucede con Betabasic, pero si la letra del codigo de error sin cuelgue alguno, por lo que aqui es posible capturarlos con la sentencia RESTART. Swift Disk I y II Es mejor parcharlo. Una vez hecho eso, acepta todos los comandos y sintaxis del Swift D. Pero basta un solo error de disco y me saca del MB interrumpiendo el programa. Hay que evitar dichos errores mediante %ERR propio del SW para no desactivar el MB. MB-02+ No necesita ser modificado. Acepta solamente los comandos CAT, COPY, SAVE, LOAD, MERGE y VERIFY, pero ninguno de los comandos extras del MB-02+. RESTART si captura los errores de disco. Opus Discovery El parche para Wafadrive no funciona con el Opus D. Aunque se prometio una modificacion para este sistema, jamas salio; por lo que ninguno de los comandos de disco puede ser usado con el Megabasic activo. MGT +D Curioso, sin el parche basta un CAT 1 para que se cuelgue el sistema, pero una vez modificado ya acepta todos los comandos del G+dos. Pero tal como pasa con los Microdrives, no captura los errores de disco, basta un error para que se desactive el Megabasic y se detenga el programa. El unico modo de evitarlo es usar el metodo propio de DiscIple para capturar errores de disco y evitar que estos nos saquen del MB interrumpiendo el programa, cosa que ya no es posible de hacer en el caso de los Microdrives. +D con Betados y Unidos Betados requiere de las instrucciones de DiscIple, no para capturar los errores sino para evitar que los errores de disco interrumpan el programa como pasa en el +D. Unidos en cambio posee LINE xx para capturar tales errores y (PEEK@99) para que sepamos cual fue el numero de error. No funciona con DiscIple, Speccydos, FloppyOne, Kempstondos, SPdos ni Beta128 o 48. Tampoco con el +3 usando 48disk, ni con el IF1 de Ice Felix. PARA CERRAR En suma, MB empezo siendo para cintas y microdrives, gracias a un parche ya iba tambien con Wafadrive. Pero gracias a ese mismo parche descubro que incluso va bien con discos: Timex FDD y Didaktik D80, al principio pense que era porque los tres tienen una sintaxis similar, pero resulta que experimentando con otros sistemas, tambien era compatible con ese mismo parche el +D, ademas del Swift Disk 1 y 2, siendo el MB-02+ el unico que no necesita ese parche. Puntos en contra: uno es que no pueda capturar los errores propios ni los del Microdrive, el otro es que no hay modo de salir a voluntad y hacer un reinicio sin borrar el programa en curso. Tampoco ofrece nuevas funciones, uno debe de definir las que necesite segun el programa como es el caso de ON GOTO o ELSE. RESTART vs ONERROR Mientras que la mayoria de Basics de la epoca usaban ON ERROR GOTO (si es que lo tenian) Atari prefirio TRAP y Apple ONERR GOTO, el autor de MB eligio RESTART para hacer lo mismo. Ahora este termino es literalmente "reiniciar" asi que para nada puedo asociarlo con la captura de errores, pero bueno... Para saber el numero de error, la linea y la sentencia que lo causaron debemos de recurrir a PEEKs y podemos definir con ellas las sigtes. variables: ERR o ERN = PEEK 59862 - el codigo de error. ERS = PEEK 59875 - la sentencia dentro de la linea que dio el error. ERL = PEEK 59873*256+PEEK 59874 - la linea donde ocurrio el error. Muy bien, el autor sugeria en su articulo que los usuarios personalizacen su copia de MB, asi que en mi caso he decidido hacerle la unica peque~a modif. justamente a su sentencia RESTART reemplazandola por ONERROR. Sin espacio para que asi pueda tener el mismo largo de 7 caracteres. La instruccion se almacena a partir de 52671 hasta 52677. Con un simple bucle FOR y un PRINT CHR$ PEEK podemos ver que su codigo es 82,69,83,84,65,82,212. Reemplazamos todo eso POKEando los sigtes valores 79,78,69,82,82,79,210 y ya esta: un MB con sentencia ONERROR en vez de RESTART. (c)2024 zx_if1@hotmail.com