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 |