Autore Topic: Lettori Floppy, Sfruttarne Il Cbm Dos  (Letto 5311 volte)

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #15 il: 08 Agosto 2006, 21:28:20 »
 IMHO la spiegazione dei file rels è un pò criptica sul manuale del drive,consiglio di leggere articoli specifici su CCC o il capitolo di "The anatomy of 1541" che ne parla.

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #16 il: 08 Agosto 2006, 21:37:22 »
 Va benissimo, ma non mischiare le carte: si parla di file random, non di file relativi. ;)
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #17 il: 08 Agosto 2006, 21:47:06 »
 Ops,come non detto ho letto male io :D  

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #18 il: 08 Agosto 2006, 23:14:50 »
 
Citazione da: "eregil"
(è decisamente più utile che, impuntandosi nel "non voler copiare", provare a scrivere da zero, ma senza tenere conto da principio del formato della directory: è un po' come fare reverse engineering per ricavare delle specifiche che hai già a portata di mano).
Credo di aver usato il termine "da zero" in modo equivoco, infatti intendevo che sto scrivendo ex novo senza ricopiare, ma basandomi comunque su qualcosa di già visto, nella fattispecie la mia attenzione era stata catturata non dal programma di lettura directory, bensì da quello denominato DIR, situato nell'appendice C del manuale, che appunto fa la lettura usando il canale 0 del load, e non come file sequenziale. Forse perchè mi è venuto più chiaro interpetarne i passaggi.
Il guaio è che adesso ho creato il prg di DIR con bastext per vederlo girare, e che anche lui si blocca, in genere se la directory è lunga.  :huh:
Se da un lato ciò vuol dire che il problema non è in ciò che ho scritto io, dall'altro lato questo risultato non mi aiuta a capirne il motivo, cosa che invece vorrei decisamente conoscere.  
C= - Dal 1985! Lunga vita e prosperità.

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #19 il: 08 Agosto 2006, 23:34:05 »
 Haha, mi ero dimenticato del programmino in appendice. :lol: Ribadisco comunque il concetto espresso, che per avere le informazioni "avanzate" è necessario almeno il ricorso ad un canale tra il 2 e il 14.

Be', comunque, se ti fa "crash" con qualche immagine D64 reperibile in rete, indicamela, così faccio una prova. E visto che sospetti dell'emulatore, che emulatore e che versione stai usando?
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #20 il: 08 Agosto 2006, 23:50:04 »
Citazione da: "eregil"
Be', comunque, se ti fa "crash" con qualche immagine D64 reperibile in rete, indicamela, così faccio una prova. E visto che sospetti dell'emulatore, che emulatore e che versione stai usando?
Ops... stavo consolandomi lavorando al catalogo di CCC. Il problema me lo dà con diverse immagini, anche se le creo e le riempio di files all'uopo. CCS 2.0. Sto notando che più files ci sono più è matematico il congelamento...
C= - Dal 1985! Lunga vita e prosperità.

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #21 il: 10 Agosto 2006, 13:01:53 »
 Ho steso in fretta e furia un piccolo listato Basic per la lettura e l'output delle entry su disco che vuole essere un esempio (non certo il migliore) di come si possano leggere le entry del disco.@Cbm:osserva le subroutine alle linee 100,115,125 e integrando col manuale del drive,cerca di capire come funzionano.

Codice: [Seleziona]
start tok64 direct.prg
 0 rem semplice lettura e output della dir
 5 tr=18
 6 sc=0
 7 err=0
10 open 1,8,15
15 open 2,8,2,"#"
20 gosub 100
25 ps=144:gosub 115
30 for i=0 to 19:get#2,a$:print a$;:next:print:print
35 if asc(t$+chr$(0))=0 then 90
40 tr=asc(t$+chr$(0)):sc=asc(s$+chr$(0))
45 gosub 100
50 ps=3
55 gosub 125
60 if err=1 then 90
65 goto 35
90 close 2:close 1:end
99 rem -*** caricamento del settore ***-
100 print#1,"u1:"2;0;tr;sc
105 get#2,t$:get#2,s$
110 return
114 rem -* posizionamento nel settore *-
115 print#1,"b-p:"2;ps
120 return
124 rem -****** lettura della dir *****-
125 for i=1 to 8
130 gosub 115:get#2,a$:if asc(a$+chr$(0))=0 then err=1
135 if err=1 then 155
140 ps=ps+2:gosub 115
145 for j=0 to 15:get#2,a$:print a$;:next:print
150 ps=ps+30:next
155 return
stop tok64

Ciauuuuuuu

p.s.:forse il puntatore al primo blocco dati come terminatore non è la scelta migliore,ma sono certo che tu scriverai qualcosa di meglio per la tua utility ;)

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #22 il: 11 Agosto 2006, 14:40:30 »
 Senza troppe complicazioni, questo e' sufficiente
Codice: [Seleziona]
start tok64 dd.prg
10 close1:open1,8,0,"$0:*,p,r"
19 rem salta i primi 4 bytes (loadaddres e link)
20 x=4
30 fori=1tox:get#1,c$:ifst<>0then100
35 next
39 rem stampa dimensione, byte basso+byte alto*256
40 gosub200:d=asc(c$):gosub200:d=d+(asc(c$)*256):print"{left}"d;
41 rem stampa nome finche' non trovi 0
45 gosub200:printc$;:ifc$<>chr$(0)then45
46 print
49 rem salta 2 byte (link prossima riga)
50 x=2:goto30
100 close1:end
200 get#1,c$:ifc$=""thenc$=chr$(0)
201 return
stop tok64
Cosi' facendo si legge e interpreta il programma basic inviato dal drive quando si richiede il file "$"
Notare la linea 200, e' necessario patchare la variabile per ovviare al baco di interpretazione del chr$(0), che e' il terminatore stringa: la get# non assegna cs=chr$(0) ma solo stringa vuota, e dobbiamo rimettercelo dentro noi per far si che poi le operazioni su stringa non diano errore.

Questo programma l'ho convertito da asm, dalla routine che postai qua
http://ready64.org/smf/index.php?topic=658.0

Scartabellando tra vari dox ho trovato un simpatico metodo
Codice: [Seleziona]
start tok64 2line.prg
1 D=peek(186)
1000 SYS57812"$",D:POKE43,1:POKE44,192:POKE768,174:POKE769,167:SYS47003,1
1010 POKE782,192:SYS65493:SYS42291:LIST:POKE44,8:POKE768,139:POKE769,227
stop tok64

la locazione 186 contiene l'ultimo drive usato.
La prima sys setta il nome del file da aprire e da quale drive farlo.
I puntatori della memoria basic sono rediretti a $c001, il vettore $0300 dei messaggi del basic rediretti a $a874 (per non visualizzare alcun messaggio del tutto, nascondendo i vari "searching" "loading" etc), effettua il load, un relink del programma caricato a $c001 e lo lista, dopodiche' ritorna all'area normale ripristinando il vettore $0300.
Affascinante.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #23 il: 12 Agosto 2006, 01:18:39 »
 In ritardo, ma ecco anche il mio risultato. Ero già preso e non ho colpevolmente tenuto conto dei contributi vostri, ma li studierò lo stesso domani (bello quello coi poke, minuscolo e... diverso).
Pur con delle differenze e con delle dimensioni ridotte, è troppo legato come sequenza dei passaggi al programma DIR preso come modello, lo so.
Codice: [Seleziona]
start tok64 roulist.prg
1000 PRINT"{clear}{C*28}"
1010 OPEN 1,8,0,"$":g=1
1020 FOR g=g TO 3:GET#1,d$,d2$:NEXT g
1030 b=0:g=2
1040 IF d$<>"" THEN b=ASC(d$)
1045 IF d2$<>"" THEN b=b+ASC(d2$)*256
1050 PRINT "(" MID$(STR$(b),2);")";TAB(5);
1060 GET#1,d$:IF st<>0 THEN 1090
1065 IF d$<>CHR$(34) THEN 1060
1070 GET#1,d$:IF d$<>CHR$(34)THEN PRINT d$;:GOTO 1070
1075 GET#1,d$:PRINT d$;:IF d$<>"" THEN 1075
1080 PRINT:IF st=0 THEN 1020
1090 PRINT"{left} blocchi liberi)":CLOSE 1
1095 PRINT"{C*28}"
stop tok64
Il listato ha anche un pò di formattazione del testo perchè l'ho già integrato nel resto del programma dimostrativo, nel quale, prima di caricarlo sullo spazio, ho corretto anche un errore nel codice che era nato dalla "rinumerazione" delle righe fatta la volta precedente e che mi era sfuggito.

Credo sia utile riportare, come esperienza fatta, che per comprendere meglio il contenuto del settore e come questo sia strutturato all'interno del settore stesso, in modo da sapere come poterlo utilizzare, ho trovato molto utile in fase di studio, farmi rappresentare il tutto sotto forma di codice ASCII, chiedendo di volta in volta la stampa del contenuto estratto da GET# con PRINT ASC(X$)

Infine per completezza, una cosa che avevo dimenticato di riferire nel frattempo, e cioè che quel problema di blocco del sistema di cui parlavo nei messaggi dell'8 agosto, era un problema mio, dovuto all'emulatore come sospettavo. Quindi come non detto.

 :c64: iao.
C= - Dal 1985! Lunga vita e prosperità.

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #24 il: 14 Agosto 2006, 20:54:54 »
 A proposito della lettura directory, ho fatto una piccola modifica al .prg messo in rete, prevedendo la possibilità, su richiesta, di inviare il risultato della lettura alla stampante per averlo su carta. Naturalmente la stampa è testata solo su emulatore, ovvero stampa su file .txt.
C= - Dal 1985! Lunga vita e prosperità.

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #25 il: 21 Agosto 2006, 23:23:03 »
Bene bene  :mattsid: , vista la nuova possibilità offerta, carico anche io il file direttamente qui, così evito di usare uno spazio esterno e ho tutto sottomano.

Grazie Roberto!
« Ultima modifica: 21 Gennaio 2015, 21:54:33 da eregil »
C= - Dal 1985! Lunga vita e prosperità.

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #26 il: 08 Novembre 2006, 20:54:03 »
 Finalmente ho avuto la voglia e il tempo di fare qualche giorno di immersione totale, toccando i comandi USER in lettura-scrittura e l'uso del buffer, quindi studiando e riproponendo il codice necessario ad ottenere una vista grafica della BAM, in stile "forza 4", le cui istruzioni trovate aggiunte a partire dalla riga 1500. Alla 1550 è presente la funzione chiave: DEF FNS(Z)=2^(S-INT(S/8)*8) AND (SB(INT(S/8)))
Utilizzando gli stessi comandi e in aggiunta al resto, con istruzioni questa volta a partire dalla riga 7000, ho introdotto nel programma l'utile possibilità, non permessa con comandi diretti come avviene per i file, di dare un nuovo nome al disco senza per questo ricorrere alla sua formattazione. Ciò diventa possibile sostituendo la denominazione precedente, scrivendo direttamente sul blocco 0 della famosa traccia 18, a partire dal byte 144, zona dove si trova memorizzata l'informazione relativa al nome del disco.
C= - Dal 1985! Lunga vita e prosperità.

Goldrake

  • Utente
  • **
  • Post: 52
  • Gioco Preferito: Flimbo's Quest
Lettori Floppy, Sfruttarne Il Cbm Dos
« Risposta #27 il: 08 Novembre 2006, 20:56:03 »
 
Citazione da: "Cbm"
Finalmente ho avuto la voglia e il tempo di fare qualche giorno di immersione totale, toccando i comandi USER in lettura-scrittura e l'uso del buffer, quindi studiando e riproponendo il codice necessario ad ottenere una vista grafica della BAM, in stile "forza 4", le cui istruzioni trovate aggiunte a partire dalla riga 1500. Alla 1550 è presente la funzione chiave: DEF FNS(Z)=2^(S-INT(S/8)*8) AND (SB(INT(S/8)))
Utilizzando gli stessi comandi e in aggiunta al resto, con istruzioni questa volta a partire dalla riga 7000, ho introdotto nel programma l'utile possibilità, non permessa con comandi diretti come avviene per i file, di dare un nuovo nome al disco senza per questo ricorrere alla sua formattazione. Ciò diventa possibile sostituendo la denominazione precedente, scrivendo direttamente sul blocco 0 della famosa traccia 18, a partire dal byte 144, zona dove si trova memorizzata l'informazione relativa al nome del disco.
CHE M***A (attenzione alle paroline... ndHiryu) HAI DETTOOOOOOOOOOOO ??????? Esprimiti in aramaico, lo capisco meglio!!!!!!  :lol:  :ciapet:  :fagiano: