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).