File zum Schreiben oeffnen ($dcda)
E: $52    : benutzte Sekundaeradresse
A: $4d-$4e: Startblock

Einsprung von $93E4, $97AF, $9890:

9BC3: 20 ED B6  JSR $B6ED        Freien Block suchen und belegen

Einsprung von $B89C:

9BC6: A9 01     LDA #$01         Schreibkanal suchen und
9BC8: 20 57 91  JSR $9157        einen Puffer belegen
9BCB: 20 85 95  JSR $9585        T&S an DC uebergeben
9BCE: 20 9B 9B  JSR $9B9B        Pufferzeiger initialisieren
9BD1: A6 50     LDX $50
9BD3: AD 2D 02  LDA $022D        Aktuellen Dateityp
9BD6: 48        PHA              merken
9BD7: 0A        ASL              b0=0: Drivenummer
9BD8: 95 F9     STA $F9,X        b1-3: Dateityp
9BDA: 68        PLA
9BDB: C9 04     CMP #$04         REL-Datei ?
9BDD: F0 06     BEQ $9BE5        ja, ==>
9BDF: A9 01     LDA #$01         b1=1: Datei auf Schreiben festlegen
9BE1: 9D 34 02  STA $0234,X
9BE4: 60        RTS

REL-Datei oeffnen

Einsprung von $9BDD:

9BE5: A4 52     LDY $52
9BE7: B9 A8 00  LDA $00A8,Y      Kanalnummer holen
9BEA: 29 3F     AND #$3F         b76=01: Lese- und Schreibzugriffe erlauben
9BEC: 09 40     ORA #$40
9BEE: 99 A8 00  STA $00A8,Y      Kanalmodus setzen
9BF1: AD 6F 02  LDA $026F        Recordlaenge fuer aktuellen Kanal merken
9BF4: 9D 5E 02  STA $025E,X
9BF7: 20 04 92  JSR $9204        Puffer suchen (fuer den Side-Sektor)
9BFA: 10 03     BPL $9BFF        Puffer gefunden ? ja, ==>
9BFC: 4C 86 91  JMP $9186        70, No Channel

1. Side-Sektor erzeugen

Einsprung von $9BFA:

9BFF: A6 50     LDX $50
9C01: 9D 65 02  STA $0265,X      Side-Sektor-Puffer merken
9C04: 20 FA 9D  JSR $9DFA        Puffer loeschen
9C07: 20 68 B6  JSR $B668        freien Block suchen
9C0A: A5 4D     LDA $4D
9C0C: 8D 70 02  STA $0270        und als ersten Side-Sektor merken
9C0F: A5 4E     LDA $4E
9C11: 8D 71 02  STA $0271
9C14: A6 50     LDX $50
9C16: BD 65 02  LDA $0265,X      Side-Sektor-Puffernummer holen
9C19: 20 88 95  JSR $9588        T&S an DC uebergeben
9C1C: A9 00     LDA #$00         Pufferzeiger des Side-Sektors auf 0 setzen
9C1E: 20 23 9E  JSR $9E23
9C21: A9 00     LDA #$00         Byte 0 = 0: Letzter Side-Sektor
9C23: 20 CA 9C  JSR $9CCA        (Byte in Side-Sektor schreiben)
9C26: A9 11     LDA #$11         Anzahl gueltige Bytes = 17:
9C28: 20 CA 9C  JSR $9CCA        ein Datenblock vorhanden
9C2B: A9 00     LDA #$00         0 : Nummer des Side-Sektors
9C2D: 20 CA 9C  JSR $9CCA        Byte in Side-Sektor schreiben
9C30: AD 6F 02  LDA $026F        Recordlaenge
9C33: 20 CA 9C  JSR $9CCA
9C36: A5 4D     LDA $4D          T&S des ersten Side-Sektors
9C38: 20 CA 9C  JSR $9CCA        in Side-Sektor schreiben
9C3B: A5 4E     LDA $4E
9C3D: 20 CA 9C  JSR $9CCA
9C40: A9 10     LDA #$10         Zeiger auf 1. Datenblock-Verweis setzen
9C42: 20 23 9E  JSR $9E23
9C45: 20 7C 9D  JSR $9D7C        T&S des aktiven Datenpuffers holen
9C48: A5 4D     LDA $4D
9C4A: 20 CA 9C  JSR $9CCA        und in Side-Sektor schreiben
9C4D: A5 4E     LDA $4E
9C4F: 20 CA 9C  JSR $9CCA
9C52: 20 A6 9D  JSR $9DA6        Side-Sektor schreiben
9C55: 20 ED 94  JSR $94ED        Jobausfuehrung pruefen
9C58: 20 6E A5  JSR $A56E        Super-Side-Sektor verwenden ?
9C5B: D0 03     BNE $9C60        nein, ==>
9C5D: 20 82 9C  JSR $9C82        Super-Side-Sektor anlegen

Einsprung von $9C5B:

9C60: A9 02     LDA #$02
9C62: 20 22 94  JSR $9422        Pufferzeiger auf Byte 2 setzen
9C65: A6 50     LDX $50
ersten Datenblock erzeugen

[Man muss sich vorstellen, vor dem 1. Datensatz existiert ein 'Schein'-
 Datensatz, dessen Position so gewaehlt werden muss, dass beim Anhaengen eines
 Datensatzes dieser genau am Datenblock-Anfang erzeugt wird.]

9C67: 38        SEC              Position des Schein-Datensatzes berechnen:
9C68: A9 00     LDA #$00         Von 0 (Blockanfang):
9C6A: FD 5E 02  SBC $025E,X      Recordlaenge abziehen = Anfangsposition
9C6D: 9D 57 02  STA $0257,X      des Schein-Datensatzes
9C70: 20 98 A2  JSR $A298        einen Datenblock voll 'leerer' Records
                                an den Schein-Datensatz haengen.
9C73: 20 56 9D  JSR $9D56        Blocklaenge setzen
9C76: 20 9A 9D  JSR $9D9A        Block schreiben
9C79: 20 ED 94  JSR $94ED        Jobausfuehrung ueberpruefen
9C7C: 20 15 B5  JSR $B515        Bam ggf. abspeichern
9C7F: 4C 7B 9B  JMP $9B7B        Recordzeiger auf 1. Record setzen

Super-Side-Sektor anlegen

Einsprung von $9C5D:

9C82: A6 50     LDX $50          aktuellen Side-Sektor-Puffer holen
9C84: BD 65 02  LDA $0265,X
9C87: 20 FA 9D  JSR $9DFA        Puffer mit $00 fuellen
9C8A: 20 23 9E  JSR $9E23        Side-Sektor-Pufferzeiger auf 0
9C8D: AD 70 02  LDA $0270        Blockverkettung des Super-Side-Sektors
9C90: 20 CA 9C  JSR $9CCA        auf 1. Side-Sektor setzen
9C93: AD 71 02  LDA $0271
9C96: 20 CA 9C  JSR $9CCA
9C99: A9 FE     LDA #$FE         $fe: Kennzeichen des Super-Side-Sektors
9C9B: 20 CA 9C  JSR $9CCA
9C9E: AD 70 02  LDA $0270        1. Side-Sektor in Gruppentabelle eintragen
9CA1: 20 CA 9C  JSR $9CCA
9CA4: AD 71 02  LDA $0271
9CA7: 20 CA 9C  JSR $9CCA
9CAA: 20 68 B6  JSR $B668        Folgeblock fuer Datei suchen
9CAD: A6 50     LDX $50
9CAF: A5 4D     LDA $4D          Als T&S des Super-Side-Sektors
9CB1: 9D 10 01  STA $0110,X      des Kanals merken
9CB4: 8D 70 02  STA $0270        und als 1. Side-Sektor merken
9CB7: A5 4E     LDA $4E          [wird im Directory eingetragen]
9CB9: 9D 09 01  STA $0109,X
9CBC: 8D 71 02  STA $0271
9CBF: A9 FF     LDA #$FF         Flag: 'kein Side-Sektor geladen' setzen
9CC1: 9D 02 01  STA $0102,X
9CC4: 20 81 A5  JSR $A581        Super-Side-Sektor schreiben
9CC7: 4C 7C 9D  JMP $9D7C        T&S des Datenblocks holen

    Previous Page / Next Page