    Hauptsteuerroutine des Controllers

    Einsprung von $C0DB, $C146, $C3B5, $CB06, $CDB9:

    CE00: A6 2C     LDX $2C          Stackpointer vom Controlleraufruf
    CE02: E8        INX              +2 (JSR)
    CE03: E8        INX
    CE04: BD 04 01  LDA $0104,X      p-Register (Flags) vom IRQ-Aufruf holen
    CE07: 29 10     AND #$10         b-Flag (BRK) gesetzt ?
    CE09: D0 66     BNE $CE71        ja, (die folgenden Routinen muessen in
                                    festen Zeitabstaenden aufgerufen werden) ==>
    CE0B: A5 9C     LDA $9C          Cache-Schreibverzoegerung abzaehlen
    CE0D: F0 02     BEQ $CE11        [wird bei Busbetrieb gesetzt und von der
    CE0F: C6 9C     DEC $9C          Haupt-Warteschleife abgefragt]

    LEDs-setzen

    Einsprung von $CE0D:

    CE11: A5 79     LDA $79          LED-Blinken ?
    CE13: 29 20     AND #$20
    CE15: F0 10     BEQ $CE27        nein ==>
    CE17: C6 9E     DEC $9E          Blinkgeschwindigkeit
    CE19: 10 0C     BPL $CE27        warten, dann ==>
    CE1B: A9 09     LDA #$09         Zaehler neu setzen
    CE1D: 85 9E     STA $9E          alle 1/10 sec LED umschalten
    CE1F: AD 00 40  LDA $4000        LED-umschalten
    CE22: 49 20     EOR #$20
    CE24: 8D 00 40  STA $4000

    Einsprung von $CE15, $CE19:

    CE27: A5 79     LDA $79          Drive LED anschalten ?
    CE29: 29 40     AND #$40         B6:1 :an
    CE2B: 25 79     AND $79
    CE2D: 85 36     STA $36
    CE2F: AD 00 40  LDA $4000        LED ein-/ausschalten
    CE32: 29 BF     AND #$BF
    CE34: 05 36     ORA $36
    CE36: 8D 00 40  STA $4000

    Laufwerk behandeln

    CE39: AD 00 40  LDA $4000        b7=0: wurde die Diskette gewechselt ?
    CE3C: 29 80     AND #$80
    CE3E: D0 0A     BNE $CE4A        nein, ==>
    CE40: 85 87     STA $87          Cache nicht zurueckschreiben
    CE42: A9 80     LDA #$80         $80: Flag fuer 'Cache ist leer' setzen
    CE44: 85 95     STA $95
    CE46: A9 01     LDA #$01         Flag fuer Diskettenwechsel setzen
    CE48: 85 25     STA $25

    Einsprung von $CE3E:

    CE4A: A5 26     LDA $26          Ist Laufwerk aktiv ?
    CE4C: F0 1F     BEQ $CE6D        nein, (Ende) ==>
    CE4E: A8        TAY
    CE4F: C9 20     CMP #$20         b5=1: Motor eingeschaltet ?
    CE51: F0 20     BEQ $CE73        nein, ==>
    CE53: C6 2A     DEC $2A          Laufwerk Anfahren (Nachlaufen Lo)
    CE55: D0 1C     BNE $CE73        noch nicht fertig, ==>
    CE57: 98        TYA
    CE58: 10 04     BPL $CE5E        b7=0: Laufwerk bereit ? ja, ==>
    CE5A: 29 7F     AND #$7F         Anlaufvorgang ist abgeschlossen
    CE5C: 85 26     STA $26

    Einsprung von $CE58:

    CE5E: 29 10     AND #$10         Motor nachlaufen lassen ?
    CE60: F0 11     BEQ $CE73        nein, ==>
    CE62: C6 2B     DEC $2B          Nachlaufzeit abwarten
    CE64: D0 0D     BNE $CE73        noch warten, ==>
    CE66: 20 BA CB  JSR $CBBA        Drivemotor ausschalten
    CE69: A9 00     LDA #$00         0: 'Laufwerk inaktiv'
    CE6B: 85 26     STA $26          in Drivemodus eintragen

    Einsprung von $CE4C, $CE76, $CEA1:

    CE6D: A6 2C     LDX $2C          Stackpointer zurueckholen
    CE6F: 9A        TXS
    CE70: 60        RTS              Ende der Controllerroutine ==>

        Previous Page / Next Page