Filerequester/directory
<< zurück zu Filerequester
Das Maschinenspracheprogramm directory ist ein Filerequester, mit dem in einem laufenden BASIC-Programm ein Dateiname per Auswahl mit den Cursortasten in eine Variable übernommen werden kann.
- Original von Dieter Bayer im 64'er Sonderheft 15, Seite 154 (1987).
- Korrekturen von Peter Hagemann (1988 und 2022).
- An TSB angepasst von Peter Hagemann (2023) und Arndt Dettke (2023) unter dem Namen „dirselect“.
Beschreibung[Bearbeiten | Quelltext bearbeiten]
Die Startadresse ist $C000 (49152). Das Programm belegt den Speicher $C000-$C297 (Original: $C000-$C285). Der Bereich unter dem BASIC-ROM ab $A000 dient als Pufferspeicher für die eingelesenen Directory-Einträge (16 Bytes pro Datei).
- Der erste Parameter gibt die Startspalte der Dateiauswahlanzeige an. Er darf Werte von 0 bis 22 annehmen. Die Ausgabebreite beträgt 18 Zeichen.
- Der zweite Parameter ist der Dateifilter. Mit "$" werden sämtliche Dateien aus dem Directory angezeigt. Mit dem Filter "$:[*" werden nur Dateien ausgewählt, die mit "[" beginnen.
- Der dritte Parameter benennt die Variable, die den Dateinamen aufnimmt.
Anwendungsbeispiele:
DL=49152 SYSDL,22,"$",F$ SYSDL,19,"$:[*",F$
Die im Sonderheft 15 veröffentlichte Fassung (s.u. SMON-Disassembler-Listing des Originals) enthält die drei Mängel 1-3. Diese Probleme sind in der korrigierten Fassung von 1988 behoben. Zwei weitere kleinere Mängel (4-5) sind in der neuesten Fassung von 2022 beseitigt.
- Bei der Blockanzahl 34 gibt es Probleme, da sie mit dem Code für das Anführungszeichen verwechselt wird.
- Im normalen Betriebssystem wird die Schriftfarbe der Dateinamen nicht gesetzt, die so unsichtbar bleiben.
- Es gibt keine Möglichkeit, ohne Auswahl abzubrechen. Die korrigierte Version tut dies nach <Pfeil links>.
- Die Farbe wird jetzt im ganzen Ausgabebereich (auch in den Zeichen links und rechts vom Dateinamen) gesetzt.
- Nach der Dateiauswahl wird der Reverse-Modus ausgeschaltet.
Listing (ACME) der korrigierten Fassung[Bearbeiten | Quelltext bearbeiten]
;"directory" Dateiauswahldialog ;Original von Dieter Bayer aus dem 64'er SH15 (1987) ;mit Korrekturen von P.Hagemann (1988/2022) !to "directory-v3.prg", cbm * = $c000 errout = $a43a frmevl = $ad9e chkcom = $aefd home = $e566 getvar = $b08b frestr = $b6a3 getbyte = $b79e iecin = $ffa5 setpar = $ffba setfnp = $ffbd open = $ffc0 clrchn = $ffcc close = $ffc3 chkin = $ffc6 basout = $ffd2 getin = $ffe4 jsr home lda #16 ;String-Länge 16 jsr $b47d ;macht Platz für String stx $fc sty $fd jsr chkcom jsr getbyte stx startcol txa clc adc #18 sta endcol ;Endespalte = Startspalte + 18 jsr chkcom jsr frmevl jsr frestr jsr setfnp jsr chkcom jsr getvar sta $fa sty $fb lda $0d bne lc03b ldx #22 ;Fehler 22 jmp errout ;------------------ lc03b lda #$7f ldx #$08 ldy #$60 jsr setpar jsr open ldx #$7f jsr chkin ldx #4 ;4 Bytes überlesen lc04e jsr iecin bit $90 bvs lc05a dex bne lc04e beq lc065 ;------------------ lc05a jsr clrchn lda #$7f jsr close jmp lc0d9 ;------------------ lc065 jsr lc0c5 ;Zeiger auf RAM $a000 ldx startcol beq lc075 lda #$1d ;Crsr right lc06f jsr basout dex bne lc06f ;vor bis Startspalte lc075 ldx #21 ;21 Bytes lc077 jsr iecin jsr basout dex bne lc077 jsr skip12 ;12 Bytes überlesen ldx #8 lc083 jsr iecin cmp #$22 ;Anführungszeichen beq lc093 bit $90 ;Status Bit 6? bvs lc05a ;EOF, dann fertig dex bne lc083 ;nächstes Byte beq lc05a ;fertig ;------------------ lc093 ldy #00 lc095 jsr iecin ;(16-mal) sta ($50),y ;in RAM $a000 ablegen iny cpy #16 bne lc095 lda #$ff ;Ende-Markierung sta ($50),y dey lda ($50),y ;Byte davor beq lc05a ;= 0 dann fertig clc lda $50 adc #$10 ;nächste 16 Bytes im RAM sta $50 bcc lc0b3 inc $51 lc0b3 inc $02 ;maximale Anzahl der Datei-Einträge + 1 jsr skip12 ;12 Bytes überlesen lc0b8 jsr iecin bit $90 bvs lc05a ;eof, dann fertig cmp #$22 ;sonst bis Anführungszeichen bne lc0b8 beq lc093 ;nächster Dateieintrag ;------------------ ;Init Zeiger auf Dateiname im RAM ab $a000 lc0c5 lda #$00 sta $02 ;Anzahl Einträge (0: keine) sta $50 ;Zeichen lda #$a0 sta $51 ;50/51 auf $a000 lda #$36 ;auf BASIC-RAM sta $01 ; schalten lda #$80 ;für alle Tasten sta $028a ; Tastenwiederholung ein rts ;------------------ lc0d9 lda $02 bne lc0e0 ;RAM-Einträge vorhanden jmp lc21a ;sonst beenden ;------------------ ;Init Auswahlbereich lc0e0 jsr color ;Farbe setzen sec sbc #24 ;24 sta lc240 ;(unbenutzt) lda #$00 sta selrow sta ramrow jsr ram2scr lda #$01 sta currow jsr invert lda #$00 sta $c6 lc0fd jmp lc258 ;Tasteneingabe ;------------------ lc100 beq lc0fd lc102 cmp #$0d ;Return bne lc109 jmp lc1e7 ;------------------ lc109 cmp #$91 ;Cursor up beq lc140 cmp #$11 ;Cursor down bne lc0fd ;Tastaturabfrage jsr invert ;Auswahlbereich invertieren inc ramrow inc currow lda ramrow cmp $02 ;Maximum überschritten? bne lc12a dec currow dec ramrow jmp lc13a ;------------------ lc12a lda currow cmp #25 bne lc13a dec currow ;25, dann -1 inc selrow jsr ram2scr lc13a jsr invert jmp lc0fd ;Tastaturabfrage ;------------------ lc140 jsr invert dec ramrow dec currow lda ramrow cmp #$ff ;negativ? bne lc159 inc currow ;dann wieder +1 inc ramrow jmp lc167 ;------------------ lc159 lda currow bne lc167 inc currow ;0, dann 1 dec selrow jsr ram2scr lc167 jsr invert jmp lc0fd ;zur Tastenabfrage ;------------------ ;aus Ram ab $a000 in Schirm ab $0400 ram2scr jsr ramptr ;Zeiger im Ram berechnen lda #41 ;ab Zeile 2 clc adc startcol sta $52 ;Spalte Low-Byte lda #$04 sta $53 ;Spalte High-Byte ldx #24 ;24 Zeilen lc17e ldy #$00 lc180 lda ($50),y ;Byte aus Ram (16-mal) cmp #$ff ;Ende-Kennung beq lc1af cmp #$22 ;Anführungszeichen bne lc18c lda #$20 ;Rest mit Leerzeichen auffüllen lc18c jsr lc224 ;Umwandeln in BSCode sta ($52),y ;Zeichen in Schirm iny cpy #16 ;Dateilänge 16 bne lc180 clc lda $50 ;RAM-Zeiger +1 adc #$10 sta $50 bcc lc1a1 inc $51 lc1a1 clc lda $52 ;nächste spalte adc #$28 sta $52 bcc lc1ac inc $53 lc1ac dex bne lc17e lc1af rts ;------------------ ;Zeiger im RAM ab $a000 für Auswahlbereich ramptr lda #$00 sta $51 lda selrow ;Top-Of-Page RAM-Index bzw. RAM-Index des ausgewählten Eintrags (nach RETURN) sta $50 asl $50 rol $51 asl $50 rol $51 asl $50 rol $51 asl $50 rol $51 ;mal 16 clc lda $51 adc #$a0 sta $51 rts ;------------------ ;Auswahlbereich im Bildschirm invertieren invert ldx currow ;Zeilenzähler 1 bis 24 jsr $e9f0 ;Zeiger $d1/$d2 der Video-Adresse setzen ldy startcol lc1da lda ($d1),y eor #$80 ;invertieren sta ($d1),y iny cpy endcol bne lc1da rts ;------------------ ;Return: in Variable übernehmen lc1e7 clc lda currow adc selrow sta selrow dec selrow jsr ramptr ldy #$00 lc1f9 lda ($50),y ;16 Zeichen aus Ram cmp #$22 ;Anführungszeichen: ende beq lc206 sta ($fc),y ;in Eingabe-String-Platz schreiben iny cpy #$10 bne lc1f9 lc206 tya ;String in Variable ldy #$00 sta ($fa),y lda $fc iny sta ($fa),y lda $fd iny sta ($fa),y ldy #$00 beq + ;unbedingt ;------------------ ;Beenden lc21a ldy #$00 tya sta ($fa),y ;Init Zeiger auf Variable + sty $c7 ;rvsoff lda #$37 sta $01 ;ROM ein rts ;Ende ;------------------ ;Umwandeln in BSCode (ohne Pi-Berücksichtigung) lc224 cmp #$20 bcc lc238 cmp #$40 bcc lc237 cmp #$60 bcc lc23c cmp #$80 bcc lc23c sec sbc #$80 lc237 rts ;------------------ lc238 clc adc #$80 rts ;------------------ lc23c sec sbc #$40 rts ;------------------ skip12 lda #12 ;12 bytes sta $a7 lc24a jsr iecin dec $a7 bne lc24a ;überlesen rts ;------------------ lc258 ;Tasteneingabe, auf Pfeil links prüfen jsr getin beq lc258 cmp #$5f ;Pfeil links bne lc26c jsr clrchn lda #$7f ;127 jsr close jmp lc21a ;beenden ;------------------ lc26c jmp lc102 ;------------------ ;Farbe im Ausgabebereich setzen color lda #40 ;ab Zeile 2 clc adc startcol sta $f3 ;Spalte Low-Byte lda #$d8 sta $f4 ;Spalte High-Byte ldx #24 ;24 Zeilen scl lda $0286 ;Zeichenfarbe ldy #$00 sc2 sta ($f3),y ;Farbe setzen iny cpy #18 ;Länge 16+2 bne sc2 ;nächste Zeile clc lda $f3 adc #40 sta $f3 bcc sc3 inc $f4 sc3 dex bne scl rts ;------------------ ;Tab lc240 !by $00 selrow !by $00 ;Top-Of-Page RAM-Index bzw. RAM-Index des ausgewählten Eintrags (nach RETURN) currow !by $00 ;aktuelle Bildschirmzeile 1-24 ramrow !by $00 ;aktueller RAM-Eintrag startcol !by $00 ;Nummer der ersten Spalte endcol !by $00 ;Nummer der letzten Spalte ;------------------
Mit folgendem BASIC-Programm kann man die directory-Routine testen:
10 IF A=0 THEN A=1:LOAD"DIRECTORY-V3",8,1 20 DL=12*4096:PRINT CHR$(147)CHR$(5) 30 PRINT "{HOME}{3 DOWN}_ = BEENDEN":PRINT" OHNE AUSWAHL" 40 SYSDL,22,"$",F$ 50 PRINT "{HOME}"CHR$(34)F$CHR$(34) 60 PRINT "{HOME}{6 DOWN}L = NEU LADEN" 70 GET A$:IF A$="" THEN 60 80 IF A$="L" THEN GOTO 20
SMON-Disassembler-Listing des Originals[Bearbeiten | Quelltext bearbeiten]
,C000 20 66 E5 JSR E566 ,C003 A9 10 LDA #10 ,C005 20 7D B4 JSR B47D ,C008 86 FC STX FC ,C00A 84 FD STY FD ,C00C 20 FD AE JSR AEFD ,C00F 20 9E B7 JSR B79E ,C012 8E 44 C2 STX C244 ,C015 8A TXA ,C016 18 CLC ,C017 69 12 ADC #12 ,C019 8D 45 C2 STA C245 ,C01C 20 FD AE JSR AEFD ,C01F 20 9E AD JSR AD9E ,C022 20 A3 B6 JSR B6A3 ,C025 20 BD FF JSR FFBD ,C028 20 FD AE JSR AEFD ,C02B 20 8B B0 JSR B08B ,C02E 85 FA STA FA ,C030 84 FB STY FB ,C032 A5 0D LDA 0D ,C034 D0 05 BNE C03B ,C036 A2 16 LDX #16 ,C038 4C 3A A4 JMP A43A ----------------------------------- ,C03B A9 7F LDA #7F ,C03D A2 08 LDX #08 ,C03F A0 60 LDY #60 ,C041 20 BA FF JSR FFBA ,C044 20 C0 FF JSR FFC0 ,C047 A2 7F LDX #7F ,C049 20 C6 FF JSR FFC6 ,C04C A2 04 LDX #04 ,C04E 20 A5 FF JSR FFA5 ,C051 24 90 BIT 90 ,C053 70 05 BVS C05A ,C055 CA DEX ,C056 D0 F6 BNE C04E ,C058 F0 0B BEQ C065 ----------------------------------- ,C05A 20 CC FF JSR FFCC ,C05D A9 7F LDA #7F ,C05F 20 C3 FF JSR FFC3 ,C062 4C D9 C0 JMP C0D9 ----------------------------------- ,C065 20 C5 C0 JSR C0C5 ,C068 AE 44 C2 LDX C244 ,C06B F0 08 BEQ C075 ,C06D A9 1D LDA #1D ,C06F 20 D2 FF JSR FFD2 ,C072 CA DEX ,C073 D0 FA BNE C06F ,C075 A2 15 LDX #15 ,C077 20 A5 FF JSR FFA5 ,C07A 20 D2 FF JSR FFD2 ,C07D CA DEX ,C07E D0 F7 BNE C077 ,C080 A2 14 LDX #14 ,C082 20 A5 FF JSR FFA5 ,C085 C9 22 CMP #22 ,C087 F0 09 BEQ C092 ,C089 24 90 BIT 90 ,C08B 70 CD BVS C05A ,C08D CA DEX ,C08E D0 F2 BNE C082 ,C090 F0 C8 BEQ C05A ----------------------------------- ,C092 A0 00 LDY #00 ,C094 20 A5 FF JSR FFA5 ,C097 91 50 STA (50),Y ,C099 C8 INY ,C09A C0 10 CPY #10 ,C09C D0 F6 BNE C094 ,C09E A9 FF LDA #FF ,C0A0 91 50 STA (50),Y ,C0A2 88 DEY ,C0A3 B1 50 LDA (50),Y ,C0A5 F0 B3 BEQ C05A ,C0A7 18 CLC ,C0A8 A5 50 LDA 50 ,C0AA 69 10 ADC #10 ,C0AC 85 50 STA 50 ,C0AE 90 02 BCC C0B2 ,C0B0 E6 51 INC 51 ,C0B2 E6 02 INC 02 ,C0B4 20 A5 FF JSR FFA5 ,C0B7 20 A5 FF JSR FFA5 ,C0BA 24 90 BIT 90 ,C0BC 70 9C BVS C05A ,C0BE C9 22 CMP #22 ,C0C0 D0 F5 BNE C0B7 ,C0C2 4C 92 C0 JMP C092 ----------------------------------- ,C0C5 A9 00 LDA #00 ,C0C7 85 02 STA 02 ,C0C9 85 50 STA 50 ,C0CB A9 A0 LDA #A0 ,C0CD 85 51 STA 51 ,C0CF A9 36 LDA #36 ,C0D1 85 01 STA 01 ,C0D3 A9 80 LDA #80 ,C0D5 8D 8A 02 STA 028A ,C0D8 60 RTS ----------------------------------- ,C0D9 A5 02 LDA 02 ,C0DB D0 03 BNE C0E0 ,C0DD 4C 1A C2 JMP C21A ----------------------------------- ,C0E0 38 SEC ,C0E1 E9 18 SBC #18 ,C0E3 8D 40 C2 STA C240 ,C0E6 A9 00 LDA #00 ,C0E8 8D 41 C2 STA C241 ,C0EB 8D 43 C2 STA C243 ,C0EE 20 6D C1 JSR C16D ,C0F1 A9 01 LDA #01 ,C0F3 8D 42 C2 STA C242 ,C0F6 20 D1 C1 JSR C1D1 ,C0F9 A9 00 LDA #00 ,C0FB 85 C6 STA C6 ,C0FD 20 E4 FF JSR FFE4 ,C100 F0 FB BEQ C0FD ,C102 C9 0D CMP #0D ,C104 D0 03 BNE C109 ,C106 4C E7 C1 JMP C1E7 ----------------------------------- ,C109 C9 91 CMP #91 ,C10B F0 33 BEQ C140 ,C10D C9 11 CMP #11 ,C10F D0 EC BNE C0FD ,C111 20 D1 C1 JSR C1D1 ,C114 EE 43 C2 INC C243 ,C117 EE 42 C2 INC C242 ,C11A AD 43 C2 LDA C243 ,C11D C5 02 CMP 02 ,C11F D0 09 BNE C12A ,C121 CE 42 C2 DEC C242 ,C124 CE 43 C2 DEC C243 ,C127 4C 3A C1 JMP C13A ----------------------------------- ,C12A AD 42 C2 LDA C242 ,C12D C9 19 CMP #19 ,C12F D0 09 BNE C13A ,C131 CE 42 C2 DEC C242 ,C134 EE 41 C2 INC C241 ,C137 20 6D C1 JSR C16D ,C13A 20 D1 C1 JSR C1D1 ,C13D 4C FD C0 JMP C0FD ----------------------------------- ,C140 20 D1 C1 JSR C1D1 ,C143 CE 43 C2 DEC C243 ,C146 CE 42 C2 DEC C242 ,C149 AD 43 C2 LDA C243 ,C14C C9 FF CMP #FF ,C14E D0 09 BNE C159 ,C150 EE 42 C2 INC C242 ,C153 EE 43 C2 INC C243 ,C156 4C 67 C1 JMP C167 ----------------------------------- ,C159 AD 42 C2 LDA C242 ,C15C D0 09 BNE C167 ,C15E EE 42 C2 INC C242 ,C161 CE 41 C2 DEC C241 ,C164 20 6D C1 JSR C16D ,C167 20 D1 C1 JSR C1D1 ,C16A 4C FD C0 JMP C0FD ----------------------------------- ,C16D 20 B0 C1 JSR C1B0 ,C170 A9 29 LDA #29 ,C172 18 CLC ,C173 6D 44 C2 ADC C244 ,C176 85 52 STA 52 ,C178 A9 04 LDA #04 ,C17A 85 53 STA 53 ,C17C A2 18 LDX #18 ,C17E A0 00 LDY #00 ,C180 B1 50 LDA (50),Y ,C182 C9 FF CMP #FF ,C184 F0 29 BEQ C1AF ,C186 C9 22 CMP #22 ,C188 D0 02 BNE C18C ,C18A A9 20 LDA #20 ,C18C 20 24 C2 JSR C224 ,C18F 91 52 STA (52),Y ,C191 C8 INY ,C192 C0 10 CPY #10 ,C194 D0 EA BNE C180 ,C196 18 CLC ,C197 A5 50 LDA 50 ,C199 69 10 ADC #10 ,C19B 85 50 STA 50 ,C19D 90 02 BCC C1A1 ,C19F E6 51 INC 51 ,C1A1 18 CLC ,C1A2 A5 52 LDA 52 ,C1A4 69 28 ADC #28 ,C1A6 85 52 STA 52 ,C1A8 90 02 BCC C1AC ,C1AA E6 53 INC 53 ,C1AC CA DEX ,C1AD D0 CF BNE C17E ,C1AF 60 RTS ----------------------------------- ,C1B0 A9 00 LDA #00 ,C1B2 85 51 STA 51 ,C1B4 AD 41 C2 LDA C241 ,C1B7 85 50 STA 50 ,C1B9 06 50 ASL 50 ,C1BB 26 51 ROL 51 ,C1BD 06 50 ASL 50 ,C1BF 26 51 ROL 51 ,C1C1 06 50 ASL 50 ,C1C3 26 51 ROL 51 ,C1C5 06 50 ASL 50 ,C1C7 26 51 ROL 51 ,C1C9 18 CLC ,C1CA A5 51 LDA 51 ,C1CC 69 A0 ADC #A0 ,C1CE 85 51 STA 51 ,C1D0 60 RTS ----------------------------------- ,C1D1 AE 42 C2 LDX C242 ,C1D4 20 F0 E9 JSR E9F0 ,C1D7 AC 44 C2 LDY C244 ,C1DA B1 D1 LDA (D1),Y ,C1DC 49 80 EOR #80 ,C1DE 91 D1 STA (D1),Y ,C1E0 C8 INY ,C1E1 CC 45 C2 CPY C245 ,C1E4 D0 F4 BNE C1DA ,C1E6 60 RTS ----------------------------------- ,C1E7 18 CLC ,C1E8 AD 42 C2 LDA C242 ,C1EB 6D 41 C2 ADC C241 ,C1EE 8D 41 C2 STA C241 ,C1F1 CE 41 C2 DEC C241 ,C1F4 20 B0 C1 JSR C1B0 ,C1F7 A0 00 LDY #00 ,C1F9 B1 50 LDA (50),Y ,C1FB C9 22 CMP #22 ,C1FD F0 07 BEQ C206 ,C1FF 91 FC STA (FC),Y ,C201 C8 INY ,C202 C0 10 CPY #10 ,C204 D0 F3 BNE C1F9 ,C206 98 TYA ,C207 A0 00 LDY #00 ,C209 91 FA STA (FA),Y ,C20B A5 FC LDA FC ,C20D C8 INY ,C20E 91 FA STA (FA),Y ,C210 A5 FD LDA FD ,C212 C8 INY ,C213 91 FA STA (FA),Y ,C215 A9 37 LDA #37 ,C217 85 01 STA 01 ,C219 60 RTS ----------------------------------- ,C21A A9 00 LDA #00 ,C21C A8 TAY ,C21D 91 FA STA (FA),Y ,C21F A9 37 LDA #37 ,C221 85 01 STA 01 ,C223 60 RTS ----------------------------------- ,C224 C9 20 CMP #20 ,C226 90 10 BCC C238 ,C228 C9 40 CMP #40 ,C22A 90 0B BCC C237 ,C22C C9 60 CMP #60 ,C22E 90 0C BCC C23C ,C230 C9 80 CMP #80 ,C232 90 08 BCC C23C ,C234 38 SEC ,C235 E9 80 SBC #80 ,C237 60 RTS ----------------------------------- ,C238 18 CLC ,C239 69 80 ADC #80 ,C23B 60 RTS ----------------------------------- ,C23C 38 SEC ,C23D E9 40 SBC #40 ,C23F 60 RTS ----------------------------------- :C240 00 00 00 00 00 00
Beispieldiskette[Bearbeiten | Quelltext bearbeiten]
Die Beispieldiskette HOMENTC1.D64 aus The Complete Home Entertainment Centre (Sammlung) soll die Arbeitsweise des Programms nachvollziehbar machen. Sie eignet sich deshalb gut, weil sie ein kurzes Directory und Dateien mit ein-, zwei- und dreistelligen Blockgrößen besitzt.
0 "TCHEC DISK 1 " A2 2A 1 "LOADER" PRG 138 "BRIPRG" PRG 143 "MAHPRG" PRG 1 "TCHECLOAD" PRG 41 "SCREEN" PRG 154 "CHSPRG" PRG 186 BLOCKS FREE.
Das folgende TSB-Programm liest das Directory aus und listet die Bytes in hexadezimaler Form:
10 OPEN 1,8,0,"$":I=0 20 GET#1,D$:I=I+1 30 A=ASC(D$+CHR$(0)) 40 PRINT $$A;" ";:REM TSB 50 IF I=13 THEN PRINT:I=0 60 IF ST=0 THEN 20
Als Ausgabe erhält man
01 04 01 01 00 00 12 22 54 43 48 45 43 20 44 49 53 4b 20 31 20 20 20 20 22 20 41 32 20 32 41 00 01 01 01 00 20 20 20 22 4c 4f 41 44 45 52 22 20 20 20 20 20 20 20 20 20 20 20 50 52 47 20 20 00 01 01 8a 00 20 22 42 52 49 50 52 47 22 20 20 20 20 20 20 20 20 20 20 20 50 52 47 20 20 20 20 00 01 01 8f 00 20 22 4d 41 48 50 52 47 22 20 20 20 20 20 20 20 20 20 20 20 50 52 47 20 20 20 20 00 01 01 01 00 20 20 20 22 54 43 48 45 43 4c 4f 41 44 22 20 20 20 20 20 20 20 20 50 52 47 20 20 00 01 01 29 00 20 20 22 53 43 52 45 45 4e 22 20 20 20 20 20 20 20 20 20 20 20 50 52 47 20 20 20 00 01 01 9a 00 20 22 43 48 53 50 52 47 22 20 20 20 20 20 20 20 20 20 20 20 50 52 47 20 20 20 20 00 01 01 ba 00 42 4c 4f 43 4b 53 20 46 52 45 45 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 00
Jeder Eintrag hat eine Länge von 31 Bytes.
- Diskettenname
2 Bytes Startadresse 0401 Low/High 2 Bytes Linkadresse 0101 Low/High -- Ab hier Ausgabe von 21 Bytes 1 Byte (drivenumber) Zeilennummer Low 1 Byte Zeilennummer High 00 1 RVSON 1 " 16 Diskettenname 1 " -- 1 Leerzeichen 4 ID 1 Endemarkierung 00
- Dateiname
2 Linkadresse 0101 Low/High 2 Blocks (Low/High) -- 26 Bytes Directory-Eintrag: 1-3 Leerzeichen (je nachdem, ob Blockanzahl drei-, zwei- oder einstellig) *1) 1 " 16 Dateiname, ab Endezeichen " ev. mit Leerzeichen aufgefüllt 1 Leerzeichen 3 Dateityp ("PRG", "SEQ", "DEL" o.a.) 2-4 Leerzeichen, je nach Blockanzahl (ein-, zwei- oder dreistellig) *1) -- 1 Endemarkierung 00
*1) diese beiden Byte-Folgen haben zusammen also immer die Länge 5 (1+4, 2+3 oder 3+2).
Die Load dir Routine der 1541 ist dokumentiert bei aay c1541.