Ready64 Forum

Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: iAN CooG - 11 Agosto 2004, 01:48:00

Titolo: Lettura Della Directory
Inserito da: iAN CooG - 11 Agosto 2004, 01:48:00
 Prefazione: riporto questo articolo, postato giorni fa da me fa su it.fan.studio.vit, dove stavano degenerando dicendo immani cazzate. Dopo questo stranamente si sono ammutoliti :P

Caricare la directory sul c64 si fa come molti sanno:

LOAD"$",8

"$" e' un file inesistente ma i drive interpretano la richiesta di lettura del file speciale "$" e mandano l'elenco dei files contenuti nella directory come se fosse un listato basic all'indirizzo $0401, per retro-compatibilita' col vecchio CBM/PET.
Con il ",8" forziamo il caricamento all'inizio della ram basic, quindi a $0801, altrimenti con ",8,1" lo vedremmo apparire a video come tanti caratteri "confusi"
Caricando quindi un nuovo prg basic, anche se finto, cancelleremo cio' che c'era prima.
La maggior parte delle cartucce velocizzatrici e chip di espansione
(SpeedDos/JiffyDos) hanno gia' una routine di "dir", nello specifico @$,
che e' cmq una routinetta, meno di 80 bytes, non distruttiva come la
LOAD"$",8, e lo fa utilizzando le routine del Kernal.
La routine l'ho ottenuta disassemblando un compattatore.
Codice: [Seleziona]
       *=$0334      ; tape buffer

        JSR $E544    ; clear screen
        LDA #$01
        LDX #<dirname
        LDY #>dirname
        JSR $FFBD    ; set filename "$"
        LDA #$08
        STA $BA      ; device #8
        LDA #$60
        STA $B9      ; secondary chn
        JSR $F3D5    ; open for serial bus devices
        JSR $F219    ; set input device
        LDY #$04
labl1  
        JSR $EE13    ; input byte on serial bus
        DEY
        BNE labl1    ; get rid of Y bytes
        LDA $C6      ; key pressed?
        ORA $90      ; or EOF?
        BNE labl2    ; if yes exit
        JSR $EE13    ; now get in AX the dimension
        TAX          ; of the file
        JSR $EE13
        JSR $BDCD    ; print number from AX
labl3  
        JSR $EE13    ; now the filename
        JSR $E716    ; put a character to screen
        BNE labl3    ; while not 0 encountered
        JSR $AAD7    ; put a CR , end line
        LDY #$02      ; set 2 bytes to skip
        BNE labl1    ; repeat
labl2  
        JSR $F642    ; close serial bus device
        JSR $F6F3    ; restore I/O devices to default
labl4  
        JSR $F142    ; w8 a key
        BEQ labl4
        RTS

dirname .byte "$"

ora con un semplice sys 820 otterremo la nostra directory, senza perdere nulla in memoria.
Titolo: Lettura Della Directory
Inserito da: MarC=ello - 11 Agosto 2004, 23:49:41
 Per chi interessato, c'è una spiegazione dettagliata della lettura della directory non distruttiva su C= Hacking, rivista n. 3.

Potete reperire le riviste su: http://www.ffd2.com/fridge/chacking/ (http://www.ffd2.com/fridge/chacking/)

Ciao!