Nuevo proyecto Basic CoCo/Dragon/DP400

Avatar de Usuario
luiscoco
Mensajes: 2338
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 existirán 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 ensamblador 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 ensamblador para implementar cosas.

    En resumen un Basic mejor si es posible en ROM, para sustituir el actual, en el 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)
HEXADEC DECIMAL
INICIO FIN INICIO FIN Tamaño

A000 A175 40960 41333 374 COMIENZO DEL BASIC
A176 A1C0 41334 41408 75 RUTINA CONSOLE IN
A1C1 A281 41409 41601 193 RUTINA DE LECTURA DE TECLADO (KEYIN)
CONSOLE OUT que incluye:
A282 A28F 41602 41615 14 CONSOLE OUT
A290 A2A7 41616 41639 24 SEND TO CASSETTE
A2A8 A2BE 41640 41662 23 WRITE A BLOCK OF DATA TO TAPE
A2BF A309 41663 41737 75 SOFTWARE UART TO LINE PRINTER
A30A A34D 41738 41805 68 PUT A CHARACTER ON THE SCREEN
A34E A35E 41806 41822 17 SCROLL THE SCREEN
A35F A3EC 41823 41964 142 RUTINA PARA MANEJO DE TABS, SEGÚN EL DEVICE
A3ED A405 41965 41989 25 INPUT DEVICE NUMBER CHECK
A406 A415 41990 42005 16 PRINT DEVICE NUMBER CHECK
A416 A44B 42006 42059 54 CLOSE
A44C A497 42060 42135 76 CSAVE
A498 A53D 42136 42301 166 CLOAD/M
A53E A548 42302 42312 11 EXEC
A549 A553 42313 42323 11 BREAK CHECK
A554 A563 42324 42339 16 EVALUA UN ARGUMENTO Y CHEQUEA QUE ESTE DENTRO DE LA PANTALLA
A564 A577 42340 42359 20 INKEY$
A578 A598 42360 42392 33 STRIP A FILENAME OFF OF THE BASIC INPUT LINE
A599 A5A1 42393 42401 9 MOVE ACCB BYTES FROM (X) TO (U)
A5A2 A5C4 42402 42436 35 GET DEVICE NUMBER FROM BASIC LINE - CHECK VALIDITY
A5C5 A5CD 42437 42445 9 BUSCA UN NOMBRE EN UNA LINEA BASIC
A5CE A5EB 42446 42475 30 EOF (End Off File)
A5EC A5F5 42476 42485 10 SKIPF
A5F6 A680 42486 42624 139 OPEN
A681 A701 42625 42753 129 BUSCA EL CORRECTO NOMBRE DE ARCHIVO EN CASETE
A702 A748 42754 42824 71 LEER UN BLOQUE DESDE EL CASETE
A749 A754 42825 42836 12 LEE UN BYTE DESDE CASETE
A755 A75C 42837 42844 8 LEE UN BIT DESDE CASETE
A75D A762 42845 42850 6 CICLO PRINCIPAL DE TIEMPO
A763 A76B 42851 42859 9 ESPERA POR TRANSICIÓN DE BAJO A ALTO
A76C A772 42860 42866 7 LEE EL BIT DE CASETE DEL PIA
A773 A77B 42867 42875 9 ESPERA POR TRANSICIÓN DE ALTO A BAJO
A77C A7BC 42876 42940 65 DETECTA LOS BYTES DE SINCRONISMO
A7BD A7D2 42941 42962 22 MOTORON/OFF
A7D3 A7D7 42963 42967 5 ESPERA MIENTRAS DECREMENTA X A CERO
A7D8 A7E4 42968 42980 13 ENVIA LA CANTIDAD EN SYNCLN DE $55 AL CASETE
A7E5 A7E8 42981 42984 4 ESCRIBE LOS BYTES DE SINCRONISMO Y UN BLOQUE
A7E9 A7F3 42985 42995 11 APAGA EL MOTOR
A7F4 A829 42996 43049 54 ESCRIBIR UN BLOQUE EN CASETE
A82A A83A 43050 43066 17 ENVÍA ACCA AL CASETE
A83B A847 43067 43079 13 EMISIÓN DE UN BIT 0 EN BAJA FRECUENCIA 1200 Hz
A848 A85B 43080 43099 20 EMISIÓN DE UN BIT 1 EN ALTA FRECUENCIA 2400 Hz
A85C A87F 43100 43135 36 TABLA DE VALORES PARA LA FORMA DE ONDA SENOSOIDAL
A880 A8B0 43136 43184 49 SET
A8B1 A8C0 43185 43200 16 RESET
A8C1 A8F4 43201 43252 52 Esta rutina lee y chequea los parámetros X,Y para los comandos SET, RESET y POINT
A8F5 A90F 43253 43279 27 POINT
A910 A927 43280 43303 24 CLS
A928 A93E 43304 43326 23 Borra la pantalla
A93F A94A 43327 43338 12 Evalúa la duración
A94B A973 43339 43379 41 SOUND
A974 A98F 43380 43407 28 ACTIVA O DESACTIVA EL MULTIPLEXOR ANALOGICO
A990 A9A1 43408 43425 18 AUDIO
A9A2 A9B2 43426 43442 17 SELECTOR DEL MULTIPLEXOR ANALOGICO
A9B3 A9C5 43443 43461 19 IRQ SERVICE
A9C6 A9DD 43462 43485 24 JOYSTK
A9DE AA19 43486 43545 60 Rutina de conversión de loas 6 BITs por software con el conversor analógico A/D
AA1A AA28 43546 43560 15 Rutina de chequeo numérico y fin de linea
AA29 AA50 43561 43600 40 Tabla de direcciónes de entrada de funciones
AA51 AA65 43601 43621 21 Tabla de precedencia y entrada de funciones de signos aritmeticos y logicos
AA66 AB19 43622 43801 180 Tabla de palabras reservadas para comandos
AB1A AB66 43802 43878 77 Tabla de tokens de funciones
AB67 ABAE 43879 43950 72 Tabla de direcciones de entrada de comandos
ABAF ABE0 43951 44000 50 Tabla de mensajes de error
ABE1 ABF8 44001 44024 24 Textos de error
ABF9 AC1D 44025 44061 37 Busca en stack por FOR y GOSUB
AC1E AC32 44062 44082 21 Chequeo de memoria para array y los mueve
AC33 AC45 44083 44101 19 Chequeo para ver si hay cupo para almacenar 2*ACCB
AC46 AC72 44102 44146 45 Rutina de errores
AC73 ACA4 44147 44196 50 RUTINA PRINCIPAL DEL BASIC EN MODO DIRECTO
ACA5 ACBF 44197 44223 27 Insertar linea de basic
ACC0 ACEE 44224 44270 47 Borrar linea de basic
ACEF AD00 44271 44288 18 Computa dirección de inicio de la proxima linea
AD01 AD16 44289 44310 22 Encuentra linea de Basic
AD17 AD25 44311 44325 15 NEW
AD26 AD46 44326 44358 33 Borrar variables
AD47 AD9D 44359 44445 87 FOR
AD9E ADD9 44446 44505 60 Interpreta comandos
ADDA ADE3 44506 44515 10 Salta a comandos
ADE4 ADEA 44516 44522 7 RESTORE
ADEB AE01 44523 44545 23 Chequeo de BREAK
AE02 AE08 44546 44552 7 END
AE09 AE2F 44553 44591 39 STOP
AE30 AE40 44592 44608 17 CONT
AE41 AE74 44609 44660 52 CLEAR
AE75 AE85 44661 44677 17 RUN
AE86 AEA3 44678 44707 30 GO
AEA4 AEBF 44708 44735 28 GOTO
AEC0 AEDF 44736 44767 32 RETURN
AEE0 AEE2 44768 44770 3 DATA
AEE3 AF13 44771 44819 49 REM/ELSE
AF14 AF41 44820 44865 46 IF
AF42 AF6A 44866 44906 41 ON
AF6B AF88 44907 44936 30 Convierte un numero de linea a binario
AF89 AFA3 44937 44963 27 LET o evalua una extresion sin tokens
AFA4 AFF4 44964 45044 81 Mueve cadenas
AFF5 B02E 45045 45102 58 INPUT
B02F B045 45103 45125 23 Llena el buffer de la linea de entrada en consola
B046 B070 45126 45168 43 READ
B071 B0B8 45169 45240 72 Lee/Entra una variable de cadena
B0B9 B0E7 45241 45287 47 Busca DATA
B0E8 B0F7 45288 45303 16 Mensaje "EXTRA IGNORED"
B0F8 B140 45304 45376 73 NEXT
B141 B147 45377 45383 7 Evalua una expresión númerica
B148 B155 45384 45397 14 Chequeo del modo de cadenas
B156 B169 45398 45417 20 Evalua explesión
B16A B34A 45418 45898 481 Chequea operadores relacionales
B34B B3A1 45899 45985 87 DIM
B3A2 B3AA 45986 45994 9 Enciende el bit de acarreo si no mayuscula
B3AB B3DE 45995 46046 52 Pone una nueva vaiable
B3DF B3EC 46047 46060 14 Punto flotante de -32768 el entero mas pequeño
B3ED B403 46061 46083 23 INTCNV Comvierte FPA0 a un entero con signo de 2 bytes, lo retorna en ACCD
B404 B44E 46084 46158 75 Evalua una variable de Array
B44F B4CD 46159 46285 127 Inserta Array
B4CE B4ED 46286 46317 32 Multiplica 2 bytes por 5
B4EE B4FC 46318 46332 15 MEM
B4FD B50C 46333 46348 16 STR STR$
B50D B515 46349 46357 9 Reserva ACCB Bytes de espacio de cadenas
B516 B54B 46358 46411 54 Busca una linea desde (X)
B54C B56C 46412 46444 33 Pone el Buffer de datos del descriptor de cadenas desde la pagina directa al espacio de pila de cadenas
B56D B590 46445 46480 36 Reserva ACCB Bytes de espacio de cadenas, retorna la dirección de comienzo en (X) y en FRESPC
B591 B5D7 46481 46551 71 Reorganiza el espacio de cadenas (Garbage collections)
B5D8 B60E 46552 46606 55 Busca cadenas
B60F B642 46607 46658 52 Concatena 2 cadenas
B643 B649 46659 46665 7 Mueve (B) Bytes desde 2,X a FRESPC
B64A B653 46666 46675 10 Mueve (B) Bytes desde (X) a (U)
B654 B674 46676 46708 33 Retorna el largo (ACCB) y la dirección (X) de la cadena desde su descriptor en FPA0+2
B675 B680 46709 46720 12 Remueve una cadena de la pila
B681 B68B 46721 46731 11 LEN LEN
B68C B69F 46732 46751 20 CHR CHR$
B6A0 B6AA 46752 46762 11 ASC ASC$
B6AB B6C7 46763 46791 29 LEFT LEFT$
B6C8 B6CE 46792 46798 7 RIGHT RIGHT$
B6CF B6F4 46799 46836 38 MID MID$
B6F5 B708 46837 46856 20 DO A SYNTAX CHECK FOR ")",
B709 B715 46857 46869 13 Evalua una expresión númerica y retorna el entero en ACCB o Error "FC" si > 255
B716 B73C 46870 46908 39 VAL VAL
B73D B74F 46909 46927 19 Evalua una expresión númerica y retorna el entero en (X) o Error "FC" si > 32767
B750 B756 46928 46934 7 PEEK PEEK
B757 B75D 46935 46941 7 POKE POKE
B75E B763 46942 46947 6 LLIST LLIST
B764 B783 46948 46979 32 LIST LIST
B784 B7C1 46980 47041 62 Listar el programa
B7C2 B7E5 47042 47077 36 Desempaquetar una linea de basic en el buffer de entrada
B7E6 B820 47078 47136 59 Desempaqueta un token
B821 B8F6 47137 47350 214 Empaqueta una linea
B8F7 B965 47351 47461 111 PRINT PRINT
B966 B97D 47462 47485 24 Salta hasta el proximo TAB
B97E B99B 47486 47515 30 PRINT TAB(
B99C B9B3 47516 47539 24 Copia una cadena desde (X) a la consola de salida
B9B4 B9B3 47540 47539 0 Paquete matematico de punto flotante
B9B4 B9B8 47540 47544 5 Adiciona .5 a FPA0
B9B9 B9BB 47545 47547 3 Resta FPA0 de el numero FP apuntado por (X) y lo coloca en FPA0
B9BC B9C1 47548 47553 6 (-)
B9C2 B9C4 47554 47556 3 Adiciona el numero PF apuntado por (X) a FPA0
B9C5 B9FA 47557 47610 54 (+)
B9FB BA1B 47611 47643 33 Suma mantisas FPA0=FPA0+FPA1
BA1C BA43 47644 47683 40 Normaliza FPA0
BA44 BA78 47684 47736 53 Corre los bits de FPA0 a la izquierda un bit asta el bit 7
BA79 BA82 47737 47746 10 Negar la mantisa en FPA0
BA83 BA99 47747 47769 23 Sumar 1 a la mantisa en FPA0
BA9A BAB7 47770 47799 30 Correr el FPA apuntado por (X) a la derecha -(B) veces.
BAB8 BAC9 47800 47817 18 Correr el FPA apuntado por (X) a la derecha (B) veces.
BACA BACF 47818 47823 6 (*)
BAD0 BB02 47824 47874 51 FPA0=FPA0*FPA1
BB03 BB2E 47875 47918 44 FPA2=FPA1*ACCB
BB2F BB47 47919 47943 25 Desempaquetar un FP en (x) en FPA1
BB48 BB5B 47944 47963 20 Calcula el exponente del FPA0*FPA1 y lo pone en ACCA
BB5C BB69 47964 47977 14 Si FPA0 = Positivo hacer error 'OV' o si FPA0 es negativo hace FPA0=0
BB6A BB81 47978 48001 24 Multiplicacion rapida de FPA0=FPA0*10
BB82 BB8E 48002 48014 13 División rapida de FPA0=FPA0*10
BB8F BB90 48015 48016 2 Divide (X) entre FPA0
BB91 BBA3 48017 48035 19 Divide FPA1 por FPA0
BBA4 BBDD 48036 48093 58 Compara las mantisas FPA0 y FPA1
BBDE BC0A 48094 48138 45 FPA1=FPA1-FPA0
BC0B BC13 48139 48147 9 Copia la mantisa FPA2 a PFA0
BC14 BC34 48148 48180 33 Copia el empaquetado FP apuntado or (X) a FPA0
BC35 BC49 48181 48201 21 Empaqueta FPA0 y lo coloca en (X)
BC4A BC5E 48202 48222 21 Mueve FPA1 a FPA0
BC5F BC6C 48223 48236 14 Mueve FPA0 a FPA1
BC6D BC79 48237 48249 13 Chequea FPA0; Retorna Si FPA0=0 ==>ACCB=0; si FPA0<0 ==>ACCB=FF ; Si FPA0>0 ==>ACCB=1
BC7A BC7B 48250 48251 2 SGN SGN
BC7C BC92 48252 48274 23 Convierte a un numero con signo en ACCB en un punto flotante
BC93 BC9F 48275 48287 13 ABS ABS
BCA0 BCC7 48288 48327 40 Compara FPA0 con el número FP apuntado por (X).
BCC8 BCED 48328 48365 38 Des-Normaliza FPA0
BCEE BD11 48366 48401 36 INT INT
BD12 BD3C 48402 48444 43 Convierte una cadena en un punto flotante
BD3D BD54 48445 48468 24 Evalua el exponente del formato exponencial
BD55 BD64 48469 48484 16 Convierte un numero decimal de una linea de basic a un binario en V47
BD65 BD85 48485 48517 33 Ajusta FPA0 para el exponente decimal en V47
BD86 BDA4 48518 48548 31 FPA0=FPA0*10+ACCA
BDA5 BDB5 48549 48565 17 V47=V47*10+ACCA
BDB6 BDBA 48566 48570 5 Tabla de 99999999.9
BDBB BDBF 48571 48575 5 Tabla de 999999999
BDC0 BDD8 48576 48600 25 Tabla de 1E + 09
BDD9 BE00 48601 48640 40 Convierte número un FP en ASCII String
BE01 BE4A 48641 48714 74 Seudo-Normaliza el número FP
BE4B BEAA 48715 48810 96 Convierte FPA0 en una cadena de digitos ASCII
BEAB BEC4 48811 48836 26 Convierte un numero en ACCB (<100) a decimal ASCII en ACCD
BEC5 BEEF 48837 48879 43 Tabla de exponenciales de 10 no-normalizada
BEF0 BEFE 48880 48894 15 EXPAND A POLYNOMIAL OF THE FORM
BEFF BF1E 48895 48926 32 CALCULATE THE VALUE OF AN EXPANDED POLYNOMIAL
BF1F BF3A 48927 48954 28 RND RND
BF3B BF73 48955 49011 57 Calcula un número aleatorio entre 0.0< X<1.0
BF74 BF77 49012 49015 4 RSEED Semilla
BF78 BFBC 49016 49084 69 SIN SIN
BFBD BFC1 49085 49089 5 Tabla 6.28318531 (2*PI)
BFC2 BFC6 49090 49094 5 Tabla .25
BFC7 BFEF 49095 49135 41 Tabla de los coeficientes de seno de TAYLOR
BFF0 BFFF 49136 49151 16 VECTORES DE INTERRUCION
C000 BFFF 49152 49151 FIN


OTROS BASICs Y COMPILADORES
OTROS BASICs Y COMPILADORES

Continuará
Estoy mejorando esta parte

Avatar de Usuario
luiscoco
Mensajes: 2338
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: 2338
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: 5134
Registrado: 13 Nov 2010 02:08
Agradecido : 51 veces
Agradecimiento recibido: 126 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: 2338
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: 2338
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
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 o 2 ceros (0-0) fin del programa
2 - Número de linea en formato entero sin signo
250 - Línea tokenizada
1 - 0 fin de línea

Para este nuevo basic, seria:
Bytes - Descripción
1 - 0
2 - Dirección de la próxima línea o 2 ceros (0-0) fin del programa
256 - Label:/Número/Nada + Línea tokenizada
1 - 0 fin de línea

Avatar de Usuario
luiscoco
Mensajes: 2338
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, Como funcionaran y estudiando el caso
Actualmente el basic busca la linea indicada por el GOTO, hacia abajo si es mayor que la linea actual o recomienza desde el comienzo del basic si es menor. recorriendo las lineas hasta encontrar la adecuada o error de no existe la linea.

Aunque esto es rápido, puede mejorarse, mi idea es la siguiente:
Al momento de escribir el GOTO/GOSUB se puede buscar el LABEL (Posiblemente no exista aun) y avisar si no existe o si existe, puede ser indicado por un color.

Al ejecutar el programa o con un comando de pre-compilación se colocaría su dirección en forma de 2 o 4 bytes directo al destino. Entonces tendríamos GOTO Etiqueta o Número y 2 o 4 bytes para la dirección absoluta o relativa a la posición actual. 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). 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).

En el fuente se verá GOTO LABEL solamente

(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 de una ejecución instantánea.

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 las coco pueden llegar a 8mb).

Además el LABEL de referencia, podría pensarse en omitirlos ya que a la hora de mostrarlo, si tenemos la dirección, podemos mostrar el label del destino directamente. aunque seria un enredo si se insertan caracteres, lo descartare por el momento

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 tener un comando para colocar números de linea y quitar los labels de texto, los saltos variables no se podría usar en este caso
RESULTADO:
OK posible

Avatar de Usuario
luiscoco
Mensajes: 2338
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
Actualmente las variables son buscadas una a una en una tabla de nombres de variables de 7 bytes, ya sean punto flotante o strings.
Para los números se usan 2 bytes para el nombre de la variable, distinguiendo los strings por tener encendido el bit 7 de la segunda letra del nombre, mas 5 bytes de mantisa para los números de punto flotante de simple precisión y 5 bytes (para mantener el mismo tamaño) para los strings, con 2 bytes indicando la posición absoluta, que puede estar en cualquier parte de la memoria incluyendo la zona de strings, el código fuente o un buffer de Entrada/Salida, ademas 1 bytes del tamaño de 0-255 y 2 bytes de desperdicio.
Si es una variable DEF FN, se marca con el bit 7 la primera letra de la variable.
La búsqueda es secuencial, según se crearon las variables y por lo tanto si hay muchas variables el costo de buscarlas es tremendo.

NUEVO METODO
Al margen de los tipos de variables. Al igual que con los LABELS, las variables estarán directamente apuntadas, de la siguiente manera:

* En el fuente, al terminar el texto del nombre de la variable, lleva un indice de 2 bytes que apunta a los datos de la variable a partir de su zona base.
* La zona de datos de variables comenzará al terminar al fuente.
* El apuntador es relativo al comienzo de la zona de variables.
* Este apuntador seria mas bien un indice a partir del final del programa o el comienzo de este tipo de variable, seria un array de datos.
* No hay tabla de variables con NOMBRES a buscar. Eso si la tabla nombres de variable y su indice se creará solo para la pre-compilación.
* Habrá varias zonas, una por tipo de variable, cada una con su dirección y su indice
* Estas zonas serán de 1k expandibles automáticamente o definibles por el usuario, tambien habrá un comando que muestre las cantidades reservadas o las modifique.
* No hay búsquedas, todo compilado al correrlo.

* (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 así. 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 después de ediciones del código fuente.
* no hay tabla de variables
* Puede haber varias Zonas para variables dentro de Subs o funciones

Al escribir más código (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 re-compilado, a menos que se creen nuevas variables, aunque estas se podrían crear al final, y así no perder los indices, y al recomenzar un RUN se posicionarían de nuevo.
También mantendrá los valores para el comando "CONT" continuar después de un break.

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

Desventajas
* Gasto de RAM

RESULTADO:
OK posible

Avatar de Usuario
luiscoco
Mensajes: 2338
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
Con DEFINT letra-Letra (aunque me parece una aberración), DEFLONG, DEFSNG, DEFDBL y DEFBYTE, con % o literales sin punto decimal, o coma (inter-nacional mente).
* BYTE Interesante para dimensiones de BYTEs
* INTEGER 2 BYTES.
* LONG o WORD 4 bytes de enteros largos, muy interesante.
* 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 y HORA o DATE, TIME
También hay un tipo de decimal llamado currency, no es coma flotante, con numero fijo de decimales y es mas preciso para cálculos sin aproximaciones, lo usaba DBASE, es simplemente un integer o long con la posición decimal puesta fija en otro lugar

Avatar de Usuario
luiscoco
Mensajes: 2338
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 usare, 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.
* Estos parámetros pueden 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 correctos para que no se tenga 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: 414
Registrado: 15 Jul 2016 00:38
Ubicación: Madrid, Córdoba, Luanco
Agradecido : 26 veces
Agradecimiento recibido: 133 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: 2044
Registrado: 08 Dic 2012 18:34
Agradecido : 204 veces
Agradecimiento recibido: 211 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: 2338
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: 2338
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: 2338
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: 2044
Registrado: 08 Dic 2012 18:34
Agradecido : 204 veces
Agradecimiento recibido: 211 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