Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Avatar de Usuario
kikems
Mensajes: 3329
Registrado: 30 May 2013 19:23
Agradecido : 938 veces
Agradecimiento recibido: 1291 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor kikems » 16 Feb 2019 20:23

Último mensaje de la página anterior:

Luis centra un poco, en los últimos mensajes veo mucha teoría , pero tradicionalmente siempre resulta en poca práctica. Creo que sería más productivo que comenzaras avanzando el proyecto y a medida que vas completando partes las vas comentando, el resto ..... son castillos en el aire. Además con algo tangible sobre la mesa, yo pienso que la gente se anima más a opinar y comentar.

Avatar de Usuario
ron
Mensajes: 18410
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1579 veces
Agradecimiento recibido: 1317 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor ron » 16 Feb 2019 20:26

Tras leer el consejo que te dijo pser1, entendí que esto lo replanteabas, pero no hay dios que se entere de nada.

Avatar de Usuario
pser1
Mensajes: 2564
Registrado: 08 Dic 2012 18:34
Agradecido : 497 veces
Agradecimiento recibido: 614 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor pser1 » 17 Feb 2019 00:36

ron escribió:Tras leer el consejo que te dijo pser1, entendí que esto lo replanteabas, pero no hay dios que se entere de nada.

Suscribo lo dicho por kikems.
De cara a los lectores de este hilo, las parrafadas en ensamblador, que *no* contienen nada nuevo ... ya que quien lo desee puede descargarse
los pdf de la serie unravelled de CoCo y leerlo a ratos muertos, van a pasar sin pena ni gloria -banghead
Lo mejor sería que se hicieran las elucubraciones / análisis sin usar como bloc de notas el hilo de Retrowiki (a menos que lo hagan varias personas, que no es el caso). En cuanto haya algo concreto que pueda presentarse y utilizarse, entonces si será bien recibido aquí ...
Mientras seguiremos jugando con los nuevos juegos de AGD -507
saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2410
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 52 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 22 Feb 2019 19:26

Gracias Kikens, Ron Y pser1
Tratare de puntualizar.

Hasta ahora, tengo claro los GOTOs, GOSUBs, que hasta ahora voy a hacer algo drástico, en el fuente después del token del GOTO y después del Numero o label, colocare la dirección de la linea de destino. Esta se actualizara al dorarlo la primera vez. (No se si abrir un hilo por tema)

Con respecto al tema del formato de las lineas del basic:

Código: Seleccionar todo

LINEAS DE BASIC EN RAM (TOKENIZADAS) ORIGINAL

BYTE
------
0 = 0 = Inicio
1-2   = Dirección de la próxima linea
3-4   = NUMERO DE LINEA (INTEGER)
5-255 = (250) bytes para la linea (TOKENIZADA)
0 = 0 = Fin de linea

Nuevo Basic (NEW BASIC) o (BASIC PLUS)
BYTE
0 = 0 = Inicio
1 ó 2     =  Dirección relativa de la próxima linea (Tamaño de esta linea) (1 byte) o Dirección absoluta (2 bytes)
3-255 = (252) bytes para la linea (TOKENIZADA) Lineas con Labels: o Números (2 Bytes), Pre-Token ($10)
0 = 0 = Fin de linea


Con el tema de las variables, hasta ahora llevo lo siguiente:
Abriré un hilo para este tema en discusiones, pienso que será necesario.

Código: Seleccionar todo

VARIABLES
-------------
1 byte  = Tipo
1 byte  = Cant de letras del nombre
1-8 bytes = Dato
N bytes = Nombre (1-256 caracteres)

TIPO
-----
0 =   = Vacio
1 = ! = Byte       | 1 byte
2 = % = Integer    | 2 bytes
3 =   = Fecha/Hora | 3 bytes
4 = ! = Long       | 4 bytes
5 = & = Single     | 5 bytes
                              |Cantidad de caracteres 2 bytes, hasta 65536 caracteres
                              |    |Dirección 3 bytes, hasta 16.777.216 posiciones. con bancos
6 = $ = String     | 5 bytes [Ca][Dir] 5 o 6 bytes
7 = $ = String * n | 2 bytes = tamaño y n bytes de datos
8 = # = Double     | 8 bytes
9 =   = Estructura | 2 bytes     = con el total de bytes,
                   | 1 byte      = cantidad de campos,
                   | 1-255 bytes = 1 byte por cada variable con el tipo (0-15) y el tamaño del nombre (1-16),
                   | Todos los nombres segidos
                   | Todos los datos seguidos
10 =   = Uniones   | ?

+16 Dimensiones    | 2 bytes     = con el total de bytes,
                   | 1 byte      = cantidad de dimensiones,
                   | 2 bytes     = Tamaño de cada dimensión
                   | ... 2 bytes por cada dimensión
                   | Todos los datos en este orden: DATO(0,0),DATO(0,1),DATO(1,0),DATO(1,1)
+32 Def Fn (User)  | n bytes según el tipo, 2 bytes de la dirección del código de la función
+64 Functions(User)| n bytes según el tipo, 2 bytes de la dirección del código de la función

+128 Para las Funciones y SUB de usuarios se colocaran sus parámetros y abajo sus variables con el bit 7 encendido

Para marcar constantes se usará el bit 7 de la primera letra del nombre de la variable


Una vez que tenga claro el corazón podre empezar, ya que si lo básico bien pensado no creo que pueda programar

Avatar de Usuario
Chema
Mensajes: 2219
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1769 veces
Agradecimiento recibido: 577 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor Chema » 22 Feb 2019 19:58

Yo es que no sé exactamente qué quieres hacer, si te soy sincero. ¿Quieres mejorar el Basic del CoCo? ¿Un Basic nuevo mejorado? Con qué objetivo: que sea más rápido, más cómodo, más compacto... ¿Quieres que se pre-procese o pre-compile de algún modo? Por el momento solo veo una descripción del BASIC y algunas ideas sueltas, que no consigo seguir bien (como lo que quieres hacer con las etiquetas).

Y, no, por favor... no abras mil hilos del mismo estilo, que no nos va a aclarar nada :)

(Dios, acabo de releerme y me suena a lo que me dicen los alumnos a MÍ en ocasiones - es el Karmaaaa!)

Avatar de Usuario
luiscoco
Mensajes: 2410
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 52 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 22 Feb 2019 20:15

Chema escribió:Yo es que no sé exactamente qué quieres hacer, si te soy sincero. ¿Quieres mejorar el Basic del CoCo? ¿Un Basic nuevo mejorado? Con qué objetivo: que sea más rápido, más cómodo, más compacto... ¿Quieres que se pre-procese o pre-compile de algún modo? Por el momento solo veo una descripción del BASIC y algunas ideas sueltas, que no consigo seguir bien (como lo que quieres hacer con las etiquetas).

Y, no, por favor... no abras mil hilos del mismo estilo, que no nos va a aclarar nada :)

(Dios, acabo de releerme y me suena a lo que me dicen los alumnos a MÍ en ocasiones - es el Karmaaaa!)

Jajaja chema
Bueno si, un nuevo basic para todas las compatibles a coco, que permita manejarlo mejor y compatible con lo anterior, pero no soporto mas el basic super lento y tonto que le inventaron con demasiadas limitaciones sin sentido.

Es pre-compilado, en el sentido de que al ejecutarlo y solo una vez (hasta que edites), pruebe todo contra errores de sintaxis y enlace los GOTOs y variables, con INTEGER, SUBs(Procedures) y Funciones, para que sea super rápido, algo muy parecido a VB6 o AMOS.

Avatar de Usuario
minter
Mensajes: 2423
Registrado: 22 Jul 2014 18:51
Agradecido : 2224 veces
Agradecimiento recibido: 973 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor minter » 22 Feb 2019 20:55

Yo el proyecto de Luis lo entiendo a algo parecido al Simon's Basic, del Commodore 64.
https://en.wikipedia.org/wiki/Simons%27_BASIC

Reprogramar las instrucciones del Basic y de paso... si se pueden meter nuevas... pues supongo que mejor.

Reescribir el Kernel, por intentar decir lo que trata de hacer Luis.

Optimizar instrucciones, bucles, cadenas...

Los de Dragon Data (o quien haya escrito el Basic) trabajarían con un tipejo soplándoles detrás de la nuca tipo Jack Tramiel para que sacaran el Basic y el Kernel lo mas rápido posible y meterían gambadas por un tubo.

Nota: Gambadas (Luis, como no se si eres maracucho, explico: "gambadas" es como meter la pata, pero aquí llamamos a la nariz "gamba". Asi que... no tiene mucho sentido. :) )

¿Y no se puede empezar de una manera mas sencilla mediante rutinas? Programando por ejemplo un nuevo comando PRINT... y luego cambiar a donde apunta el TOKEN de PRINT. En vez de al KERNEL, a la nueva instrucción. Una vez comprobada que mejora... siguiente... O meter TOKENS nuevos al BASIC del Dragon.

Bueno, no se... igual me estoy metiendo donde no me llaman sin conocer el ASM del Dragon.
Pero es que soy así de inquieto. -507

Avatar de Usuario
luiscoco
Mensajes: 2410
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 52 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 22 Feb 2019 23:34

minter escribió:Yo el proyecto de Luis lo entiendo a algo parecido al Simon's Basic, del Commodore 64.
https://en.wikipedia.org/wiki/Simons%27_BASIC

Reprogramar las instrucciones del Basic y de paso... si se pueden meter nuevas... pues supongo que mejor.

Reescribir el Kernel, por intentar decir lo que trata de hacer Luis.

Optimizar instrucciones, bucles, cadenas...

Los de Dragon Data (o quien haya escrito el Basic) trabajarían con un tipejo soplándoles detrás de la nuca tipo Jack Tramiel para que sacaran el Basic y el Kernel lo mas rápido posible y meterían gambadas por un tubo.

Nota: Gambadas (Luis, como no se si eres maracucho, explico: "gambadas" es como meter la pata, pero aquí llamamos a la nariz "gamba". Asi que... no tiene mucho sentido. :) )

¿Y no se puede empezar de una manera mas sencilla mediante rutinas? Programando por ejemplo un nuevo comando PRINT... y luego cambiar a donde apunta el TOKEN de PRINT. En vez de al KERNEL, a la nueva instrucción. Una vez comprobada que mejora... siguiente... O meter TOKENS nuevos al BASIC del Dragon.

Bueno, no se... igual me estoy metiendo donde no me llaman sin conocer el ASM del Dragon.
Pero es que soy así de inquieto. -507

Si claro, vas bien y te entiendo porque soy español de Granada, solo vivo en Venezuela, ni siquiera me he nacionalizado acá, lo que pasa es que me trajeron de pequeño, pero viajaba de vez en cuando, ya hace mucho de eso, pero me queda parte del habla.

Con respecto a lo que dices el problema que le veo es que por ejemplo, algo sencillo:
EL CHR$(32) quiero que se pueda usar CHR$(23,88,23,49) y me de el string
Pero si uso todo como esta los números se tendrían que enviar a la rutina de punto flotante, siendo integer, ya que aun no esta esa rutina.
claro que como se envían a la rutina general de evaluación de expresiones, pues si se podría usar y luego en la evaluadora de expresiones solo se cambiaría la parte final del resultado (para esta parte si tengo que tener claro con cuanto tipos de variables cuento)

En resumidas cuentas. es posible, tal vez, empezar sin que este todo pensado.

A ver si se puede: El ASC("HOLA") lo quiero modificar a ASC("HOLA",3) para que me de el ASC de la "L".
Veamos la función ASC$, apenas tiene 6 instrucciones, muy eficiente.
Comenzando salta a LB6A4 una rutina algunos bytes mas abajo, que coloca el primer carácter del string en ACCB y luego lo convierte en punto flotante.
Solo habría que agregarle la búsqueda de una coma y otro parámetro (opcional), con el byte a retornar (chequeando el fin del string)
No se ve la evaluación del primer parámetro, creo que lo evalúa siempre (no he estudiado esa parte) y ya tenemos la dirección del descriptor en X, tambien se evaluó si es nulo (daría 'FC' ERROR) y no se si el largo(tamaño) del string lo trae en A o en alguna memoria.

Modificaciones:
Aparte de lo obvio, (buscar un parámetro mas), hay que cambiar todas las rutinas que la enlazan si se quiere trabajar con string de mas de 256 bytes como esta pensado, si no tomo en cuenta esto, podría hacerse rápido pero quedaría sin los string largos y al hacer esta parte habría que repasar todo de nuevo, eso ya no me gustaria tanto.
En cambio si se como van las cadenas largas (que ya si lo se, aunque faltan detalles), puedo colocar todas las rutinas en orden y de acuerdo con la nueva arquitectura.
Creo que para mi prefiero conocer que tan profundo voy a llegar y programar después.

Código: Seleccionar todo

3284 * ASC$
3285 B6A0 8D 02 ASC BSR LB6A4 PUT 1ST CHARACTER OF STRING INTO ACCB
3286 B6A2 20 DF BRA LB683 CONVERT ACCB INTO FP NUMBER IN FPA0

3287 B6A4 8D E0 LB6A4 BSR LB686 POINT X TO STRING DESCRIPTOR
3288 B6A6 27 5E BEQ LB706 'FC' ERROR IF NULL STRING
3289 B6A8 E6 84 LDB ,X GET FIRST BYTE OF STRING
3290 B6AA 39 RTS

Avatar de Usuario
luiscoco
Mensajes: 2410
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 52 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 23 Feb 2019 07:16

Preguntas a la comunidad:
(Pregunta #1)

¿Alguien piensa que mas de 256 caracteres para las variables de cadena es inútil?, porque para mi es importantisimo ya que se pueden guardar dibujos y manipular zonas de memoria. Por supuesto no se podría tener mas de una sola variable de semejante tamaño, pero igualmente el beneficio contra algún gasto mayor es muy superior.
Ademas los descriptores de String ya están gastando 5 bytes con 2 bytes desperdiciados, yo usaría un byte más para el tamaño y tal vez uno mas para la dirección hasta 16 kb para aprovechar memoria extra. aun así gastaríamos la misma cantidad de bytes que actualmente. ¿Alguien en contra?

(Pregunta #2)
Tenemos Funciones, que retornan un valor y Comandos que realizan acciones y pueden colocar valores. Siempre me pregunte, que si, las funciones (que no tienen parámetros) devuelven un valor entonces son parecidas a una variable, y sí sería bueno tener algo que modificara el valor de esa variable. Ejemplo:
• KeyDelay [1st key delay], [repeat delay]; (Comando) tendrá 2 parámetros ambos opcionales.
• KeyDelay (Función). Retorna el retardo de primera tecla. También se podría usar KeyDelay=Valor para asignar el valoro usar el comando.
• RepeatDelay (Función). Retorna el retardo entre teclas. También se podría usar RepeatDelay=Valor para asignar el valor o usar el comando.

El Usar KeyDelay=5 como si fuera una variable para colocarle un valor, en lugar del comando KeyDelay 5 (Sin el signo de "="), a veces me confunde ya que parece lógico el primero, pero me impide colocar varios parámetros a la vez como en el comando KeyDelay 5,3.
Claro que estas son funciones que traen datos del sistema y que pueden leerse y escribirse.

Que opinan ustedes, ¿es deseable el colocar valores a la supuesta función que retorna un valor o solo dejamos el comando?

También esto influye en los paréntesis, ya que las funciones que tienen parámetros, estos, se rodean por paréntesis y en los comandos no.

Avatar de Usuario
pser1
Mensajes: 2564
Registrado: 08 Dic 2012 18:34
Agradecido : 497 veces
Agradecimiento recibido: 614 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor pser1 » 23 Feb 2019 15:50

Hola Luis,
Sinceramente, antes de estas preguntas yo haría ésta:
- ¿Alguien está interesado en utilizar/aprender un nuevo Basic para hacer programas?
Mi respuesta, hoy por hoy, sería: NO, en absoluto. Me sigue gustando el ensamblador, soy masoca, qué le vamos a hacer ;-)
saludos
pere

Avatar de Usuario
ron
Mensajes: 18410
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1579 veces
Agradecimiento recibido: 1317 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor ron » 23 Feb 2019 19:55

Sinceramente:
Aunque se pudiera aplicar 100% al Dragon, que en este caso es la máquina que hace masa crítica en RW, tendría cierto sentido, pero no nos engañemos, el Dragon lo encienden para probar los programas que hace Pere y estos son ASM, esta es la realidad. La otra realidad es que usuarios con CoCo2 y CoCo3 somos una docena a lo sumo y casi estoy por apostar que todos pensamos lo mismo que dice Pere.

No estoy diciendo que el Basic esté muerto o sea malo, lo que estoy diciendo es que no le veo utilidad y por tu parte lo veo más como una pérdida de un tiempo muy valioso que se podría aprovechar en otros menesteres. ¿ Qué pasa que te aburres ?

Avatar de Usuario
Silicebit
Mensajes: 1494
Registrado: 16 May 2011 21:13
Ubicación: La buhardilla del silicio.
Agradecido : 99 veces
Agradecimiento recibido: 201 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor Silicebit » 23 Feb 2019 20:43

Sinceramente, desde que aprendí ensamblador del 6502 dije, al BASIC que le den por el buyaca, sólo lo uso para alguna que otra prueba rápida y tonta de pocas líneas. Como pienso manejarme también con el ensamblador del 6809/6309 y Z80, lo mismo haré con el basic de mi CoCo3 y mi MSX2, el BASIC para pruebas tontas, para todo lo demás..... ¡¡A ensamblar!! :-D
El 6809 es el Rolls-Royce de los 8bits, el 6502 es el Mercedes, y el Z80 el SEAT 850. Sorry, but... I think different. :-P -0r1c -m3s3x -t4nd1 -cbmja YouTube

Avatar de Usuario
luiscoco
Mensajes: 2410
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 52 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 23 Feb 2019 21:50

ron escribió:Sinceramente:
Aunque se pudiera aplicar 100% al Dragon, que en este caso es la máquina que hace masa crítica en RW, tendría cierto sentido, pero no nos engañemos, el Dragon lo encienden para probar los programas que hace Pere y estos son ASM, esta es la realidad. La otra realidad es que usuarios con CoCo2 y CoCo3 somos una docena a lo sumo y casi estoy por apostar que todos pensamos lo mismo que dice Pere.

No estoy diciendo que el Basic esté muerto o sea malo, lo que estoy diciendo es que no le veo utilidad y por tu parte lo veo más como una pérdida de un tiempo muy valioso que se podría aprovechar en otros menesteres. ¿ Qué pasa que te aburres ?

Jajaja me ha hecho mucha gracia lo ultimo, y si, no tengo trabajo y dependo que se arreglen las cosas para dejar la caridad y empezar a ganarme lo mio, pero por ahora tengo mucho tiempo libre aunque no quiera.
Y no solo somos nosotros 10 o 20, hay 700 norteamericanos con coco en la lista coco, y que hay muy pocos juegos nuevos para coco, que yo creo que esto podría cambiar, y lo otro es que me encanta, y tengo un gustillo por ver si le gano a microsoft, jajajaa.
También me da dolor lo lenta que es a pesar del estupendo CPU que tiene. ya veremos que pasa. pero de que lo hago lo hago, aunque ha pasado el tiempo no ha decaído en mi el animo en lo mas mínimo, solo que no se si sea capaz, pero de animo todo.
También tengo las ideas bastante claras ya y mas o menos ya conozco y entiendo un 60% del basic.
Tal vez lo mas difícil sea que sirva para Dragon y los lemas clonicos, pero por ahora vamos con COCO que la conozco mas

Avatar de Usuario
luiscoco
Mensajes: 2410
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 52 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 23 Feb 2019 21:59

Silicebit escribió:Sinceramente, desde que aprendí ensamblador del 6502 dije, al BASIC que le den por el buyaca, sólo lo uso para alguna que otra prueba rápida y tonta de pocas líneas. Como pienso manejarme también con el ensamblador del 6809/6309 y Z80, lo mismo haré con el basic de mi CoCo3 y mi MSX2, el BASIC para pruebas tontas, para todo lo demás..... ¡¡A ensamblar!! :-D

Ok te entiendo, pero mi experiencia es que un buen basic como el AMOS, logra hacer bastantes cosas, y mas con 500 comandos que tiene, prácticamente tiene todo lo que se podría inventar en ASS ya listo para basic, claro sigue sin ser ensamblador pero ahora la diferencia es del 20 % y no del 80% que es la diferencia entre Asembler y el basic actual.

La idea es eliminar todo lo que hay que tener en cuanta para que camine un poco mejor el basic y que explica este magnifico documento de Allen Huffman, creador de cocopedia: make-basic-fast-again-part-1

Avatar de Usuario
luiscoco
Mensajes: 2410
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 52 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 24 Feb 2019 04:03

COMENTARIOS INSÓLITOS
No, no me han hecho ningún comentario raro, hablo de los comentarios en BASIC.
Estuve releyendo el articulo de Allen make-basic-fast-again-part-1, nuevamente y descubrí algo insólito en el tiempo que consumen los REM durante un programa, hice algunas pruebas y ocurrió esto:
El programa tiene un REM Largo en la linea 20 y lo recorre 1000 veces y tarda 384, luego colocando un apostrofe (') solo en la linea 20 tarda 220, y con un REM tarda 172 y sin la linea 20 tarda 109.

Algo asombroso, siempre pensé que los REM no estorbaban, pero nada mas alejado de la realidad, pero, ¿porque?.
Resulta que el comando REM y el apostrofe usan la misma rutina que el ELSE ya que este tambien omite el resto de la linea después del ELSE si ejecuto la parte del THEN.
Pero eso no es lo importante, si no que al encontrar el token del REM el basic continua buscando letra por letra hasta encontrar el final de la linea. Esto es lo que gasta cierta cantidad de tiempo, Aunque no explica la diferencia entre el apostrofe (') y el REM.
A mi entender, a nadie se le ocurrió memorizar la dirección de la próxima linea para usarla al encontrar un REM y así saltar toda la linea, con el consiguiente ahorro de tiempo.
Claro que uno no usa normalmente un REM dentro de un loop, pero puede darse el caso.
Este nuevo basic tomara esta precaución.
PROGRAMA con comentario (REM) largo, Tiempo 384

Código: Seleccionar todo

5 TIMER=0
10 FOR A=1 TO 1000
20 REM CUALQUIER COSA ESCRITA MUY LARGA, CUALQUIER COSA ESCRITA MUY LARGA
30 NEXT
40 PRINT TIMER

Avatar de Usuario
luiscoco
Mensajes: 2410
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 52 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 24 Feb 2019 17:48

COMIENZO DE LA PROGRAMACIÓN
Comenzare ha hacer cosas a ver como va.
Se necesita pasar los ROMs a RAM para coco 1 y 2 ya que para coco3 siempre esta en ALL RAM, aunque algunos comandos tienen un hook (garfio) en RAM baja para poderlos cambiar o agregar nuevos, creo que la modificación va mas allá de esto y por eso los are aparte, vamos que no es un ADD ON.
Usaré una rutina parecida a esta, pero que tome 2 bytes a la vez y algo mas optimizada

Código: Seleccionar todo

E000 1A 50                       ORCC #50
E002 8E 80 00                   LDX #8000
E005 A6 84                       LDA ,X             
E007 B7 FF DF                  STA FFDF
E00A A7 80                      STA ,X+               
E00C 8C E0 00                  CMPX #E000
E00F 27 05                       BEQ LE016
E011 B7 FF DE                  STA FFDE
E014 20 EF                       BRA LE005
E016 1C AF                       ANDC #AF
E018 39                            RTS


Algo como esto, toma de 2 en 2 bytes, ¿alguna mejora mas?

Código: Seleccionar todo

             ORCC #50        ;Deshabilita las interrupciones enmascarables
             LDX #8000       ;Comienzo del Extended Basic
 LOOP   LDD ,X             ;Carga 2 bytes
            STA FFDF         ;MODO ALL RAM
            STD ,X++          ;Coloca 2 bytes   
            STA FFDE         ;MODO ROM-RAM
            CMPX #E000    ;Final del ROM en realidad puede ser hasta $D400
            BNE LOOP       ;Si no acaba ir a LOOP   
            ANDC #AF        ;Habilita las interrupciones
            RTS                 ;Regresa al Basic

Para coco 3 esto no es necesario porque esta siempre en MODO todo RAM.
Se puede colocar al principio una rutina para ver si es coco3 por ejemplo pokeando en &h8000 algo diferente a 69 y ver si se mantuvo o regreso al número 69, ya que ahí estará la palabra "EX" del basic extendido.

Sobre donde colocar el origen de este código, si es para coco 1 y 2 prefiero en &E000 pero en coco3 esta usada.

jltursan
Mensajes: 2532
Registrado: 20 Sep 2011 13:59
Agradecido : 167 veces
Agradecimiento recibido: 474 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor jltursan » 24 Feb 2019 19:40

Escuchando lo que persigues, no me queda otra que estar de acuerdo con los compañeros. ¿Por qué un BASIC interpretado?, ¿o no te he entendido bien y buscas crear un compilador de un BASIC avanzado?

Quiero decir, como dices, un BASIC es todo un mundo a la hora de buscarle los trucos que hacen que se ejecute más rápido. Me parece mucho más interesante eso que la creación de un nuevo intérprete. Siendo un BASIC Microsoft seguro que comparte todos estas curiosidades relativas al BASIC de Microsoft:

- Eliminar todos los comentarios.
- Usar siempre que sea posible variables de un sólo caracter.
- Nada de blancos redundantes. El código será ilegible; pero se ejecutará más rápido.
- Meter todos los comandos BASIC que se puedan en una sola línea.
- Usar siempre IF ... THEN [línea] o IF ... GOTO [línea] (la más rápida). Nunca IF ... THEN GOTO [línea].
- Las subrutinas más usadas deben de estar al comienzo del programa.
- Preferiblemente los GOTO se harán hacia delante y no hacia atrás.
- Usar siempre que se pueda variables INT declarando DEFINT a-Z al comienzo del programa. A veces da mejores resultados el usar el caracter % para identificar a una variable como INT, es cuestión de probar en cada caso en particular, cual funciona mejor (esta no creo que sea aplicable al BASIC del CoCo)
- Usar NEXT en lugar de NEXT [variable]. Es casi el doble de rápida.

Y bueno, otra cosa sería si te plantearas la creación de un compilador para el Extended BASIC por ejemplo. Eso si que sería una revolución bien recibida.

Por último, si uno de los objetivos es darle vidilla a la "scene" CoCo creando algo que permita desarrollar con comodidad nuevos juegos....¿no has visto el nuevo AGD Dragon/CoCo que ha convertido Pere?, es de lo más asequible a la hora de crear buenos juegos de calidad con el mínimo esfuerzo ;-)


Volver a “Tandy CoCo”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado