<< 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“.
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.
Ausklappen;"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
Ausklappen,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
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.
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
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.
64'er Sonderheft 15 auf archive.org