User:Bytesock/Commodore bus

From Wikipedia, the free encyclopedia
Commodore serial IEEE-488
Type Serial
Production history
Designer Commodore International
Designed 1980; 44 years ago (1980)[1]
Manufacturer Various
Produced 1980–present
General specifications
Length 1.8 meters maximum[2]
Hot pluggable No
Daisy chain Yes, up to 31 devices[3]
External Yes
Electrical
Signal Open collector 5 V
Max. voltage 5 V
Max. current 3.2 mA[4]
Data
Data signal Yes
Bitrate 3.2 - 41.6 kbit/s[5][6]

The Commodore serial IEEE-488 bus (IEC Bus), is Commodore's interface for primarily magnetic disk data storage and printers for the Commodore 8-bit home/personal computers, notably the VIC-20, C64 and C128.

Description and history[edit]

The parallel IEEE-488 interface used on the Commodore PET (1977) computer line was too costly so a cost reduced version that consist of a striped down version of the IEEE-488 interface with only a few signals remaining. The general protocol layout were kept. And the bus began to be used starting with the VIC-20 (1980). Connection to the computer consists of a proprietary DIN-6 connector.

Transfer speed[edit]

Setup Speed Effective bitrate
Commodore 64 + 1541 400 bytes/s 3200 kbit/s
Commodore 64 + 1541 with Fast loader 2560 bytes/s[5] 20480 kbit/s
Commodore 128 + 1571 5200 bytes/s[6] 41 600 kbit/s
Theoretical 20 µs[3] 6250 bytes/s 50 000 kbit/s

Interface[edit]

Pinout[7]
Pin Name Function
1 /SRQIN Service request input to let peripherals to request being served by the host (C64). Used by the C128 for fast transfers.[8]
2 GND Ground[7]
3 ATN Serial ATN In/Out. Set low by the host (C64) to indicate the beginning of a serial data transfer.[8]
4 CLK Serial CLK In/Out. Used for software handshaking.[8]
5 DATA Serial DATA In/Out. Data bit transfer.[8]
6 /RESET Resets peripherals and also resets an older C64.[8]

Protocol description[edit]

The bus signals are digital single-ended open collector 5 volt TTL and active when negative. Bus devices have to provide their own power.

Because the bus lines are electrically open collector it works like a long OR gate between all device line drivers. The logical value for ground is true and vice versa. Any device may set a line “true”. A line only becomes “false” if all devices signal false.

Transmission begins with the IEEE talker holding the Clock line true, and the listener(s) holding the Data line true. To begin the talker releases the Clock line to false. When all IEEE listeners are ready to receive they release the Data line to false. If the talker waits more than 200 µs without the Clock line going true (idle state), listeners have to perform End-or-Identify (EOI).[3]

If the Data line being false (released) isn't acknowledged by the talker within 200 µs, the listener knows that the talker is in the process of EOI that means “this character will be the last one.” When the listener detects the 200 µs timeout, it must acknowledge this by pulling the Data line true for at least 60 µs, and then release it. The talker can revert to transmitting again within 60 µs by pulling the Clock line true.[3]

Data is eight bits starting with the least significant bit. The Data line is set according to the bit to send (1=true=ground). Once the Data line is set, the Clock line is released to false. The Clock and Data lines will be held steady for at least 20 µs (except for Commodore 64 that needs 60 µs). After 8 bits has been sent, the talker releases the Data line to false and the listener then acknowledge the talker by pulling the Data line true within 1000 µs. After this the talker sets the Clock line true and listener sets the Data line true thus back where the transmission begun. If an EOI is signaled by holding the Clock line false the transmission is ended and the listener acknowledge this by pulling the Data line true for 200 µs.[3]

The ATN line is set to true and bytes are sent like above to all devices, but the byte is interpretated as one of the commands “Talk,” “Listen,” “Untalk,” and “Unlisten”. That tell a specific device to become a talker or listener. Only devices with matching device numbers switch into talk and listen mode. Sometimes followed by a secondary address.[3]

On higher logical level the host will set the ATN line to true and transmit the bytes "Device number 8, listen", "Secondary address 2, open". Set ATN line false and the host is then the talker, holding the Clock line true. The device will be the listener, holding the Data line true. The host will transmit the specifics open command and end it with an EOI signal sequence. After this the host will send with ATN line true, "Device number 8, unlisten". Followed up by ATN line true and "Device number 8, listen", "Secondary address 2, data". Then the host sets the ATN line false and sends the data. When the host has sent enough data for the moment, ATN line is set to true and "Device number 8, unlisten" is sent.[3]

When it's needed to switch places and make the host a listener and the device a talker which happens after such talk command is sent to the device. The host sets the Data line true and release the Clock line to false. The device waits for the Clock line to go false (released) and then pulls it to true and release the Data line to false. After this sequence the standard talk-listener interaction may follow.[3]

Bus commands[3]
Code Meaning
device | 0x20 Listen, device (0-31)
0x3F Unlisten, all devices
device | 0x40 Talk, device
0x5F Untalk, all devices
channel | 0x60 Reopen, channel (0-15)
channel | 0xE0 Close, channel
channel | 0xF0 Open, channel

The Commodore 1541 floppy drive uses a slower Commodore 64 compatible mode which can be deactivated for faster speed by using the command OPEN 15,8,15,"UI-":CLOSE 15.[9]

Device numbering[edit]

Device numbering per Commodore 64 kernel ROM[10]
Device Type
0 Keyboard
1 Cassette port
2 RS-232 on the user port or second cassette on older units
3 Screen
4-5 Printer
6 Typically plotter device
7 Second plotter?
8-15 Disk (10 - used by some serial-to-parallel printer interfaces)
16-30 Unknown
31 Reserved as a command to all devices

Device number 0-3 will not be sent to the physical bus.[10]

Host implementation[edit]

The Commodore 64 computer uses the Complex Interface Adapter (6526 #2) to handle IEC Bus transmissions. The Commodore 1541 floppy drive uses the MOS Technology 6522 VIA. The Commodore 128 uses MOS 6526 and the Commodore 1571 uses MOS 6526 as well.

Common devices[edit]

Device Info
1541 5¼" 170 kB floppy
1570 5¼" 170 kB floppy
1571 5¼" 350-410 kB floppy
1581 3½" 800 kB floppy
Commodore MPS 801[11] Dot-matrix printer
Commodore 1515[12] Dot-matrix printer
Commodore 1520 Ballpoint pen printer
Commodore VIC-1525[13] Dot-matrix printer
Commodore VIC-1526 Rebranded MPS 802, Daisy wheel printer
Okimate 10 Dot-matrix printer
DPS-1101[14] Daisy wheel printer
INTERPOD Standalone IEEE-488 + RS-232[15]
Commodore VIC-20 1 MHz 5 kB computer
Commodore 64 1 MHz 64 kB computer
Commodore SX-64 1 MHz 64 kB computer
Commodore 128 2 MHz 128 kB computer
Commodore 16 1-2 MHz 16 kB computer
Commodore 65 3.54 MHz 128 kB computer

Commodore 1541[edit]

The Commodore 1541 floppy drive is the most common peripheral used with this bus and can store 170 kByte.

Devices[edit]

See also[edit]

References[edit]

  1. ^ Commodore VIC-20 History
  2. ^ "Building the XE1541 serial cable". Retrieved 2016-04-02. (1) 6' or 1.8 meters (max) 4 conductor shielded cable (for serial connection)
  3. ^ a b c d e f g h i "How the VIC/64 Serial Bus works". 2015-04-17. Retrieved 2016-04-28.
  4. ^ "6526 complex interface adapter (CIA)" (PDF). 2016-03-04. Retrieved 2016-04-02. Output Low Current (Sinking); VOL < .4 v (PA0-PA7, PC, PB0-PB7, DB0-DB7) IOL 3.2 mA
  5. ^ a b "Design case history: the Commodore 64" (PDF) (published 2012-04-16). 1985. Retrieved 2016-04-02. Programming tricks used by Epyx have yielded transfer rates of up to 2.5 kilobytes per second.
  6. ^ a b "Commodore 1571 disk drive specifications". Commodore Business Machines, Inc. October 1986. Retrieved 2016-04-27.
  7. ^ a b "C64 Serial I/O pinout and wiring @ old.pinouts.ru". 2013-12-16. Retrieved 2016-04-02.
  8. ^ a b c d e "C-64 Workshop / Pin Connections". 2005-12-10. Retrieved 2016-04-02.
  9. ^ "VIC-1541 - C64-Wiki". 2016-03-11. Retrieved 2016-04-28.
  10. ^ a b "IEC-bus documentation as used for the 1541-III IEC disected" (PDF). 2008-02-24. Retrieved 2016-04-28.
  11. ^ "MPS-801 printer". DenialWIKI. Retrieved 22 February 2015.
  12. ^ "VIC-1515 User's manual Graphic printer by Commodore" (PDF) (published 2011-11-05). April 1981. Retrieved 2016-04-28.
  13. ^ "VIC-1525 Graphics Printer User Manual" (PDF). Commodore Computer. Retrieved 22 February 2015.
  14. ^ "Commodore DPS-1101 Daisy Wheel Printer".
  15. ^ "Interpod IEEE-488 Interface". April 2008. Retrieved 2016-04-28.

External links[edit]