Tuesday, July 22, 2025

Running IBM disk diagnostic 309 against the Virtual 2315 Cartridge Facility - part 11

 MODIFYING DIAGNOSTIC 309

I first attempted to verify the values being loaded into core memory against the listing of the 2310B Function Test (diag 309), but found differences from the version I had documented. I then decided I had to put in a wait at an appropriate point in order to verify that the seek command is being properly set up. 

COLLECTING DATA ON FAILURES

Fired up the diagnostic program with it set to wait just before it attempts the seek to cylinder 199. This has been failing, stopping at cylinder 196 instead of 199. What I observed from the Input Output Control Command (IOCC), a doubleword pointed to by the XIO instruction, is that the count for the seek was set to 199 as it should have been. 

WHAT THIS RESULT SUGGESTS

Since the IOCC was correct but the drive didn't move all the way to the correct location, this hints at some interaction with the running code or the interrupt handler of the diagnostic, considering that a hand coded XIO seek to 199 performs correctly when executed in single instruction mode. 

DID MORE MANUALLY CODED SEEKS AND SEEING SOME ANOMALOUS BEHAVIOR

I did seeks to intermediate cylinder locations - 160, 180, 190, 200, and 197. In each case, I first did the seek forward from the home location (cylinder 0) and then did a reverse of the same distance. Mostly these worked properly, but I then hit some odd cases.

In one case, although I had set up a reverse seek to head all the way back to the home cylinder, the arm instead moved forward and then pushed on the stop at cylinder 202. In another case, when I moved all the way forward to be at the final cylinder the system no longer responded to seek commands in spite of the Seek lamp on the Virtual 2315 Cartridge Facility (V2315CF) box. 

WILL RE-EXAMINE AND RECODE THE SEEK LOGIC IN V2315CF

I now suspect malfunctions in the state machine in the seek to cylinder module of the FPGA logic. The non-responsive condition must be a stall in the state machine. Also, if it stalls in an intermediate state it might leave the direction signal in a previous state, causing the anomaly where the arm moved forward instead of in reverse. 

I will also think more deeply about the corner cases - making sure my logic will track properly. 
  • when an XIO Seek is issued to back up but the arm is already at the home cylinder
  • when moving forward from a high location more than the remaining cylinders
  • when trying to move forward from cylinder 202
In real mode (the drive actually moves the arm as well as the virtual arm inside the V2315CF), the seek to cylinder logic is needed to shadow the position of the real drive arm, allowing us to know the current cylinder. This is necessary to feed or update the proper data from the virtual cartridge image, that intended for the cylinder.  

The real drive is the one responding with signals such as access ready to the signals such as access go from the 1130 disk controller logic. We sit in the middle and count the movements to maintain a cylinder number that should be synchronized with the real drive arm. 

No comments:

Post a Comment