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 fehlendem 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 Fileanfang, bis zu dem Punkt, an dem das
' normale' File beginnt. Gleichzeitig
werden diese Dirblocks mit Hilfe des
Block-Allocate- Befehls als ' belegt' gekennzeichnet:
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 " u22018" ; 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 Geschmack an der Programmierung der Floppy
gefunden haben, halten wir für die nächste Ausgabe einen ganz besonderen Lekkerbissen parat: ab dann gibt es nämlich
einen aufbauenden Floppy-Kurs für Profis, in dem die Floppy direkt programmiert wird.
Öbrigens: Sie sollten es nicht auf sich
sitzen lassen, daß unser Beispielprogramm 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).