Sunday, March 29, 2026

Finding remaining issues on my MRAM board

ENHANCED MY FPGA CODE AND RETESTED

I added some logic that aborts read and write operations if it discovers that the +Storage Use signal is not active. This protects against possible race hazards that might start my state machine although the 1130 does not intend to access core memory. Just before it sets bits in the Storage Buffer Register (SBR) for a read and before it writes new data into the MRAM chip, I check +Storage Use and skip over those actions. It does this by waiting long enough for the entire 3.6 microsecond storage cycle to be complete. 

I also added a step in the state machine that turns off the tristate buffer. The changes were simulated and then a configuration file was generated to load into the FPGA which I did when I returned to the workshop. 

Most importantly, since I saw some signs of retriggering two read cycles within one 1130 read cycle, I added delay logic to the state machine so that it let enough time expire after finishing the read or write that it was almost at the time when the complementary cycle (write after read or read after write) would start, thus not allowing the state machine to be tricked into a double cycle. 

Storage Load and Storage Display functions were tested again and behave correctly. The 1130 mode switch was set to Load and Display to manually access storage, which also behaved properly as it did before. 

I then loaded the core memory diagnostic program using my Console Loader enhancement to the 1130 and ran it. Previously it failed with a Parity Check consistently at one point in the code. It still fails the same way. This is only happening with certain instruction sequences, otherwise the machine runs reasonably large blocks of code correctly. 


If it were an issue where the data contents, the Storage Buffer Register bits, were changing midcycle then whatever was written to MRAM would always have correct parity generated on its later retrieval in a read cycle. The SBR should not be changed during the portion of the read cycle where I am emitting the pulses to update the SBR. If a read were to complete but is repeated due to changing SAR bits in between when the data bits begin storing in 85 ns clusters and when the computed parity is stored in the last 85ns cluster, it could cause the symptoms.




Furthermore, looking at the three parity stop cases above, I see that in every case, it is the right halfword that does not agree with its parity bit P2 and it is likely that bit 8 is being spuriously stored in those cases. Thus I may have an error in my printed circuit board where there is a short between pins 8 and 9 on the FPGA (CMOD S7) board connector or between pins C1A11 and C1B11 on the T1 connector socket. I will check this in addition to looking more closely at the code being executed when the parity failures were caught. 

It is possible that there is an issue with some timing related to when the 1130 changes the Storage Address Register and when I begin a read or write, such that the contents are a blend of the old and new address. The fact that bit 8 is always on in this parity stops is suggestive that this is closer to the root cause than mistiming and SAR changes, but I will have to investigate all of it. 



Tuesday, March 24, 2026

1627 Plotter controller card redesign - printed circuit board arrives from PCBWAY.COM

PCBWAY.COM SPONSORED THE NEW PCB, BOARD ARRIVED TODAY

I received 5 printed circuit boards for my new design of a controller card to insert into an IBM 1130 system in order to connect an IBM 1627 Plotter. PCBWAY.COM had contacted me on this blog and offered to sponsor some printed circuit fabrication for upcoming projects. I thought this project would be a good opportunity to try this out for both them and me. 

IBM makes a card that is plugged into a logic compartment in a specific slot to add support for the 1627 to the configuration of the system. It is built with their Solid Logic Technology (SLT) components as a double width card. SLT cards plug into a socket on a backplane using a connector that has two rows of 12 pins. The double width SLT card is 3 3/8" wide. 


SLT backplanes are in a compartment, with space for up to 65 single width SLT cards plus some cables that use the same 2 x 12 connectors. Slots are labeled with columns A through N and rows numbered 2 to 7The IBM 1130 has two swing out gates each of which holds three compartments. The 1627 controller card from IBM (part number 5806223) fits into gate A, compartment C1, in slots M4 and M5. 

The card implements logic to handle the input-output instructions for the device at Area Code 5, which is what IBM assigned to the 1627 Plotter. Asking the plotter to move the pen is done by issuing the XIO Write instruction, with bits in the transferred word assigned to lift the pen off the paper, lower the pen onto the paper, move the pen left or right or move the drum with the paper down or up. 

The state of the Plotter is interrogated by issuing an XIO Sense Device instruction which returns a word with bits assigned for various conditions. The card will raise an interrupt request when the pen movement is complete, informing the software so that it can issue additional movement requests. 

The card implements the XIO Write and XIO Sense Device functions for Area Code 5, requests the interrupt on level 3 when the operation is complete, and sends signals to the 1627 to command the various pen movements. 

My redesigned card uses an FPGA board (Digilent CMOD S7) to implement the logic functions, with the card providing the interface chips for signals to and from the IBM 1130 and signals to the 1627 Plotter. It also drops the 12V power rail from the 1130 down to the 5V level needed for my chips and the FPGA board. 

The most complicated part of the card is the contacts that form the connectors which plug into the SLT backplane. The backplane has 24 pins for each of the two sockets, while the card slides over the pins and locks into position. The locking is mechanically complicated and very difficult to reproduce, with the pins having a hook at the end that locks over a bent contact shaped to form a notch which holds the hook. 

My previous version of the card had contacts that mate with the SLT backplane pins but don't latch. The card therefore backs out of the backplane sockets. I need to work out a method to hold the card down into the sockets until I want to pull it out. 

SWITCHING TO USE PCBWAY WAS PAIN-FREE

I have been using other fabrication houses in the past but found the change extremely easy to make. I could use the same settings and design approaches with KiCAD that I used with other fab houses. The requirements for what has to be sent to PCBWAY.COM were very flexible and accommodated the settings I already used. 

The website is easy to use (at least for anyone used to working with printed circuit fab houses), well documented, and has lots of supporting information if you have questions. I defined the size of my four layer printed circuit boards, accepted all of the default choices for copper weights, layer spacing and so forth, making only one change so that the order number is NOT printed on my boards. My design files were uploaded and the site gave me prices and other options. 

It was very intuitive to request a standard manufacturing turnaround (4 to 5 days for my design) and select which shipping method I wanted. I picked DHL but there were other options including Fedex and UPS. 

QUICK MANUFACTURING AND SHIPPING

They offer the ability to select faster manufacturing turnaround and even quicker delivery than the 3-7 days using DHL, but I found the standard choice and DHL to be good enough. I placed the order and once I coordinated the sponsorship with PCBWAY.COM they began manufacturing in the evening of Sunday March 15th. 

The production was completed and the box went out with DHL by March 19th. The estimated time for standard production was 4 to 5 days, which this met with a bit of room to spare. 

They don't control the shippers nor customs processing, but the box arrived on Tuesday March 24th. Quite satisfactory for an international shipment.  

OPENING THE BOX

This came in a plain white box, shrink-wrapped and there was no rattling when the box was shaken. I opened the box to find some white foam padding inside.


I took out the padding and came to the receipt plus the circuit boards vacuum packed in a bubble wrap material. A bag of desiccant was sealed inside to absorb any moisture that might seep in. This is how printed circuit boards should be shipped.


There were actually six boards inside. My guess is that they had a panel with some errors in someone else's card and remade it, but the area with my board was good. The other person received five boards from six panels, so I got a bonus board. 

I cut open the bubble wrap and inspected my boards. They look very well made, certainly matching my design and right up to the standard I expect from an excellent fab house. 


As you can see, it is a relatively simple board, although I do use four layers to give me a solid ground plane. I feel confident that PCBWAY.com would handle far more complex boards and deliver the same quality. Thank you, PCBWAY.COM, for the sponsorship of this board for my project. 

WILL ASSEMBLE PARTS ON THE BOARD SOMETIME LATER

This project is a lower priority activity which I will work on at times when I am in waiting mode on higher priority efforts such as having ordered additional parts. However, such pauses are frequent so I do expect to put the board together in a month or two. I did order the FPGA board and other parts already so that I could even install the components on it in short order. It will be the soldering of the SLT socket on the top that will take quite a bit more time and adjustment, so that may not be worked on until the priority bumps up. 

Sunday, March 22, 2026

The advantage of leveraging FPGA for 1130 related designs - 1627 Plotter behavior discovery

ATTACHING 1627 PLOTTER TO IBM 1130

The IBM 1627 Plotter is a private labeled and slightly modified version of the Calcomp 565 or Calcomp 563 depending on the model of the 1627. It moves continuous paper forward and backwards over a drum, with a pen that moves left and right along the drum. The drum and the pen move in increments of 1/100 inch to draw graphs and other images. The pen can be raised to move without drawing and then lowered to put ink on the paper. 

IBM supports the plotter by installing a double width Solid Logic Technology (SLT) card into a specific pair of sockets in one compartment of the 1130. This 5806223 card implements the device controller logic to permit software running on the 1130 to draw using the plotter. A cable from the 1627 has two Standard Modular System (SMS) paddle cards that plug into the 1130, one providing 115VAC power and the other connecting signals between the 1627 and 1130. 

The 1627 is a very simple device. Pulses into the machine command movements, which the plotter accomplishes, but does not provide any feedback to the 1130 about movements or status. The only signal from the 1627 connects to an internal power supply that produces -24V, thus the 1130 can see if the wire is at -24V to determine if the 1627 is connected and powered on. 

The controller card in the 1130 responds to the 1130 instruction XIO (execute input output). If an XIO with the device address of the plotter - area code 5 - is issued, the controller card looks at the contents of a memory location pointed to by the XIO instruction.

The first six bits of the word at the memory location are used to request one or more movements. Movements can be combined in one XIO instruction of type Write. Going from left to right, they request:

  1. Drop the pen down onto the paper
  2. Roll the drum upwards (backwards on paper)
  3. Roll the drum downward
  4. Move the carriage with the pen to the right
  5. Move the carriage with the pen to the left
  6. Raise the pen up from the paper
The controller generates the proper duration pulse to the 1627 to cause the movement. It also maintains status of what it believes is happening in the 1627 since there is no feedback from the plotter. When the controller believes the movement has completed it raises a request to the 1130 to interrupt the currently executing instructions and instead execute interrupt handler software. 

An XIO instruction of type Sense Device is used to see the status as the controller card sees it. The card sets bits that the XIO Sense Device will place in the 1130 Accumulator (ACC) register for interrogation by software. When the controller is requesting an interrupt, bit 0 is set to 1; this is interpreted as operation complete. If the 1627 is not powered on or not attach, the lack of the -24V will cause the card to report the plotter as not ready by setting bit 15 to a 1. Finally, if an XIO Sense Device is issued after an XIO Write but before the interrupt is requested by the card, then bit 14 is set to 1 to indicate that the plotter is busy accomplishing some movement. 

The more common model of the 1627, model 1, takes about 3.9 milliseconds to complete a movement of the drum or carriage. Raising or lowering the pen takes about 100 milliseconds to complete. Thus the time from an XIO Write to the interrupt request is 3.9 or 100 ms. Bit 14 reports the plotter is busy during those intervals.

DISCOVERED SUBTLETY IN BEHAVIOR

In reading the 1130 Functional Characteristics manual which informs programmers how instructions and peripheral devices will behave, I discovered something I had missed in my earlier implementation. If the 1627 is not powered on or not connected to the 1130, when an XIO Write is executed for the plotter, the machine will immediately generate an interrupt request. Thus an XIO Sense Device immediately after the write will return bits 0 and 15 set to 1 without the time delays that occur if the request went to an operational plotter. 

VALUE OF A SOFT IMPLEMENTATION USING AN FPGA ON THE CARD

My first implementation of a substitute for the 5806223 IBM card used multiple integrated circuits including timers and other combinatorial logic. I switched to a card that uses a Digilent CMOD S7 FPGA as a daughterboard and just a couple of glue logic chips. 

This makes it very simple to change the functionality to include the behavior when the 1627 is not ready so that it does trigger the interrupt request immediately after an XIO Write. Had I not used the FPGA which can be reloaded, as in the earlier implementation, I would have had to redesign and probably manufacture a new printed circuit board. 

Friday, March 20, 2026

Hoping to finish the testing of the 1130 MRAM core memory replacement board

RETESTING STORAGE LOAD AND STORAGE DISPLAY WITH UPDATED FPGA LOGIC

After the changes I made to delay the write into the MRAM chip in order to allow the Storage Buffer Register (SBR) to complete its setting of the updated value, I loaded that into the FPGA board. I then worked through testing to see if the board is performing as intended. 

I used the Storage Load and the Storage Display switches on the machine which will loop repeatedly through memory storing the pattern set in the Console Entry Switches (CES) or displaying the contents of memory respectively. I checked to see if I could load memory with patterns including the value 0xFFFF which has the maximum of bits with a 1 value, then read them back properly. 

This worked perfectly for a variety of patterns including 0x0000 and 0xFFFF so I moved on to the type of test that filed before

RETESTING LOAD AND DISPLAY MODE USE OF MEMORY

The next set of tests made use of the rotary mode switch of the IBM 1130. Pushing the Prog Start button when in Load mode will store the value in the CES into the next storage location. Pushing the Load IAR button in Load mode will set the next storage location to the address set in the CES. Pushing the Prog Start button will display the contents of the next storage location in the SBR lights on the console. 

This too worked perfectly. I was able to load ranges of data into chosen memory locations, validate the address bits work properly, and do other tests. It appears that the new board is working properly now, so I chose to move on and run some IBM diagnostic programs. 

RUNNING 1130 MEMORY DIAGNOSTICS

IBM provides diagnostics to run that verify different aspects of the IBM 1130, including tests to confirm that core memory is working properly. I used the memory loader function I created and installed on this 1130 machine in order to load the memory diagnostic in core memory, then set the machine to the start address and pushed Prog Start while in the Run mode to let it execute. 

This consistently fails with a Parity Check error at one point in the routine. This could be a consequence of some device controller card jamming bits into the SBR when it should not, or it could be a failure in my board. The error means that the data stored into the SBR by my board does not agree with the parity bits generated by my board. This needs more investigation

Next I attempted to run the CPU Diagnostic which exercises every instruction in all their modes and variations. This consistently stopped with an error while testing the Shift Left Arithmetic (SLA) instruction. However, when I hand stepped through the routine I found that one of the instructions in the routine did not match the diagnostic program listing. I restored that to the correct value but when I reran the diagnostic from the start, it again had the wrong data in that address. This has to be caused by some other portion of the code storing in the wrong place. 

I displayed memory in many spots and found what had been loaded by my Console Loader matched exactly, but I didn't exhaustively check every location after loading. My console load triggers Cycle Steal operations in the 1130. These are typically used by faster peripheral devices to transfer in an entire record of data as it is ready without interrupting the program currently executing. The machine will pause the processor at the end of a memory cycle, holding at clock step T7. It then uses the X clock to take a memory cycle, with the peripheral controller (and my loader) providing both an address and a data word for the memory access. When the X clock gets to step X7 and there are no more cycle steal requests, the processor continues with the next memory cycle by advancing to clock step T0. 

There may be a timing issue with cycle steal and my memory board or an issue with my console loader use of cycle steal. This will take some investigation to get to the root cause so that I can finally get this memory board signed off and the project finished. 

Thursday, March 19, 2026

Testing the 1130 MRAM board on the IBM 1130

STORING ADDRESS AS CONTENTS

I made use of the rotary mode switch Load and Display settings to place bit patterns into chosen memory locations. I set the address in the Console Entry Switches (CES), push the Load IAR button to cause the 1130 to use that as a memory address, then set a bit pattern in memory and push Prog Start while in Load mode to put the bit pattern into the location I previously set. Setting the IAR and pushing Prog Start while in Display mode will show what was in that memory spot.

I decided to put the address in the CES, push Load IAR, then push Prog Start so that the content of the memory location is the same as its address. I did this for all 13 bits of an address - 0x0001, 0x0002, 0x0004, 0x0008 etc -so that I could confirm that addressing is working properly. I also set some complex addresses (more than a single 1 bit on) and stored the value there, just for completeness. Everything worked right with this type of testing. 

THINKING ABOUT HOW THE ERROR MIGHT ARISE

I am having a hard time imagining an error mode in my board that would create the observed symptoms. Every once in a while (in the Storage Display mode where the 1130 system loops rapidly through all memory addresses) a word will be read having the first three bits as zero in site of having stored it as a word with all bits 1. The 1130 recognizes this by stopping with the Parity Error lamp illuminated. 

The 1130 stores two parity bits with each word of 16 bits. One parity bit (P1) covers the first 8 bits of data and the other parity bit (P2) covers the second 8 bits. The machine requires odd parity, meaning that the number of bits that have a 1 value must be an odd number. For example, if a set of 8 bits have the value 00010100 which has an even number of 1 bits, then the associated parity bit is set to 1 so that the collection of nine bits have an odd number of 1 bits. If the set of 8 bits is 00000001 then the parity bit is set to 0 since we already have an odd number. 

Because bits 0, 1 and 2 are retrieved as 0 instead of 1 (0x1FFF instead of 0xFFFF) there is now an odd number of bits that are 1 in the first 8 bits of the word. Parity bit P1 should be off for this value but it is read as having a 1 value. That caused a parity error. 

My board does not actually store the parity bits in memory. Instead, it generates the value of P1 and P2 from the data bits that came out of memory. Thus, if memory had indeed returned 0x1FFF then my board would have made P1 be a 0. Since the 1130 saw P1 as a 1 value, it means I read the correct value 0xFFFF but what made it into the 1130 Storage Buffer Register (SBR) as 0x1FFF and 1 for both bits P1 and P2. 

This means what is failing is the process of setting the SBR to what was retrieved. In the 1130 system, IBM designed it so that the core memory will produce a pulse which pulls a signal line down to 0 if the core memory bit had a 1 value stored, but does nothing if the value in the core memory bit was a 0. Those Sense Bit x lines have a pull up resistor in the 1130 that keeps them up at 3V (logic 1) and the core memory logic acts like an open collector gate, pulling it down to ground level (logic 0) for a short interval to indicate that the memory bit was a 1 value. 

The SBR register is cleared to zero before the read and then any of the Sense Bit x lines that have a negative going pulse will turn on the flipflop for that bit position in the SBR. My board uses transistors to pull the Sense Bit x line down to ground when I am attempting to set a 1 value into the SBR bit position. 

The circuitry inside the SBR that deals with the Sense Bit x signal has charged up a capacitor which is discharged through the negative going pulse from the core memory - the discharge current causes the IBM flipflop to turn on. It takes about 8ma of current flow to cause enough current in the IBM circuitry to turn on the flipflop.

Previous versions of my board would fail if too many bits had a 1 value - too many of the Sense Bit x lines were sinking 8ma at the same time. Some kind of analog issue that I never did track down. My new design tries to handle this by skewing the pulses on the Sense Bit x lines over multiple FPGA clock cycles (a clock cycle is 83.33 nanoseconds). 

The current implementation sets three bits at a time in an FPGA clock cycle, so that the SBR is set across six clock cycles to turn on all 18 possible 1 bits. I do this in sequence, with the first cycle covering bits 0, 1 and 2, the second cycle covering 3, 4 and 5, and the last cycle covering bits 15, P1 and P2. My hardware on the board allows me to cover each of the 18 Sense Bit x signals independently, but I decided to group them into sets of three in order to minimize the time it takes to set all the bits. 

Seeing that the failure was always that bits 0, 1 and 2 did not set, indicates that the problem is likely in my board since that is what happens in one clock cycle of the state machine in the FPGA. All the subsequent cycles work properly, so that all the other bits are turned on in the SBR. 

I can't think of a way that the state machine, which should invariably advance sequentially through the cycles, would skip over one of the states much always fail by skipping the same state. That means I have to assume that it is emitting the control lines for bits 0, 1 and 2 as it should. 

The chip that triggers the Sense Bit x pulse (when the control line is asserted and the memory bit returned is a 1) handles four bits at a time, 0, 1 2 and 3, so that can't be the common cause. 

This feels like a timing issue, where something is marginal in the timing I have set up so that the first cycle of Sense Bit x pulses are failing. This could be timing relative to the 1130 logic circuits or timing relative to the MRAM chip or tristate buffer chips on my board. 

This could be because the SBR is still in the process of being reset because I am too early, or it could be because that the data bus on the MRAM memory chip has not emitted the values yet but it completes driving those bits before the last cycle where the P1 and P2 bits are set. In fact, those two are not stored in the SBR like the 16 data bits, instead it sets two flipflops in the parity checking logic but is completely analogous to the SBR setting process. 

The MRAM data bus is bidirectional. When the notG control line is asserted low, the chip will drive the current word's values on the bus. My tristate buffer chips should be set to high impedance so that they don't interfere with the data driven from the MRAM. When writing into MRAM, the tristate buffer chips
are set to drive values onto the MRAM data bus, while the notG control line is left high or unasserted. 

I can image three cases that might cause problems for a short period - having the tristate buffer driving data at the same time as the notG is asserted, or if the MRAM has not yet fully activated the data bus after notG is asserted low, or if the process of reading the contents of a location in MRAM has not yet completed so that the data bus values are not yet settled.


I switch on the notE control in one state machine cycle and assert notG control line in the next cycle. The issue with the first three bits is occurring in the cycle right after I have asserted notG. Per the timing chart above, the read is complete during the first cycle (35 ns into the 83.33 ns cycle), and the outputs should be on the data bus a mere 15ns into the second 83.33 ns cycle. The data should be present almost 70 nanoseconds before the cycle begins that emits the Sense Bit 0, 1 and 2 pulses. 


The only thing that could result in the data not being present for the cycle that emits the first three sense bits is if the data address from the 1130 system were to be changing somewhere between the cycles that assert notG and emit the first three bits, which would trigger another 35 ns memory access as below:


The 1130 system should hold the address lines from the Storage Address Buffer (SAR) steady before it asserts the +Storage Read signal that starts my FPGA state machine. It takes three cycles for that signal to make it through a serialization chain of flipflops that protect against metastability problems, then another two cycle before we start the one that might be sensitive to changing SAR values. This should not happen unless it is a hardware defect in the 1130. 

The time from disabling the tristate buffer until it reaches high impedance state is less than 15 ns. This control signal was changed a couple of FPGA cycles before the read activity takes place, thus this shouldn't be a timing factor either. 

RECODING FPGA FOR OTHER REASONS SO NEED TO OBSERVE AGAIN

I will be recoding the FPGA to improve some behaviors so I will need to retest to see if the anomalies went away or continued or changed. One thing I changed was to use a clock generator module in order to improve the FPGA cycle time down to 5ns allowing much finer grained timing. 

With this newly coded FPGA logic, I could use the Storage Load and Storage Display CE switches to cause the machine to loop repeatedly through memory storing the pattern on the Console Entry Switches (CES) or displaying the content of memory. It now correctly reads back a word with all bits 1 (0xFFFF) which is a great improvement. In fact, it stored the pattern I set on the CES and read it back in all cases I tried.

I then turned off those CE switches and used the machine's rotary mode switch in the Load and Display modes. Pushing Prog Start while in Load mode will take one memory cycle and write the contents of the CES into the next word location in memory. Pushing Prog Start while in Display mode just reads back the word but doesn't change it. While in Load mode, pushing the Load IAR button will set the next word address to what is in the CES, thus I can arbitrarily pick memory locations for reading and writing.

In this mode, I had mixed results. I could use Load to set values in locations but in Display mode, sometimes the word still had many bits set to 1 that had been the previous contents of the address. In other words, since I had looped setting all addresses to 0xFFFF previously, if I tried to load a different pattern into the location from the CES, I might find my bits merged with some of the prior bits. 

This looks to be a timing issue with the write part of the memory cycle. That is, when the CES value is gated into the Storage Buffer Register (SBR) it should have first been cleared to zeroes before the CES bits are merged in via an OR. It appears that I may be writing too early in the 1.6 uS portion of the memory cycle, before the clear of the SBR has completed. 

To attempt to correct this, I again modified the FPGA code to delay when I started processing the write until about 525 ns into the cycle and perform the write over 65 nanoseconds. This still completes well within the write cycle but doesn't try to store the SBR into my MRAM chip until partway through clock cycle T5. 

If this isn't enough, I could advance even further into the write half of the memory cycle. This is the big advantage of using an FPGA for my board, where I can tweak the timing without having to change any hardware at all nor the printed circuit board itself. 



Tuesday, March 17, 2026

Finished construction of the new 1130 MRAM board, part 3

SOLDERED DOWN THE REMAINING 24 PINS TO COMPLETE THE BOARD

Assembly is just the beginning of the work before this can be hooked to the 1130 and tested. All the solder joints have to be tested and each net checked against shorts to adjacent leads or other errors. 

CAREFUL MICROSCOPE INSPECTION TO LOOK FOR SOLDER BRIDGES

I put the board under my stereo microscope to look carefully at all the chip and part connections. Because these surface mount parts are small, the spacing between leads is tiny. It is easy for a solder bridge to short together adjacent leads. A bit of solder wick will pull out the excess solder, sometimes requiring a touch up with the manual soldering tool to ensure a good connection of the leads to the individual pads. 

I found four small solder bridges either during this inspection or while testing nets as discussed in the section below. They were easy to fix. 

CONTINUITY TESTING ALL THE NETS BETWEEN PARTS

I used my PCBite probes to check continuity between parts for each net. This tool has small pins on flexible arms that can set atop a lead and connect it to a wire to my ohmmeter. Using pairs of the arms I listened for a beep that showed a good path between the leads of the components. This will find poor solder connections from the lead to the pad on the PCB, as well as validating that the traces are correct. 

I found a lead that had no connectivity to the pad beneath, which I corrected. As well, some of the solder bridges I found were discovered in this testing and corrected. 

FIRST TEST ON THE 1130 SYSTEM

I hooked up the power wires from the 1130 (+12V and ground), then plugged in the three SLT cables to the connectors. I powered up the system and did some load and display operations on the computer. 


It appeared to be working properly even with all 16 bits of the word set to 1. I tried many variations with no sign of malfunction. I also saw that the phantom issue is gone - the one where address zero is corrupted on a Reset. 

I then used the Storage Load and Storage Display functions of the machine to mass load all addresses of memory with various bit patterns. In Storage Load, the pattern on the Console Entry Switches (CES) are stored in memory, once the Prog Start button is pressed; the machine loops repeatedly loading the data until it is stopped. In Storage Display, the machine will repeated loop through all addresses reading memory once Prog Start is pushed.

I found that almost every pattern worked properly. The only errors occurred when I loaded a pattern of 0xFFFF and then displayed it. The machine would loop and stop randomly at some point with a parity error. Any other pattern that 0xFFFF has less than 18 bits flipped on, but this one loads 16 data bits with 1 and both parity bits are also set. 


The earlier version of the board would fail with fewer bits set to 1. Whatever was causing that issue is greatly ameliorated with the new design but it seems that something is so marginal with 18 bits of 1 that it fails once in a while. That is, the machine reads back correctly on almost every one of the 8,192 words, but does fail.

I need to do more testing including capturing data with the scope and logic analyzer to figure out why I am seeing any failures at all and look at the conditions surrounding the malfunctions. I did notice, however, that the failures had a common characteristic. Bits 0, 1 and 2 are read back as 0 but were written as a 1. With the lost bits, the parity bit for that halfword should be a 0 but it is generated as a 1 which triggered the parity error stop. 

The parity bits are generated on the fly during the read operation, which tells me that the MRAM memory device returned 0xFFFF but didn't set all 16 bits into the Storage Buffer Register. I do note that bits 0, 1 and 2 are handled in one FPGA clock cycle by my logic, although electrically the FPGA turns on three separate output signals, one for each bit position.  Perhaps something is causing my FPGA state machine to skip that cycle every once in a while. 

I will look over my Verilog code and think about possible issues that might produce this result. I can then toughen up the code, generate a new bitstream and load it into the FPGA board that is mounted on my printed circuit board. 

Monday, March 16, 2026

Constructing the new 1130 MRAM board, part 2

SOLDERING THE INTEGRATED CIRCUITS ONTO THE BOARD

The four remaining chips, two tristate buffers, the MRAM memory device and a quad NAND gate, were soldered down first.  These were also installed using solder paste, a metal stencil and my hot air gun. 

Based on a suggestion by one of my regular blog readers, I have ordered a hot plate to work atop while using the hot air gun and solder paste (for future soldering work). I tend to put on paste one chip at a time, then flow the solder paste, which I thought would be slowed by having the entire board heated. I will need to adjust my workflow for soldering to add in the hot plate. However, for chip removal it will always be better than starting with a cold board and directing the hot air gun to loosen each part. 

OTHER PARTS ADDED TO THE BOARD

Next up were 18 surface mount transistors plus 18 pullup resistors. These were all hand soldered with a traditional soldering tool. Once all the active parts were in place, I moved over all the gold pins that form the three connectors for the IBM Solid Logic Technology (SLT) cables. Each connector has 24 pins in two rows of 12. 

I had to extract all 72 pins from the prior board and clean them up, before I could install them in the new PCB. I used a connector I stripped out of an independent vendor's add-on product that would connect to 1130 or 360 systems. This served as a guide for all the pins, to keep them aligned until I soldered them in place, so that the IBM cable connector will slide smoothly onto the pins. 

The last item to add will be the FPGA board which plugs in with the USB connector at the outside left edge of the finished assembly. I had previously programmed the Digilent CMOD S7 board with the control logic to drive my design. 

I called it a day before finishing, not having added the third connector, but everything else is assembled on the board and ready for inspection and then testing. 

All chips, transistors, resistors and capacitors are installed

24 pins to be removed - one SLT connector - from old board

Pins from three connectors removed and ready for new board

Similar connector to the SLT 2 x 12 cables

The spare connector positioned in place as guide

Pins will be inserted through board into guide connector

Completed installation of 24 pins into one connector

FPGA board sitting in place on board


Sunday, March 15, 2026

Constructing the new 1130 MRAM board today, part 1

FIRST STEP WAS THE POWER SUBSYSTEM

I installed the two linear voltage regulators which drop the 12V input power to deliver the two power rails for the board, 3.3V and 5V. A quick test with a bench power supply verified that they worked properly. I also installed the decoupling capacitors.

In addition to the power supply parts, I installed the power on reset logic since it sat beneath where the Digilent CMOD S7 FPGA board would be mounted. I soldered down sockets into which the FPGA board will plug. Below you can see the decoupling capacitors on the back side of the printed circuit board, plus a pair of resistors that drop the incoming +12V to an acceptable level to feed into the FPGA as a 'power available' signal. 


SOLDERING THE INTEGRATED CIRCUITS ONTO THE BOARD

I took advantage of the stencils I had from the prior invocation of the board to solder each chip using solder paste and a hot air gun. There were 13 chips to add to the board, but in today's session I only finished installing nine of them (excluding the power on reset and the linear voltage regulator chips). 

Five74LVC08 quad 2 input AND gates produce the 16 data and 2 parity output pulses. These will drive BVS52 transistors to pull down the 1130 sense output lines which in turn flip on a bit in the Storage Buffer (B) Register. Four 74HC86 quad XOR gates generate the correct parity for each 8 bit half of the 16 bit data word. These were installed today. 

In my next workshop session, I will solder down a 74HC00 quad NAND gate which implements a bit of glue logic for the design, two 74LV240 octal inverting tri state buffer gates, and the MR0A16A 1Mbit Magnetic Random Access Memory device. Once these are in place, the 18 BVS52 transistors with 18 pullup resistors will be soldered down. The final step is to transfer the 72 gold pins that form the three connectors into which the 1130 memory cables are plugged. 

Saturday, March 14, 2026

Redesigned 1627 Plotter controller card while waiting for my MRAM board and parts

WAITING ON ALL PARTS TO ASSEMBLE THE NEW 1130 MRAM BOARD

I already have the printed circuit boards from JLCPCB and most of the components from Digikey, but the final shipment won't arrive until Monday sometime. In the interim I focused on an older project which also had some challenges using timer chips like my earlier MRAM design.

REDESIGNED BOARD FOR PLOTTER USING FPGA

I chose to use another Digilent CMOD S7 board mounted on a PCB to implement a revised design. I whipped up the design in KiCad yesterday. Today, I wrote the Verilog for the controller function in the FPGA and simulated it to verify proper operation. 

This greatly simplifies the board, as it only has a linear voltage regulator and two open collector hex inverter chips. One of the open collector chips drives the output signals to the 1627 plotter, basically pulling a line down from 12V to ground to command various plotter motions. The other chip pulls 1130 signal lines down from 3V to request an interrupt and to output the status bits when an XIO Sense Device command is issued. 

I am waiting to hear from PCBWay, who had offered to do a sponsorship with me but due to timing urgency, it wasn't a good fit while I was working on the MRAM project. However, I don't have time urgency on the plotter effort, since I will be focused on the 1130 MRAM project next week and then the 2310 Virtual Disk Cartridge project after that. Once the boards arrive and I have a suitable lull in the workshop, I will put together and test the card that acts as a driver for an IBM 1627 Drum Plotter. 

Wednesday, March 11, 2026

1130 MRAM testing observations while I wait for the new board for the updated design

PCB AND PARTS ARRIVING ON MONDAY

I had redesigned the board to utilize an FPGA to drive all the timing, dropping the use of timer chips and simple combinatorial logic. The FPGA code was developed, simulated, and I loaded the bitstream into the new Digilent CMOD S7 board that will be installed of my new PCB.  The PCB blank and some final components are due to be delivered on Monday, so that on Tuesday I can build the new board to begin testing. 

OBSERVATIONS DOING MANUAL DISPLAY AND LOAD MODE CYCLES

When I set the rotary mode switch to Load or Display and push the Prog Start button, the 1130 takes one memory cycle and either loads memory with the value set in the Console Entry Switch (CES) toggles switches or reads the contents of the memory location and shows it on the SBR lights. 

I was able to load patterns and get reliable readback until I got over about five 1 bits in a word. At that point, some of the bits did not display correctly when read back. A pattern with four 1 bits would be reliably written and read back - this may be more than four bits because there may be parity bits in addition to the data bits that have a 1 value. 

The new design will set only three bits at a time, skewing the setting across multiple 85 ns cycle times of the FPGA. Thus whatever is causing the issue observed should not recur. 

When words with a high number of 1 bits are loaded, I would observe that when displaying, some words would come back as all zeroes while others either had the pattern or the pattern with some of the 1 bits missing. 

The final anomaly that I observed was that when resetting the 1130 using the Reset button, from time to time the value of the word at location 0 was erased instead of having its previously written value. This may be a fault caused my prior design where it reacts poorly to the instantaneous changes in signals during the reset and as the processor comes out of reset. 

Since my new design changes how the control signals are generated, now using the FPGA onboard, this issue is probably not going to recur. An advantage of having shifted to an FPGA for timing and control signals, is that I can change the behavior with changes to Verilog code and update the FPGA board without requiring hardware changes. 

Looking at 6V regulator SMS card to resolve 1130 power issues - part 3

CIRCUIT OPERATION TO MAINTAIN 6V OUTPUT VOLTAGE

The comparator that controls the voltage of the 6V supply is formed with a pair of 026 transistors sharing an emitter resistor. One is fed a 3V reference voltage from a Zener diode, while the other side is fed a fraction of the current output voltage. 

The reference voltage (3V) acts on the base based on the emitter voltage, which is produced by the voltage drop on the emitter resistor from the summed currents flowing through the two 026 transistors. As the current goes up in the emitter resistor, the current draw of the reference voltage side decreases meaning that the other 026 has its current increased due to the output voltage being above its 6V target. If the output voltage drops below 6V, the current in the reference voltage side has to increase since the emitter resistor current lessens. 

It is the output current of the reference voltage side 026 that drives the power transistors through an amplifier to pass more or less current to the output. Voltage drop in the load is based on the current flowing through it, thus more current increases the voltage on the output terminals and less current causes the output voltage to drop. 

OBSERVED BEHAVIOR DURING FAILURE - WHEN THE CIRCUIT BREAKER WILL TRIP

The output voltage is oscillating (with small voltage swings) around an average of 3V when I see the regulator then trip its circuit breaker. This happens when I power up the system when it has been previously powered and turned off for only a short period. 

This implies that the output current is lower, since the voltage is caused by voltage drop in the load (1130 circuitry fed by this regulator). This is paradoxical however because if the current from the regulator is low, then the draw through the circuit breaker should also be low. Instead, it trips in about one second. Thus, a defect in the regulator that causes it to feed insufficient current to the load should not produce the breaker trip. 

AREAS TO LOOK AT THAT MIGHT CAUSE THE SYMPTOMS

If the load were to demand far too much current (partial short), that would result in the observed symptoms if the regulator were unable to push enough current to meet the demand. The regulator has a capacity of 24A at 6V, based on using six IBM 108 transistors in parallel. We would have to see a demand well above that, perhaps 50A, to sag to 3V and trip the circuit breaker. This would be a failure out in the load, not in the regulator.

However, using my LTspice model, imperfect as it is, I was able to reproduce the failure mode if one of the 026 transistors were to form a short across the emitter and collector. It is the transistor that samples the output voltage. I turned my attention to the 026 transistor. 

STUDYING 026 TRANSISTORS ON THE CURVE TRACER

I grabbed a couple of 026 transistors from a donor board and watched them on the curve tracer to see what a good transistor looks like. I then removed the 026 transistor in question from the regulator and watched it. I also examined the remaining 026 from the regulator since I want some balance between the two transistors if I have to replace one. 

There was no problem at all with the 026 transistors when I tested them. I checked all the transistors on the board and they all worked properly. Same with the Zener diode and the regular diode. Based on this I instrumented the board so that I could observe how various points behave when the card is both working correctly and misbehaving. See my prior post where I was unable to reproduce the failure mode once the instrumented card was reinserted in the regulator. 


Tuesday, March 10, 2026

Watched pot syndrome - can't get the 1130 6V power regulator to trip now that it is instrumented

REMINDER OF THE 6V REGULATOR ISSUE

The 1130 logic rails are +3V, +6V and -3V in addition to some special voltages for other purposes. DC is produced in a power supply unit and fed to voltage regulators that produce the three logic voltages. The regulator for +6V is where the issues arise. A circuit breaker on the regulator will trip if the current demand is too high; in addition it will trip if the output exceeds a voltage threshold and triggers an overvoltage clamp. 

If the 1130 has been previously powered up but is turned off for a relatively short period, when it is turned on again, the circuit breaker would trip. I monitored the current being demanded through the regulator and found that it did NOT go to high levels when the problem occurs. I verified that the overvoltage clamp card was not firing. 

When I watched the output voltage, I would see 6V during normal operation but when the circuit breaker trips, the output was around 3V and I could see it oscillating a relatively small amount around that average. 

I replaced all the resistors on the regulator control card and tested some of the transistors on my curve tracer to see if I could find a semiconductor that would fail if it was hot from prior operation. I didn't find anything suspicious. 

INSTRUMENTED FOUR SPOTS ON THE REGULATOR CARD

Circles around four wire taps

I soldered wires to four spots on the regulator card, in order to have four traces recorded on my oscilloscope. I wanted to see how the circuit behavior changed when it went to the 3V oscillation before tripping the circuit breaker. 

MANY POWER CYCLES ATTEMPTED WITH NO ISSUES ENCOUNTERED

I hooked up the scope and powered up the 1130. I then tried for an hour to run it for various lengths of time, power down for a short while and bring it up again. It NEVER tripped the CB nor dropped the output voltage to 3V as it had been. Everything I tried failed. 

This is an example of the watched pot that never boils. At this point I have to assume that something I did while tacking on the four wires to the regulator board is the reason that it no longer failing. That might be a cold solder joint or a cracked trace. I will have to examine the board very very closely at the four points where I added the wires. 

New rotate and tilt tapes for the 1053 typewriter of the System Source Museum's 1130

TAPES SNAPPED ON THE CONSOLE PRINTER OF THE SSM 1130

The console printer (1053) of the 1130 computer is based on the IBM Selectric typewriter. It has a rotating and tilting typeball that moves across the print line while the paper stays fixed in position rolled over the platen (roller). The typeball on the moving carrier will spin or tilt to type one of the 88 characters on the ball. 

A pair of metal tapes connect to the moving carrier and are threaded over pulleys on the two sides of the typewriter - when the pulleys pivot they turn or tilt the typeball regardless of where the moving carrier is sitting along the print line. There are reasons why the metal tapes may break, thus requiring replacement. A misadjusted typewriter can stress the tapes, the tape might have had a crease that leads to metal fatigue breaking, or people turning the typeball by hand might put too much tension on the connectors at the ends of the tapes. 

I suspect that visitors to the museum have played with the typeball one time too many and caused the tape to snap during operation, as the broken tape and its partner had signs of such abuse. It is very tempting to touch the typeball, a natural reaction to curiosity for someone seeing the Selectric mechanism operating for the first time. I think it will be important to add a plexiglass box over the typewriter to protect the ball from someone twisting it. 

BOUGHT NEW TAPES AND INSTALLED THE ROTATE TAPE FIRST

The museum dropped off the 1053 during a recent trip to Florida and I removed the old tapes. I ordered new ones, as fortunately there are still plenty of spare parts available on places like eBay. Today I installed the tape that spins the ball. 

The typeball is mounted on a coil spring to provide rotary tension. One end of the tape is connected to the disc that holds the coil spring. First the type ball is turned to wind up the coil spring, then the typewriter is triggered and manually cycled to the halfway point of a typing stroke, where a lever locks the ball from turning; this keeps the tension on the ball while the tape is installed.

One end of the tape has a T shaped hook that fits into a slot on the coil spring holder disk. It is threaded out of the movable carrier and routed to the left where a pulley is mounted on a lever. A selection mechanism in the typewriter will pivot the lever and pulley to one of eleven positions, which are intended to rotate the typeball left or right up to five steps of about 16 degrees.  

Slot for T shaped connector

The tape goes round the pulley and then is routed from left to right side of the typewriter passing underneath the carrier. As the pulley pivots out or in, it pulls on or releases the tape to cause the typeball to turn.

Left pulley on lever

On the right side of the typewriter frame is a lever with a pulley on the end. The lever pivots to move right or left, which would pull on or release the tape as it pivoted. This pulley pivots between two positions, intended to place the typeball in the middle of one or the other hemisphere, so that it can access one of 44 characters on that hemisphere; traditionally the hemispheres were for upper case and lower case characters. The tape goes around this pulley and then routed back to the left. This end of the tape has an eyelet attached which will hook over a screw on the right side of the carrier. 

Right pulley and shift lever

Once the tape is correctly routed and attached to both the disc and the carrier screw, the typewriter manual cycle can be finished to release the lever so the coil spring can wind up the tape as the ball turns. With the tape in place, the lever on the left frame selects a rotational position for the ball and the right side lever pulls enough to spin the ball 180 degrees to pick which hemisphere to use. 

Tape path

NEXT STEPS - TILT TAPE AND ADJUSTMENTS

Another tape with pulleys is used to tilt the typeball so that it selects one of four rows around the ball. A typeball has eleven rotary positions and four rows on a hemisphere, thus containing 44 characters on each side and 88 for the full typeball. I have to attach the tilt tape on my next visit to the workshop.

The metal tapes can stretch very slightly over their lifetime, plus manufacturing variances mean that the position of the typeball with replaced tapes may not be at the exact same position as it was with the prior tapes just before replacement. As a result, a sequence of adjustments must be made to ensure that the typewriter will tilt and rotate the ball so that the character to be typed is centered vertically and horizontally as the ball strikes the ribbon and paper. This will be done after the other tape is installed.

Sunday, March 8, 2026

Code written and simulated for FPGA in new 1130 MRAM core memory replacement design

ROLE OF THE FPGA

The FPGA produces all the control signals that drive the other chips on the PCB. I can update the FPGA and modify the control signal behaviors without having to create new versions of the PCB. 

The Magnetic Random Access Memory (MRAM) chip has three control signals that are used to cause it to read the contents of the currently addressed word and put the bits on the data bus or to write the values on the data bus into the currently addressed word. These are the E, W and G pins which are active low and must conform to timing specifications and sequences defined for the MRAM chip. 

The MRAM data bus is bidirectional, either outputting the value read from memory or accepting new data to write into a memory location. The control pin G sets the data bus to output the data values. Data that we want to write into the MRAM chip, coming into the PCB from the 1130 Storage Buffer Register (SBR), has to be driven onto the data bus, but not when the MRAM is generating the bits while signal G is active. A Gate control signal is used to control a buffer chip, so that it is either high impedance or driving the SBR bit values into the MRAM data bus. 

During a read cycle, after the MRAM has put the memory word on the data bus, output chips can pull the 1130 Sense lines low to set an internal 1130 register bit to 1. They will only do this if the bit value on the MRAM data bus is a 1, and only when a control signal allows the output to occur. Testing prior versions of the PCB has exposed issues where the output bits work well if the total number of 1 bits in a word is small, but above a certain number of 1 bit values, the word is not correctly stored in the 1130. 

To help with this, the FPGA has individual control signals for all 16 data bits and the two parity bits for the word to be output. My first version of the FPGA logic will turn on control signals for three bits at a time, skewing the transfer of the word value into the 1130 across six clock cycles of the FPGA - each cycle being approximately 83 nanoseconds long. I could changes this to nine cycles of two bits each, or some other combination. However since a read cycle is only 1.6 microseconds long, trying to put each of the 18 bit values in its own clock cycle would take almost the entire read cycle. 

Since the 1130 control signals such as +Storage Read are asynchronous to the FPGA clock, I have to use a chain of flipflops to synchronize and protect against metastable issues. That adds up to four clock cycles before the logic recognizes a read and begin emitting control signals. We also need a cycle or two to make the MRAM read before it places the data values on the data bus of the chip. Adding all those up, a read with all 18 bits on their own clock cycle would take 2 microseconds, exceeding the window of time available for the 1130. 

VERILOG WRITTEN AND SIMULATED

I created the logic for the FPGA using the Verilog language. It monitors the hardware reset signal I generate from the PCB, then watches the 1130 for the control signals +Storage Use, +Storage Read and +Storage Write. Based on those signals, it produces the control signals for the rest of the PCB. 

I wrote a testbench and simulated the logic for the FPGA. I verified that it produced reasonable sequences of the control sequences, with correct durations, which should correctly read and write to the  MRAM chip on the PCB. I also saw that the pulses into the 1130 when a word is read are skewed in groups of three bits, to limit the total current flowing across the cables at any instant. 

BITSTREAM GENERATED TO LOAD IN DIGILENT CMOD S7 FPGA BOARD

I synthesized the logic and created a bitstream. This will be downloaded into the Digilent CMOD S7 board, placed in an onboard memory, and used to configure the FPGA on powerup. I expect the FPGA board to arrive during the week and will set up that board with the bitstream. 

WAITING ON THE NEW PCB THAT EMPLOYS THE FPGA

JCLPCB.com is busy building my four layer printed circuit board for the revision of my 1130 MRAM which is a PCB that plugs into an IBM 1130 in place of an entire core memory compartment. I hope to receive the new board as well as some addition components from Digikey by the end of the week or early in the following week. 


The CMOD S7 board fits in the lower left of the PCB in the image above. The MRAM chip is right in the middle of the PCB and the three cable connectors are across the top of the board. 

Monday, March 2, 2026

Testing 1130 MRAM board - defect in design identified

LOCATION ZERO IS SET TO VALUE OF ZERO DURING A SYSTEM RESET

I saw two categories of problems while testing the memory board, now that I have the system power more reliable (but not still fully fixed). First, when more than a few bits are set to 1 values, the data does not seem to be reliably read back into the Storage Buffer Register (SBR). Second, many times when I hold down the Reset button (or at power on reset), the contents of location zero is set to all zero bits. 

I dug into the timing of various signals when the machine comes out of reset and to find vulnerabilities that will result in a spurious write being commanded of the MRAM chip. The logic for controlling the lines +Storage Use, +Storage Select, +Storage Write and +Storage Read produce unexpected values as a reset condition is release, which triggers my board to perform a write operation. 

+Storage Use will be on at any time except for a storage cycle when the 1130 does not want to access memory, thus it is on immediately as reset is released. +Storage Write is on immediately after reset is released and also during the entire time that reset is active. 

It is even possible that this flaw in the design could cause problems at other times while the system is running, but in any case it must be corrected. 

REFINING THE USE OF CONTROL SIGNALS BY MY BOARD

In systems using the faster 2.2 microsecond core memory type, the signal +Storage Select will emit a short pulse when the processor steps into states T0, X0, T4 or X4, which will trigger a storage cycle as long as +Storage Use is also high. In normal processor execution, each storage cycle takes eight T clock steps, T0 through T7. The first half of the storage cycle, T0 to T3, is when +Storage Read is high. The last half is when +Storage Write is high. Thus the IBM core memory logic is triggered by the pulse as long as +Storage Use is high, but does a read or a write based on whether +Storage Read or +Storage Write is high. 

In the 3.6 microsecond memory type, such as the machine into which my board will be installed, +Storage Select is driven by the high address bits to select which core memory compartment is active. In the machine I am restoring, there is only one gate so this is effectively always on. In fact, the core memory logic in that compartment does not even look at a +Storage Select signal since memory in gate B compartment C1 is ONLY used with 4K or 8K configurations of 3.6 uS core. 

MAJOR PIVOT IN DESIGN OF THE BOARD

I decided to ditch the timer modules and instead depend on a small FPGA to handle the timing. I designed around the Digilent CMOD S7, a Spartan 7 board. It has enough input-output pins to make the operation of the board fully flexible. I did have to add a 5V power supply regulator to feed the CMOD. 

Now, the pulse to write a 1 into the Storage Buffer Register (SBR) for each of the 16 data and 2 parity bits is an individual line for each bit. Since the existing board works okay for a small number of 1 bits but fails with larger groups like 6 or more, having individual control would allow me to stagger the pulses across the bits so that any funny analog issues that arise from the simultaneous activation are avoided. 

I also control the individual control signals for the MRAM chip - Write, Data Out and Enable - so that I can refine the timing of the activation if needed. Even the buffer chips which block the incoming SBR bits from the memory during reads but pass them through on writes is controlled by the FPGA. 

This definitely requires a change and a new PCB to be fabricated. I also have to write the Verilog for the FPGA, but that is dead simple for this case. While the board is being manufactured, I can write and test the code. Then, when testing, I can adjust timing of signals to refine the behavior of the board.



Sunday, March 1, 2026

Slowly improving ability to use LTspice to model circuits with germanium components

WHY MODEL AND HOW

LTspice is a free version of the SPICE circuit modeling software. Entering a schematic allows the operation to be simulated and graphs to be produced of the voltage and current at selected nodes. Very valuable to understand the operation of a circuit in detail. I also find it useful to modify components to see how they would behave if they are defective, in order to confirm a hypothesis about which part has failed. 

The libraries provided by Analog Devices when you download LTspice include many component, but not every possible part. Usually the Spice model for a component can be found online and added to your schematic. However, there are almost no models online for Germanium transistors and diodes.

IBM USED GERMANIUM SEMICONDUCTORS IN THE SMS AND SLT PRODUCT FAMILIES

Standard Modular System (SMS) was the basis for IBM's transistorized computers in the 1950s and early 1960s. Solid Logic Technology (SLT) as the basis for the 1960s and 1970s computers such as S/360 and 1130. The diodes and transistors used in both families were Germanium based. 

While the industry was transitioning to Silicon semiconductors which are much better for most purposes, IBM needed massive quantities of transistors and diodes, including manufacturing their own. Staying with Germanium assured them of adequate supply and avoided the need to re-engineer many circuits. Similarly the industry was beginning to use integrated circuits (ICs) in the 1960s but IBM's volume needs and other factors led them to stay with discrete transistors and diodes in the SLT generation. 

IBM used many different transistor types in their products in SMS. In SLT, the transistors and diodes used in the SLT modules were much more standardized but SLT cards often included separate transistors in a myriad of types. 

SPICE MODELS FOR GERMANIUM SEMICONDUCTOR COMPONENTS

There are only a handful of models to be found on the Internet for Germanium transistors. Music effect pedals make use of Germanium because of the way that signals are distorted by the device's characterists - pedals such as a Fuzz box - which is by far the largest use of Germanium today. Thus, the few transistors that are used in effect pedals do have some models to be found. 

However, there were many hundreds of different Germanium transistors sold, the vast majority of which have no models online. IBM made use of almost 200 transistor types for SMS and SLT. This is where my problem lies.

GERMANIUM VERSUS SILICON GROSS BEHAVIOR DIFFERENCES

Silicon semiconductors tend to have a turn-on voltage across the base-emitter junction of around 0.6V while Germanium semiconductors turn on at much lower levels. typically 0.1 to 0.3V. The operation of a transistor with a given voltage at the base can be very different between Germanium and Silicon, as a consequence. 

Germanium transistors operated in reverse mode (switching the emitter and collector) work better than Silicon transistors in the same mode. The amplification factor (beta) is less in reverse mode, but at a reasonable level with Germanium. Other characteristics worse for both types in reverse mode, but there are some circuits (especially effects pedals) that chose to use the transistor in reverse mode. 

Germanium devices have higher leakage currents and are less stable under temperature variations than Silicon. They also are more susceptible to failure due to air leaking into the package than Silicon. Silicon forms an insulating oxide when exposed to air, which limits the impact on the device, while Germanium does not. Finally, the way that the component leads enter the typical Germanium package were susceptible to breaking or corrosion forming at the entry point. 

IBM labeled their transistors and diodes with their own designator, even if the part was procured from an industry source who sold the same part with an industry recognized number. Thus even if a model had existed for a particular transistor under its commonly known number, to model an IBM circuit required knowledge of the IBM to industry standard number translation. 

GRADUALLY EXPERIMENTING WITH SPICE MODELS FOR SOME IBM CIRCUITS

I have been hacking at some models that exist for Germanium devices, trying to get the IBM circuit to operate as it should. I have found a table that circulated among IBM repair people (Field Engineers - FEs) during the SMS era that purports to list industry standard transistors that could be substituted for an IBM numbered transistor in a pinch. These may list five or six different transistors, thus making clear that the substitute is NOT an exact match. 

I have located some spec sheets for the industry standard transistors in that substitution table and from that I have worked up a potential set of specifications for the IBM part, such as hFE and Vceo, that would be the basis for a spice model of that IBM part. This is challenging because a spice model does not have entries like hFE, but instead has a myriad of parameters as you can see below:

My challenge is to turn the potential specifications I derived such as hFE into the parameters above. This is a work in progress. It will be quite valuable in the long run to be able to model IBM circuits accurately.