• Please review our updated Terms and Rules here

2nd 8 inch drive

Well....again I'm looking over my CBIOS code, comparing it to the CBIOS in the DRI manual. I think that I have found a question I had some time ago, but since it didn't make a different at the time I let it go. But now it may make a difference.

The DRI CBIOS code has two spots that store DRIVE NUMBER. At the beginning, in BOOT, CDISK is zeroed and stored at 0004h. Then again in GOCPM, just prior to jumping to CCP, CDISK is loaded in Reg C. Yet in SELDSK, the drive number is placed into DISKNO at 4CEFh. Why is there two places for drive number? Should these is synchronized? My CBIOS routines use the DISKNO and 4CEFh and not the CDISK at 0004h. I would think that CPM would always use the 0004h, because it would not move if CPM was moved by the user, but why is DISKNO at 4CEFh used at all? This address would be different if the user used MOVCPM. Mike

Here are the CDISK references

Code:
Boot:     XRAA
            STA IOBYTE
            STA CDISK       ;Select disk zero
            JMP GOCPM

GOCPM:  XXX               ;Set some intial stuff
             EI
             LDA CDISK
             MOVCA
             JMP CCP

Then the DISKNO reference
Code:
SELDSK:   LXIH  0000
              MOVAC
              STA DISKNO
              CPI 1                ;Here is the limit on drive numbers
              RNC

                                     ;Calc DPH Address
              LDA DISKNO
 
CDISK is for recording the current "logged" disk drive; that is, the drive that the CCP and BDOS uses as default, which may or may not be the same as the disk referenced by a command. In other words,

A>DIR B:

CDISK contains 0 for drive A:, but DISKNO (which is private to the CBIOS and can be anywhere) will be 1 when the command is executed.

You set CDISK at boot time to indicate the drive (and hence, the default unit) that you're booting from. Were you to have a hard drive C: that you were booting from in addition to two floppies, A: and B:, your CBIOS would set CDISK to 2. After booting, you shouldn't touch CDISK ever again--it's managed by the BDOS.
 
OK, just to get it straight in the old noodle, in your example
A>DIR B:

A> is the "logged" drive, which will be found in CDISK (0004h)=00

The B: of the DIR command would be drive no that CBIOS would use, DISKNO (4CEFh)=01. Mike
 
Well..... I've been struggling with the attempt to have two drives working together on my 8080 CP/M machine. I am still uncertain whether the problem is software or hardware, although I'm leaning toward hardware. I have a Siemens FDD-100 and a Shugart 800 drive and they don't seem to want to work together. I can connect each one individually to the computer and everything works fine. I can read and write files, rename, delete, make and modify files with ED. The whole nine yards. BUT, when I connect the second drive things change and the results are dependent on how the drives are set up.

First I connected the Siemens as A: so DS1 jumper is in and the terminating resistors are in. The Shugart is set up as B:, so the terminating jumpers T3-6 are out and the DS2 jumper is in. This is the best setup because the most works. I can boot CP/M from the Siemens drive and do any functions as was done with the Siemens individually. BUT, I can not access the Shugart. In my initialization the Siemens will recalibrate, but the Shugart will not. When B; is referenced in any manner, CP/M says "Sector not found". No doubt. because the drive will not seek. I can CTRL C and CP/M will restart and work as above without B:

Second, I connected the Shugart as A: so DS1 jumper is in and the terminating resistor jumps are in. The Siemens is set up as B:, so the terminating resistors are out and the DS2 jumper is in. This is a poorer setup in that CP/M will not boot from the Shugart. The Shugart activity light will come on, but will not recalibrate. The head will load at the track it is at and will read. I know this because if the Shugart is forced to start on Track 0, some of those sectors are loaded into memory, not all of them. I can monitor my HOLD front panel light and it flashes only occasionally. The drive will not seek to the next track. The cold start loader will end, but the computer will run wild in that the CP/M program is not complete. I have tried removing the DS2 jumper on the Siemens with no change. I have opened READ DATA pin 46 on the Siemens and then the Shugart will work properly. The same thing happens when the J3 50 pin connector is removed.

The fact the having the drives separated at Pin 46 is instructive. I though that maybe the two drives were using the line at the same time. Or one of the 7438 open collector gates in one of the drives is marginal. I have gone over the drive jumpers a number of times and I think they are correct, yet I'm unsure whether they really are. Looking for additional things to check. Mike
 
Looking at things from a functional standpoint should aid in the solution.

The outputs of both drives are "open collector". That is, they work by pulling a line that's being pulled up toward +5 by pulling the line down toward 0V. This is the old way of bus design. The idea is that a number of devices can share a common bus if they do not assert any signals unless selected. The use of tristate outputs is somewhat later, but the idea's the same. No outputs can be asserted unless a device is selected. Absent the select signal, it should be invisible on the bus.

The inputs of all drives are in the reverse direction. The terminator pulls all lines toward +5V (which is why there's only one terminator on the last drive on the bus). The drives "listen" to the input lines and "see" lines pulled low by the host.

The essence of simplicity.

So what can go wrong? A missing pullup, but that's easily verified. Some device on the bus not playing by the rules and driving lines when not selected (this can include the host).

There aren't that many lines in the interface in either direction. One can easily debug the drive interface by unplugging the drive cable from the host, but leaving the cable attached to both drives and using a voltmeter and a few wire jumpers connected to ground. Start by asserting the select on one drive (both with scratch disks). Do you see the READY line go low? Is the selected LED on? Try it with the other drive selected. If that test works, try grounding the HEAD LOAD line with either drive. Does the head load? Do you see an INDEX signal? READ DATA?

If that works on both drives (I doubt that you'll get this far), try intermittently grounding the STEP line. You should get a reaction from each drive.

You get the idea. My guess is that there's either a fault in the drive cable or the drive jumpering. There could also be a problem with the host interface, but we can cross that bridge when we get to it.
 
Excellent suggestion. So, I made myself a little circuit where I could select each drive, set the direction and step, and head load, all with a switches. I then set up LED lights and pull up resistors for Write Protect, Index, Ready, Read, and Track 0. I first tried the select lines and each drive responded with the activity light on that drive and the my ready test light. I tried this again with each drive door open and the ready light stayed on. I should explain that my test LED's would go out if the line would go low indicating an active state. I then tried to step without selecting either drive and neither would move. They would both respond when selected and move correctly according to the direction signal. The step must be a little touchy in that sometimes it would step forward or backward when the direction was set for one or the other. I bet that switch bounce was a problem. I never had any stepping problems when each drive was connected to the computer individually. Then I thought that I had found the problem. The Shugart would load its head for any condition. Either or no drive selected. So, I changed the jumpers B and X and this solved the problem. I was so sure that this was the problem, I stopped testing and reconnected the drives to the computer, but the same problem was there. The jumpers were definitely a problem, but not 'the' problem. So back to the test setup. I connected my scope to the index pulse with a pull up resistor. I got index pulses of the proper timing from each drive only when it was selected. Connected write protect to an LED light and it seemed to work correctly, don't think that was any problem to begin with. Then I connected my scope to pin 46 READ. There were pulses there with neither drive selected. They were coming from the Siemens drive. With the Siemens disconnected the Shugart pin 46 would stay at +5 until selected, then some pulses could be seen. The Siemens alone would show some pulses when not selected and lots of pulses when selected. I moved back into the Siemens circuit and found them at the output of 1E chip, the pulse generator chip. I see that there is an offset adjustment pot, for this chip, but don't know what that does. So, looks like the Siemens was over riding the Shugart READ output and confusing the FDC to the point of not loading CP/M at all from the Shugart. Yet when the Siemens was asked to boot that would work, because the Shugart was being quiet. But when doing a A>DIRB: the Shugart would respond, but the Siemens was adding pulses balling things up. So, I'm not sure if the Siemens can be adjusted to work or if it needs to be repaired. Mike
 
Check your select logic. You should have a constant low unless selected at pin 9 of IC 6C. When the drive is selected, that pin should go high--trace through the derivation of /STEP INHIBIT signal.

You might check that jumper RR is present and RI is not.
 
I'm not sure 'where' I should have a constant LOW, from what you suggest.

I checked at the LSI chip 6D. Pin 5 SELECT is always LOW until the drive is selected. Pin 10 STEP OPT is constant HIGH until selected and Pin 12 SEL OPT is constant HIGH until selected.

Pin 9 of 6C supervises the READ signal, but as I see it, this is only LOW (or blocking) when there is a WRITE, DRIVE SELECTED, HEAD LOADED and NO WRITE PROTECT. Else this signal is HIGH. Which allows read pulses to pass.

I have the RR & RI jumper in place. Looks to me that RI is the SELECT supervision of INDEX. Mike
 
Is the select line that you're using on the Siemens drive pulled high? (terminated). The schematic seems to say that none of the select inputs have pullups. If you look at the schematic there's a notation that a jumper wire has been added to pull the SELECT input high.

At any rate, if I read the OEM manual, the STEP INHIBIT signal is conditioned by SELECT.
 
Yes sir. That jumper is added between the common side of the select pads to the pull ups on the Jumper A pads.

STEP Inhibit is conditioned by SELECT, but if you look at the schematic, the first gate of the 4D chip, a NOR gate, and the negative logic causes the STEP INHIBIT to be an AND function of WRITE, SELECT, HEAD LOAD and NOT WRITE PROTECT. I verified that using my switches with the drives isolated from host. As far as I can tell, this logic will block the READ function when a WRITE is being done. Both at the input and the output (pin 9 of 6C) and this logic will also input to the LSI 6D chip to stop any stepping from occurring during a WRITE. BUT, if there is no WRITE in progress the head is connected to the read pulse generator right on through to the 6C chip and out to Pin 46 of the 50 wire ribbon to the host. I think, (think) that the read pulse generator is supposed to be set so that it will not create pulses from noise the head picks up. The pulse generator would only make pulses when the head is loaded and detecting real flux reversals. I have two FDD-100 circuit boards and on one board I can adjust the R100 offset pot a little and it will eliminate the stray pulses. These are very narrow spiky pulses, whereas the other board has a high frequency 50% duty cycle square wave on it and the adjustment will do nothing. Unfortunately the board where I have eliminated the stray pulses, will not step properly. BUT I may have a chance of repairing that. We'll see in the next couple of days. Mike
 
Well..... bad news, looks like one of the FDD100 boards has a bad 1E LSI chip and the other has a bad 6D LSI chip. So... I'll have to look for a replacement drive or board. Mike
 
Since the one drive works just fine as a single drive, why not just do a cut-and-jumper on pin 9 of 6C and connect it to SELECT? That will take care of the the stray READ pulses; the FDC itself doesn't care what's on that pin when writing.
 
That's a good idea, but I tried to adjust the offset on that drive to reduce the spikes. That didn't work and now I can not return the adjustment to the way it was prior or the chip has deteriorated completely. Now the READ line has a high frequency square wave on it. Oddly, when the unit is first turned on the READ line is high for maybe 10 seconds then will degenerate into this square wave. Oh well..... I was considering removing one of the LSI chips from one board and replacing the board chip. I have had little success in removing a 16 or more pin IC from a board without damaging the chip or the board. I just can not get all the pins hot to the point of the solder melting all at the same time. I have a plastic solder sucker, where you heat the pin and then before the solder solidifies you vacuum out the solder with this device. It sometimes works. But I only have one chance with this LSI chip. I could destroy the bad chip and pull it's pins out one at a time. I've done this to replace with a new chip. Getting the good chip off a board is more difficult. Any suggestions? Mike
 
I found my old de-soldering tool. It's SOLDAVAC. I used it in the early 60's in a tech job. I probably bought it in 61 or 62. I took it apart and cleaned it up. Replaced the O ring and started to practice on some scrap boards. On a 16 pin chip I could easily get 14 of the hole clear, but as is always the case there are a couple stubborn ones. One of the lands lifted. The method I use is to remelt the connection and add just a little solder. Alternate the lands to isolate the heat some. Heat on pad and try to suck it out. Then on the other side try another pad. I figure I should get a new de-soldering tool. Anyone have any experience with any particular brand? Mike Oh, also, do you know what size the holes are could I use a drill bit to clean them out?
 
I get good results with my TC soldering iron and the big Soldapullt--it's just not worth getting the smaller ones. A bit of desoldering braid helps to clean things up. The drill size is likely a number 57--certainly nothing smaller.

Which LSI chip are you looking at? I suspect that from the description in the OEM manual and the schematic that one could be fabricated from some programmable logic, say, a GAL. You'd have to jigger around the pinout a bit, but that's not impossible.
 
I was thinking of transferring the 6D chip from one board to the other. I suspect that it is just logic/buffers for ready, track0, step, head load, etal and a counter for the stepper motor. I am not familiar with GAL. How do they work in a nutshell. Mike
 
A 1980s innovation, so hardly new.

General Array Logic--lots of uncommitted gates that can be connected by a EEPROM layer represented by a "fuse map". Define your logic equations, run through a compiler, then "burn" the device on a PROM programmer. Don't like the result? Erase and try again. Ancestor of the CPLD and the FPGA and the descendant of the PAL. Devices are named by the convention of number of possible inputs and outputs and whether or not said outputs are registered or the device is purely combinatorial--or both. Thus GAL16V8 can have up to 16 inputs or 8 outputs (with some of the pins able to serve either purpose) and can have either plain or registered outputs in a 20 pin 0.300" DIP--or an even smaller PLCC.

Great stuff to do designs with--simplifies the need for lots of discrete logic--and very fast and simple to understand. It can reduce parts count substantially.

16V8 datasheet
 
I made a discovery today. I had thought that 1E LSI chip on one of my Siemens drives was bad, because it was picking up noise without the head loaded. Well, today I noticed that the head was loaded even without the head relay picked up. The adjustment is bad. So I was looking for the Siemens Service Manual. Siemens-3112.PDF, but when I would download it, it was always zero bytes long. Tried two sites and both would not work. I noticed that on top of the head load clapper there is an adjustment, but to get about 1/8" movement on the head load arm that screw has to be removed, about 3 turns from where it was. I was comparing this drive with one of the others and they have about 1/8" movement. Does anyone have the Service manual or know of where I can get one. It doesn't seem right that there needs to be sooo much adjustment to get this to work. I'm wondering if there is something else wrong. Thanks Mike
 
Back
Top