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