Magic Disk 64

home to index to html: MD9302-KURSE-FLOPPY-KURS_9.3.html
         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).



Valid HTML 4.0 Transitional Valid CSS!