Magic Disk 64

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

Valid HTML 4.0 Transitional Valid CSS!