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