Partition initialisieren ($d042)
Einsprung von $84E0, $8ECE, $96DB, $A7EA, $B265, $B383, $B42F, $B7FD, $BCCB,
$BEEA:
8F03: AD FB 01 LDA $01FB Autoboot aus
8F06: 29 BF AND #$BF
8F08: 8D FB 01 STA $01FB
8F0B: A5 8A LDA $8A OR-Maske fuer Burststatus
8F0D: 09 80 ORA #$80 b7=1: Fremdformat
8F0F: 85 8A STA $8A
8F11: 20 6E 92 JSR $926E SA 0-14 freigeben
8F14: 20 DC 8E JSR $8EDC Blockheader des Verzeichnis-Headers suchen
8F17: C9 02 CMP #$02
8F19: B0 06 BCS $8F21 Fehler, ==>
8F1B: A5 91 LDA $91 Sektorengroesse
8F1D: C9 02 CMP #$02 =2 (512 Bytes) ?
8F1F: F0 03 BEQ $8F24 ja, ==>
Einsprung von $8F19:
8F21: 4C B9 8F JMP $8FB9 Fehler bzw. kein 1581-Format
Einsprung von $8F1F:
8F24: 20 DE 94 JSR $94DE Block lesen
8F27: A5 6C LDA $6C Puffernummer holen
8F29: 0A ASL
8F2A: AA TAX
8F2B: A9 01 LDA #$01 Folgesektor holen
8F2D: 95 BB STA $BB,X
8F2F: A1 BB LDA ($BB,X) als 1. Sektor des Verzeichnisses merken
8F31: 8D E5 01 STA $01E5
8F34: A9 02 LDA #$02 Diskettenversionsnummer
8F36: 95 BB STA $BB,X (Formatkennzeichen) merken
8F38: A1 BB LDA ($BB,X)
8F3A: 85 6F STA $6F
8F3C: A9 00 LDA #$00 BAM-Puffer als leer kennzeichnen
8F3E: 8D 00 0A STA $0A00
8F41: 20 4F B6 JSR $B64F BAM einlesen
8F44: A9 00 LDA #$00
8F46: 85 25 STA $25 Flag 'Diskettenwechsel' loeschen
8F48: 85 6E STA $6E Drivestatus loeschen
8F4A: A0 02 LDY #$02
8F4C: B1 31 LDA ($31),Y Diskettenversionsnummer in Byte 2 der BAM
8F4E: CD EB 01 CMP $01EB = 1581-Nummer (normalerweise 'd') ?
8F51: D0 66 BNE $8FB9 nein, ==>
8F53: C8 INY
8F54: B1 31 LDA ($31),Y und steht in Byte 3 ihr Komplement ?
8F56: 49 FF EOR #$FF
8F58: CD EB 01 CMP $01EB
8F5B: D0 5C BNE $8FB9 nein, ==>
8F5D: A5 8A LDA $8A Flag fuer Fremdformat in der Burst-OR-Maske
8F5F: 29 7F AND #$7F loeschen
8F61: 85 8A STA $8A
8F63: A0 04 LDY #$04
8F65: B1 31 LDA ($31),Y ID1
8F67: 85 1D STA $1D
8F69: C8 INY
8F6A: B1 31 LDA ($31),Y ID2
8F6C: 85 1E STA $1E
8F6E: C8 INY
8F6F: B1 31 LDA ($31),Y E/A-Byte
8F71: 85 8D STA $8D
8F73: 29 20 AND #$20 Flag 'Superside-Sektor verwenden'
8F75: 8D 01 01 STA $0101 (b5=0) merken
8F78: C8 INY
8F79: B1 31 LDA ($31),Y Autoboot-Byte
8F7B: 10 08 BPL $8F85 aus, ==>
8F7D: AD FB 01 LDA $01FB Autoboot einschalten
8F80: 09 40 ORA #$40
8F82: 8D FB 01 STA $01FB
Anzahl freier Blocks in Partition berechnen
Einsprung von $8F7B, $B512:
8F85: A5 4D LDA $4D Aktuelle Tracknummer merken
8F87: 48 PHA
8F88: A2 00 LDX #$00 Anfangen mit 0 Blocks frei
8F8A: 8E A9 02 STX $02A9
8F8D: 8E AA 02 STX $02AA
8F90: A6 90 LDX $90 Starttrack der Partition
8F92: 24 B $24
Einsprung von $8F99, $8FAC, $8FB1:
8F93: E8 INX
8F94: 86 4D STX $4D
8F96: EC 2B 02 CPX $022B Dir-Track ?
8F99: F0 F8 BEQ $8F93 ja, ==>
8F9B: EC 2C 02 CPX $022C letzter Track + 1 ?
8F9E: B0 13 BCS $8FB3 ja, ==>
8FA0: 20 BD B5 JSR $B5BD BAM-Zeiger auf aktuelles Bitmuster setzen
8FA3: B1 31 LDA ($31),Y Freie Blocks des Tracks
8FA5: 18 CLC
8FA6: 6D A9 02 ADC $02A9 addieren
8FA9: 8D A9 02 STA $02A9
8FAC: 90 E5 BCC $8F93 kein Uebertrag, ==>
8FAE: EE AA 02 INC $02AA
8FB1: D0 E0 BNE $8F93 immer ==>
Einsprung von $8F9E:
8FB3: 68 PLA Aktuelle Tracknummer zurueckholen
8FB4: 85 4D STA $4D
8FB6: A2 00 LDX #$00
8FB8: 60 RTS
kein 1581-Diskettenformat
Einsprung von $8F21, $8F51, $8F5B:
8FB9: A2 03 LDX #$03 Verzeichnis-Folgesektor
8FBB: 8E E5 01 STX $01E5
8FBE: A2 C0 LDX #$C0 E/A-Byte: b6: CRC-Test ein; b7:Verify ein
8FC0: 86 8D STX $8D b5=0: Super-Side-Sektoren verwenden
8FC2: A2 00 LDX #$00 Flags fuer REL-Datei loeschen
8FC4: 8E 01 01 STX $0101
8FC7: 86 25 STX $25 Flag fuer Diskettenwechsel loeschen
8FC9: 86 6E STX $6E Drivestatus loeschen
8FCB: 8E A9 02 STX $02A9 keine freien Blocks
8FCE: 8E AA 02 STX $02AA
8FD1: 86 1D STX $1D ID loeschen
8FD3: 86 1E STX $1E
8FD5: 60 RTS
DOS 3
Previous Page / Next Page