¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor programandala.net el Mie Feb 24, 2016 6:45 pm

Hasta ahora solo he usado G+DOS en ensamblador para leer y escribir ficheros de código completos, o para mostrar directorios en pantalla. Pero para ampliar un proyecto para 128K con PlusD, voy a necesitar hacer dos tareas nuevas:

  • Leer y grabar bloques de 1 KiB de un fichero, de forma aleatoria;
  • leer líneas de un fichero de texto, de forma secuencial.

Estas dos operaciones son fáciles de hacer en +3DOS, porque el SO provee llamadas muy específicas. Pero en G+DOS no parece tan sencillo, y por lo que he visto habría que hacerlo a más bajo nivel, manipulando punteros y leyendo octeto a octeto. He estudiado el desensamblado de la ROM de PlusD pero todavía no he sacado mucho en claro. Sé que Beta DOS permite hacer estas operaciones y otras desde BASIC, pero que yo sepa no está disponible su desensamblado, para estudiarlo.

No he encontrado en la web ejemplos de cómo hacer esto, ni tampoco en Microhobby (que tiene un buen número de artículos sobre GDOS y G+DOS).

¿Alguién sabe cómo hacer estas operaciones en G+DOS o tiene alguna muestra de código que pueda servir de ejemplo?
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 180
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor Alessandro Grussu el Dom Feb 28, 2016 9:11 pm

Hola Marcos, quizás este documento podría ser de ayuda.
Spectrumpedia, la enciclopedia del Spectrum!
Alessandro Grussu
rst 0
 
Mensajes: 37
Registrado: Sab Jun 08, 2013 12:02 am
Ubicación: Messina, Italia

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor Jose Manuel el Lun Feb 29, 2016 9:01 am

Buenos días,

Hace ya mucho tiempo que no uso el G-DOS, pero recuerdo que con los códigos de enganche conseguías mucho de los ficheros de disco. Has probado con ellos?

Yo recuerdo que tecleaba los bloques de codigo del Cucm de Microhobby en un Pc con un editor de texto, lo salvaba en un disco Ms-Dos y despues lo leía con G-Dos en el Spectrum y lo cargaba ya en el Cucm. Asi me era mas facil que teclearlo con el Spectrum.

Tambien programé un doctor de disco que accedia al directorio y despues a los sectores ocupados por cada archivo y lo verificaba, dandote el archivo y su sector erroneo, si así fuera. Tambien se podia hacer secuencialmente.

Te pongo estos ejemplos como programas de acceso a ficheros de disco. El G-Dos tiene la ventaja que los dos ultimos bytes del sector te dicen donde continua el siguiente sector del fichero (pista y sector) y tiene tambien unos potentes codigos de enganche que te facilitan la programación. De hecho yo no programaba en ensamblador, todo en Basic.

A la noche te envío mis programas y podrás comprobar si te valen o no, las diferentes rutinas que contienen.

Saludos, J.M:
El Trastero del Spectrum
http://trastero.speccy.org/
Jose Manuel
Sabreman
 
Mensajes: 371
Registrado: Mar Abr 17, 2007 1:25 pm
Ubicación: Madrid

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor programandala.net el Lun Feb 29, 2016 2:05 pm

Alessandro Grussu escribió:Hola Marcos, quizás este documento podría ser de ayuda.


Gracias. No conocía este documento. Tiene información útil que no está en el manual de PlusD, aunque no exactamente la que busco.

Veo que también incluye una descripción de UNI-DOS, un sistema que hace tiempo quise probar con PlusD y Fuse, pero no logré encontrar una imagen de la ROM.
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 180
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor programandala.net el Lun Feb 29, 2016 2:25 pm

Jose Manuel escribió:El G-Dos tiene la ventaja que los dos ultimos bytes del sector te dicen donde continua el siguiente sector del fichero (pista y sector) y tiene tambien unos potentes codigos de enganche que te facilitan la programación. De hecho yo no programaba en ensamblador, todo en Basic.

A la noche te envío mis programas y podrás comprobar si te valen o no, las diferentes rutinas que contienen.


Gracias.

Yo en ensamblador he programado lectura y grabación de ficheros completos o sectores sueltos del disco, para lo que sí hay códigos de enganche. Eso lo conozco bien. Pero no hay códigos de enganche para el manejo de ficheros a más bajo nivel, manipulando su puntero, o leyendo su contenido hasta encontrar un código de final de línea. Para eso hay que escribir rutinas propias.

También conozco el formato de disco y de directorio. De hecho escribí una herramienta que necesitaba para crear imágenes de disquete MGT, y que ya anuncié aquí en su día: mkmgt.

Como dices G+DOS guarda al final de cada sector la pista y sector del siguiente sector, y eso facilita algunas operaciones, como leer secuencialmente un fichero. Pero también dificulta otras, pues sin esos dos octetos al final los sectores solo contendrían datos y algunos cálculos serían más fáciles.

Por lo que he visto en el desensamblado de G+DOS, hay rutinas para ir llenando un búfer con octetos leídos desde un fichero, y una variable que sirve de puntero, pero aún no lo veo claro...
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 180
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor Alessandro Grussu el Mar Mar 01, 2016 1:28 am

programandala.net escribió:Veo que también incluye una descripción de UNI-DOS, un sistema que hace tiempo quise probar con PlusD y Fuse, pero no logré encontrar una imagen de la ROM.

Hola,

no sé si lo utilizás, pero Spectaculator puede emular el Uni-DOS también, además del G+DOS.

En cualquier caso, hay una ROM del Uni-DOS descargable en esta página.

Manual y disco de inicio del Uni-DOS están en el archivo de WOS.
Spectrumpedia, la enciclopedia del Spectrum!
Alessandro Grussu
rst 0
 
Mensajes: 37
Registrado: Sab Jun 08, 2013 12:02 am
Ubicación: Messina, Italia

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor programandala.net el Mar Mar 01, 2016 1:52 am

Alessandro Grussu escribió:no sé si lo utilizás, pero Spectaculator puede emular el Uni-DOS también, además del G+DOS.

En cualquier caso, hay una ROM del Uni-DOS descargable en esta página.

Manual y disco de inicio del Uni-DOS están en el archivo de WOS.


Uso Fuse. Permite elegir la ROM de Plus D o DISCiPLE, así que UNI-DOS deberá funcionar.

Gracias por el enlace. Precisamente ayer estuve buscando las ROM de Scorpion y Pentagon, y finalmente las encontré ahí, pero no me di cuenta de que también estaba la de UNI-DOS. El manual y el disco sí los tenía hace tiempo. Voy a probar el sistema cuanto antes pueda. Para algunos proyectos he usado Beta DOS, corregido con los parches publicados en Format, pero UNI-DOS parece más potente.
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 180
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor Jose Manuel el Mie Mar 02, 2016 7:28 am

Buenos días,

Me parece que no sirve para lo que quieres. No entendí que era para buscar dentro de un sector.

Aquí pongo el programa que leía datos de discos MS-DOS y lo salvaba a G-DOS:

1 LET p=1
5 LET dir=30000
6 LET ps=135: LET ss=5: LET pl=47: LET sl=5
10 FOR n=0 TO 18
11 PRINT pl,sl,dir
12 LOAD @1,pl,sl,dir
13 LET pl=PEEK (dir+510): LET sl=PEEK (dir+511): LET dir=dir+510
15 NEXT n
16 PRINT "CAMBIE DISCO. PONGA DOS"
18 PAUSE 0
19 LET dir=3e4
20 FOR n=0 TO 18
21 PRINT ps,ss,dir
22 SAVE @1,ps,ss,dir+512
25 LET ss=ss+1: LET dir=dir+512
30 IF ss>9 THEN LET ss=1: LET ps=ps+128: IF ps>208 THEN LET ps=ps-255
35 NEXT n
40 STOP
50 SAVE d1"GRABA-DOS"
El Trastero del Spectrum
http://trastero.speccy.org/
Jose Manuel
Sabreman
 
Mensajes: 371
Registrado: Mar Abr 17, 2007 1:25 pm
Ubicación: Madrid

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor Jose Manuel el Mie Mar 02, 2016 7:31 am

Y aquí el que verificaba los archivos en G-DOS:

5 GO TO 10
7 BORDER 1: PAPER 1: INK 7: CLS
8 POKE @0,0
10 LET k=1: PRINT AT 2,3; FLASH 1;"METE EL DISCO PARA ANALIZAR": PAUSE 0: CLS
20 LET n=0
30 LET n=n+1
40 IF n=80 THEN CLS : PRINT AT 10,5;"DISCO EN PERFECTO ESTADO": GO TO 310
70 LET S$=""
80 LET N$=STR$ ((N+1)/20)
90 LET PISTA=VAL N$(1)
110 IF LEN N$>=3 THEN LET SECTOR=VAL N$(3)
120 IF LEN N$<3 THEN LET SECTOR=10: LET PISTA=PISTA-1
130 IF SECTOR=0 THEN LET SECTOR=10: LET PISTA=PISTA-1
140 IF LEN N$>=4 THEN LET DIRE=256
150 IF LEN N$<4 THEN LET DIRE=0
160 LOAD @1,PISTA,SECTOR,3E4
170 PRINT AT 6,10;"NUMERO:";N;AT 8,10;"NOMBRE:";
172 LET a$=" "
175 IF PEEK (30000+dire)=0 THEN PRINT AT 8,17;a$;AT 11,19;a$;AT 15,29;a$: GO TO 30
180 FOR F=30001+DIRE TO 30010+DIRE
190 LET S$=S$+CHR$ PEEK F
200 NEXT F: PRINT INVERSE 1;S$
210 LET SO=PEEK (30011+DIRE)*256+PEEK (30012+DIRE)
220 LET DIR=3E4: LET p=PEEK (30013+DIRE): LET s=PEEK (30014+DIRE): LOAD @1,p,s,DIR
221 PRINT AT 15,10;"SECTORES OCUPADOS: ";SO;" "
222 PRINT AT 11,10;"SECTOR: "
225 PRINT AT 11,19;p;":";s;" ";AT 11,27;"N:1 "
230 FOR M=2 TO SO: LET P=PEEK (DIR+510): LET S=PEEK (DIR+511)
232 PRINT AT 11,10;"SECTOR: "
235 PRINT AT 11,19;p;":";s;" ";AT 11,27;"N:";M;" "
240 LOAD @1,P,S,DIR
250 NEXT M
260 GO TO 30
300 SAVE D1"DOCTOR +D" LINE 7
El Trastero del Spectrum
http://trastero.speccy.org/
Jose Manuel
Sabreman
 
Mensajes: 371
Registrado: Mar Abr 17, 2007 1:25 pm
Ubicación: Madrid

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor programandala.net el Mie Mar 02, 2016 12:21 pm

Jose Manuel escribió:Me parece que no sirve para lo que quieres. No entendí que era para buscar dentro de un sector.

Aquí pongo el programa que leía datos de discos MS-DOS y lo salvaba a G-DOS:


GDOS y G+DOS permitían hacer esas operaciones fácilmente, gracias a los comandos de para leer y grabar sectores. Yo incluso copié discos de MS-DOS de 5'25 3'5 usando la DISCiPLE; lo expliqué en el número 185 de Microhobby.

Pero como dices, lo que quiero hacer en este caso es diferente: leer un fichero (de cualquier tipo) por líneas de texto, leyendo cada octeto hasta encontrar el próximo retorno de carro; o bien leer un bloque concreto de 1 KiB. Se podría hacer en BASIC, leyendo el directorio para encontrar el fichero, y después sus sectores en un búfer, uno a uno, para examinarlos. Pero para lo que lo necesito tiene que ser necesariamente en ensamblador. Iré haciendo pruebas, guiándome con el desensamblado de la ROM de PlusD. También hay alguna información muy útil en la serie de artículos Inside G+DOS de Stephen Warr, el autor de Uni-DOS, que he encontrado en la revista Format.
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 180
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor Jose Manuel el Sab Mar 05, 2016 7:42 pm

Buenas tardes Marcos,

Mírate esta página, hay discos con utilidades para Disciple. Por si hay alguna utilidad que te sea útil.

http://www.cborn.nl/arcindex.htm

Por cierto, baja la barra horizontal, te tapa el contenido.

Saludos, J.M:
El Trastero del Spectrum
http://trastero.speccy.org/
Jose Manuel
Sabreman
 
Mensajes: 371
Registrado: Mar Abr 17, 2007 1:25 pm
Ubicación: Madrid

Re: ¿Cómo manejar ficheros de datos en G+DOS en ensamblador?

Notapor programandala.net el Sab Mar 05, 2016 8:43 pm

Jose Manuel escribió:Mírate esta página, hay discos con utilidades para Disciple. Por si hay alguna utilidad que te sea útil.
http://www.cborn.nl/arcindex.htm
Por cierto, baja la barra horizontal, te tapa el contenido


Gracias, no la conocía. He bajado los discos que parece que pueden ser interesantes y los iré mirando.

En http://www.cborn.nl/Disciple%20Nieuwsbrief-DDiscs.htm se ve esa misma página directamente, sin el problema de la barra.

Aparte, estoy convirtiendo el desensamblado de Plus D hecho por JRB a un fichero fuente estándar, para poder estudiarlo mejor y añadirle la información que vaya encontrando. Ya tengo algunas pistas para hacer pruebas. También en Microhobby 178, página 24, hay un artículo de Miguel Díaz Kusztrich que contiene información que no he visto en otro sitio, como el contenido de la tabla interna que G+DOS usa apuntada por IX, y que entre otras cosas tiene los punteros internos de fichero que andaba buscando. Lo había leído hace tiempo, pero lo no recordaba.

+3DOS está muy bien documentado y tiene rutinas para casi todo, con puntos de entrada estándar. G+DOS es más pobre en esos aspectos, pero en general me gusta más. El formato de disco y de ficheros de +3DOS, basado en CP/M, me parece rudimentario comparado el de G+DOS, aparte de que es mucho más lento. Los discos en DISCiPLE y Plus D son muy rápidos.
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 180
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España


Volver a Programación y nuevos desarrollos

¿Quién está conectado?

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