Sunday, August 2, 2026

Testing my new seek logic for the Virtual 2315 Cartridge Facility - part 8

FINISHED MODIFYING TERMINATOR BOARD WITH NEW RESISTOR VALUES

The terminator board that fits into the Virtual 2315 Cartridge Facility (V2315CF) main unit is the same one used successfully with the unit in its original role as George Wiley's RK-05 Emulator connecting to a DEC computer to emulate a disk drive that is a derivative of the IBM drive. The terminator implemented the same resistance values as the M903 terminator board built by DEC. 

The impedance of the terminator connections is just over 122 ohms, which may match the impedance of the cabling in the DEC computers. The RK-05 emulator kit offers an option A1 RK-05 to RK8-E that has two IDC 40 pin ribbon cables to make the connections to the controller card, since the RK-05 drive needs 36 signal lines for the interface between disk and controller, deploying ground lines between each signal line on the ribbon cables. 

Ribbon cable characteristic impedance for single ended signals (not differential pairs) is 80 to 100 ohms with interspersed ground wires. Using the DEC terminator board yields a big mismatch in impedance, which will lead to reflections of about 20% of the signal level. If the rise time of signals is faster than 6 nanoseconds the signal will ring and appear to have spurious transitions. 

I determined resistor values to drop the terminator impedance to about 100 ohms, which would minimize the issues even with the current sharp rise times. The Lattice FPGA does not support the means to slow the signal transitions to 7ns or slower instead typically rising at 1 to 1.5 ns.

I removed all the original resistors - a mix of 1206 size and 0603 size for the pullup to 5V and the pulldown to ground respectively - and cleaned up the board.

The original terminator board has a few unpopulated resistor locations - the crude circles show you were to concentrate to see them. 

I installed my 179 ohm pullup and 249 ohm pulldown resistors onto all the positions where I have signals connected to the ribbon cables. The new terminator board was tested and then plugged into the V2315CF to do more testing. 

DETAILED VIEW OF EFFECT OF SIGNAL GLITCHES ON SEEK BEHAVIOR

A glitch on the +Access Ready signal causes the 1130 disk controller logic to malfunction, thus not forming correct step requests to the drive. The disk drive responds to brief glitches in -Access Go that are induced by the +Access Ready glitch, so it does move to the requested cylinder. The V2315CF fails to recognize the malformed sequences thus it does not reach the same cylinder number as either the drive or the intent of the XIO Seek commands. 

The dance of signals we should see is the controller drop -Access Go with -10 Mil Step low, holding it until the drive drops +Access Ready about 5 milliseconds later. When +Access Ready drops, the signal -10 Mil Step will rise from low to high since only the first seek should be a 10 mil step. 

Also at the time when +Access Ready drops, if the count register (Bits 7 to 14 plus the -10 Mil Step which is bit 15) has all bits on, the -Full Word Count signal is dropped which terminates the seek in the 1130 disk controller logic.

The disk drive, meanwhile, moves the arm for another 9-10 milliseconds then raises +Access Ready to indicate the seek step is complete. If the count register is not all ones yet, another cycle of -Access Go dropping with its +Access Ready responses will occur, iterating until -Full Word Count drops. 

Above, we will examine a successful seek of 1 cylinder. We can see the signals conforming exactly to the protocol. After -Access Go is dropped with -10 Mil Step low, we see +Access Ready drop 5 milliseconds later. At that time, the controller changes -10 Mil Step to high, which turns on -Full Word Count, stopping the controller from trying any more steps. At 15 ms from the start of the step, +Access Ready returns to high indicating the move is complete. 

When I did a move of 3 cylinders, however, the glitches arrived and the process breaks down. The arm moved three cylinders but the V2315CF only saw a single cylinder step. Lets look in detail below, zooming in to the time when the glitch first arrives:

At the 5 ms point, when +Access Ready should drop for 10 ms, we see a very short blip downward, circled in red. This turns off the -Access Go and makes -10 Mil Step go high as pointed by the green arrow.

We see another -Access Go, but very brief, indicated by the blue arrow. Since -10 Mil Step is now high, this asks for a 20 mil step. The short drop of +Access Ready just to the left of the blue arrow causes the disk controller to add 2 to the count register, making it reach the all-ones state and turning on -Full Word Count pointed to by the pink arrow. The seek is over so no further step requests. 

The drive did respond to the additional -Access Go, in spite of the prior seek not being finished. It is only a 20 nanosecond pulse, borderline for the Solid Logic Technology (SLT) edge detectors to see but obviously long enough. Somehow the drive managed to do the second step correctly, as the arm did end at the proper spot. 

Since the V2315CF logic is generating the correct protocol dance - keeping +Access Ready low for 10 ms starting 5ms after the falling edge of -Access Go. It doesn't watch for the next -Access Go falling edge until after the 5ms and it misses the defective short mistimed pulse that the disk drive responded to. 

The drive even responded to a 5 cylinder seek with a correct movement. The signal pathology is even uglier, as seen below:

We see that a single step is observed as far as the V2315CF, based on the 15 ms dance expected. Zooming in on the glitch area, we can see how it managed to move 10 mil, 20 mil and 20 mil to achieve the 5 cylinder goal. 

The glitchy +Access Ready is see to the left of the green arrow, resulting in the -10 Mil Step signal going high where the green arrow points. The first step we began is 1 track, but the subsequent moves will be 2 tracks each. A glitch from the controller shown with the first red arrow drives the arm another 2 tracks. Later we see the -Access Go drop for a longer interval, driving the last 2 track move. This adds 2 to the count register, completing the count of 5 and turning on -Full Word Count to complete the XIO Seek. 

Testing my new seek logic for the Virtual 2315 Cartridge Facility - part 7

TESTING NEW SHADOWING MECHANISM

I loaded the FPGA and PICO of the Virtual 2315 Cartridge Facility (V2315CF) with the updated functionality and repeated the tests from before - using the disk in real mode, issuing seeks of various distances. I wanted to check that the V2315CF reported the ending cylinder number that is expected from the distance of the seek, that the disk arm moved to the correct ending cylinder number, and that the program seeks a successful completion. 

The arm appears to be reaching exactly the cylinder it should based on the XIO Seek commands issued. The V2315CF is still missing some counts which is still symptomatic of the glitches from +Access Ready as it appears at the 1130 backplane. This is a combination of the disk controller logic being tripped up by the glitches and the V2315CF misbehaving. 

Interestingly, the disk drive still sees the correct number of steps, even if it is a short glitch on -Access Go that was triggered by the glitch on +Access Ready. While I could probably develop logic in the V2315CF that would be insensitive to the glitches and mistakes of the disk controller, the right thing to do is to fix the glitches themselves. 


The top signal is -Access Go as emitted from the 1130 backplane. The second signal is +Access Ready as it comes back from the V2315CF. This is produced from a timer based logic chain thus the signal going out of the FPGA pin is unglitched but it sure isn't when it arrives at the 1130. The third signal is the -10 Mil Step signal, being advanced to a 20 mil step because the glitch appears to be the drive dropping +Access Ready as it is in the midst of the 10 mil first step. 

SIGNAL INTEGRITY WORK PLANNED TO ELIMINATE THE GLITCHES

I had already ordered new terminator resistors to improve the impedance matching. The parts arrived today and I carefully removed the 113 resistors on one of the terminator boards and clean up all the pads. It is ready for me to solder on my 1206 size 179 ohm and 0603 size 249 ohm resistors, when I get back to the shop.

The new version of the 2310 Interface Board is still in fabrication in China, but I have the parts to put it together if I believe that the signals will be improved by connecting source to destination directly for all the important seek related signals, eliminating the FPGA in the signal path other than to monitor some of them. 

I am going to work on the twisted wire shielding for the cable I made to run from the 2310 Interface Board to the disk drive. I may be picking up induced signals that are leading to the glitches. 

I need to put the oscilloscope on +Access Ready both at the 1130 backplane at as close to the V2315CF circuitry driving it as I can. I want to see exactly what these signals look like that are causing the issue. 

ORDERED THINNER CARTRIDGE BOTTOMS FOR MINI CARTRIDGES

The mini 2315 cartridges used with the V2315CF are built with a circular white PCB marked to look like the top of a 2315 cartridge, mounting the micro SD card socket and other parts underneath, and placed on a 3D printed bottom cover to make it look more like a tiny version of the physical disk cartridges. 

I thinned out the bottom cover a bit. I can't make the depth proportional to a full sized 2315 cartridge because that doesn't allow enough room for the sd card socket and the header pins that connect the mini cartridge to the V2315CF. However, I had excess material on the bottom which I cut back to improve the esthetics a bit. 

Actual color is white

I ordered a batch of 25 from CraftCloud3D.com in white PLA. These will be glued to the bottom of the PCB to make up the mini cartridge. Proportionally, the walls would need to be about 1/4 of the height in order to look like a tiny 2315. 

I could get closer by notching out the space where the right angle 2x4 header is installed (the opening in the front of the image above) so that it hangs down below the bottom of the mini cartridge. The plastic and copper of the header would be visible below the mini cartridge yet the rear portions look like the 2315 in miniature. 

INVESTIGATING THE MECHANICAL STOP AND THE CYLINDER 202 ISSUE

I had observed an issue when the disk controller attempted to move the arm past the physical limit of the disk drive. The disk implements 203 cylinders, thus can move from cylinder 0 (home) to cylinder 202. Seeks are relative operations, requesting a movement of a number of cylinders from the current position. Thus, it is possible to request a movement that would naively move the arm past cylinder 202 (or backwards past the home cylinder). 

The disk does not directly support a relative movement of an arbitrary number of cylinders. Instead, it can move exactly 1 or 2 cylinders, a step size of 10 mil or 20 mil. The disk controller converts the count of relative movement given by the 1130 XIO Seek instruction into a series of 1 or 2 track steps to move the arm to the final destination. 

The drive has two mechanical stops that block the arm from moving past the two limits. In addition, there is a microswitch that turns on when the arm is at the home cylinder, which the disk controller uses to block any further reverse movements. There is, however, no microswitch to indicate that we are at cylinder 202, so the disk controller will try to move forward to complete its count and the disk drive will try to move 1 or 2 cylinders per step until the controller stops requesting steps. 

Cyl 202 crash stop in red, home crash stop nut in green

Moving a step in the drive involves releasing a detent, a tooth that fits into a notch in a rack to hold the arm at its current position. It then accelerates the disk arm using a voice coil magnet up to a set velocity, then decelerates to bring the arm to a stop. The detent is also released to fall into the appropriate notch for the new cylinder location. 

If the mechanical stop blocks the arm from moving, it can't accelerate to the trigger velocity. The circuitry to stop the voice coil acceleration depends upon that trigger being reached. Thus, one of three conditions can occur. First, the velocity reaches the trigger level and the movement stops. Second, some backup method stops the movement of the arm even though it doesn't reach the trigger speed. Third, it doesn't reach the trigger speed and the backup method fails to work, resulting in the circuit perpetually driving the voice coil to accelerate the arm. 

In the third case, the drive makes a continual buzzing sound and even a system reset of the 1130 will not stop it. Only by turning off the run switch can we break the drive of that pathological state. This is exactly what we are experiencing when we try to move past 202. 

There is a vague mention of the backup method - stating that "a resistor" causes the trigger to be turned off in about 40 milliseconds because it charges the integrator that is otherwise only charged by the tachometer sensing the speed of the arm. Normally the acceleration reaches the trigger level in less than 4 ms, so this would definitely be a safety net for the drive when it is blocked from actually moving. 

However, nothing in the manuals defines where this path is or how it works. I suspect I understand the mechanism and the way it might fail - only a very few components could still allow normal arm movement but fail to trigger when the arm is blocked from moving.

My first check will be the setting of the mechanical stop that blocks the arm from passing 202. It must have a gap between the arm and the stop, when the arm is at 202, of .003 to .009 inches according to the manual. This must be wide enough that the tachometer can charge up to the velocity trigger before the arm stops moving, otherwise we reach condition 3 that is the pathology observed. 

A single track is 10 mil wide, .01 inches, thus the outer range of the setting has to be less than this to ensure we don't actually move to cylinder 203. Thus, the max gap is .009" for the stop setting. However, we don't know how close the minimum gap can be and still block a 20 mil step. It depends on how long it takes to accelerate the voice coil to its target velocity for that step size - the velocity needed for 10 mils being lower than that for 20 mils. 

Ideally the design of the drive provides some safety margin so that even with the minimum gap of .003" the target velocity can be attained, but I have no data to see the speed we could reach in that case nor the trigger level needed to shut down the acceleration. 

The gap did appear to be too tight- with a .006" feeler gage in place, the arm did not get the even detent tooth fully to the notch for 202. 

Something occurred to me as I thought about the condition when we are already at cylinder 202 and attempt to move beyond it. If we try to move 10 mil, the disk drive circuits alternate between odd and even detents to achieve a 1 track movement. If we step past 202 with a 10 mil step, the detent will flip from even to odd. 

The tooth can't fall into the notch for 202 - that is a notch on the rack under the even detent. It must fall into a notch under the odd detent, which might put the arm back at 201 or let it set at 203. There is no circuitry to stop the alternation of detents, thus no way to block this if we are at 202 and try a 10 mil step. This does not sound like a useful behavior for the drive, but I can't see how it will detent properly back at 202 in this scenario. 

TESTING THE SEEK PAST 202

I did some testing using the small test program I put into memory. My first seek from cylinder 0 was to reach 201, which it did successfully. I verified the arm position and that the odd detent was the one engaged in the rack. 

I then issued a move of 1 cylinder forward, which caused the drive to successfully stop at 202 with the even detent engaged. Now I was ready to attempt to move past 202 to see what would occur. 

I did a seek of 1 cylinder again, which switched to the odd detent and tried to move past 202. It entered the pathological condition, buzzing with the voice coil steadily energized trying to move the arm forward. This did confirm however that the design of the disk drive does not recover to a good state if the advance past 202 is done with a 10 mil step. 

I believe I tried again, getting the arm to 202 but this time I moved 2 cylinders so that the even detent will remain engaged. This time it attempted the move, ended the seek normally and was sitting at 202 afterwards. My conclusion is that the drive should be shut down and restarted if the program ever tries to move beyond 202, since in the best case it is on 202 but it could slip back to 201, try to hold position without a detent in a notch, or enter the pathological case.

Saturday, August 1, 2026

Improved Virtual 2315 Cartridge Facility behavior when drive powered down then back up

SITUATION BEING ADDRESSED

When we have loaded a valid mini cartridge into the Virtual 2315 Cartridge Facility (V2315CF) it should remain active regardless of whether we power the disk drive down and back up. In the real world, a 2315 cartridge that had been inserted in the drive will still be there when the switch if flipped to run. So too, the virtual cartridge should remain available if we spin up the disk drive.

When we have powered down the disk drive, the V2315CF state machine sits in its run level 9, waiting for the disk drive to signal File Ready after the drive believes it has loaded the read/write heads on to the disk platter inside the 2315 cartridge. Once the drive goes ready, V2315CF advances to run level 10 where the 1130 can access the disk however it wants.

Powering down from run level 10 will simply step back to run level 9, since we do have a valid virtual 2315 image loaded into the V2315CF. The next time the disk asserts File Ready after we spin it up, we will go to run level 10 and be able to use the cartridge again from the 1130. 

What was not properly modeled before was that the cylinder number that V2315CF records to match the position of the real disk arm does not go to zero when the drive is powered down (File Ready goes off). That is what the real drive hardware does, but V2315CF naively keeps its previous cylinder number instead.

SIMPLE FIX APPLIED

The same logic in the PICO code that turns the File Ready lamp on or off on the V2315CF main box will now reset or set a flag in the FPGA that forces the cylinder number to 0. Anytime the RDY lamp on the V2315CF is turned off (and the File Ready lamp on the main 1130 console is off), the cylinder will be locked to 0 (home cylinder). Turning on the lamp also unlocks the arm so that seeks from the 1130 can be recorded to set the cylinder to the appropriate number. 

Friday, July 31, 2026

Testing my new seek logic for the Virtual 2315 Cartridge Facility - part 6

NEW APPROACH FOR SHADOWING SEEK IN REAL MODE

I made changes to the logic for the FPGA in the Virtual 2315 Cartridge Facility (V2315CF) to handle the glitches I saw on +Access Ready as it was passed to the 1130 disk controller logic. That feedback signal generated by the disk drive had glitches which looked like spurious changes of state to the disk controller, resulting in failure to drive the disk arm to the intended cylinder in all cases. 

For virtual mode, where the disk drive is not involved at all, V2315CF generates +Access Ready using a timer to match the specification for what the 2310 internal disk drive would do if it were hooked up natively. When an -Access Go from the 1130 requests a movement, the disk waits 5 milliseconds, then drops +Access Ready for a further duration of 10 ms. At the time that it first drops the feedback signal, the logic records how the cylinder number (disk arm position) would have changed based on the step size and direction that accompanied the -Access Go falling edge. 

I now generate the same +Access Ready signal in real mode (where the disk drive is running and performing the seeks being requested) as we do in virtual mode. Thus, we don't care about +Access Ready coming from the disk drive, we just assume that it is performing the seek as requested. This ensures that the V2315CF will interact properly with the disk controller logic and that we record every arm movement that was requested by the 1130.


Thursday, July 30, 2026

Testing my new seek logic for the Virtual 2315 Cartridge Facility - part 5

BETTER LOGIC ANALYZER RECORDINGS AND THEIR RESULTS

I recorded several seek movements - 1, 2, 3 and 193 cylinder movements. What I observed in all of these are glitches or spurious changes of +Access Ready which caused the 1130 disk controller to malfunction. 

For example, here I zoomed in on +Access Ready, the second signal in the trace, dropping low for a short (invalid) period which triggers the disk controller to step the count register and in this case to switch from 10 mil to 20 mil steps. It also confused the controller into turning off its =Access Go request but it turned it back on because +Access Ready was back on. 

An even more flakey case is captured on an attempted seek of 3 cylinders, which actually moved the arm just one step. The count stuttered very rapidly and reached a full count condition that stopped the seek. The drive saw only the single -Access Go with -10 Mil Step asserted, thus it moved only one cylinder. 

The arm physically moved to cylinder 175 when we requested the seek of 193 cylinders, because the count was being updated by +Access Ready glitches. 

The root cause is incorrect +Access Ready signals as seen by the 1130 disk controller. These are also being seen by the FPGA logic in the V2315CF which causes it to miscount in its own way. The state machine behind the seek shadowing function expects +Access Ready to drop 5 milliseconds after -Access Go is set low, for +Access Ready to stay low for another 10 ms and then return solidly to high. The glitches cause the state machine to advance when it shouldn't or fail to advance. 

NEW VERSION OF 2310 INTERFACE BOARD PCB ORDERED TO HELP WITH THIS

The new version has the electronic switch circuits that will directly route the +Access Ready signal coming from the disk drive out to the disk controller logic, so that it does not have to pass through the FPGA at all. The FPGA is able to see that signal from the disk drive, so that it can shadow the arm movements properly. 

I also switched the terminator resistors on the V2315CF to better match the impedance of the 1130 cables and ribbon cables between V2315CF and the 2310 Interface Board. Hopefully these will help with reflections and other signal issues for +Access Ready. 

CHANGE TO FPGA LOGIC TO AVOID THE ACCESS READY GLITCH ISSUES

In virtual mode, the V2315CF generates the +Access Ready signal using timers so that it conforms exactly to how the disk drive should work. It drops 5 ms after a seek begins and returns to high a further 10 ms beyond that. This worked perfectly in testing.

I will send that same generated +Access Ready to the disk controller logic, not the signal coming from the disk drive, so that real mode will not have the improper feedback to trip up the operation of the disk controller logic. 

My shadowing logic must be made bulletproof even with odd behavior of the detected +Access Ready signal, so that it too counts properly. I will drive it off the same timers that generate the signal for virtual mode. If we receive an -Access Go, we will step through the timing without regard to the feedback signal coming from the disk drive. I may test the state of +Access Ready in order to detect failures of the disk drive, but it must be a soft enough check that the glitches won't bother it. 

Wednesday, July 29, 2026

Testing my new seek logic for the Virtual 2315 Cartridge Facility - part 4

UPDATES MADE TO LOGIC OF THE V2315CF

I made a few updates to the C code for the PICO and the Verilog for the FPGA of the Virtual 2315 Cartridge Facility (V2315CF) based on the prior day's testing. I had noticed that a completely valid sequence of steps did not perform in a way that makes sense. The state machine was changed to handle this in a more reasonable way.

The user inserts a mini cartridge containing an image of a 2315 disk cartridge on a microSD card inside the holder, plugging it into the V2315CF main box. The switch is set to Load which causes the V2315CF to read the contents into memory so that the 1130 can read and write to that just as if a physical 2315 disk cartridge had been inserted into the 1130's internal disk drive in an unmodified system.

A placeholder 2315 cartridge is inserted into the disk drive in the 1130, one which is only used to generate timing signals and provide realism. The run switch is turned on for the disk drive and it spins up. After about 90 seconds the disk drive believes it has loaded the read/write heads down to fly atop the surface of the disk platter inside the cartridge. The File Ready lamp lights on the 1130 console and on the V2315CF main box.

After accessing the disk by software instructions run on the 1130, the run switch of the drive is turned off. The File Ready lamp goes out and the drive slows to a stop. The Unlock lamp on the 1130 console lights, indicating that the 2315 cartridge could be removed and another inserted. If, however, we just turn the run switch back on, we should be able to continue using the virtual cartridge we loaded into the V2315CF just as we would continue to use a physical 2315 cartridge in an unmodified drive.

After the drive spins up and waits 90 seconds, the drive thinks it loads the heads and wants to turn on the File Ready lamp. However, it does not light, nor can we access the virtual disk from software. This does not make correspond to what happens with an unmodified 1130 and disk drive, where we could turn it on again and it would be ready for access. I had to unload the mini cartridge and reload it to get the V2315CF to start up the drive and make it ready.

When we load a mini cartridge into the V2315CF, the state machine sits (lets call this state W) waiting for the File Ready signal from the disk drive before it advances to turn on the File Ready lamp (call this state R) and allow access. My change was that when we had been in this second (R) state, but turned off the drive, the state machine returns to that first state (W) where it is only waiting for the drive to turn on File Ready.  

I also removed the Schmitt trigger filter I used with the +Access Ready incoming signal, because that adds additional delay which may have been causing the 1130 disk controller logic to malfunction. That was one possible cause of the seek errors I was seeing - a seek of N cylinders sometimes moved only L cylinders instead, plus the V2315CF believed it had moved to cylinder L-1 instead of L where the arm actually stopped. 

INSTALLED THE LOGIC ANALYZER ON THE DISK CONTROLLER LOGIC


I hooked up the 16 channel logic analyzer to key signals in the disk controller logic that might point me toward the cause of the seek anomalies. I watched the nine bits of the count register, as well as the signal to move the arm (-Access Go) and the feedback signals from the drive (+Access Ready and +Home). I also hooked the analyzer to the signal +Access Control generated during an XIO Seek instruction and the internal control signal -full_word_count that indicates the count register contains all ones. 

When an XIO instruction requests a seek of N tracks from the current location, the value N is inverted and loaded into the count register. That is, every bit is inverted to form the ones-complement of the count from the XIO. The disk controller logic then sends -Access Go signals and bumps up the count register, taking steps of 1 or 2 tracks, until the count is complete because all nine bits of the count register are 1. 

When the count N from the XIO instruction is an odd number, the low order bit of the count register has a 0 in it. This causes the disk drive to move only 1 track in the step (-10 Mil Step signal). As soon as the drive responds to the -Access Go about 5 milliseconds later with a drop of +Access Ready, the low bit is forced to 1. When +Access Ready returns to high, the count register has 2 added to it and -Access Go is again asserted to take the next step. This will always be a 2 track step. Only the first is 1 track and only when the count N is odd. 

This restart of -Access Go is blocked when the count register is all 1s, causing the seek operation to complete. I will look at the interaction between -Access Go, +Access Ready, the 9 bits of the count register and the -full_word_count condition, which should proceed according to the rough timing of 5 ms for +Access Ready dropping and 10 ms after this, +Access Ready returning to high. -Access Go should go off when +Access Ready drops. The seek operation should not end until we have moved the full count N tracks. 

A challenge with the logic analyzer is having enough recorded information to find the defect. The logic analyzer runs fast, but the timescale for a seek is glacial by comparison. Each step takes around 15 milliseconds so a seek of 200 tracks would span 1.5 seconds. The practical limit for recording in the 256MB buffer depends on the sampling rate and number of channels being recorded. For 16 channels being captured, at a sampling frequency F we will have 16/F seconds recorded. 

To watch the signals based on nominal behavior, we have to catch signals that change in the neighborhood of once each 5 to 10 milliseconds. If I set the sampling frequency at 5MHz, then we record about 80 Mbits in a second; with a memory of 256Mbit to hold them I can capture about 3.2 seconds worth. PPPp

Using the rule of thumb that we should sample 10X the rate we expect signals to change, I should be able to see signals changing on the scale of 500KHz with a 5MHz rate. That corresponds to about 2 microseconds. I can't be certain to capture glitches that occur on a shorter timeframe with this recording rate, but I can certainly count the steps and validate the change of the count register. 

If I see that weird things sometimes happen, with counts advancing too rapidly or the hint that the dance between -Access Go and +Access Ready is sometimes happening faster than the 15 ms we expect, I can increase the sampling rate and try some short seeks that still fit in memory until I have visibility of whatever is triggering the malfunction. 

FIRST OBSERVATION FOR A SEEK OF 193 CYLINDERS

I set up the XIO with a seek count of 0xC1 which is 193 in decimal. It is an odd number as well as very long, where previously we had very repeatable failures to seek the entire distance. The logic analyzer set to 5MHz sampling can easily record the entire operation, triggered by the +Access Control signal that is generated as the XIO Seek instruction executes. I can store the contents of the data and use the DSView software to look at it. 

The V2315CF agrees with the disk arm position, which is a significant improvement from last time. Unfortunately, the saved file from the logic analyzer didn't save enough to capture the end, so I couldn't count the seek steps to verify that it matched the seek count. 

ZOOMING IN ON A SEEK OF 3 CYLINDERS

If I set the analyzer to the max rate for 16 channel recording of 100 MHz I can capture about 167 milliseconds of signals, good enough for a seek that should last a bit of 30 ms. If I want to just zoom in on the -Access Go and +Access Ready signal waveforms, plus the +Access Control trigger and the -full_word_count end signal, the analyzer can capture at 400MHz for the same 167 ms. That lets me see signals with good accuracy down to about 20 nanoseconds or two ticks of the FPGA main clock. 

Again, due to my low familiarity with the DSView software that captured the trace, I didn't save enough duration to see the end of any of the small seeks. The only one that I was able to see in its entirety was a seek of 40 tracks, which the trace confirms that it issued -Access Go 20 times and I did verify that the disk arm was moved exactly 40 tracks. 

I also don't have good traces for two signals, which I suspect means that I misconnected the two leads from the logic analyzer since the two missing ones are both on the same SLT card slot. 

However, I did do some individual 1, 2 and 3 track seeks which did move both the disk arm and the V2315CF cylinder variable the correct amount. 

ANALYSIS OF RESULTS

It appears that most of the issue I was experiencing was due to the Schmitt trigger filter which I removed from the FPGA logic. However, it was my impression that the disk arm stopped at around cylinder 161 when it should have ended at 193, but I am not certain. 

I plan to go back to the workshop and more carefully record the signals including ensuring that the traces fully capture the entire duration of the seek command. I was triggering on the wrong signal to start as well. Stay tuned for the update, which will either confirm that the seek is fully corrected or help identify a remaining issue with long seeks. 

DISK DRIVE ISSUE WHEN ATTEMPTING TO SEEK PAST CYLINDER 202

When I do a seek that attempts to move the arm past cylinder 202, the drive should keep the arm at the proper location and report completion. What I am experiencing is a steady buzz with the drive continually attempting to move the arm past 202. Even doing a system reset of the 1130 system does not stop that error. Since the reset will ensure that -Access Go is not asserted, it is an issue entirely inside the disk drive. 

The drive has 'crash stops' fixed to block the arm from moving outward past cylinder 0 (Home) and from moving inward past cylinder 202. These are mechanical stops that are adjustable.

The electronics that moves the arm makes use of an integrator to add up the speed pulses from a tachometer on the arm. When the integrator gets to the preset trigger level, it shuts off the access go latch, turns off +Access Ready, which in turn causes the 1130 disk controller logic to return -Access Go to high. 

In one document, it makes mention of a resistor that will charge the integrator if the arm is not able to move, due to the mechanical stops. It claims this takes about 40 milliseconds to turn off, longer than the 2.4 to 3.8 ms during movement that reaches the integrator trigger level. I don't see that 'resistor' in any of the other documents for the disk drive, but I will have to study the circuitry in detail to see if this is actually implemented. If it is implemented, then that charging path is defective, probably due to an open resistor. 

I should do a test where I attempt to seek 2 tracks in reverse, starting at track 1, to see if the drive malfunctions in the same way. It may not, because the access go latch is turned off my reaching the home cylinder which turns on a microswitch. There is no such microswitch nor turnoff path for reaching cylinder 202. 

The issue may be due to the crash stop being set incorrectly. There is a minimum gap between the stop and the arm when it is at cylinder 202, which might be far enough to let the integrator level reach the trigger point. If the space is too small or non-existent, the tachometer won't record enough pulses. 

I can quickly check the spacing of the crash stop, but if that value is acceptable then I have to dive deeper. I suspect that the paths that charge the integrator are represented in the schematic below, as I have colored the paths to show my speculation. 


When the forward direction is active, transistors Q19 and Q22 apply +48V (green) and ground (blue) across the voice coil in the proper direction. The resistor at the start of the red path has a voltage drop proportional to the current flowing in the voice coil. If the coil is stalled it should increase the current and therefore increase the voltage of the red line relative to ground. This voltage flows through a diode D1 thus it only acts to effect things if the voltage is above the voltage drop (about .3V for germanium) of the diode. 

The red line is injected into the yellow path that runs to both transistors Q5 and Q6 of the integrator. Normally, the pulses from the tachometer will cause Q3 or Q4 to pulse the either Q5 or Q6 to drain energy from the capacitor C1 which is initially charged to +6V and pulled down by Q5 or Q6 towards -3V until the comparator triggers the reset of the accelerator go latch. 

However, with no movement to pulse the tachometer, the voltage from the red line flows through the balanced resistors connected to transistors Q5 and Q6. If the balance of the yellow line is offset by current from transistor Q9 (pink) which is active when the -Access Forward line is low (asserted). This causes some current flow to discharge C1 albeit more slowly than if the tachometer pulses were driving Q5/Q6 actively. 

I struggled to find a component that is not working properly for the injection from the red path, but works properly for normal forward and backward movements of the voice coil, other than diode D1. It would have to be a short circuit to stop the red voltage entering the yellow path. If the gap at the mechanical stop for cylinder 202 is too small to allow the tachometers to drain C1 far enough, then I will try to find diode D1 on the circuit board and test it. 

Tuesday, July 28, 2026

Changing the terminator to improve impedance matching for the Virtual 2315 Cartridge Facility

IMPEDANCE FOR SIGNALS IS COMPLICATED

IBM engineers the 1130 for 92 ohm impedance on cables, although in practice there are ribbon cables, traces on printed circuits, wire wrap on the backplane, and twisted pair wiring involved in the path between the 1130 and its internal disk drive. However, since the engineering goal was matching 92 ohm impedance, I will use that as a working start.

The 2310 Interface Board is where the twisted wire cable from the 1130 and a new twisted wire cable to the disk drive are connected, allowing the Virtual 2315 Cartridge Facility (V2315CF) to sit in between the signals of the 1130 disk controller and the internal disk drive (called 13SD or 2310). It has two IDC 40 pin ribbon cables that run from the 2310 Interface Board to the V2315CF main unit. That unit is a significantly modified version of the RK-05 Emulator from George Wiley, since the RK-05 is a derivative cousin of the 2310. 

CURRENT TERMINATOR VALUES ARE SUBOPTIMUM

The RK-05 Emulator has a terminator board for the signals arriving there over the ribbon cables which uses 178 and 383 ohm resistors pulling up to 5V and down to ground respectively. That provides an impedance of about 122 ohms, which is a mismatch to both the IDC ribbon cable and to the 92 ohm IBM cabling on the 2310 Interface Board. We will use an impedance of 102 ohms for the IDC cable. 

On the 2310 Interface Board, the mismatch between 92 ohms and 102 ohms is not too bad, particularly with the relatively slow rising edges from the 1130 and 2310 electronics over the size of the interface board. However, the mismatch between the 102 ohm ribbon cable and the 122 ohm terminator board is going to lead to some ringing, reflections and power loss. 

CHANGING THE TERMINATOR BOARD TO IMPROVE SIGNAL INTEGRITY

If I switch the terminator resistors to 169 ohms and 249 ohms, still pulled up to 5 and down to ground, it will give me a 100 ohm impedance. I ordered the resistors and will remake the terminator board when the parts arrive.