    neue BAM erzeugen ($eeb7)

    Einsprung von $B268, $B40B:

    B44A: A9 00     LDA #$00         beim Erzeugen der Bam mit der
    B44C: 85 4D     STA $4D          ersten Spur beginnen
    B44E: AD 2B 02  LDA $022B        Link-Zeiger der BAM-Bloecke setzen
    B451: 8D 00 0A  STA $0A00        im 1. BAM-Puffer:  tt, $02
    B454: A9 00     LDA #$00
    B456: 8D 00 0B  STA $0B00        im 2. BAM-Puffer: $00, $ff
    B459: A9 02     LDA #$02
    B45B: 8D 01 0A  STA $0A01
    B45E: A9 FF     LDA #$FF
    B460: 8D 01 0B  STA $0B01
    B463: AD EB 01  LDA $01EB        1581-Formatkennzeichen abspeichern
    B466: 8D 02 0A  STA $0A02
    B469: 8D 02 0B  STA $0B02
    B46C: 49 FF     EOR #$FF         negiert
    B46E: 8D 03 0A  STA $0A03        ergibt das ergenzende Formatkennzeichen
    B471: 8D 03 0B  STA $0B03
    B474: A5 1D     LDA $1D          ID1 und
    B476: 8D 04 0A  STA $0A04
    B479: 8D 04 0B  STA $0B04
    B47C: A5 1E     LDA $1E          ID2 abspeichern
    B47E: 8D 05 0A  STA $0A05
    B481: 8D 05 0B  STA $0B05
    B484: A5 8D     LDA $8D          E/A-Byte
    B486: 8D 06 0A  STA $0A06
    B489: 8D 06 0B  STA $0B06
    B48C: A9 00     LDA #$00         Auto-Boot ausschalten
    B48E: 8D 07 0A  STA $0A07
    B491: 8D 07 0B  STA $0B07

    Bloecke, die zur Partition gehoeren, freigeben
    alle anderen als belegt kennzeichnen

    B494: 20 52 B6  JSR $B652        Zeiger auf 1. BAM-Eintrag setzen ($4d = 0)

    Einsprung von $B4E9:

    B497: A0 10     LDY #$10         $10: Start der BAM im BAM-Block

    Einsprung von $B4DF:

    B499: E6 4D     INC $4D          naechsten Track waehlen
    B49B: A5 4D     LDA $4D          aktuelle Tracknummer
    B49D: C5 90     CMP $90          mit Start der Partition vergleichen
    B49F: F0 0B     BEQ $B4AC        = : Blocks freigeben ==>
    B4A1: 90 07     BCC $B4AA        < : Blocks belegen ==>
    B4A3: CD 2C 02  CMP $022C        >= Ende der Partition ?
    B4A6: F0 02     BEQ $B4AA
    B4A8: 90 02     BCC $B4AC        nein, (Blocks freigeben) ==>

    Einsprung von $B4A1, $B4A6:

    B4AA: 18        CLC              ja: Blocks belegen
    B4AB: 24         B $24

    Einsprung von $B49F, $B4A8:

    B4AC: 38        SEC              Blocks freigeben
    B4AD: 08        PHP
    B4AE: A9 00     LDA #$00         Bam-Muster: 'Alle Blocks belegt'
    B4B0: 85 40     STA $40
    B4B2: 85 41     STA $41
    B4B4: 85 42     STA $42
    B4B6: 85 43     STA $43
    B4B8: 85 44     STA $44
    B4BA: A6 75     LDX $75          Anzahl Sektoren pro Track holen
    B4BC: 8A        TXA
    B4BD: B0 02     BCS $B4C1        c=1, ==>
    B4BF: A9 00     LDA #$00         c=0: 0 Blocks frei

    Einsprung von $B4BD:

    B4C1: 91 31     STA ($31),Y      Anzahl der freien Blocks
    B4C3: C8        INY

    Einsprung von $B4D1:

    B4C4: 28        PLP              [Diese Routine ist fuer Disketten gedacht,
    B4C5: 08        PHP               die eine flexible Zahl Blocks/Track haben
    B4C6: 26 40     ROL $40           haben und bei denen die Blockzahl kein
    B4C8: 26 41     ROL $41           Vielfaches von 8 ist (1541: 17-21 Blocks).
    B4CA: 26 42     ROL $42           Bei der 1581 (40 Blocks / Track) werden:
    B4CC: 26 43     ROL $43           bei c=1 alle Bytes = $ff,
    B4CE: 26 44     ROL $44           bei c=0 alle Bytes = $00]
    B4D0: CA        DEX              Anzahl zu belegender Sektoren -1
    B4D1: D0 F1     BNE $B4C4        naechsten Sektor belegen, ==>
    B4D3: 28        PLP

    Einsprung von $B4DC:

    B4D4: B5 40     LDA $40,X        Bitmuster in BAM kopieren
    B4D6: 91 31     STA ($31),Y
    B4D8: C8        INY
    B4D9: E8        INX
    B4DA: E0 05     CPX #$05         (5 Bytes)
    B4DC: 90 F6     BCC $B4D4
    B4DE: 98        TYA              Ende des BAM-Puffers erreicht ?
    B4DF: D0 B8     BNE $B499        nein, ==>
    B4E1: A5 32     LDA $32          War es bereits der 2. Puffer ?
    B4E3: C9 0B     CMP #$0B
    B4E5: F0 04     BEQ $B4EB        ja, ==>
    B4E7: E6 32     INC $32          naechsten BAM-Puffer waehlen
    B4E9: D0 AC     BNE $B497        immer ==>

    Directory-Bloecke in BAM belegen und 'Blocks free' berechnen

    Einsprung von $B4E5:

    B4EB: A9 01     LDA #$01         Flag 'BAM abspeichern' setzen
    B4ED: 85 35     STA $35
    B4EF: A9 00     LDA #$00         'Blocks Free' Lo =0 (wozu ?)
    B4F1: 8D A9 02  STA $02A9
    B4F4: AD 2B 02  LDA $022B        Directory-Track holen
    B4F7: 85 4D     STA $4D
    B4F9: A9 00     LDA #$00         Verzeichnis-Header
    B4FB: 85 4E     STA $4E
    B4FD: 20 72 B5  JSR $B572        belegen
    B500: E6 4E     INC $4E          1. BAM-Block
    B502: 20 72 B5  JSR $B572        belegen
    B505: E6 4E     INC $4E          2. BAM-Block
    B507: 20 72 B5  JSR $B572        belegen
    B50A: AD E5 01  LDA $01E5        1. Verzeichnis-Block
    B50D: 85 4E     STA $4E
    B50F: 20 72 B5  JSR $B572        belegen
    B512: 4C 85 8F  JMP $8F85        Anzahl 'Blocks free' berechnen

        Previous Page / Next Page