Byte vom seriellen Bus holen ($e9c9; bei der 1571: $82c7) Warten, bis Computer bereit ist Einsprung von $AC01, $AECF: AE42: 2C 0D 40 BIT $400D Flag 'Daten ueber FSM-Bus empfangen' loeschen AE45: A9 08 LDA #$08 Zaehler auf 8 Datenbits setzen AE47: 85 66 STA $66 Einsprung von $AE51: AE49: 20 15 AD JSR $AD15 ATN-Modus testen AE4C: 20 0C AD JSR $AD0C Bus auslesen AE4F: 29 04 AND #$04 AE51: D0 F6 BNE $AE49 auf CLOCK IN = Lo warten AE53: 20 E8 AC JSR $ACE8 DATA OUT auf Lo AE56: A9 01 LDA #$01 b0: DATA IN Einsprung von $AE5B: AE58: 2C 01 40 BIT $4001 AE5B: D0 FB BNE $AE58 auf DATA IN = Lo warten auf EOI testen AE5D: A2 0A LDX #$0A EOI-Zaehler initialisieren (ca. 520 Takte) Einsprung von $AE6A: AE5F: 20 15 AD JSR $AD15 ATN-Modus testen AE62: CA DEX ca. 260 us gewartet ? AE63: F0 09 BEQ $AE6E ja, (EOI) ==> AE65: 20 0C AD JSR $AD0C Bus auslesen AE68: 29 04 AND #$04 Ist CLOCK IN = Lo ? AE6A: F0 F3 BEQ $AE5F ja, (weiter warten) ==> AE6C: D0 19 BNE $AE87 (Byte empfangen) ==> - Computer mitteilen, dass EOI-empfangen wurde Einsprung von $AE63: AE6E: 20 F1 AC JSR $ACF1 DATA OUT auf Hi AE71: A2 18 LDX #$18 50 us warten Einsprung von $AE74: AE73: CA DEX [Die Routine im Computer, die das DATA Hi AE74: D0 FD BNE $AE73 prueft, braucht ca. 38 us.] AE76: 20 E8 AC JSR $ACE8 DATA OUT auf Lo Einsprung von $AE81: AE79: 20 15 AD JSR $AD15 ATN-Modus testen AE7C: 20 0C AD JSR $AD0C Bus auslesen AE7F: 29 04 AND #$04 AE81: F0 F6 BEQ $AE79 auf CLOCK IN = Hi warten AE83: A9 00 LDA #$00 EOI-Flag setzen AE85: 85 51 STA $51 Byte empfangen Einsprung von $AE6C, $AEA0, $AEB0: AE87: AD 01 40 LDA $4001 AE8A: 49 01 EOR #$01 Datenbit kippen (Daten werden AE8C: AA TAX Lo-aktiv uebertragen) AE8D: AD 0D 40 LDA $400D Sind Daten ueber FSM-Bus gekommen ? AE90: 29 08 AND #$08 AE92: F0 08 BEQ $AE9C nein, ==> AE94: AD 0C 40 LDA $400C Datenbyte aus SDR holen AE97: 85 54 STA $54 und merken AE99: 4C B2 AE JMP $AEB2 Einsprung von $AE92: AE9C: 8A TXA AE9D: 4A LSR Datenbit ins Carry schieben AE9E: 29 02 AND #$02 b1: CLOCK IN = 1 ? AEA0: D0 E5 BNE $AE87 Ja, ==> AEA2: 66 54 ROR $54 empfangenes Bit ins Datenbyte schieben Einsprung von $AEAC: AEA4: 20 15 AD JSR $AD15 ATN-Modus testen AEA7: 20 0C AD JSR $AD0C Bus auslesen AEAA: 29 04 AND #$04 AEAC: F0 F6 BEQ $AEA4 auf CLOCK IN = Hi warten AEAE: C6 66 DEC $66 Sind noch Bits zu empfangen ? AEB0: D0 D5 BNE $AE87 ja, ==> Einsprung von $AE99: AEB2: 20 F1 AC JSR $ACF1 DATA OUT auf Hi setzen AEB5: A5 54 LDA $54 Datenbyte holen AEB7: 60 RTS Previous Page / Next Page |