Ruud's Commodore Site: CBM-PC Home Email


What is it

CBM-PC is a project which enables you to connect a PC with one or more IEEE drives. The PC can now create images of the floppies in the drive. If you are familiar with Star Commander, a PC creating images using a 1541 drive, then you can consider CBM-PC as its IEEE equivalent.
If the rest of the page looks familiar, then you are right. The needed hardware is the same as for CBM-HD. In this case the only essential difference is the used software.

  • Multi drive.
    You can connect as many IEEE drives to your PC as you wish.
  • Multi disk format.
    CBM-PC is able to handle all know disk formats.
  • Hardware.
    The minimum you need: - a bidirectional LPT port
    - a COM port - access to a 5V power supply - two ICs, a 1489/75189 and a 7406, and some connectors.

CBM-PC is not very fast. At this moment it uses standard IEEE command to extract the data from the floppies. Star Commander is able to extract data from a 1541 floppy (= 160 KB) in less than one minute. So six minutes would be a reasonable number for extracting 1 MB from a 8250 floppy. Unfortunately I still need 20 minutes :( But I'm discussing some ideas with friends how to improve that number.

Regarding copy protections: to be honest, I haven't any idea if they exist for the IEEE drives. But anyway: CBM-PC isn't able to handle them. (Neither is Star Commander AFAIK)


If you forgot how IEEE-488 looked like, take a peek at my IEEE document .
IEEE has 16 active lines in total. All 16 can be either input, output or tristate. Eight of them are used for transferring data, the other eight for control. The state of each of the control lines depends on the fact what role the device is performing at the moment: a listener, a talker or a controller.
I copied one part of this document to make the next part more understandable:
Line         NRFD   NDAC   DAV    ATN    EOI    IFC    REN    SQR
             I  O | I  O | I  O | I  O | I  O | I  O | I  O | I  O | 
Listener   |    X |    X | X    | X    | X    | X    |      |      | 
Talker     | X    | X    |    X | X    |    X | X    |      |      | 
Controller | X  X | X  X | X  X | X  X | X  X |    X |    G | X    | 
X marks line used as "I = Input" or "O = Output"
The block Controller/REN is marked G because a CBM doesn't use this line. In this case it is hardware-wired to GROUND.

As you can see a device like a disk drive needs 4 input/output and 2 input lines. So the original idea was to use an LPT port as IEEE port. But when testing my first interface, I ran into troubles and at the end I had to add some hardware called 'ATN trap'. A piece of hardware that I didn't invent but that actually is found inside the drives as well! But then an extra output was needed and that's where the COM port comes in. This port delivers the output to control the ATN trap.

The needed PC

What kind of PC do you need? You need a PC that has (at least) one bidirectional LPT port, one COM port and, preferably, a free USB port. On forehand: the USB port is only needed to supply the power for the interface.
As said: the LPT port must be capable of bidirectional operation. If your BIOS doesn't mention "bidirectional", choose EPP.
The PC should to be able to run plain Windows 98 DOS in the first place. MS-DOS could do as well (but not advised), but the DOSbox under XP, Vista or newer won't do at all! (I never used ME)
The reason we need MS-DOS or W98-DOS is that we need a real time Operating System. The DOSboxes of W98, XP etc. aren't; they still operate under 'multi-operating' circumstances. And unfortunately for some of you, that is the same with Linux. And not to be left unmentioned: most modern OSes prohibit direct manipulation of I/O ports.

There are various solutions to exchange files with other PCs. At least use a PC capable of running Windows 98SE. But, AFAIK, Windows 98 is NOT capable of sharing disks/directories with Windows 7 or better (never used Vista) and also has troubles with recognizing USB sticks. Therefore I personally prefer PCs capable of running at least Windows XP. In that case I install W98 and XP (or better): W98 to run CBM-HD and the second OS to exchange the data.
Be aware that for some unknown reasons it sometimes it is not possible to install or run the Windows 98 GUI on some newer PCs (video ?). In this case just install the W98 DOS and add XP (or better).
If using XP or better, be also aware of the fact that W98 cannot handle NTFS. So create a big enough FAT32 partition to store CBM-HD and your (future) images.

The hardware

A schematic says sometimes more then thousand words:

The LPT ports takes care of the mian part of the IEEE interface:
 D-connector             IEEE  
D0          2           1    D1
D1          3           2    D2
D2          4           3    D3
D3          5           4    D4
D4          6          13    D5
D5          7          14    D6
D6          8          15    D7
D7          9          16    D8

STROBE      1           5    EOI         
AUTO FEED  14           6    DAV        
INIT       16           7    NRFD       
SELECT IN  17           8    NDAC       
PAPER END  12           9    IFC (RESET)
ACKNWLDG   10          11    ATN
GND      18/25        18/24  GND
                       12    Shield

I already mentioned the ATN trap. This circuit does nothing else but pulling NRFD and NDAC low the moment ATN becomes low. This on its turn puts the controller into a wait state. The moment the PC is able to handle the ATN, it must be able to disable this ATN trap so it can take control of the NRFD and NDAC lines itself. As you can see only four 'Open Collector' inverters and a pull-up resistor are needed.

Assume PC, the control input for the PC, is (L). The moment ATN becomes (L), point(1) becomes (H), thus negating NDAC and NRFD.
Making PC (H) means that point (1) becomes (L) regardless of the state of ATN. in that case NDAC and NRFD can only be negated by the original outputs.
But what output is to be used for 'PC'? The list above reveals that there is no free output left at the LPT port to perform this function. So that's where the COM port comes in view: RTS will control the ATN trap.

A controller needs to be able to control the ATN and Reset line:
- output DTR, a 1489 gate and a 7406 gate will handle ATN
- output TxD, a 1489 gate and a 7406 gate will handle RESET

Signal conversion and power supply

A COM port output cannot be connected directly to a TTL input. That is why we need the 1489/75189 as a bridge between the COM port and the 7406 gate.

Both the 1489 and the 7406 IC need a +5V power supply. My own idea was tapping it directly from the power supply in one or another way. But an USB output can take care of that as well. Using an USB output is not my idea but comes from Giovi (Brasil). Advantage: now the hardware can be used by most, not too new, PCs and laptops. The newest PCs and laptop don't have a LPT port anymore :(
For very old PCs and laptops without USB ports: tap the power from the keyboard, mouse or game connector.

Other hardware versions

Those who are familiar with CBM-HD know that in the past I developed various versions for several reasons. But I found out that that only confused people and that is what wanted. But in case you are interested in the old versions, the old CBM-HD page can still be found here.

The software

CBM-PC is written in Turbo Pascal. You can get the sources and the executables for MS-DOS/W98-DOS by asking me. I'm still working on it when that is finished, you can download it as a ZIP.

Important remark: the software has only been tested and will only be tested in the real DOS mode of Windows 98 SE. And just to make sure: I am not interested in making it run in the GUI mode of Windows 98, ME or higher.

How to use the software?

You start CBM-PC under DOS by: "CBM-PC10". It will look for a normal text file with the name "CBM-PC10.INI". That file tells CBM-HD what drives have been connected, using which device numbers and what drives. An example:

Cable XIEEE 0 1 1 Drive 4040 0 8
;Drive 4040 0 8
Drive 8050 0 9
Drive 8250 0 10

The word "Cable" tells the program that this line handles what interface is used between the PC. Because we are dealing with IEEE devices, the cable should be of the XIEEE type. The zero tells the program what type of IEEE interface we are using for the PC. Version G mentioned above is type zero. The next two numbers give the number of both the LPT and COM port. In this case we will use LPT1 and COM1.

The word "Drive" tells the program that this line handles emulating a drive. The next part tells CBM-PC what the type of the connected drive is. IEEE drives normally have two physical drives on board. The number 0 or 1 tells the program what drive is meant. The next number tells CBM-HD what device number is of the connected drive.

I'm thinking about to let the PC discover by itself what drives have been connected. The idea is to issue a command like initialize to find out if there is a drive present at all. Next I'll do is reading some addresses of the EPROM to find out with what type of drive we are dealing.

What images can CBM-PC handle?

- CBM 3040, creating images using the D30 extension
- CBM 4040, creating images using the D64 extension
- CBM 8050, creating images using the D80 extension
- CBM 8250, creating images using the D82 extension
The CBM 4040 is an ancestor of the well known 1541 and both use the same disk format. Therefore 1541 floppy disks can be used in CBM 4040 drives and vica versa. That is also the reason the images share the same extension: 'D64'.

There also exist a double 8 inch drive, the CBM 8060. But this one is not only very rare, but I have no idea of its format so I don't know how to create images.

Help, it doesnt work !!!

This is a guide to tell you what to do once you have build the hardware, started up CBM-PC and the PC and Commodore computer don't see each other. I expect you to be able to solder, to understand digital electronics, to read and understand schematics and to work with the program DEBUG under MS-DOS. This last should include that you can handle hexadecimal numbers.

I'm very experienced and yet I managed to swap two wires when soldering version G. My test program said that everything was alright but my CBM 8032 refused to recognise the PC as a drive. So I attached my LED tester to the IEEE bus and ran the program in step mode. Then I noticed that at two stages the wrong LED was dimmed.
This LED tester is nothing more then 16 LEDs, 16 resistors of 390 Ohm, two resistor arrays of 10K and two 74LS540 ICs soldered on a PCB. The inputs of the 540s and the single pins of the resistor arrays are connected to various signals of the IEEE bus. The common pins of the resistor arrays are connected to +5V. The LEDs are connected to the outputs of the 540s and to +5V via the 390 Ohm resistors. So the LED reflects the state of a signal: 'on' means the signal is (H), 'off' means it is (L). Last but not least: tap the needed power from a source that suits you the best.
Instead of this LED tester you can use a volt/multimeter to test every line one by one but this is a sure way to become stressed, I speak out of experience!

If you start up CBM-PC, it will mention what ports it is using. Not the numbers, but the I/O addresses. When using LPT1, you most probably will see 378. Other possibilities: 278 and 3BC. For the COM port this most probably will be 3F8 but 2F8, 3E8 and 2E8 are possible as well. You need to note these numbers.

To be continued....

My own CBM-PC project

So far I used a real PC to create the images. I always had the idea to use a CBM for this purpose but two things kept me from doing it:
- I didn't want use a working machine for this purpose.
- I couldn't find a VGA replacement for the CRT, neither a VGA CRT nor a TFT screen.
Then I received an old CBM 8032-SK for free. It turned out it had been hit by lightning and all parts had been damaged beyond repair. Almost at the same time I received two twelve inch TFT screens. Both problems solved :) So I placed a PC board inside the case and replaced the CRT with a twelve inch TFT screen.

For more details have a look here: motherboard, hard disk, connectors (1), connectors (2), TFT screen (1) and TFT screen (2).

The motherboard is a Pentium-II, 333 Mhz. Why such an oldie, you may ask? I needed a short ATX anyway because of the lack of space inside the case. Not only the horizontal space was a problem, the vertical one as well. All the available fast boards I had, had a big, read: high, CPU cooler on board. Two other advantages of this oldie:
- video-on-board, no video card needed
- an ISA slot that enabled me to use a self built IEEE interface I had still laying around

My own CBM-PC project: using the original keyboard

One idea I had was that I wanted to be able to use the original keyboard. The first idea was to Jim Brain's C= Key. The only thing you have to do is to connect the CBM keyboard to it and on its turn to connect the C= Key to the PS/2 connector of the PC. But that means that I have to use it as well when in Windows mode, not something I was looking forward to.

Using the ISA IEEE interface meant that the internal LPT port was still free. So I got the idea to use this one. Like the 8032 does, I used a 74LS145 to generate the needed matrix signals. For the four needed inputs of the 145, I used the four I/O pins of the LPT port. The eight data bits are used to read the matrix. The whole is powered by a USB port.

My own CBM-PC project: the IEEE interface

As said, I used a self built IEEE interface I had still laying around:

This ISA card has two LPT ports on board. The second port provides the extra three needed outputs. The schematic:

My own CBM-PC project: the software

Stopped for the moment. To much projects and not enough time.

Having questions or comment? You want more information?
You can email me here.