$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