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
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.
*=$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.