Nuevo proyecto Basic CoCo/Dragon/DP400

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

Último mensaje de la página anterior:

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'.

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 18:07

Hola de nuevo,
acabo de encontrar esto en Sourceforge
https://sourceforge.net/projects/cmoc-win32/
Es una 'adaptación' del compilador de C para 6809 de Pierre Sarrazin para entornos Window$
Tal vez pueda dar alguna idea ...
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 18:22

pser1 escribió: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.

Bueno estoy de acuerdo, se abrirá otro hilo con el proyecto C#, jaja para COCO en ROM
Estaria muy bueno.
Tengo el manual del Instan "C" de la amiga, que es un C que funciona en vivo con break y todo, solo escribes tu fuente y ejecutas como basic
Por que eso es otra espinita que tengo, no hay un puto "C" que se pueda para en medio asi sea en modo test y luego que compile completo

Este seria asi: creo que no hay llaves { } en coco, solo paréntesis ( ) y llaves cuadradas [ ]
Main (
Funcion(
);
)

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 18:41

Hola Luis,
eres un exagerado! Creo que desde mi primer compilador de C, de la serie Turbo-C de Borland, los entornos de pruebas
siempre han permitido ejecutar linea a linea, de la misma forma que lo haces hoy en Java u otros similares
Y viendo el contenido de variables para detectar donde está uno metiendo la pata
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 18:43

pser1 escribió:Hola Luis,
eres un exagerado! Creo que desde mi primer compilador de C, de la serie Turbo-C de Borland, los entornos de pruebas
siempre han permitido ejecutar linea a linea, de la misma forma que lo haces hoy en Java u otros similares
Y viendo el contenido de variables para detectar donde está uno metiendo la pata
saludos
pere

En "C" tu lo detienes, preguntas por una variable, la modificas, modificas líneas y continuas la ejecución donde ibas y no tienes que recomenzar?
En donde esta eso?, jajaja

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 18:49

luiscoco escribió:Este seria asi: creo que no hay llaves { } en coco, solo paréntesis ( ) y llaves cuadradas [ ]
Main (
Funcion(
);
)

Ya se va pareciendo a un lenguaje orientado a clases ... Solo hace falta que cambiemos main por el nombre de la clase!
Entiendo que aquí no habrá parámetros, ¿Verdad? porque si hay que pasarlos junto con el nombre
de la función lo haríamos con paréntesis habitualmente, pero entonces hay que 'inventar' un símbolo
para inicio y final de función.
Pero si NO vas a utilizar el editor en un CoCo/Dragon real sinó que trabajaremos en un PC/Mac/Linux,
podríamos aceptar la llave {} como se hace en otros lenguajes ... pero no sé si se quiere que se pueda
utilizar en un 6809
saludos
pere

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 18:54

luiscoco escribió:
pser1 escribió:Hola Luis,
eres un exagerado! Creo que desde mi primer compilador de C, de la serie Turbo-C de Borland, los entornos de pruebas
siempre han permitido ejecutar linea a linea, de la misma forma que lo haces hoy en Java u otros similares
Y viendo el contenido de variables para detectar donde está uno metiendo la pata
saludos
pere

En "C" tu lo detienes, preguntas por una variable, la modificas, modificas líneas y continuas la ejecución donde ibas y no tienes que recomenzar?
En donde esta eso?, jajaja

NADIE ha hablado de detener modificar y continuar ... si encuentras un error, cambias el texto y compilas de nuevo
Tanto antes como ahora en todos los lenguajes.
Si solamente quieres cambiar el valor de una variable, por supuesto que puedes hacerlo, en ASM y en Java también!
Por cierto cambiar una linea en Basic NO siempre permite seguir ejecutando desde donde paraste ya que los FOR-NEXT pueden quedar alterados.
Lo razonable suele ser retocar el programa / corregir errores y volver a ejecutar desde el principio. En realidad añadimos un Breakpoint
donde queremos 'verificar' lo que hemos hecho y a vivir!
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 19:01

pser1 escribió:Ya se va pareciendo a un lenguaje orientado a clases ... Solo hace falta que cambiemos main por el nombre de la clase!
Entiendo que aquí no habrá parámetros, ¿Verdad? porque si hay que pasarlos junto con el nombre
de la función lo haríamos con paréntesis habitualmente, pero entonces hay que 'inventar' un símbolo
para inicio y final de función.
Pero si NO vas a utilizar el editor en un CoCo/Dragon real sinó que trabajaremos en un PC/Mac/Linux,
podríamos aceptar la llave {} como se hace en otros lenguajes ... pero no sé si se quiere que se pueda
utilizar en un 6809
saludos
pere

Te respondo en el otro hilo el de "C"

dancresp
Mensajes: 4989
Registrado: 13 Nov 2010 02:08
Agradecido : 14 veces
Agradecimiento recibido: 83 veces

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor dancresp » 17 Ago 2017 00:39

Quedo a la espera de tus avances.

Es innegable que el proyecto es muy interesante, y si encima se puede "adaptar" posteriormente a otros equipos... de coña.

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 » 21 Ago 2017 18:08

Cambiando un poco el tema hablar de los formatos de disco. Esto lo repetiré para el basic nuevo.
El formato de archivo RSDOS es bastante pobre y unas mejoras serían buenas.

FORMATO RSDOS
Ventajas
* Sencillo
* Muchos discos y emuladores lo soportan
Desventajas:
* Desperdicia los sectores 1 y 12-18 mas 16 bytes por archivo. Un gran desperdicio además de que cada archivo gasta 2304 bytes mínimo, incluso Siempre el último gránulo tiene desperdicio.
* No tiene directorios

Código: Seleccionar todo

34 Track, numerados 0-34,18 Sectores por Track, El Track 17 se reserva para Directorio, Unidad mínima de Grabación 1 Gránulo = 9 Sectores de 256 Bytes =2394 Bytes.

Directorio:
=========
Sectores 3-11, Unos 9 Sectores, con capacidad para 72 archivos (a 32 bytes por archivo, desperdiciando 16 bytes por archivo), pero solo usan 68 ya que no hay sino solo 68 Gránulos.

Bytes-Posición Descripción
--------------------------------
8   0-7       Nombre
3   8-10      Extensión
1   11      File Type: 0=Programa BASIC, 1=BASIC Datos, 2=Lenguaje de máquina, 3=Texto, ... Others
1   12      ASCII Flag : 0=Binary; $FF=ASCII.
1   13      Número del primer Gránulo del archivo
2   14-15   Número de Bytes en uso en el último sector, desde 0-256 (por eso usa 2 bytes, otro desperdicio)
16   16-31   Uso futuro (y nunca paso).

Formato del sector 2 File Allocation Table: Por cada Gránulo un Byte
$FF= Gránulo libre
$00-$43= Próximo gránulo del archivo
$C0-C9= Último Gránulo del archivo y cantidad de sectores usados


FORMATO OS9/NitrOS-9
Ventajas
* Directorios tan grandes como se requiera, Eficiente
* Sub directorios
* No tiene límites de cantidad de directorio o archivos, hasta que se llene el medio.
* Permite clusters
* Protecciones
* Desborrado
* Muy completo
Desventajas:
* Solo desperdicia parte de un sector con archivos pequeños de menos de 48 sectores, (Muchos?)
* Algo problemático al listar directorios ya que mantiene los nombres pero no el tamaño, obligando a leer el primer sector de cada archivo para saber su tamaño

Mejore el archivo de info ya que está incompleto

Código: Seleccionar todo

3.  Identification Sector
=========================
Identification Sector resides on LSN 0 and contains the Disk Descriptor:
Os9 ref    Byte   Length   Description
   offset   (bytes)
DD.TOT   0x00    3   Total number of sectors on media
DD.TKS   0x03    1   Number of tracks (Number of sectors on track?? Technical manual NitrOS-9)
DD.MAP   0x04    2   Number of bytes in allocation map
DD.BIT   0x06    2   Number of sectors per cluster
DD.DIR   0x08    3   Starting sector of root directory
DD.OWN   0x0b    2   Owner's user number
DD.ATT   0x0c    1   Disk attributes (to be clarified)
         bit 7:   D  -  Directory
         bit 6:   S  -  Shared
         bit 5:   PE -  Public Execute
         bit 4:   PW -  Public Write
         bit 3:   PR -  Public Read
         bit 2:   E  -  Execute
         bit 1:   W  -  Write
         bit 0:   R  -  Read
DD.DSK   0x0e    2   Disk identification (for internal use)
DD.FMT   0x10    1   Disk format:  density, number of sides
         bit 7:   
         bit 6:   
         bit 5:   
         bit 4:   
         bit 3:   
         bit 2:   
         bit 1:
         bit 0:
DD.SPT   0x11    2   Number of sectors per track
DD.RES   0x13    2   Reserved for future use (under Level 1)
DD.BT   0x15    3   Starting sector of bootstrap file
DD.BSZ   0x18    2   Size of bootstrap file (in bytes)
DD.DAT   0x1a    5   Time of creation:  Y : M : D : H : M
DD.NAM   0x1f   32   Volume name:  last char has sign bit set

4.  Allocation Map
==================
Disk Allocation Map Sector (LSN 1)
Each bit in the allocation map represents a sector or cluster of sectors on the
disk. If the bit is set, the sector is considered to be in use, defective, or nonexistent.
If the bit is cleared, the corresponding cluster is available. The allocation
map usually starts at LSN 1. The number of sectors it requires varies according
to how many bits are needed for the map. DD.MAP specifies the actual number
of bytes used in the map.
Multiple sector allocation maps allow the number of sectors/cluster to be as small
as possible for high volume media.
The DD.MAP value in LSN 0 specifies the number of bytes (in LSN 1) that are used in the map.
The DD.BIT value in LSN 0 specifies the number of sectors per cluster. The
number is an integral power of 2 (1, 2, 4, 8, 16, and so on).

5.  Files/Directories storage
============================
The first sector of every file/directory contains a file descriptor, which
contains the logical and physical description of the file.  The table
below describes the contents of the descriptor.

6.  File Descriptor Sector
======================
Os9 ref    Byte   Length   Description
   offset   (bytes)
FD.ATT   0x00     1   File Attributes:  D S PE PW PR E W R
         bit 7:   D  -  Directory
         bit 6:   S  -  Shared
         bit 5:   PE -  Public Execute
         bit 4:   PW -  Public Write
         bit 3:   PR -  Public Read
         bit 2:   E  -  Execute
         bit 1:   W  -  Write
         bit 0:   R  -  Read
FD.OWN   0x01     2   Owner's User ID
FD.DAT   0x03     5   Date Last Modified Y : M : D : H : M
FD.LNK   0x08     1   Link Count
FD.SIZ   0x09     4   File Size (number of bytes)
FD.DCR   0x0d     3   Date Created:  Y : M : D
FD.SEG   0x10   240   Segment List:  see below

7.  Segment List
============================
FD.SEG. The segment list consists of a maximum of 48 5-byte entries that have
the size and address of each file block in logical order. Each entry has the block’s
3-byte LSN and 2-byte size (in sectors). The entry following the last segment is
zero.
48*5-byte entries
3-byte LSN
2-byte size (in sectors)

5.  Directory storage
============================
Disk directories are files that have the D attribute set. A directory contains an
integral number of entries, each of which can hold the name and LSN of a file or
another directory.

Each directory entry contains 29 bytes for the filename followed by three bytes
for the LSN of the file’s descriptor sector. The filename is left-justified in the field
with the most significant bit of the last character set. Unused entries have a zero
byte in the first filename character position.
Every disk has a master directory called the root directory. The DD.DIR value in
LSN 0 (identification sector) specifies the starting sector of the root directory.


FORMATO DRAGON
Ventajas
* Complejo, con protecciones de de lectura/escritura, aprovecha bien el espacio.
Desventajas
* No tiene Directorios

Código: Seleccionar todo

3.  Disk Layout
===============
        MFM Double Density
    40 or 80 tracks (0 - 39 or 0 - 79)
     1 or  2 sides
    18 sectors per track (1 - 18)
   256 bytes per sector
   2:1 interleave

Drive numbering: Dragon DOS refers to drives 1-4 (physical units 0-3),
drive 0 can also be used to refer to drive 1.

Double sided disks are usually considered as having 36 sectors per
track rather than referring to side numbers.

Logical Sector Numbers (LSNs) are used to refer to a sector relative to the
first sector on the disk.  LSN 0x000 == Track 0, Side 0, Sector 1.

40 Tracks, 1 Side,  18 Sectors:
  LSN 0x000  Track 0 Side 0 Sector 1
  LSN 0x012  Track 1 Side 0 Sector 1
40 Tracks, 2 Sides, 36 Sectors:
  LSN 0x000  Track 0 Side 0 Dragon Sector  1 Physical Sector 1
  LSN 0x012  Track 0 Side 1 Dragon Sector 19 Physical Sector 1
  LSN 0x024  Track 1 Side 0 Dragon Sector  1 Physical Sector 1

4.  Directory Track
===================
Track 20 contains the Directory information
Sectors 1 and 2 hold the sector bitmap
Track 20 Sector 1 identifies the disk format as follows:
Offset
0xfc   Tracks on disk
0xfd   Sectors per track (36 indicates double sided / 18 secs per track)
0xfe   One's complement of offset 0xfc
0xff   One's complement of offset 0xfd

Sectors 3 - 18 hold directory entries.
Each directory entry is 25 bytes long - 160 entries max numbered 0 - 159.
Each sector contains 10 directory entries as follows:
0x00 - 0x18   Directory Entry  1
0x19 - 0x31   Directory Entry  2
0x32 - 0x4a   Directory Entry  3
0x4b - 0x63   Directory Entry  4
0x64 - 0x7c   Directory Entry  5
0x7d - 0x95   Directory Entry  6
0x96 - 0xae   Directory Entry  7
0xaf - 0xc7   Directory Entry  8
0xc8 - 0xe0   Directory Entry  9
0xe1 - 0xf9   Directory Entry 10
0xfa - 0xff   6 unused bytes - usually 0x00 - used by some programs to
      store long disk labels

4.1  Format of Sector Bitmap
----------------------------
The sector bitmap is split across sectors 1 and 2 of track 20
Sector 1:
0x00 - 0xb3   Bitmap for LSNs 0x000 - 0x59f
0xb4 - 0xfb   Unused - 0x00 - used by DosPlus for label and something else
0xfc - 0xff   Disk format information (see above)

Sector 2:
0x00 - 0xb3   Bitmap for LSNs 0x5a0 - 0xb3f (80 Track, DS only)
0xb4 - 0xff   Unused - 0x00

Each bit in the sector bitmap represents a single logical sector number -
0 = used, 1 = free

LSN
0x000   Sector 1 Byte 0x00 Bit 0
0x007   Sector 1 Byte 0x00 Bit 7
0x008   Sector 1 Byte 0x01 Bit 0
0x59f   Sector 1 Byte 0xb3 Bit 7
0x5a0   Sector 2 Byte 0x00 Bit 0
0xb3f   Sector 2 Byte 0xb3 Bit 7

4.2  Directory entry format
---------------------------
0x00      flag byte
   bit 7   Deleted - this entry may be reused
   bit 6   Unused
   bit 5   Continued - byte at offset 0x18 gives next entry number
   bit 4   Unused
   bit 3   End of Directory - no further entries need to be scanned
   bit 2   Unused
   bit 1   Protect Flag - file should not be overwritten
   bit 0   Continuation Entry - this entry is a Continuation Block
0x01 - 0x17   File Header Block or Continuation Block
0x18   [flag byte bit 5 == 0]
      Bytes used in last sector (0x00 == 256 bytes)
   [flag byte bit 5 == 1]
      Next directory entry num (0-159)

File Header block:  (flag byte bit 0 == 0)

0x01 - 0x08   filename (padded with 0x00)
0x09 - 0x0b    extension (padded with 0x00)
0x0c - 0x0e   Sector Allocation Block 1
0x0f - 0x11   Sector Allocation Block 2
0x12 - 0x14   Sector Allocation Block 3
0x15 - 0x17   Sector Allocation Block 4

Continuation block:  (flag byte bit 0 == 1)

0x01 - 0x03   Sector Allocation Block 1
0x04 - 0x06   Sector Allocation Block 2
0x07 - 0x09   Sector Allocation Block 3
0x0a - 0x0c   Sector Allocation Block 4
0x0d - 0x0f   Sector Allocation Block 5
0x10 - 0x12   Sector Allocation Block 6
0x13 - 0x15   Sector Allocation Block 7
0x16 : 0x17   Unused

Sector Allocation Block format:

0x00 : 0x01   Logical Sector Number of first sector in this block
0x02      Count of contiguous sectors in this block


FORMATO FLEX
Ventajas
* Sencillo
* Archivos linkeados que se pueden relinkear aunque falle el sector de directorio
* Aprovecha todo el espacio, solo en el directorio desperdicia 12 bytes por sector
* Los sectores se enumeran teniendo en cuenta el skip factor
Desventajas:
* No tiene subdirectorios

Código: Seleccionar todo

Cada sector de un disco FLEX (excepto los dos BOOT sector) tienen el siguiente formato:
Bytes 0-1 Link al proximo sector(Track y Sector)
Bytes 2-3 File Logical Record Number
Bytes 4-255 =251 Bytes de datos
Los primeros 2 sectores de la pista 0 contiene el boot program
El 3er Sector es el System Information Record, aquí se mantiene la cadena de sectores libres del disco.
Desde el 5to sector y hasta el final del track 0 es para el directorio, pudiéndose extender más.
Cada sector de Directorio contiene 10 nombres de Archivos
Directorio:
=========
Bytes
0-1   Proximo Track y Sector
2-3   Índice Numerador de sectores
4-15 12 bytes Vacíos (0)
Nombres de Archivos: Cada archivo ocupa 24 bytes y un sector puede contener 10
==================
Bytes
1-8   8   Filename: The name must start with a letter and contain only letters, digits, hyphens, and/or underscores.
            If the name is less than 8 characters long, the remaining bytes must be zero. The name should be left adjusted in its field.
9-11 3   Extension: This is the extension of the file name for the file being referenced. It must start with a letter and contain only letters, digits,
            hyphens, and/or underscores. If the extension is less than 3 characters long, the remaining bytes must be zero.
            The extension should be left Files with null extensions should not be created.
12      File Attributes: At present, only the most significant 4 bits are defined in this byte. These bits are used for the protection status bits
                and are assigned as follows:
   BIT 7 = Write Protect
   BIT 6 = Delete Protect
   BIT 5 = Read Protect
   BIT 4 = Catalog Protect
13      Reserved for future system use
14-15   Starting disk address of the file. These two bytes contain the hardware track and sector numbers, respectively, of the first sector of the file.
16-17   Ending disk address of the file. These two bytes contain the hardware track and sector numbers, respectively,of the last sector of the file.
18-19   File size: This is a 16-bit number indicating the number of sectors in the file.
20      File Sector Map Indicator: If this byte is non-zero (usually $02), the file has been created as a random access file and contains a File Sector Map.
21      Reserved for future system use
22-24   File Creation Date: These three bytes contain the binary date of the files creation. The first byte is the month, the second is the day, and the third is the year (only the tens on dones digits).

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 » 22 Ago 2017 00:33

Este resumen lo hice para refrescarme los tipos de archivos que manejamos en la coco/dragon y clones
Es posible que el nuevo basic pueda manejar ¿todos?, no lo se pero seria muy bueno.

Otro tema sería tratar de mejorar el RSDOS sin perder compatibilidad, como por ejemplo usar los 32 bytes de directorio para 2 archivos, pero con la limitación de los gránulos, no se podría, a menos que fuera para disco más grandes. pero pierde sentido, por faltarle muchas cosas

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 » 28 Ago 2017 21:22

Aun veo como buena idea, tener un nuevo basic para coco, ROM o BIN, Al basic se le han hecho cambios para aceptar Discos duros, y hay mejoras como el ABASIC y el CBASIC que le agregan mucha funcionalidad, pero por compatibilidad apenas si tocan cosas. Yo no lo veo tan complejo y si con muchas fallas o faltas.

COMENZARÉ EL ESTUDIO DEL ACTUAL BASIC
Basandome en los unravelled y en un assembler ya preparado para compilar, empezare mi resumen

El BASIC comienza en $A000-BFFF, Al encender el equipo, el CPU Lee su primera dirección de salto en la dirección $FFFE-$FFFF la cual contiene un espejo del final de la rom instalada (en este caso solo con ROM de BASIC) en la posición $BFFE-$BFFF la cual contiene $A027 que es la rutina del RESET.

RESUMEN HASTA CONSOLE IN
$A000 - $A00D Vectores de las 7 rutinas principales

Código: Seleccionar todo

0002   A000 A1 CB   POLCAT   FDB   KEYIN   GET A KEYSTROKE
0003   A002 A2 82   CHROUT   FDB   PUTCHR   OUTPUT A CHARACTER
0004   A004 A7 7C   CSRDON   FDB   CASON   TURN ON CASSETTE MOTOR, START READING
0005   A006 A7 0B   BLKIN   FDB   GETBLK   READ A BLOCK FROM CASSETTE
0006   A008 A7 F4   BLKOUT   FDB   SNDBLK   WRITE A BLOCK TO CASSETTE
0007   A00A A9 DE   JOYIN   FDB   GETJOY   READ JOYSTICKS
0008   A00C A7 D8   WRTLDR   FDB   WRLDR   TURN ON MOTOR AND WRITE $55’S TO CASSETTE

$A00E - $A026 Configura Stack, configura un puerto, revisa para arrancar en caliente o frío
$A027 - $A073 (ARRANQUE) Inicialización de puertos.-->luego va a $A00E
$A074 - $A0D4 Arranque en frío, Pregunta por Extended Basic y salta a el si existe
$A0D5 - $A0F6 Basic sin Extended-- luego va al LOOP principal de Basic
$A0F6 - $A10C FIRQ SERVICE ROUTINE
$A10D - $A11C 16 Bytes a mover a $8F - $AA
$A11D - $A128 LINE INPUT ROUTINE
$A129 - $A146 30 Bytes a mover a $10C-$129
$A147 - $A170 COPYRIGHT MESSAGES
$A171 - $A175 Rutina para tomar un carácter de la consola y quitarle el bit 7
$A176 - $A185 * CONSOLE IN

Pondré un link al documento modificado que voy preparando
Al parecer esto será demasiado detallado y largo para el foro

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 » 28 Ago 2017 21:55

RUTINA CONSOLE IN ($A176 - $A1C0 )
Esta rutina es la que espera por un comando una vez inicializado el basic, Puede ser mejorada por cambio en el gancho o garfio (Hook) de ram en RVEC4=$016A, si esta posición tiene RTS ($39), solo regresa, pero si a sido cambiada por extended, puede contener un JMP a otra subrutina

Posee 4 bloques o funcionalidades
Resumen
$A176 - $A185 Console IN
$A186 - $A198 Lee datos del cassette
$A199 - $A1B0 Cursor (blink)
$A1B1 - $A1C0 Cursor cambiante mientras espera una tecla

Pone a 0 el flag de buffer de consola
Chequea que el periférico de salida sea 0 = Pantalla y va al cursor y a tomar una tecla ($A1B1)
Si no, chequea el contador de caracteres
Si no esta vacio lee datos del cassette ($A186)
Si no, pone 0 en el buffer y retorna

Ahora bien, lo que le veo de malo a esta rutina, es que para esperar por la tecla, solo y simplemente cambia de color el cursor y pierde totalmente el tiempo, en lugar de poder hacer otras cosas, el decrementar X desde $045E a 0 y esto lo hace 11 veces antes de cambiar el color y chequear por una tecla.

No se porque no suma las 11 veces y el contador $045E ya que solo después de esto, cambia de color y revisa teclas.
Además creo que esto interfiere con la escritura rápida, (tal vez por interrupciones y buffer de teclado que no tiene, ni sonido al escribir)

Código: Seleccionar todo

0181         * CONSOLE IN
0182   A176 BD 01 6A   LA176   JSR   RVEC4   HOOK INTO RAM (Para BASIC solo retorna)
0183   A179 0F 70      CLR   CINBFL   RESET CONSOLE IN BUFFER FLAG = FULL
0184   A17B 0D 6F   LA17B   TST   DEVNUM   CHECK DEVICE NUMBER
0185   A17D 27 32      BEQ   LA1B1   G0 DO CURSOR AND GET A KEY IF SCREEN MODE
0186   A17F 0D 79      TST   CINCTR   TEST CHARACTER COUNTER
0187   A181 26 03      BNE   LA186   NOT EMPTY - READ IN SOME CASSETTE DATA
0188   A183 03 70      COM   CINBFL   SET TO $FF: CONSOLE IN BUFFER EMPTY
0189   A185 39      LA185   RTS
0190   *
0191   A186 34 74   LA186   PSHS   U,Y,X,B   SAVE REGISTERS
0192   A188 9E 7A      LDX   CINPTR   PICK UP BUFFER POINTER
0193   A18A A6 80      LDA   ,X+   GET NEXT CHAR
0194   A18C 34 02      PSHS   A   SAVE CHAR ON STACK
0195   A18E 9F 7A      STX   CINPTR   SAVE NEW BUFFER POINTER
0196   A190 0A 79   LA190   DEC   CINCTR   DECR CHAR COUNT
0197   A192 26 03      BNE   LA197   RETURN IF BUFFER NOT EMPTY
0198   A194 BD A6 35      JSR   LA635   GO READ TAPE
0199   A197 35 F6   LA197   PULS   A,B,X,Y,U,PC   RESTORE REGISTERS
0200   *
0201   A199 0A 94   LA199   DEC   BLKCNT   CURSOR BLINK DELAY (=11)
0202   A19B 26 0E      BNE   LA1AB   NOT TIME FOR NEW COLOR
0203   A19D C6 0B      LDB   #11   *
0204   A19F D7 94      STB   BLKCNT   *RESET DELAY COUNTER
0205   A1A1 9E 88      LDX   CURPOS   GET CURSOR POSITION
0206   A1A3 A6 84      LDA   ,X   GET CURRENT CURSOR CHAR
0207   A1A5 8B 10      ADDA   #$10   BUMP TO NEXT COLOR
0208   A1A7 8A 8F      ORA   #$8F   MAKE SURE IT’S A SOLID GRAPHICS BLOCK
0209   A1A9 A7 84      STA   ,X   STORE TO SCREEN
0210   A1AB 8E 04 5E   LA1AB   LDX   #DEBDEL   CURSOR BLINK DELAY (=045E)
0211   A1AE 7E A7 D3   LA1AE   JMP   LA7D3   DELAY WHILE X DECREMENTS TO ZERO
0212
0213      * BLINK CURSOR WHILE WAITING FOR A KEYSTROKE
0214   A1B1 34 14   LA1B1   PSHS   X,B   SAVE REGISTERS X,B
0215   A1B3 8D E4   LA1B3   BSR   LA199   GO DO CURSOR
0216   A1B5 8D 14      BSR   KEYIN   GO CHECK KEYBOARD
0217   A1B7 27 FA      BEQ   LA1B3   LOOP IF NO KEY DOWN
0218   A1B9 C6 60      LDB   #$60   BLANK
0219   A1BB E7 9F 00 88      STB   [CURPOS]   BLANK CURRENT CURSOR CHAR ON SCREEN
0220   A1BF 35 94   LA1BF   PULS   B,X,PC

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 » 30 Ago 2017 00:15

Hola Luis,
Buen trabajo!
Yo solo le veo el típico inconveniente que presentan los 'añadidos' al BASIC:
- Te ves obligado a crear un segundo STUB para poner todos los nuevos comandos y ésto implica que TODOS ellos
han de estar en memoria al mismo tiempo y SIEMPRE, aunque no los vaya a usar el programador.
Esto implica reducir MUCHO el espacio libre, que ya de por si es poco.
La ventaja que tiene es que YA puedes empezar puesto que tienes MUCHOS comandos por defecto (gracias a Micro$oft)

A mi me gustaba mas el planteo de preparar una librería en C, C#, en lo que sea con tal de que se pueda compilar a código 6809 al final
La filosofía de C es que el programador pueda elegir las librerías/rutinas que va a emplear, de forma que NO cargue innecesariamente
la memoria con funciones no necesarias para el programa en cuestión.

Para las máquinas con 64k ésto sería abrir la ventana a 64k, casi TODAS para el programador, en MAPA1 claro está, pero como no vamos a usar el
BASIC, no importaría. Pero el DOS habría que currárselo también ... tenemos buenos desensamblados.
Inconvenientes: Requiere trabajar en ensamblador o en C/C# para obviar el Basic

Tu llevas el proyecto, sigue adelante con o sin apoyos, en cuanto se vaya definiendo lo que vas a hacer, trataré de echar un cable en
todo lo que me sea posible. Cuenta conmigo aunque sea solamente un 25%, la verdad es que estoy en unos cuantos follones!

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 » 30 Ago 2017 03:07

Muchas gracias pser, con solo esas palabras ya me ayudas.
Con respecto al proyecto del "C", eso va, lo llevó en paralelo, este sin embargo también va, creo que no chocan para nada y ambos darán buenos frutos.
En "C" ya se pueden empezar proyectos de juegos, como bien dices deja mucha memoria libre y se usa eficientemente.
Este de basic, es porque de verdad mejorar la máquina en unas 10 veces es muy tentador, siendo compatible con el otro basic, y pudiendo hasta aprovechar el 6309 (otra idea que tengo)

Fijate que hay una persona mejorando y compilando el basic de la MC-10, no lo conozco aun pero es parecido a lo que yo quiero, creo que se pueden unir parcialmente los proyectos. https://jdiffendaffer.blogspot.com/2017/04/

Lo del sistema operativo tambien es cierto, pero ya iremos resolviendo, por ahora estoy aprendiendo bien como hace las cosas el basic y ya mismo hago algunos intentos de compilación, con alguna mejora, se que roger taylor tiene muchas mejoras de Disco duro y otras cosas que tengo que revisar, pero aun no he podido.

Voy a ir compilando pequeñas mejoras, pero fijate que quiero ir lejitos.

Otro proyecto que quiero avanzar es el del emulador VCC que lo tengo en salsa.

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 » 30 Ago 2017 18:31

luiscoco escribió:Muchas gracias pser, con solo esas palabras ya me ayudas.
Con respecto al proyecto del "C", eso va, lo llevó en paralelo, este sin embargo también va, creo que no chocan para nada y ambos darán buenos frutos.
En "C" ya se pueden empezar proyectos de juegos, como bien dices deja mucha memoria libre y se usa eficientemente.
Este de basic, es porque de verdad mejorar la máquina en unas 10 veces es muy tentador, siendo compatible con el otro basic, y pudiendo hasta aprovechar el 6309 (otra idea que tengo)
Fijate que hay una persona mejorando y compilando el basic de la MC-10, no lo conozco aun pero es parecido a lo que yo quiero, creo que se pueden unir parcialmente los proyectos. https://jdiffendaffer.blogspot.com/2017/04/
Lo del sistema operativo tambien es cierto, pero ya iremos resolviendo, por ahora estoy aprendiendo bien como hace las cosas el basic y ya mismo hago algunos intentos de compilación, con alguna mejora, se que roger taylor tiene muchas mejoras de Disco duro y otras cosas que tengo que revisar, pero aun no he podido.
Voy a ir compilando pequeñas mejoras, pero fijate que quiero ir lejitos.
Otro proyecto que quiero avanzar es el del emulador VCC que lo tengo en salsa.

Hola Luis,
veo que sigues tan optimista como siempre, embarcándote en muchos proyectos y la verdad que son de los que van para largo ...
Yo solo llevo dos en marcha y me ha estresado cantidad tener que hacer dos 'updates' a dos proyectos antiguos para adaptarlos a las
necesidades que nos 'hemos creado', léase hacer que el Orchestra90 para Dragón autoarranque si lo tostamos en una controladora de disco,
posibilidad que aparece ahora que tenemos una que admite CUATRO ROMs de 16k, casi nada
El otro susto ha sido que hemos detectado que el DOSPlus50 extendido grabado en una controladora también, cuando arranca dejaba
encendido el LED del drive 1. En fin, cerrados ambos flecos, ya me puedo dedicar a mis dos rollitos!
A mi me gusta cerrar proyectos y la mejor manera es plantearse cosas útiles pero bien determinadas y fijadas las características a implementar
Cuando cierras un proyecto, te da una alegría importante y aumentan las ganas de embarcarse en otra cosa, pero (para mi) de una en una
o como mucho una avanzada y otra empezando ... divide y perderás -banghead
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 » 31 Ago 2017 02:27

Muy interesante lo que dices y me anima mucho más, imagina un solo sistemas para dragon y coco, que acepte todo esto, con las mejores ventajas de todos estos DOS y que se pueda quemar para cualquier equipo, sería lo mejor, sacariamos updates poco a poco, operativas y con cada número de versión aceptamos más periféricos y quitamos incompatibilidades, seria lo mejor.

Lo de terminar proyectos es relativo, mis sistemas nunca terminan (los que vendo) solo terminan hasta un punto, y aun recién salidos ya empiezo otra version, solo mejoran, dime tu, si windows o linux están listos, y te diré que nunca estarán terminados. solo se termina una versión hasta cierto punto.

Con respecto al proyecto, pongamos algunos puntos.
* Tengo que aprender como lo hace todo el basic, ya tengo una buena idea, pero siempre tuve una tranca en entender la generación del audio del cassette, un dia nos explayamos.
* Iré decodificando y planteando mejoras a cada comando o rutina, con estrategias concretas y espero que opineis para poder decidir.
* Tratare de hacer trozos claros para que los vayamos trabajando como hiciste en el HOBBIT.
* Tratare de ir guiando el camino a ver hasta dónde llegamos, y lo mas sensato seria (pienso yo), tener funcionando el compilado de los BASIC Actuales e ir modificando paso a paso, quedando operativos, claro siempre habrá que hacer cambios masivos los cuales habrá que planear, y ver su alcance para que tengan un principio y un fin.

Vere si puedo hacer todo esto con los mecanismos que me da el FORO, que al parecer se quedan cortos para hacer esquemas, hacer sub-proyectos y llevar quien hace que. pero tratare.


Volver a “Tandy CoCo”

¿Quién está conectado?

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