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 ergaenzende 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