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