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