Nuevo proyecto Basic CoCo/Dragon/DP400

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 15 Ago 2017 00:16

Tengo ganas de emprender un proyecto para mejorar el Basic de la Color Computer 1, 2 y 3, hasta llevarlo a algo parecido a Amos de Amiga, obviamente no puede ser ni cercano, pero haré mi intento.

La idea es hacer el basic que debieron tener estos equipos y que por falta de tiempo, dinero o conocimientos, y sin idea de que después existimaran en editores full screen, que en aquellos tiempos nadie los imaginaba o no cabían en la memoria, total que al BASIC le faltan muchas cosas como para poder hacer juegos simples que sirvan de algo.

Este proyecto es para:
    * Implementar todo lo que al Basic le faltaba implementar y que ahora en retrospectiva ya sabemos que funciona mejor.
    * Mejorar la velocidad, ya que actualmente es imposible hacer algún juego con alguna acción y sonido en basic, y por eso la poca producción que tiene este equipo, y solo es en assembler que sale algo muy de vez en cuando.
    * Implementar INTEGER, LONG y otras cosas.
    * Editor FULL SCREEN, o algo decente, que no te haga perder el tiempo y sea engorroso hasta escribir. (Tal vez escribir en PC)
    * Llevarlo a un BASIC Semi compilado, si es posible.
    * Suficientes comandos como para no tener que recurrir al assembler para implementar cosas.

    En resumen un Basic mejor si es posible en ROM, para sustituir el actual, y que se puedan fabricar juegos de calidad

NECESIDAD
Si el basic usará integer, correría de 4 a 20 veces más, y ya empiezan a ser factibles juegos.
Si puede usar string de más de 256 bytes, puede manejar datos de dibujos y pantallas en forma eficiente.
Si tiene un editor mejor, letra pequeña como en la coco 3, sin números de linea, la gente se animaría.
Si le damos 500 comandos como en (Amiga)AMOS, con formas de mover cosas en pantalla, con rutinas ya hechas en assembler, la máquina daría mucho más para la gente de basic.
Acá enumerare las mejoras necesarias generales (O ideales, seguramente no se cumplirán todas):


GENERALES, MEMORIA Y EQUIPO
Debe reconocer el equipo, Coco 1,2 o 3, Dragon, DP400 y ya veremos qué más
Compatible con el actual Basic. (lo más posible)
Debe reconocer toda la memoria puesta (la coco3 tiene mínimo 128kb) (El basic puede estar en disco), esto quiere decir que debe reconocer automáticamente desde 4k hasta 8Mb, Seguramente no cabra en la zona de ROM prevista, y podrá ser de 2 versiones, intercambios con floppy y DD o comandos separados tipo Nitros-9, también puede colocarse en otro banco de 64k, Si lo hay, aún no me planteo el uso en OS9-Nitros 9, que sé, que debería ser el camino.
Estructurado
Expandible, Estos comandos y funciones deben ser expandibles, creando nuevos comandos y funciones con código basic o Assembler en línea.
Errores con descripciones completas, me gusta mucho la manera de indicar un error por medio de una estructura, Ejem: Err.Descripción o Err.Numline o Err.Num
De donde tomar memoria
MEJORAS EN GRÁFICAS Y DE VÍDEO

EDITOR
• Varios formatos de pantalla, para coco 1 y 2, sería importante tener textos en 32,40,51,64,80 caracteres de ancho (no se podrán todos y la coco3 ya tiene varios).
Debe poseer editor full Screen. Podemos hacer un editor para Windows, para trabajar más cómodo, que luego lo pasemos a la máquina real o emulada.
Números de línea opcionales, Labels de strings y Gotos con variables, ejemplo: GOTO a+5*3 da una etiqueta numérica. También si a$="Repetir":GOTO a$+"Inicio" iria al label "RepetirInicio".
Menús pull down, tanto para el editor como para usar en los programas.
Zona de ejecución directa, pantalla para comandos directos y órdenes, debido a que es un editor full screen, necesita zonas donde escribir comandos en forma directa y observar resultados, en los basic Atari 16 bits, usan 3 ventanas, tal vez esto sea mucho, ya se estudiará.
Sub y Funciones de múltiples líneas estilo QB, parámetros pasados por referencia y valor, con parámetros opcionales y datos predeterminados, con cantidad de parámetros variables, estilo C++, con variables independientes
Posiblemente múltiples programas a la vez (estilo accesorios AMOS)
• Help integrado. Help in line, para comandos y parámetros
Compilación en vivo.
• Parar y Continuar (Stop, Break, Cont) sin perdida de variables.
Posibilidad de deshabilitar todo el basic(dejando el anterior), o solo las mejoras a cada comando, para hacerlo más compatible, las mejoras respetaran los comandos anteriores, solo agregaran funcionalidades (En comandos y funciones estarán indicadas las mejoras),
Formato de Comandos y Variables. Posibilidad de configurar si tanto los comandos y funciones o las variables van en mayúsculas, minúscula o la primera letra en mayúscula.
Aceptar comandos en minúscula.Escritura en mayúsculas o minúsculas y serán convertidas a lo necesario.
Posibilidad de comandos de varias palabras.

VARIABLES
Nombres de variables de más de 2 letras (opcional), en minúsculas también.
Tipos de variables, BYTE, INTEGER, LONG o WORD, SINGLE, DOUBLE, DATE/TIME, STRING de largo fijo y variable, de 65000 letras y tipo libre o Variant.
Cadenas de hasta 64k,
Variables internas de SUBS y FUNCIONES, con Local, Shared y Globales.
Estructuras, tal vez con uniones
Variable.algo para sub campos o bits.
Constantes como PI, e[/b], TRUE, FALSE
Variables de sistema: como Equipo, Keyboard y otras configuraciones de sistema.

LABELS
Etiquetas: puede ser un número, un texto o una expresión numérica o alfanumérica (parecido al ON GOTO)

COMANDOS NUEVOS
VAL y EVAL
ASM in line
SWAP 2 variables o 2 bytes de un entero
• DIM con variables (ya permitido) o REDIM (Preserve)
• LTRIM$, RTRIM$, ATRIM$ o TRIM$ o TRM$ borra espacios sobrantes a los lados
• ON RESET
• ON BREAK
• ON ERROR
• BREAK ON,OFF y función BREAK(obtiene el estado de BREAK)
• ERROR OFF
• PAUSE ON,OFF
• ON INTERRUPT Statements Not available in Basic Syntax: ON KBDIRQ GOTO line# (Keyboard interrupt) ON TMRIRQ GOTO line (12 bit Timer interrupt) ON SERIRQ GOTO line# (Serial data interrupt) ON IRQ GOTO line (60 cycle/other interrupt)
• PUTCHAR Y GETCHAR (CBASIC III)
• GEN parecido a DATA pero solo bytes, ahorra 4 a 1 en el fuente (puede ser de 2 bytes? o en Hex?)
• Rutinas para diálogos, botones e inputs
• Rutinas para seleccionar archivos, pre-hechas (fase II)
• Read Text (Rutina para leer documentos y mostrarlos en ventanas, tal vez editables)
• Menús, es un comando muy practico del amos, que permite hacer barras de menús muy fáciles. Ejem: Menu$(0)="Files ": Menu$(1)="Edit ": Menu$(0,1)="New ": Menu$(0,2)="Open "
• Modos de vídeo parciales, parte de la pantalla en un formato y parte en otro, e imitación de mas colores con trucos cambiando Screen (paletas) gracias a (Pser)
• 32,40,51,64,80 caracteres, 16,24 líneas
• Diferentes Fonts
• ROL, ROR y varios mas para variables.
• Mejoras Gráficas. en la coco 3 hay un verdadero revoltillo de comandos gráficos viejos y nuevos, (tal vez se pueda mejorar)
• Sprites computados, Colisiones.
Sort de DIMS y de varias columnas.
Select case
ENVELOPE, se puede hacer fácil y seguro
• BEEP, Sonidos básicos aunque ya hay Sound, ya veremos
• MCOPY (Copia Memoria)
• FILL (llenar memorias)
• SCROLL (Muy importante hacerlo en assembler) SCROLL PARCIAL, BANDAS
• BORDER.
• CHR$(0)= Definir caracteres.
• REVERSE video
• Función key (Usando las teclas Clear-0-9)
• Procedures (Subs y Functions) o lo que se decida.
Semigraficos, nunca hubo soporte (No hay en coco 3)
• Restar cadenas de caracteres( Esto lo hace AMOS) ejem: a$="Mi casa es azul": b$="casa": ?a$-c$ ---> "Mi es azul"
• Interupt
CHAIN para usar las variables con varios programas y hacerlos modulares, tal vez con librerías
• Funciones adicionales para poder hacer juegos, como sprites computarizados (por software claro, pero eficiente) (Manejo de música y efectos de sonido, MOD o algo así) (Detección de colisiones), formatos gráficos.
• El AMOS permite comandos de varias palabras (no se si sea bueno)
• Mejoras de las funciones matemáticas Seno, coseno, tan...., para que se le puedan dar parámetros en Grados, Radianes y Gradianes (Circulo en 300 partes).
• Funciones para fechas y horas.

COMANDOS ACTUALES Y SUS POSIBLES MEJORAS
Nota: Los corchetes [ ] denotan opcional

COMANDOS DEL BASIC
AUDIO ON/OFF: Encender/Apagar audio para oír Casete.
CLEAR [Espacio para caracteres] [, última pos]: Borra variables y asigna espacio para cadenas de caracteres y última posición de Basic para usar el resto para ensamblador.
CLOAD[M] [nombre] [, posición]: Carga el próximo programa o un programa llamado "nombre" en Basic o en lenguaje de máquina desde cassete, en la posición dada, si la hay. Mejora: reconocer si la cabecera es Basic o LM sin necesidad de poner la”M”, además debería colocar la extensión automáticamente (BAS/BIN)
CLOSE [puerto]: Cierra todos los canales o puertos de comunicación o alguno en especial, con comas se deberían cerrar varios puertos especificos, CLOSE #0 = Pantalla, CLOSE#-1 =cassette, CLOSE #-2= Impresora.
CLS[n] Borra la pantalla o con un color “n” y retorna el cursor a casa (esquina superior izquierda). Mejora: CLS [color] [, carácter], (@Start, End) o (x, y TO x1, y1): Borrar zonas cuadradas o continuas de pantalla por medio de la posición @ o las coordenadas, Borrar con cualquier carácter.
CONT: Continua la ejecución después de un STOP o BREAK, Mejora: Debería poder continuar en un número de linea o label indicado o con el editor
CSAVE/M nombre [, inicio, fin, arranque]: Graba un programa Basic .BAS o con “M” uno Binario .BIN, los .BIN necesitan la dirección de inicio fin y arranque, que es la dirección de carga.
DATA numero|cadena [, numero|cadena]: Permite números y cadenas sin comillas. Mejora: colocar en basic datas de bytes sin desperdicio como en el comando GEN de CBASICIII.
DIM variable(n [, m]…) [, variable(n [, m]…)]: Permite dimensionar más de 12 dimensiones, según la memoria, permite variables para dimensionar, Mejora: manejo de variables y tipos
END: Termina el programa.
EXEC [dirección]: Arranca la ejecución en una dirección.
FOR variable =<valor> TO <valor> [STEP <valor>] NEXT [variable] Mejora: Que use enteros
GOSUB línea : Mejora: Permitir Label y Variables
GOTO línea : Mejora: Permitir Label y Variables
IF THEN ELSE:Mejora: Permitir múltiples líneas con ELSE y END IF además de ELSEIF
INPUT[#] [puerto,] [texto;] variable [, variable] Puede mostrar un texto y preguntar por varios datos. Mejora: texto puede ser variable, editar la entrada, ancho de ventana
LIST [desde]-[hasta] Lista un programa desde hasta, si no hay desde usa el inicio y si no hay hasta usa el final. Mejora: tener pausa cada página o no existiría si es full screen, Aunque se debe poder listar al disco o guardar trozos de listado.
LLIST [desde]-[hasta] Lista un programa en impresora, desde tal linea, hasta tal linea, si no hay desde usa el "inicio" y si no hay "hasta" usa el final.será innecesario, se podrá usar estos espacios para el EDITOR Full Screen
MOTOR ON|OFF: Activa o no el motor del casete.
NEW: Borra programa y variables, Mejora: debe poseer reverso, en caso de borrado accidental, al menos hasta comenzar a agregar nuevos datos.
ON valor GOTO|GOSUB línea|Label [, Línea| Label]…
OPEN tipo, puerto, nombre$:
POKE dirección, valor [, cantidad]: coloca un valor en un byte según la dirección.Mejora: cantidad, coloca un valor en varios bytes, o podría tener varios datos separados por comas, y/o colocar datos INTEGER, WORD, LONG y otros. También debe poder manejar direcciones de mas de 64k, con un número mayor de 64k o por medio de 2 números, como BANCO y OFFSET.
PRINT USING, TAB (valor) que avanza la impresión al próximo TAB o tantos caracteres. Mejora: que se pueda imprimir en una variable para usar el formateo.
READ variable [, variable]: Lee datos desde DATA
REM y ': Comentarios
RESET(x, y): Pinta un punto con el color de fondo. Mejora: Tengo un problema con este comando, quiero usar RESET para un comando que resetee el equipo.
RESTORE: Restaura el punto de lectura de DATA. Mejora: RESTORE a una línea o label
RETURN: Retorna de una subrutina.
RUN: Ejecuta un programa. Mejora:[nombre]: Puede cargar y correr un programa.
SET x, y, c : Pinta un punto del color dado. Mejora: que sirva para High o tal vez no sea buena idea -no
SKIPF [“nombre”]: Avanza el casete hasta el final del próximo programa o al final del programa del nombre dado.
SOUND tono, duración: Tono (1-255), duración (0-255) 1/20 de segundo o sea 20 es 1 seg, Max 12,8 segundos
STOP: Detiene el programa, manteniendo las variables

FUNCIONES DEL BASIC
ABS(número): Retorna el absoluto de un número, número positivo.
ASC(número): Retorna el código ASCII de la primera letra de la cadena. Mejora: podría retornar el ASCII de cualquier carácter de la cadena con ASC(a$,5).
CHR$(número): Retorna el carácter del código ASC. Mejora: Puede retornar una cadena a partir de números separados por comas. Si los números son integer y no bytes (mayores de de 255), crea cadenas de 2 caracteres.
EOF(puerto) Indica si se terminaron los caracteres de un puerto.
INKEY$: Captura si hay teclas presionadas. Mejora: Permitir inkey SIN DÓLAR que retorna el código numérico.
INT(número) Da el entero de un número decimal, Mejora permitir DOUBLE Y retornar WORD y LONG.
JOYSTK(n) Da el valor de la posición de un eje de un joystick, 0=Horizontal Derecho, 1=Vertical Derecho, 2=Horizontal Izquierdo, 3=Vertical Izquierdo.Mejora que sirva para Hi-RES en los varios formatos que tiene la coco.
LEFT$(variable$, tamaño): Retorna un texto desde el lado izquierdo de la variable del tamaño dado
LEN(texto$): Retorna el tamaño de texto.
MEM: Retorna la cantidad de memoria libre: Mejora: toda la memoria, y memoria de caracteres.
MID$(variable$, desde [, cantidad]): Retorna una cadena cortada desde el carácter dado y tamaño de cantidad
MID$(variable$, desde [, cantidad])=dato$: Modifica una cadena desde el carácter dado y del tamaño de cantidad, sustituyéndolo por la cadena dentro de dato$, si "cantidad" no existe se usa el tamaño de "dato".
PEEK(dirección [, cantidad]): Retorna el valor del byte en la dirección. Mejora:cantidad que puede retornar datos integer y long. $, con dolar, puede retornar cadenas desde memoria. También pueden existir IEEK, LPEEK, DPEEK que retornan datos INTEGER, Long y Double
POINT(x, y): Retorna el color de un punto. Mejora: Servir para alta densidad HPoint ¿tengo dudas?
RIGHT$(variable$, cantidad): Retorna el trozo de la variable desde el lado derecho de la cantidad de bytes indicada.
RND (valor): Retorna un número random de 0 a valor sin llegar a valor, si valor es 0 repite la secuencia y si es negativo cambia la semilla, esta función está muy bien pensada y mejor que en los demás equipos de la época.
SIG (valor): Retorna el signo del número.
SIN (valor): Calcula seno de un angulo dado en radianes, Mejora: Revisar tablas o métodos, en Grados sexagesimales, Radianes, Gradianes (1/400 grados centecimales)
STR$(valor): Retorna una cadena desde un valor.
USR (Y): Retorna valores de programas de lenguaje de máquina DEFURS Define el punto de entrada para la URS
VAL (cadena$): Retorna el valor de la expresión en cadena. esta algo limitada ya que no evalúa si hay cálculos y sub-funciones, generalmente en otros basic se usa EVAL para mas capacidad.

COMANDOS EXTENDED BASIC
CIRCLE: pinta un círculo, Mejora: si se hace en enteros, corre mucho más
COLOR [foreground][, background]: Cambia el color y el fondo de los próximos dibujos.
DEF FN: Define funciones numéricas de una sola línea, se mantendrá por compatibilidad pero existirán Function y Sub o Procedures
DEL: Borra líneas, será innecesario, se podrá usar este espacio para el EDITOR Full Screen.
DLOAD: Comunicaciones Serial.
DRAW: Dibuja líneas tipo LOGO.
EDIT: Edita lineas, será innecesario, se podrá usar estos espacios para el EDITOR Full Screen.
GET: Lee un gráfico o un registro de datos de un archivo.
LET: Asigna datos a una variable.
LINE: Dibuja una línea.
PAINT: Pinta una zona de gráficos.
PCLEAR [0-8] Reserva espacio para gráficos. Mejora: No limitarlo a 8 páginas.
PCLS [valor]: Borra la pantalla gráfica con el color de fondo o el indicado en valor.
PCOPY: Copia páginas gráficas. Mejora: No limitarlo a 8 páginas.
PLAY: Ejecuta una secuencia de notas.
PMODE: Cambia el modo gráfico, se necesitan modos semigraficos.
PRESET X,Y : Borra un punto en resolución media.
PSET X,Y,C : Coloca un punto en resolución media,y del color indicado.
PUT: Pone un gráfico o un registro de datos en un archivo.
RENUM: Recalcula números d linea. Mejora: recalcula, crea o quita, todos los números de línea (los labels se convierten en números de linea), para usar el programa en equipos sin este BASIC. Podria ser innecesario, se podrían usar estos espacios para el EDITOR Full Screen.
SCREEN: Cambia entre modo texto o gráficos y tambien cambia la paleta de colores.
TRON/OFF: será innecesario, se podrá usar estos espacios para el EDITOR Full Screen, con break point

FUNCIONES EXTENDED BASIC
ATN (valor): Retorna el arco tangente de un ángulo en radianes
COS (valor): Retorna el coseno del ángulo dado en radianes
EXP (valor): Retorna el exponente natural e al número
FIX (valor): Retorna el entero truncado
HEX$ (valor): Retorna el valor en notación hexadecimal, Mejora: retornar cierta cantidad de dígitos fija, tambien así se pueden manejar los hex$ de números negativos, Falta un comando para Octal y binario. &O y &B o usando el signo %
INSTR: Busca la posición de un carácter en una cadena. Mejora: Nuevo comando que busque desde la derecha.
LOG: Retorna un logaritmo en base 10
POS: Retorna la posición en pantalla o de un archivo.
PPOINT: Retorna el color de un punto
SQR: Retorna la raíz cuadrada de un valor.
STRING$: Retorna una cadena del carácter repetido tantas veces. Mejora: Repetir cualquier string (de más de un carácter), tambien que pueda repetir el carácter dándole un valor numérico del código del carácter.
TAN: Retorna la tangente de un ángulo dado en radianes
TIMER: Retorna el número de 1/18 segundos, desde el encendido.
VARPTR: Retorna la dirección de una variable.


COMANDOS DISK BASICFORMATOS DE DISCO
BACKUP: Copia discos. Mejora no borrar programa(según se elija), aprovechar la memoria existente, si hay una sola unidad y segun la opcion no copiar sectores vacíos o empaquetar información para hacer menos pases. Formatear a la vez.
COPY: Copia archivos. Mejora: Para una sola unidad, hacer menos pases aprovechando la RAM Y/O empaquetando data.
Poder copiar varios archivos, tal vez wildcard

DIR[unidad]: Muestra el directorio de un disco en una unidad. Mejora: paginado o una ventana, con tamaños en Bytes o sectores, espacio libre y cantidad de archivos. además de varios formatos de ver y Wildcard
DOS: Ejecuta un BOOT de OS9/Nitros-9/Flex
DRIVE [unidad]: Unidad predeterminada para acciones en disco
DSKI$: Lee sectores. Mejora: usar variables más grandes de 256, usar lado A/B, 80 tracks. no se porque tiene "$" si no es función.
DSKINI [Drive/unidad]: Formatea un disco y luego lo verifica. Mejora: que no borre el programa. Agregar comando y compatibilidad con DISKINIT y FORMAT
DSKO$: Escribe sectores. Mejora: usar variables más grandes de 256, usar lado A/B, 80 tracks. no se porque tiene "$" si no es función.
FIELD : Indica las variables a rellenar en un acceso al disco en modo RANDOM.
FILES: Indica la cantidad de buffers y su tamaño en bytes. Mejora: una función que retorne estos datos
KILL: borra archivos. Mejora: puede tener parámetros, ejemplo: preguntar si se está seguro
LOAD/M Nombre, [offset]: Carga un programa Basic o de lenguaje de maquina (M) a este se le puede dar un offset para mover el sitio de carga. Mejora: Que reconozca el formato del archivo para cargar el programa sin la "M", y/o que asuma la extensión o la extensión de el tipo de carga, ademas debería poder ejecutarlo automáticamente (Parámetro ,A).
LSET: Alinea al lado izquierdo los datos en las variables fields
MERGE: Mezcla programas, se mantendrá por compatibilidad ya que se puede ejecutar en vivo y usarse desde programas, si es innecesario, se podrán usar estos espacios para el EDITOR Full Screen
RENAME: Renombra archivos en disco.
RSET: Alinea al lado derecho los datos en las variables fields
SAVE/M Nombre[,A] [, Desde, Hasta, Dirección de ejecución] : Graba un programa de basic en forma tokenizada (comprimida) o con ",A" en texto ASCII o con la "M" graba una zona de RAM como un programa de lenguaje de maquina. Mejora: Asumir la extensión y/o si tiene extensión asumir la "M"
UNLOAD [Unidad]: Cierra todos los archivos abiertos en una unidad o todas, parece poco necesario ya que está CLOSE
VERIFY [ON/OFF] : Activa o apaga el modo de verificación de datos escritos en disco. Mejora: una función que retorne el estado de este switch.
WRITE: Escribe variables en un archivo de disco serial

FUNCIONES DISK BASIC
AS: Asigna espacios en las variables FIELD.
CVN Mejora:faltarían los conversores para Enteros, Word, Long, Double
FREE Mejora: dar el espacio en Gránulos, sectores y Bytes, puede ser en base a un parametro: (valor)= "G"= en granulos; "S"= en sectores; "B"= en bytes.
LOC : posición en el archivo abierto.
LOF : Tamaño del archivo abierto.
MKN$: Mejora:faltarían los conversores para Enteros, Word, Long, Double

COMANDOS SUPER-EXTENDED BASIC o EXPANDED BASIC
ATTR: Muestra los atributos de los archivos.
BRK: Parte del comando ON Break
CMP: ?
ERR : Muestra el ultimo código de error
Comandos gráficos de alta resolución:
HBUFF
HCIRCLE
HCLS
HCOLOR
HDRAW
HGET
HLINE
HPAINT
HPRINT
HPUT
HRESET
HSCREEN
HSET
HSTAT

LOCATE
LPOKE
PALETTE
RGB
WIDTH

FUNCIONES SUPER-EXTENDED BASIC o EXPANDED BASIC
BUTTON: los 4 botones de los joysticks
ERLIN
ERNO
HPOINT
LPEEK

ADICIONES DRAGON
ADICIONES DP400
ADICIONES Dynacom Mx-1600
Necesito ayuda con info de estos equipos
Alguien tiene estos equipos?

NUEVOS COMANDOS Y FUNCIONES
COMANDOS:
KEYBOARD tipo de teclado (por definir cómo se le indicará este parámetro):
KeyDelay [1st key delay], [repeat delay]; tendrá 2 parámetros ambos opcionales, tambien se puede hacer con funciones
ON BREAK GOTO/GOSUB
ON ERROR GOTO/GOSUB
ON RESET GOTO/GOSUB
SELECCION:
IF THEN ELSEIF ELSE ENDIF, para varias lineas, el THEN puede faltar en algunos casos, la coco usa GOTO directamente en su lugar tambien
SELECT...CASE, con CASE ELSE o DEFAULT, (Break o continue) no aplica ya que los case en basic se cortan en el siguiente y si se quiere continuar en el siguiente case se usa GOTO

LOOPING:
FOR TO STEP...NEXT
DO[WHILE][UNTIL](condición)...LOOP[WHILE][UNTIL](condición); yo usaria solo DO LOOP con las condiciones arriba y abajo, pero existen muchas variantes como DO .... WHILE y DO... UNTIL o las de abajo y con salidas en medio como EXIT (número de loops anidados), Exit IF, Break, Continue.
REPEAT...[b]UNTIL(condición)[/b]
WHILE(condición)...WEND

FUNCIONES
KEYBOARD Retorna el tipo de teclado seleccionado por el sistema al arrancar o a mano por el usuario o programa
KeyDelay ; configura el retardo de primera tecla
KeyDelay=Valor ; Retorna el retardo de primera tecla
RepeatDelay ; retorna el retardo entre teclas
RepeatDelay=valor ; configura el retardo entre teclas
GETKEY$; Espera y retorna una tecla, igual que “Wait key”; tambien puede haber un GETKEY sin dolar que retornaría el código de la letra.

COMPRENSIÓN, ESTUDIO Y MEJORAS DEL CÓDIGO FUENTE (LINKS)
COMIENZO DEL BASIC ($A000 - $A175)
RUTINA CONSOLE IN ($A176 - $A1C0 )
RUTINA DE LECTURA DE TECLADO (KEYIN)($A1C1-$A244)
CONSOLE OUT
$A282 - $A2A7 CONSOLE OUT, que incluye:
* $A290 - $A2A7 SEND TO CASSETTE
$A2A8 - $A2BE WRITE A BLOCK OF DATA TO TAPE
$A2BF - $A309 SOFTWARE UART TO LINE PRINTER
$A30A - $A34D PUT A CHARACTER ON THE SCREEN
$A34E - $A35D SCROLL THE SCREEN
RUTINA PARA MANEJO DE TABS, SEGÚN EL DEVICE ($A35F - $A38B)
INPUT DEVICE NUMBER CHECK ($A3ED - $A405)
PRINT DEVICE NUMBER CHECK ($A406 - $A415)
CLOSE ($A416 - $A44B)
CSAVE ($A44C - $A497)
CLOAD/M ($A498 - $A53D)
EXEC ($A53E - $A548)
BREAK CHECK ($A549 - $A551)
EVALUA UN ARGUMENTO Y CHEQUEA QUE ESTE DENTRO DE LA PANTALLA ($A554 - $A563)
INKEY$ ($A564 - $A575)
STRIP A FILENAME OFF OF THE BASIC INPUT LINE ($A578 - $A599)
MOVE ACCB BYTES FROM (X) TO (U) ($A599 - $A5A1)
GET DEVICE NUMBER FROM BASIC LINE - CHECK VALIDITY ($A5A2 - $A5C4)
BUSCA UN NOMBRE EN UNA LINEA BASIC ($A5C5 - $A5CD)
EOF (End Off File) ($A5CE - $A5EB)
SKIPF ($A5EC - $A5F5)
OPEN ($A5F6 - $A680)
BUSCA EL CORRECTO NOMBRE DE ARCHIVO EN CASETE ($A681 - $A700)
LEER UN BLOQUE DESDE EL CASETE ($A701 - $A748)
LEE UN BYTE DESDE CASETE ($A749 - $A754)
LEE UN BIT DESDE CASETE ($A755 - $A75C)
CICLO PRINCIPAL DE TIEMPO ($A75D - $A761)
ESPERA POR TRANSICIÓN DE BAJO A ALTO ($A763 - $A76B)
LEE EL BIT DE CASETE DEL PIA ($A76C - $A772)
ESPERA POR TRANSICIÓN DE ALTO A BAJO ($A773 - $A77B)
DETECTA LOS BYTES DE SINCRONISMO ($A77C - $A7BC)
MOTORON/OFF ($A7BD - $A7D1)
ESPERA MIENTRAS DECREMENTA X A CERO ($A7D3 - $A7D7)
ENVIA LA CANTIDAD EN SYNCLN DE $55 AL CASETE ($A7D8 - $A7E4)
ESCRIBE LOS BYTES DE SINCRONISMO Y UN BLOQUE ($A7E5 - $A7E7)
APAGA EL MOTOR ($A7E9 - $A7F3)
ESCRIBIR UN BLOQUE EN CASETE ($A7F4 - $A829)
* ENVÍA ACCA AL CASETE ($A82A - $A83A)
* EMISIÓN DE UN BIT 0 EN BAJA FRECUENCIA 1200 Hz ($A83B - $A847)
* EMISIÓN DE UN BIT 1 EN ALTA FRECUENCIA 2400 Hz ($A848 - $A85B)
* TABLA DE VALORES PARA LA FORMA DE ONDA SENOSOIDAL ($A85C - $A880)
SET ($A880 - $A8B0)
RESET ($A8B1 - $A8C0)
Esta rutina lee y chequea los parámetros X,Y para los comandos SET, RESET y POINT ($A8C1 - $A8F4)
POINT ($A8F5 - $A90F)
CLS ($A910 - $A927)
* Borra la pantalla ($A928 - $A93E)
Evalúa la duración ($A93F - $A948)
* SOUND ($A94B - $A973)
* ACTIVA O DESACTIVA EL MULTIPLEXOR ANALOGICO ($A974 - $A98F)
* AUDIO ($A990 - $A9A2)
* SELECTOR DEL MULTIPLEXOR ANALOGICO (A9A2 - A9B2)
* IRQ SERVICE ($A9B3 - $A9C5)
JOYSTK ($A9C6 - $A9DE)
* Rutina de conversión de loas 6 BITs por software con el conversor analógico A/D ($A9DE - $AA19)
* Rutina de chequeo numérico y fin de linea ($AA1A - $AA28)



OTROS BASICs Y COMPILADORES
OTROS BASICs Y COMPILADORES

Continuará
Estoy mejorando esta parte

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 15 Ago 2017 00:34

Empezaré la discusión con lo siguiente:
La color computer y muchos otros equipos parecidos, no tienen oportunidades de hacer cosas en basic, debido principalmente a la escasez de prestaciones del basic, según mi opinión si estos basic pudieran usar enteros, ser compilados, o código P, se pudieran expandir con lineas de Ass en linea, y buen editor, otra cosas serian.

Cualquiera podría hacer juegos de mediana calidad o mejor, no como ahora, que si no se hacen en ensamblador no quedan nada bien.

Hay rutinas cortas por toda la red, muestran que el basic es ineficiente, la rutinas mostradas abajo tardarían 20 veces más en basic normal, tambien hay rutinas para sprites computacionales, y pser tiene magníficas funciones de pantallas
Hecho por: simon jonassen
https://www.facebook.com/simon.jonassen1/videos/10159148962925506/
https://www.facebook.com/simon.jonassen1/videos/10159182838940506/

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 15 Ago 2017 06:43

El proyecto comenzará con la base del Basic actual y unas discusiones de mejoras factibles a corto plazo.
Necesitaría algunas personas que quieran aportar, y ver si es factible.
Obstáculos a vencer
    * Espacio para basic, Se unirán los 3 o 4 basics que hay, BASIC, EXTENDED, DISK y EXPANDED (coco 3), pienso que puede ser mejor así ya que la CoCo tiene problemas si carga un programa con comandos de disco y la unidad de disco no existe o comando de extended en máquinas sin extended basic, solo que los comandos darían error.

    * Tokens:
    Actualmente se utilizan los códigos siguientes:

    Código: Seleccionar todo

                     Comandos   -    Funciones (Usan $FF delante)
    Basic            $80 al $B4     $80 al $93
    Extended         $B5 al $CD     $94 al $A1
    Disk             $CE al $E1     $A2 as $A7
    Super Extended   $E2 al $F8     $A8 al $AC
    Quedando libres para comandos solo desde $F9 al $FF, solo 7 comandos y para funciones desde $AC a $FF = 83 funciones

    PROPONGO: usar el $FE para marcar otros 128 comandos y el $FE para más funciones si son necesarias, todavía no estoy seguro porque no usan todos los 256 códigos, sobre todo si empiezan por $FF, asi no habrá demasiado cambio

    * Comprensión total del basic actual

dancresp
Mensajes: 5039
Registrado: 13 Nov 2010 02:08
Agradecido : 22 veces
Agradecimiento recibido: 92 veces

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor dancresp » 16 Ago 2017 01:01

Aunque pueda parecer mentira, me he leído todo tu ladrillo y el tema es muy interesante, pero no acabo de entender exactamente que quieres hacer.
¿Se trata de hacer un BASIC con el que programar en la máquina original (o emulador) y que a parte de ampliar los comandos, funcione más rápidamente?
Si es así, creo que vas mal, al menos en cuanto a velocidad, y con tantos comandos no se que memoria quedará libre en los equipos más simples.

Yo dediqué unos años a programar en más de 30 sistemas diferentes y aprendí bastante sobre ellos, con sus pros y contras. En algunos casos, los contras eran pros en temas de rendimiento, que con BASIC es muy importante.

Tengo claro, que algo que afecta mucho al rendimiento es el tema de las variables. Es ineficiente tener que estar buscando continuamente una variable por su nombre y a continuación coger su valor. En este aspecto, el Camputers Lynx tiene un número limitado de variables, pero el acceso es muy rápido ya que creo que el área de variables debe tener un tamaño fijo, o algo similar. Si cada variable numérica ocupa, por ejemplo 6 bytes, por su nombre de una letra o letra+número, se podría indexar con su dirección automáticamente. Sería muy rápido. Y las variables alfanuméricas, mejor dimensionarlas al principio.

El acceso a pantalla es otra handicap de muchos equipos. El ejemplo más claro es el Amstrad CPC, con un BASIC muy rápido pero con un PRINT exageradamente lento. Pokear directamente en la memoria sería lo mejor.

Y otro aspecto sería la estructura del lenguaje. Aquí el FORTH gana por goleada, ya que la estructura es inexistente y el BASIC está continuamente revisando si está todo bien. ¿Que tal una opción que permita desactivar la sintaxis de la línea, y si peta, peta? Se ganaría mucho tiempo.

Si las líneas no llevan número, gestionarlo por etiquetas probablemente sea peor, al menos en rendimiento.

No se, hay muchas cosas a tener en cuenta, pero probablemente sea mejor tener menos (pero suficiente) con un buen rendimiento, que demasiado con problemas de rendimiento o memoria.

Dejo de dar la bara, ya nos irás contando como va el progreso.

Solo decir que en algún momento me he planteado lo mismo, pero siempre era tipo generar un pseudo-código que se ejecuta con un run-time o compilar el BASIC, a lo Cold Compiler del ZX-Spectrum.

Suerte y ves contando !!!

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 16 Ago 2017 04:32

dancresp escribió:Aunque pueda parecer mentira, me he leído todo tu ladrillo y el tema es muy interesante, pero no acabo de entender exactamente qué quieres hacer.
¿Se trata de hacer un BASIC con el que programar en la máquina original (o emulador) y que a parte de ampliar los comandos, funcione más rápidamente?
Si es así, creo que vas mal, al menos en cuanto a velocidad, y con tantos comandos no se que memoria quedará libre en los equipos más simples.

Exactamente, pero no creo que vaya mal, te explico. tal vez no lo logre pero por culpa mía, no por que no sea el camino.
Veras el basic de la color computer y muchos otros, cada vez que haces referencia a una variable el la busca de principio a fin, no están ni siquiera ordenadas para buscarlas con búsqueda binaria, imagina 1000 variables, esto hay varias formas de mejorarlo, ahora te explico algunas.
También cuando haces un goto o gosub el busca linea por linea, esto es fácil de mejorar, incluso con labels, puedo hacer una tabla indexada con búsqueda binaria manteniendo solo los nombres y dirección, o más dramáticamente, que en el fuente ya esconda el address del label, para las variables algo parecido, sería pre compilado, ya veremos que más se nos ocurre a los que quieran participar.
Yo ya tengo mucha experiencia en hacerme mis cosas, ya desde MSDOS, yo me hice mi propia base de datos relacional, con múltiples índices, se auto reparaba y indexar, los archivos ocupan mucho menos que los de DBASE y los índices como 10 veces menos y rapidísima, con decirte que hoy día todavía están en uso mis programas de MSDOS, asi que miedo a esto, no lo tengo.

Este equipo nada más pudiera tener integer, ya mejoraría 3 veces en rendimiento si no más. También tengo la experiencia del AMOS, que realmente acelera todo por estar magníficamente hecho.

Obviamente tendré contras y paredes que superar, y que es monumental, pero planeo partir de basic y mejorar de a un comando a la vez. en la coco hay muchos intentos, incluso buenas mejoras, con unos 20 o más comandos nuevos.

dancresp escribió:El acceso a pantalla es otra handicap de muchos equipos. El ejemplo más claro es el Amstrad CPC, con un BASIC muy rápido pero con un PRINT exageradamente lento. Pokear directamente en la memoria sería lo mejor.

Esto acá es poco importante, se puede escribir directo, más bien haré modos gráficos para texto más pequeño, como muchos programas coco, incluidos procesadores de texto y OS9/NitrOS-9.
dancresp escribió:Y otro aspecto sería la estructura del lenguaje. Aquí el FORTH gana por goleada, ya que la estructura es inexistente y el BASIC está continuamente revisando si está todo bien. ¿Que tal una opción que permita desactivar la sintaxis de la línea, y si peta, peta? Se ganaría mucho tiempo.

Es posible que sea como visual basic 6, que está casi compilado, (pseudo codigo) ya veremos

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 16 Ago 2017 04:46

NUMEROS DE LINEA y LABELS
En este mensaje colocare todo lo referente a este tema, para mantener el orden.

Reglas
Hasta ahora, los números de línea y labels pueden existir o no en una línea, si son letras empiezan por Letra, luego pueden tener números y terminaran por ":"
Esto me suena a que los separa con la rutina de separar comandos en una línea por los dos puntos, ya veremos.
La estructura actual del basic en memoria es :
Bytes - Descripción
1 - 0
2 - Dirección de la próxima línea
2 - Numero de linea en formato integer sin signo
256 - Línea toquenizada
1 - 0 fin de línea
2 - Dirección de nueva línea o cero (0) fin del programa

Para este nuevo basic, seria:
1 - 0
2 - Dirección de la próxima línea
256 - Label/Numero + Línea toquenizada + 0
2 - Dirección de la próxima línea o 00 Final

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 16 Ago 2017 06:19

GOTO y GOSUB

Al momento de escribir el GOTO/GOSUB se puede buscar el LABEL y avisar si no existe o si existe, se colocaría su dirección (descartado). esta dirección es innecesaria hasta correr el programa. además del problema de que al modificar líneas entre el GOTO/LABEL este apuntador no seria valido. Si la dirección es 0 se debe compilar de nuevo, o si se ha modificado líneas entre el LABEL y su GOTOs

Una dirección relativa tendrá más ventajas ya que no se moverá si agregan o eliminan caracteres o líneas antes o después del LABEL y GOTO.

Al momento de ejecutar el programa se compilara, se buscará el label/número, si no es variable (ya que se podrán usar cálculos y/o variables).

En el fuente se verá GOTO LABEL, pero en memoria se podría colocar el apuntador, se puede preparar ese SALTO al momento de correrlo (compilación al correr), o al grabar (Descartado, al grabar se grabaran los apuntadores si estos están creados después de un RUN y no se ha modificado nada entre GOTO/LABEL).

(Decisión actual):
* Colocaremos el salto en forma relativa.
* Se colocará al compilar, antes de correrlo. no se compilara al grabar o cargar pero si están los apuntadores, se grabaran.
* Se mantendrá el LABEL para recrearlos de nuevo si hubo cambios.

Quedarían instantáneos.

IMPLEMENTACIÓN:
Internamente en memoria o save, se usará el token de GOTO/GOSUB más la dirección de 2 o 4 bytes (por definir, la coco tiene 64k pero la coco 3 puede tener 512, y no se si todas pueden llegar a 8mb). Además del LABEL de referencia, este label podría omitirse (descartado) ya que a la hora de mostrarlo, si tenemos la dirección, pues podemos mostrar el label del destino directamente.

Al insertar o borrar texto o líneas entre GOTO y LABELS estos perderían su unión, teniendo que rehacer esta unión por medio de la búsqueda de los labels en los GOTOs, por lo tanto, no se pueden eliminar los LABELS en los GOTOs

Problemas:
En los salto variables (que dependen de una variable o cálculo), no se podría implementar este salto de antemano, sino en el momento de calcular el salto, perdiendo todo lo ganado en velocidad. Se puede dejar como opcional con la salvedad de avisar la caída grave de velocidad.

Por supuesto si ya están calculados no se necesita recalcular a menos que modifiquen líneas entre LABEL y GOTO

No veo problemas, hasta ahora, no necesito tabla de labels o números de línea.

Para compatibilidad este basic podría colocar numeros de linea y quitar los labels de texto, los saltos variables no se podría usar en este caso
RESULTADO:
OK

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 16 Ago 2017 07:18

VARIABLES
Al margen de los tipos de variables.
Al igual que con los LABELS, las variables están directamente apuntadas, de la siguiente manera:
* En el fuente, al terminar el texto del nombre de la variable, lleva un apuntador de 2 o 4 bytes que apunta a los datos de la variable.
* La zona de datos de variables comenzará al terminar al fuente.
* El apuntador es relativo al comienzo de la zona de variables.
* No hay tabla de variables con NOMBRES a buscar.
* No hay busquedas, todo compilado al RUN.
* Toda referencia apunta al mismo sitio
* (Eficiencia extra) Esta ubicación y para mejorar la eficiencia puede ser "in situ" en el mismo sitio de la variable, pudiendo marcar si lo que está a continuación de una variable es un apuntador o la propia data de la variable, (esto se puede marcar encendiendo el bit 7 de la última letra del nombre de la variable o algo asi. Esto pasa con los String que mientras no se modifique, el basic apunta la variable al código fuente, o como las constantes o literales que tambien actúan así.

Ventajas
* Acceso instantáneo.
* Se puede continuar despues de ediciones del código fuente.
* no hay tabla de variables
* Puede haber varias Zonas para variables dentro de Subs o functions

Al escribir más codigo (Si ya se corrió el programa), las variables se moverán pero su apuntador al ser relativo al comienzo de ellas no tendrá que ser recompilado. mantendrá valores para continuar.

Otra vez una alta eficiencia de velocidad, con solo el gasto del apuntador por cada variable, de 2 o 4 bytes.
Ciertamente si usamos A=A+1, al colocarle 4 bytes a cada A parece un gasto enorme, pero para nombres de variables de muchos caracteres esto sería poco.

Desventajas
* Gasto de RAM

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 16 Ago 2017 07:31

TIPOS DE VARIABLES Y DATOS
* INTEGER , con DEFINT letra-Letra (aunque me parece aberración), con % o literales sin punto, o coma(internacional)
* Simple
* Doble (tal vez)
* String
Dimensiones de todo
Estructuras (veremos)
Constantes
Local, Global (Common), Shared
DIM, REDIM (Preserve), Erase DIM
Literales con símbolos de %Integer, &Long , !Simple, #Doble, &hHex o $ o 0X, &O Octal, &b Binario, $String
Faltan BYTE, Binario, BOOLEANO, tipo FECHA, DATE, TIME
También hay un tipo de decimal, no coma flotante, mas preciso para calculos sin aproximaciones, que usaba DBASE

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 16 Ago 2017 07:51

FUNCIONES y SUBs o PROCEDURES Aun no se que nombre, ni si hacen falta SUBs y FUNCTIONs ya que la diferencia es solo si retorna valor y sirve como variable o en cálculos.
* Las funciones y Subs pueden poseer Parámetros pasados por referencia, para pasar por valor usar BYVAL/BYREF.
* Puede ser opcionales, marcando las comas (Si la función o sub lo permite).
* No se si se implementaran número de argumentos variables.
* El tipo de parámetro se puede definir.
* El tipo de retorno tambien se puede tipificar.
* Las funciones llevan los parámetros rodeados por paréntesis, los comandos NO
* Cualquier SUB o FUNCTION pasa a ser una nueva palabra de basic, hasta con help y guia de parámetros

Implementación:
Debido a que los comandos y funciones ya estarán tokenizados y que este token es directamente un link con la función o comando, no habrá interpretación, Ahora bien los parámetros son otra historia, normalmente Basic los lee letra a letra, esto se puede mejorar, pasando los números literales a formato de 2 bytes, los cálculos habrá que interpretarlos, todos los parámetros acaban en el STACk antes de saltar a la función o comando, no se si esto se mantendrá, lo que si es que ya deben estar muy pulidos para que no se tenga por ejemplo que chequear sintaxis.

Por ejemplo: un FOR A=0 TO 10000, debería estar incluso en fuente así:

(Toquen de FOR)
(Posiblemente el nombre de la Variable):
Es posible que los nombres se pongan en una tabla o antes de sus datos para no repetir nombres largos en FUENTE
(Dirección de la Variable A)
(Dirección del Dato INICIAL)
Sea variable, literal o cálculo, Si es cálculo y posee un valor constante se colocaría este aunque se mantengan los caracteres del fuente
(Dirección del Dato Final) Igual que el inicial
(Dirección del Dato STEP) Igual que el inicial

RESTO DEL LOOP

(Token del NEXT)
Se debería descartar lo que sigue a continuación ya que es automático, y los NEXT B, A con cruces deberían ser detectados al editar

EN EL BASIC ACTUAL SE DEFINE ASÍ:
* THE FOR COMMAND WILL STORE 18 BYTES ON THE STACK FOR
* EACH FOR-NEXT LOOP WHICH IS BEING PROCESSED. THESE
* BYTES ARE DEFINED AS FOLLOWS:
* 0 = $80 (FOR FLAG);
* 1,2 = INDEX VARIABLE DESCRIPTOR POINTER;
* 3-7 = FP VALUE OF STEP;
* 8 = STEP DIRECTION: $FF IF NEGATIVE; 0 IF ZERO; 1 IF POSITIVE;
* 9-13 = FP VALUE OF ‘TO’ PARAMETER;
* 14,15 = CURRENT LINE NUMBER;
* 16,17 = RAM ADDRESS OF THE END OF THE LINE CONTAINING THE ‘FOR’ STATEMENT
--------------------------------------------------------

RESULTADOS: Este ejemplo al parecer bastante eficiente, lograría un FOR Bastante parecido a uno en Assembler, sin chequeo de sintaxis ni demoras sobre todo en los loops, Prácticamente compilado. Si nos fijamos en el basic normal, al no tener Integer ní long tiene que almacenar el Step y el end como flotantes y todos los cálculos tambien.
Por eficiencia no se permiten Dimensiones en la variable del For.
Como curiosidad se usa el token $80 como señalador en el Stack al igual que en los Gosubs que se usa el token $A6 del SUB

Aun no entiendo porque los basic usan el GO aparte de TO y de SUB, alguna eficiencia será, el TO sirve tambien para el FOR pero lleva variables y el de GOSUB es una dirección, bueno ya lo entenderé

Avatar de Usuario
dandare
Mensajes: 360
Registrado: 15 Jul 2016 00:38
Ubicación: Madrid, Córdoba, Luanco
Agradecido : 20 veces
Agradecimiento recibido: 90 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor dandare » 16 Ago 2017 11:55

Si el proyecto es para "trastear" con el CoCo, no digo nada, pero si lo que buscas es un lenguaje potente, rápido y con todas esas funciones, te iría mucho mejor un compilador, en lugar de un intérprete, y además cruzado, desde una máquina Windows/Mac/Linux.

Podrías empezar a hacer un compilador en C que sea portable, incluso apoyándote en herramientas ya hechas en un principio, como Yacc, bison, flex...

Es sólo una sugerencia, porque he entendido que querías hacer un intérprete, también por el uso de varias expresiones computadas en tiempo de ejecución, como algunos saltos calculados. Creo que ese intérprete iría tremendamente lento en un CoCo :).

Ánimo y suerte con el proyecto.
_.. ._ _.

Avatar de Usuario
pser1
Mensajes: 2024
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 192 veces

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor pser1 » 16 Ago 2017 13:32

Hola,
he ido leyendo los posts, y debo decir que estoy totalmente de acuerdo con "dandare".
Actualmente, yo trabajo con un editor en el PC, uso un compilador en el PC y hago pruebas / debugo en el mismo PC.
Solo cuando quiero verificar que funciona en la máquina real, muevo el binario al Dragón ... además vía drivewire.

Así que, si la intención es obtener un entorno que produzca código rápido y eficiente pero cómodo para programar,
yo me decantaría por el lenguaje C, quien mas quien menos se habrá peleado ya con el!
En la red podréis encontrar un proyecto en este sentido desarrollado Pierre Sarrazin. El nombre del proyecto es CMOC
y viene a ser un compilador 6809 para C, su web es:
https://perso.b2b2c.ca/~sarrazip/dev/cmoc.html
El único problema que presenta (para mi) es que está hecho para Linux, no para máquinas Window$

No me mal interpretéis, pero va recordándome el OS-9 y los lenguajes de programación que venían con el ... C, Pascal, ASM
y sobre todo el BASIC09 todos ellos ofreciendo las 64k de la máquina con sus restricciones claro ...
Seguiré atento a este hilo, a ver que sale de todo este 'brainstorming'

saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 16 Ago 2017 13:56

dandare escribió:Si el proyecto es para "trastear" con el CoCo, no digo nada, pero si lo que buscas es un lenguaje potente, rápido y con todas esas funciones, te iría mucho mejor un compilador, en lugar de un intérprete, y además cruzado, desde una máquina Windows/Mac/Linux.

Podrías empezar a hacer un compilador en C que sea portable, incluso apoyándote en herramientas ya hechas en un principio, como Yacc, bison, flex...

Es sólo una sugerencia, porque he entendido que querías hacer un intérprete, también por el uso de varias expresiones computadas en tiempo de ejecución, como algunos saltos calculados. Creo que ese intérprete iría tremendamente lento en un CoCo :).

Ánimo y suerte con el proyecto.

Yo ya tengo hecho el Desensamblador/Ensamblador, me falta unirlo con el VCC o recrear un Emulador para hacer el ambiente completo, no me gusta usar mucho otras herramientas siempre te falta algo que no hacen.

Con respecto a intérprete, solo es un decir, ya que todo estará precompilado, o se compilara al ejecutar, tal vez no sea un enfoque muy usado, pero el compilador espera que ya este todo probado yes imposible detenerlo y ver sus variables y mucho menos continuar la ejecución, esto no es un imposible ya que Visual Basic 6 lo logra perfectamente, y corre igual de rápido en fuente que en el ejecutable, aunque es posible que sea engañoso y el ejecutable sea un Pseudo-código y no Assembler directo.

Pienso borrar la raya entre Interpretado y Compilado.

Este proyecto se podrá expandir a todo equipo.

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 16 Ago 2017 14:27

pser1 escribió:Hola,
he ido leyendo los posts, y debo decir que estoy totalmente de acuerdo con "dandare".
Actualmente, yo trabajo con un editor en el PC, uso un compilador en el PC y hago pruebas / debugo en el mismo PC.
Solo cuando quiero verificar que funciona en la máquina real, muevo el binario al Dragón ... además vía drivewire.

Así que, si la intención es obtener un entorno que produzca código rápido y eficiente pero cómodo para programar,
yo me decantaría por el lenguaje C, quien mas quien menos se habrá peleado ya con el!
En la red podréis encontrar un proyecto en este sentido desarrollado Pierre Sarrazin. El nombre del proyecto es CMOC
y viene a ser un compilador 6809 para C, su web es:
https://perso.b2b2c.ca/~sarrazip/dev/cmoc.html
El único problema que presenta (para mi) es que está hecho para Linux, no para máquinas Window$

No me mal interpretéis, pero va recordándome el OS-9 y los lenguajes de programación que venían con el ... C, Pascal, ASM
y sobre todo el BASIC09 todos ellos ofreciendo las 64k de la máquina con sus restricciones claro ...
Seguiré atento a este hilo, a ver que sale de todo este 'brainstorming'

saludos
pere

Si los entiendo, pero a a vez quiero cerrar una brecha en los usuarios, tal vez los que saben C y Assm logren hacer un juego para coco, pero por cada uno hay 100 que no podrán, mientras que en Basic, si podrían, la cantidad de juegos nuevos en COCO podría aumentar dramáticamente, si esto funcionase, el basic actual, no puede almacenar datos eficientemente, no tiene buenas ayudas para hacer las cosas bien, ni formatos de imágenes, ni sonido como para un juego, no logras hacer nada decente en basic, por eso nadie lo usa.

Lo de "C" para 6809 es un buen trabajo, pero aun tienes que hacer le una buena libreria grafica y demas y pelearte con todos los pokes hasta que te los aprendas, eso no debería ser el trabajo del diseñador de juegos en basic.

Lo de hacerlo desde PC si me agrada, sería un paso más y genera un ejecutable coco, pero sería ayudado por un emulador o algo asi, es tambien me gustaria, creo que hice un intento, ya que el basic de coco es parecido al GWBASIC o al QB o QG64 que use en el proyecto Hobbit, estos fuentes podrían ser compatibles, ya veremos

A la vez tambien si tenemos un basic mejor, en los emuladores tambien se podría trabajar mejor

Yo no habría podido hacer lo que he hecho este año en Amiga, si no fuera por el BASIC AMOS Profesional, ya que no tendría el tiempo de aprender todo lo que hay que saber de Amiga en assembler, y hay buenos desarrollos para ella gracias a este Basic de 600 comandos.

El Amos fue hecho por François Lionet el cual he tenido el honor de conocer, gran carisma e inteligencia

Vean solo esto todo en AMOS http://amigamejam.ultimateamiga.co.uk/
http://www.mobygames.com/game-group/games-made-in-amos

Hechos en AMOS o en Hacedores de juegos hechos en AMOS
https://www.youtube.com/watch?v=O7Vi7PRLwM4&t=964s

Avatar de Usuario
luiscoco
Mensajes: 2334
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 45 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 16 Ago 2017 16:42

TOKENS
Lo tokens al parecer no se tienen que modificar mucho
hasta ahora se respetaran básicamente, y solo se añadirán los casos necesarios, para las funciones hay unos 60 libres, para los comandos hay pocos y propongo usar el FE para conseguir ubicar 127 más.

Repitiendo este trozo
* Tokens:
Actualmente se utilizan los códigos siguientes:

Código: Seleccionar todo

                 Comandos   -    Funciones (Usan $FF delante)
Basic            $80 al $B4     $80 al $93
Extended         $B5 al $CD     $94 al $A1
Disk             $CE al $E1     $A2 as $A7
Super Extended   $E2 al $F8     $A8 al $AC
Quedando libres para comandos solo desde $F9 al $FF, solo 7 comandos y para funciones desde $AC a $FF = 83 funciones

PROPONGO: usar el $FE para marcar otros 128 comandos y el $FE para más funciones si son necesarias, todavía no estoy seguro porque no usan todos los 256 códigos, sobre todo si empiezan por $FF, asi no habrá demasiado cambio

Avatar de Usuario
pser1
Mensajes: 2024
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 192 veces

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor pser1 » 16 Ago 2017 16:51

Hola Luis,
mi preferencia por el C es tendenciosa, sí, pero como tiene aquella cosa de que tu puedes programar en C como si lo estuvieras
haciendo en Basic y dejar la parte complicada de crear los 'nuevos' comandos a los expertos que podrán ir creando una(s) librería(s)
de funciones lo mas optimizada(s) posible.
La diferencia con respecto a un Basic expandido (al que le has añadido mas comandos), es que en un programa C solamente 'incluyes'
mediante el correspondiente comando "include" la(s) partes que necesitas, evitando malgastar la poca memoria RAM de que se dispone.
Pero claro, si quieres plantearte crear tipos de datos 'nuevos' como por ejemplo Byte y Word para Basic ... pues es trabajar en algo
ya existente en C (char e int respectivamente). Así que podrías dedicar el tiempo a crear funciones mas específicas al hardware de la
máquina donde se va a emplear. Gráficos, sonido ...
Lo que hará falta es encontrar un buen compilador de C (estandar) que genere código para 6809, posiblemente haya mas de uno por ahí!
saludos
pere

Pd personalmente considero que el C es tan simple que cualquier programador que haya utilizado Basic creando algunos programas grandes
lo entenderá fácilmente. Llamadas a funciones = GOSUB debe ser lo único que hay que aprender; el resto, para la gente que pulula por estos
grupos, debe ser 'natural'.


Volver a “Tandy CoCo”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados