From: Marko Mäkelä (marko.makela_at_hut.fi)
Date: 2003-06-07 09:36:34
Hello Ruud,
> > 1. Can multiple bytes be sent with ATN asserted?
>
> Yes. The actual cammandcodes are sent with ATN = (L).
I spent some hours last night, disassembling and commenting the serial
bus routines of the VIC-20 KERNAL ROM. It looks like there can be one
or two bytes sent under ATN: the UNTALK ($5f) or UNLISTEN ($3f) codes,
or the device number 0..30 ORed with a command code (TALK=$40, LISTEN=$20),
and the optional secondary address, optionally ORed with $f0 (for open)
or $e0 (for close).
If the secondary address specified with the SETLFS call is above 128, no
secondary address will be sent. This was new to me; I only knew that file
numbers above 128 are treated specially by CHROUT (it'll convert CR to CR+LF).
> > 2. Can the talker and listener change roles when ATN is
> > initially deasserted?
>
> No.
The VIC-20 firmware agrees with you: the routine at $eed3, which changes
from a talker to a listener, is entered after the TALK command (which can
be one or two bytes).
Also, it looks like that the only place where the VIC-20 generates EOI
handshake is when sending the second byte under ATN. I'm not fully sure
about this, and I haven't looked into drive firmware yet, to see if it
tolerates EOI handshaking when receiving non-ATN bytes.
> Quite simple if two drives are concerned:
> - you tell the TALKER what file to send [1]
> - you tell the LISTENER what file to receive [1][2]
> - you tell the LISTENER to start to LISTEN
> - you tell the TALKER to start to talk [3]
Thanks, this makes sense.
I analysed how the higher-level routines access the serial bus:
open:
- if secondary address is omitted (above 128), do nothing
- otherwise,
- send LISTEN, SECOND or $f0 under ATN
- send filename with CIOUT calls
- send UNLISTEN under ATN
close:
- if secondary address is omitted (above 128), do nothing
- otherwise,
- send LISTEN, SECOND or $e0 under ATN
chkout:
- send LISTEN and optionally SECOND under ATN
chrout:
- send the character with CIOUT
chkin:
- send TALK and optionally the secondary address under ATN
- become listener
chrin:
- receive a character with ACPTR
save:
- open the file (cf. "open"):
- send LISTEN, secondary address or $f0 under ATN
- send the filename with CIOUT calls
- send UNLISTEN under ATN
- write the file (cf. "chkout", "chrout"):
- send LISTEN, secondary address under ATN
- send the data with CIOUT calls
- send UNLISTEN under ATN
- close the file (cf. "close"):
- send LISTEN, secondary address or $e0 under ATN
- send UNLISTEN under ATN
load:
- open the file (see "save")
- read the file (cf. "chkin", "chrin"):
- send TALK, secondary address under ATN, become listener
- get the data with ACPTR calls
- send UNTALK under ATN
- close the file (see "save")
Marko
Message was sent through the cbm-hackers mailing list
Archive generated by hypermail pre-2.1.8.