letzten Dateiblock abspeichern ($db62)

Einsprung von $99BC:

9A2A: A6 50     LDX $50          Kanalnummer holen
9A2C: BD 49 02  LDA $0249,X      aktuelle Programmlaenge > 0 ?
9A2F: 1D 50 02  ORA $0250,X
9A32: D0 0C     BNE $9A40        ja, ==>
9A34: 20 42 94  JSR $9442        aktuellen Pufferzeiger holen
9A37: C9 02     CMP #$02         = Beginn des Datenbereichs (Block leer) ?
9A39: D0 05     BNE $9A40        nein, ==>

[Die Datei ist absolut leer !!! Da die Mindest-Dateilaenge aber 1 Byte ist,
 wird die Datei um ein CR 'erweitert'.]

9A3B: A9 0D     LDA #$0D         ja: CR in Puffer schreiben
9A3D: 20 B1 8E  JSR $8EB1        [Pufferzeiger = $03 !]

Einsprung von $9A32, $9A39:

9A40: 20 42 94  JSR $9442        Pufferzeiger holen
9A43: C9 02     CMP #$02         Ist der Puffer noch leer ?
9A45: D0 12     BNE $9A59        nein, ==>

[Der letzte Block wurde genau gefuellt. Deshalb muss der aktuelle Block
 wieder von der Datei 'abgezogen' werden.]

9A47: 20 7D 8D  JSR $8D7D        Puffer wechseln
9A4A: A6 50     LDX $50
9A4C: BD 49 02  LDA $0249,X      Dateilaenge -1
9A4F: D0 03     BNE $9A54        [Eigentlich, so meint man, muesste der Block
9A51: DE 50 02  DEC $0250,X       in der BAM auch freigegeben werden !?]

Einsprung von $9A4F:

9A54: DE 49 02  DEC $0249,X
9A57: A9 00     LDA #$00         Pufferzeiger auf 256 setzen

Einsprung von $9A45:

9A59: 38        SEC              Pufferzeiger -1 (zeigt nun auf das letzte
9A5A: E9 01     SBC #$01         Datenbyte)
9A5C: 48        PHA              merken
9A5D: A9 00     LDA #$00         Pufferzeiger auf die Blockverkettung setzen
9A5F: 20 22 94  JSR $9422
9A62: 20 B1 8E  JSR $8EB1        $00: letzter Dateiblock in Puffer schreiben
9A65: 68        PLA              Blocklaenge
9A66: 20 B1 8E  JSR $8EB1        in Puffer schreiben
9A69: 20 02 90  JSR $9002        Block auf Diskette schreiben
9A6C: 20 ED 94  JSR $94ED        Jobausfuehrung ueberwachen
9A6F: 4C 7D 8D  JMP $8D7D        Puffer wechseln

    Previous Page / Next Page