$E85B/59483:   Service the serial bus

Jump from $EA56, $EA68, $EC04:

E85B: 78        SEI
E85C: A9 00     LDA #$00
E85E: 85 7C     STA $7C         ; erase flag for 'ATN received'
E860: 85 79     STA $79         ; erase flag for LISTEN
E862: 85 7A     STA $7A         ; erase flag for TALK
E864: A2 45     LDX #$45
E866: 9A        TXS             ; initialize stack pointer
E867: A9 80     LDA #$80
E869: 85 F8     STA $F8         ; erase end flag
E86B: 85 7D     STA $7D         ; erase EOI flag
E86D: 20 B7 E9  JSR $E9B7       ; CLOCK OUT lo
E870: 20 A5 E9  JSR $E9A5       ; DATA OUT, bit '0', hi
E873: AD 00 18  LDA $1800
E876: 09 10     ORA #$10        ; switch data lines to input
E878: 8D 00 18  STA $1800

Jump from $E882:

E87B: AD 00 18  LDA $1800       ; read IEEE port
E87E: 10 57     BPL $E8D7       ; EOI?
E880: 29 04     AND #$04        ; CLOCK IN?
E882: D0 F7     BNE $E87B       ; no

Jump from $E8D5:

E884: 20 C9 E9  JSR $E9C9       ; get byte from bus
E887: C9 3F     CMP #$3F        ; unlisten?
E889: D0 06     BNE $E891       ; no
E88B: A9 00     LDA #$00
E88D: 85 79     STA $79         ; reset flag for LISTEN
E88F: F0 71     BEQ $E902

Jump from $E889:

E891: C9 5F     CMP #$5F        ; untalk?
E893: D0 06     BNE $E89B       ; no
E895: A9 00     LDA #$00
E897: 85 7A     STA $7A         ; reset flag for TALK
E899: F0 67     BEQ $E902

Jump from $E893:

E89B: C5 78     CMP $78         ; TALK address?
E89D: D0 0A     BNE $E8A9       ; no
E89F: A9 01     LDA #$01
E8A1: 85 7A     STA $7A         ; set flag for TALK
E8A3: A9 00     LDA #$00
E8A5: 85 79     STA $79         ; reset flag for LISTEN
E8A7: F0 29     BEQ $E8D2

Jump from $E89D:

E8A9: C5 77     CMP $77         ; LISTEN address?
E8AB: D0 0A     BNE $E8B7       ; no
E8AD: A9 01     LDA #$01
E8AF: 85 79     STA $79         ; set flag for LISTEN
E8B1: A9 00     LDA #$00
E8B3: 85 7A     STA $7A         ; reset flag for TALK
E8B5: F0 1B     BEQ $E8D2

Jump from $E8AB:

E8B7: AA        TAX
E8B8: 29 60     AND #$60
E8BA: C9 60     CMP #$60        ; set bit 5 and 6
E8BC: D0 3F     BNE $E8FD       ; no
E8BE: 8A        TXA
E8BF: 85 84     STA $84         ; byte is secondary address
E8C1: 29 0F     AND #$0F
E8C3: 85 83     STA $83         ; channel number
E8C5: A5 84     LDA $84
E8C7: 29 F0     AND #$F0
E8C9: C9 E0     CMP #$E0        ; CLOSE?
E8CB: D0 35     BNE $E902
E8CD: 58        CLI
E8CE: 20 C0 DA  JSR $DAC0       ; CLOSE routine
E8D1: 78        SEI

Jump from $E8A7, $E8B5:

E8D2: 2C 00 18  BIT $1800
E8D5: 30 AD     BMI $E884

Jump from $E87E, $E905, $EA6B:

E8D7: A9 00     LDA #$00
E8D9: 85 7D     STA $7D         ; set EOI
E8DB: AD 00 18  LDA $1800       ; IEEE port
E8DE: 29 EF     AND #$EF        ; switch data lines to output
E8E0: 8D 00 18  STA $1800
E8E3: A5 79     LDA $79         ; LISTEN active?
E8E5: F0 06     BEQ $E8ED       ; no
E8E7: 20 2E EA  JSR $EA2E       ; receive data
E8EA: 4C E7 EB  JMP $EBE7       ; to delay loop

Jump from $E8E5:

E8ED: A5 7A     LDA $7A         ; TALK active?
E8EF: F0 09     BEQ $E8FA       ; no
E8F1: 20 9C E9  JSR $E99C       ; DATA OUT, bit '1', lo
E8F4: 20 AE E9  JSR $E9AE       ; CLOCK OUT hi
E8F7: 20 09 E9  JSR $E909       ; send data

Jump from $E8EF:

E8FA: 4C 4E EA  JMP $EA4E       ; to delay loop

Jump from $E8BC:

E8FD: A9 10     LDA #$10        ; either TALK or LISTEN, ignore byte
E8FF: 8D 00 18  STA $1800       ; switch data lines to input

Jump from $E88F, $E899, $E8CB, $E907:

E902: 2C 00 18  BIT $1800
E905: 10 D0     BPL $E8D7
E907: 30 F9     BMI $E902       ; wait for handshake

    Previous Page / Next Page