    ATN-bearbeiten ($e85b; bei der 1571: $80ce)

    Vorbereitung

    ABCF: 78        SEI
    ABD0: A5 9D     LDA $9D          Cache-Verzoegerungszaehler initialisieren
    ABD2: 85 9C     STA $9C
    ABD4: A5 76     LDA $76          LISTEN & TALK loeschen
    ABD6: 29 3E     AND #$3E         b0: Flag 'ATN aufgetreten' loeschen
    ABD8: 85 76     STA $76
    ABDA: A6 4F     LDX $4F          Stack initialisieren
    ABDC: 9A        TXS
    ABDD: 20 BB AC  JSR $ACBB        FSM-Bus auf Eingabe stellen
    ABE0: A9 80     LDA #$80         EOI-Flag loeschen
    ABE2: 85 51     STA $51

    Bus im ATN-Modus bedienen

    ABE4: A5 76     LDA $76          b1=1: ATN-Modus aktivieren
    ABE6: 09 02     ORA #$02
    ABE8: 85 76     STA $76
    ABEA: 20 03 AD  JSR $AD03        CLOCK OUT auf Lo
    ABED: 20 F1 AC  JSR $ACF1        DATA OUT auf Hi
    ABF0: AD 01 40  LDA $4001        automatische ATN-Beantwortung ausschalten,
    ABF3: 29 EF     AND #$EF         damit die Software den Bus im ATN-Modus
    ABF5: 8D 01 40  STA $4001        bedienen kann

     - Kommando-Byte vom Computer einlesen

    Einsprung von $ABFF:

    ABF8: AD 01 40  LDA $4001        liegt kein ATN mehr an ?
    ABFB: 10 5D     BPL $AC5A        ja, ==>
    ABFD: 29 04     AND #$04         Warten bis CLOCK IN = Lo wird
    ABFF: D0 F7     BNE $ABF8        (zeigt an, dass Daten kommen)

    Einsprung von $AC58:

    AC01: 20 42 AE  JSR $AE42        Byte vom seriellen Bus holen

     - UNLISTEN

    AC04: C9 3F     CMP #$3F         UNLISTEN
    AC06: D0 09     BNE $AC11        nein, ==>
    AC08: A5 76     LDA $76          Busbetrieb auf
    AC0A: 29 9F     AND #$9F         b5: seriell, langsam
    AC0C: 85 76     STA $76          b6: kein LISTEN
    AC0E: 4C 1B AC  JMP $AC1B        ATN Ende abwarten

     - UNTALK

    Einsprung von $AC06:

    AC11: C9 5F     CMP #$5F         UNTALK ?
    AC13: D0 09     BNE $AC1E        nein, ==>
    AC15: A5 76     LDA $76          Busbetrieb auf
    AC17: 29 5F     AND #$5F         b5: seriell,langsam
    AC19: 85 76     STA $76          b7: kein TALK

    Einsprung von $AC0E:

    AC1B: 4C 96 AC  JMP $AC96        ATN Ende abwarten

     - TALK

    Einsprung von $AC13:

    AC1E: C5 78     CMP $78          TALK ?
    AC20: D0 0A     BNE $AC2C        nein, ==>
    AC22: A5 76     LDA $76          ja,
    AC24: 09 80     ORA #$80         b7: Flag fuer TALK setzen
    AC26: 29 BF     AND #$BF         b6: Flag fuer LISTEN loeschen
    AC28: 85 76     STA $76
    AC2A: D0 29     BNE $AC55        ==>
     - LISTEN

    Einsprung von $AC20:

    AC2C: C5 77     CMP $77          LISTEN ?
    AC2E: D0 0A     BNE $AC3A        nein, ==>
    AC30: A5 76     LDA $76          ja,
    AC32: 09 40     ORA #$40         b6: Flag fuer LISTEN setzen
    AC34: 29 7F     AND #$7F         b7: Flag fuer TALK loeschen
    AC36: 85 76     STA $76
    AC38: D0 1B     BNE $AC55

     - Sekundaeradresse einlesen

    Einsprung von $AC2E:

    AC3A: AA        TAX
    AC3B: 29 60     AND #$60         Sekundaeradresse (b65=11) ?
    AC3D: C9 60     CMP #$60
    AC3F: D0 50     BNE $AC91        nein, (anderes Geraet war gemeint) ==>
    AC41: 8A        TXA              Sekundaeradresse vom Computer
    AC42: 85 53     STA $53          mit Kommandobits merken
    AC44: 29 0F     AND #$0F
    AC46: 85 52     STA $52          SA pur merken

     - CLOSE

    AC48: A5 53     LDA $53          Kommando vom Computer
    AC4A: 29 F0     AND #$F0
    AC4C: C9 E0     CMP #$E0         = 'schliessen' ?
    AC4E: D0 46     BNE $AC96        nein, (Datenmodus aktivieren) ==>
    AC50: 58        CLI
    AC51: 20 5C 99  JSR $995C        aktuellen Kanal schliessen
    AC54: 78        SEI

    Einsprung von $AC2A, $AC38:

    AC55: 2C 01 40  BIT $4001        ATN testen
    AC58: 30 A7     BMI $AC01        gesetzt, ==>

    Bus im Datenmodus bedienen

    Einsprung von $ABFB, $AC99, $AD2C:

    AC5A: A5 76     LDA $76          b1=0: ATN-Modus loeschen
    AC5C: 29 FD     AND #$FD         Datenmodus aktivieren
    AC5E: 85 76     STA $76
    AC60: AD 01 40  LDA $4001        Automatische ATN-Beantwortung einschalten
    AC63: 09 10     ORA #$10
    AC65: 8D 01 40  STA $4001

     - LISTEN bearbeiten

    AC68: 24 76     BIT $76          LISTEN ?
    AC6A: 50 0F     BVC $AC7B        nein ==>
    AC6C: A9 20     LDA #$20         FSM-Betrieb ?
    AC6E: 24 76     BIT $76
    AC70: F0 03     BEQ $AC75        nein, ==>
    AC72: 20 9D AC  JSR $AC9D        ja, schnellen Bus-Modus anfordern

    Einsprung von $AC70:

    AC75: 20 36 FF  JSR $FF36        LISTEN behandeln
    AC78: 4C E4 AE  JMP $AEE4        FSM abschliessen, Ende

     - TALK bearbeiten

    Einsprung von $AC6A:

    AC7B: 24 76     BIT $76          TALK ?
    AC7D: 10 0F     BPL $AC8E        nein, ==>
    AC7F: 20 E8 AC  JSR $ACE8        DATA OUT auf Lo
    AC82: 20 FA AC  JSR $ACFA        CLOCK OUT auf Hi
    AC85: 20 2F AD  JSR $AD2F        kurze Zeit warten
    AC88: 20 33 FF  JSR $FF33        TALK behandeln
    AC8B: 20 2F AD  JSR $AD2F        kurze Zeit warten

    Einsprung von $AC7D:

    AC8E: 4C DF AE  JMP $AEDF        FSM auf Eingabe schalten, Ende
     - ATN-Modus abwarten, wenn z.B. ein anderes Geraet angesprochen wird

    Einsprung von $AC3F:

    AC91: A9 00     LDA #$00         Alle Ausgaenge Lo (Laufwerk passiv halten)
    AC93: 8D 01 40  STA $4001

    Einsprung von $AC1B, $AC4E, $AC9B:

    AC96: 2C 01 40  BIT $4001        Ist ATN noch gesetzt ?
    AC99: 10 BF     BPL $AC5A        nein, ==>
    AC9B: 30 F9     BMI $AC96        Warten bis ATN geloescht ist

        Previous Page / Next Page