Nuevo proyecto Basic CoCo/Dragon/DP400

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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 en editores full screen que en aquellos entonces 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.

Entonces este proyecto es para:
    * Implementar todo lo que les 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 de grima escribir lo que sea en ella
    * LLevarlo a un BASIC Semi compilado, si es posible.
    * Suficientes comandos como para no tener que recurrir al assembler para implementar cosas.

NECESIDAD
Si el basic usará integer, correría de 4 a 20 veces más, 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 numeros de linea, la gente se animaria.
Si le damos 500 comandos como en 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 cumpliran todas):
Nota: Los corchetes [ ] denotan opcional

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 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.
Números de línea opcionales, Labels de strings y Gotos con variables, ejemplo: GOTO a+5*3 da una etiqueta numérica. Tambien 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 conde escribir comando 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 dato predeterminado, con cantidad de parámetros variable, 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.

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úscula, minúscula o la primera letra en Mayúscula
Aceptar comandos en minúscula.Escritura en mayusculas o minusculas y serán convertidas
Posibilidad de comandos de varias palabras.

VARIABLES
Nombres de variables de más de 2 letras (opcional), 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, 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
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, prehechas (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
• Funciones para fechas y horas

COMANDOS ACTUALES Y SUS POSIBLES MEJORAS
Comandos Basic
AUDIO ON/OFF: Encender/Apagar audio para oír Casete
CLEAR [Espacio para caracteres] [, última pos]: Borra variables y asigna espacio para caracteres y última posición de Basic
CLOAD/M [nombre] [, posición]: Carga el próximo programa o un programa llamado nombre de Basic o de lenguaje de máquina, 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, CLOSE #0 = Pantalla, CLOSE#-1 =cassette, CLOSE #-2= Impresora
CLS Borra la pantalla o con un color “n” y retorna el cursor a casa. Mejora: CLS [color] [, carácter], (@S, E) 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 .BAS o con “M” uno .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, 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 por supuesto use INTEGERs
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
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
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
PRINT USING, TAB (valor) Avanza un Print al próximo TAB o tantos caracteres
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, 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; Mejora: Podría retornar algún valor de la función o tambien dentro de la función usar el nombre de esta = dato
RUN [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
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(numero): Retorna el absoluto de un número, número positivo
ASC(numero): 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$(numero) Retorna el carácter del código ASC
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
MID$(variable$, desde [, cantidad]): Retorna una cadena cortada desde el carácter dado y tamaño de cantidad
MID$(variable$, desde [, cantidad])=variable$: Modifica una cadena desde el carácter dado y del tamaño de cantidad, sustituyéndolo por la cadena dentro de variable$, si cantidad no existe se usa el tamaño de cantidad
PEEK(dirección [, cantidad]): Retorna el valor de los bytes en la dirección. Mejora: cantidad, también pueden existir LPEEK, DPEEK o LEEK, DEEK
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
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 signos, generalmente e 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 estos espacios 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
PCLS [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: Borra un punto en media resolución.
PSET: Coloca un punto en media resolución.
PUT: Pone un gráfico o un registro de datos en un archivo.
RENUM; En todo caso se podrá mantener por compatibilidad o recolocaria todos los números de línea (menos los labels que se perderían) para usar el programa en equipos sin este BASCI.será innecesario, se podrá usar estos espacios para el EDITOR Full Screen.
SCREEN: Cambia entre modo texto o gráficos y tambien cambia la paleta de colores.
TROFF: será innecesario, se podrá usar estos espacios para el EDITOR Full Screen, con break point
TRON: 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
VARPTR


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
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
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
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
LOF
MKN$: Mejora:faltarían los conversores para Enteros, Word, Long, Double

COMANDOS SUPER-EXTENDED BASIC o EXPANDED BASIC
ATTR
BRK: Parte de l comand ON Break
CMP: ?
ERR
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
Necesito ayuda con info de este equipo

ADICIONES DP400
Alguien tiene info de este equipo?

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)


OTROS BASICs Y COMPILADORES
OTROS BASICs Y COMPILADORES

Continuará
Estoy mejorando esta parte

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 4993
Registrado: 13 Nov 2010 02:08
Agradecido : 14 veces
Agradecimiento recibido: 83 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 357
Registrado: 15 Jul 2016 00:38
Ubicación: Madrid, Córdoba, Luanco
Agradecido : 20 veces
Agradecimiento recibido: 88 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: 2013
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 181 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 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: 2013
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 181 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 1 invitado