ldy #$ff ;Jetzt Filenamen
celoop3 iny ;mit NAME
jsr iecin ;vergleichen
cmp name,y
beq celoop3
cpy #16 ;Wenn 16 Stellen
beq ce1 ;dann OK.
cmp #160 ;letztes Byte 160
(Endmarkierung)
bne celoop2 ;Nein, also wei-
tersuchen.
lda name,y ;Letztes Namens-
bne celoop2 ;byte=0? Nein,
weitersuchen.
ce1 lda #8 ;Floppy
jsr untalk ;zurücksetzen.
lda mem4 ;Letzte Eintrags-
clc ;position holen,
adc #1 ;1 Addieren
ldx #<(com2) ;und setzen
ldy #>(com2)
jsr sendcom
lda #8 ;Floppy zum
jsr listen ;Empfang auf
lda #$62 ;Pufferkanal
jsr seclst ;bereit machen.
lda #18 ;Tracknr.
jsr iecout ;ausgeben.
lda dirstrt ;SektorNr.
jsr iecout ;ausgeben.
lda #8 ;Floppy
jsr unlist ;Zurücksetzen
lda mem3 ;letzten Dir-
ldx #<(com3) ;block holen,
ldy #>(com3) ;und zurück-
jmp sendcom ;schreiben.
Auch hier werden zwei Floppykommandos
benötigt. Diesmal jedoch welche mit feh-
lendem letzten Parameter, der von SEND-
COM hinzugefügt wird:
com1 .text "u1 2 0 18";Einen DirBlk
.byte 0 ;lesen.
com2 .text "b-p 2" ;Auf best.
.byte 0 ;Byte posit.
9) WBLOCKS
Dies ist die zweite, wichtige Routine
unseres Programms. Sie füllt die freien
Directoryblocks mit den Bytes vom Fi-
leanfang, bis zu dem Punkt, an dem das
'normale' File beginnt. Gleichzeitig
werden diese Dirblocks mit Hilfe des
Block-Allocate-Befehls als 'belegt' ge-
kennzeichnet:
wblocks lda #<(text7) ;"Schreibe Dir-
ldy #>(text7) ;blocks"
jsr strout ;ausgeben.
ldx #<(filemem);Zeiger auf
ldy #>(filemem);Filemem
stx $fd ;setzen
sty $fe
wbloop1 lda #<(com4) ;Pufferzeiger
ldy #>(com4) ;auf 0 posi-
jsr striec ;tionieren.
lda #8 ;Floppy auf
jsr listen ;Pufferkanal
lda #$62 ;Empfangsbereit
jsr seclst ;machen.
ldy dsindex ;Indexzgr. holen
wb4 iny ;und erhöhen.
lda blktab,y ;Sektornr. lesen
bpl wb1 ;Wenn>0, dann
nicht letzter
Block
lda ftrack ;Wenn letzter
jsr iecout ;Block, dann
lda fsector ;Starttrack u.
jsr iecout ;-sektor d. norm.
jmp wb2 ;Files eintr.
wb1 pha ;Sonst Sekt. ret-
ten,
lda #18 ;Track 18
jsr iecout ;senden,
pla ;Sektor holen
jsr iecout ;und senden.
wb2 ldy #0 ;Anschließend
wbloop2 lda ($fd),y ;254 Datenbytes
jsr iecout ;senden.
iny
cpy #$fe
bne wbloop2
lda #8 ;Floppy zurück-
jsr unlist ;setzen.
lda $fd ;Zeiger neu
clc ;positionieren
adc #$fe ;(+254).
bcc wb3
inc $fe
wb3 sta $fd
ldy dsindex ;Sektornummer
lda blktab,y ;holen,
pha ;retten,
ldx #<(com3) ;und Sektor
ldy #>(com3) ;schreiben.
jsr sendcom
pla ;Sektornummer
ldx #<(com8) ;zurückholen u.
ldy #>(com8) ;Block als 'be-
jsr sendcom ;'legt' kenn-
zeichnen.
inc dsindex ;Index+1
dec dirfree ;freie Dir-
blocks-1 (dient
als Schlei-
fenzähler)
bne wbloop1 ;und wiederholen.
rts
Auch hier eine Auflistung der benötigten
Floppybefehle. COM3 und COM8 dienen
hierbei als Halbbfehele, die von SENDCOM
ergänzt werden:
com3 .text "u2 2 0 18" ;Block auf
.byte 0 ;T18 schr.
com4 .text "b-p 2 0" ;Bufferptr.
.byte 13,0 ;auf 0 setzen
com8 .text "b-a 0 18" ;Block be-
.byte 13,0 ;legen.
Hiermit ist der Floppykurs nun beendet.
Für diejenigen unter Ihnen, die Ge-
schmack an der Programmierung der Floppy
gefunden haben, halten wir für die näch-
ste Ausgabe einen ganz besonderen Lek-
kerbissen parat: ab dann gibt es nämlich
einen aufbauenden Floppy-Kurs für Pro-
fis, in dem die Floppy direkt program-
miert wird.
Öbrigens: Sie sollten es nicht auf sich
sitzen lassen, daß unser Beispielpro-
gramm mit Einschränkungen arbeitet. Öben
Sie sich doch einmal selbst in der
Floppyprogrammierung und versuchen Sie
das Programm so zu modifizieren, daß
auch Files, die kürzer als die vorhande-
nen freien Dirblocks sind, installiert
werden können. Viel Spaß dabei und bei
der Programmierung der Floppy ansich
wünscht Ihnen,
Uli Basters (ub).