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