Wednesday, March 16, 2016

Still battling the virtual 1403 virtual carriage control tape for skip; 1401 display panel design work


Implementing physical plotter (1627 equivalent)

I refined the process that moves the plotter to divide the time interval between a move portion and a restoration portion, thus even with a maximum rate drive of XIOs the plotter should move properly. I also tested this during my morning session.

I found an oddity that when I was doing the IO to the plotter, the high speed link went berserk, giving me a continually climbing error count. I suspect a problem in the Hamming/CRC from the slave side. It also climbs when doing certain manual operations on the 1130 such as loading core contents or setting the IAR, thus a tantalizing hint at a common cause. If it is a bit position in the data that isn't handled properly, it doesn't occur during normal 1130 operation.

The hamming calculations and the CRC logic are pointing at the same VHDL for both master and slave, so any problem is going to be a consequence of process differences in the slave or some deep flaw I hadn't found before.

Implementing virtual 1403 printer

Having corrected the flaw that kept the carriage control process from completing with an interrupt to present status, I was ready to test in the morning. Printing and spacing are working properly now, with interrupts and appropriate DSWs, but skipping to a channel produced a runaway printer in the fpga.

I set up the logic for the tape hole matching function in a different way, that I will test in one more shot today. I also updated the code for Python as that also failed to stop as intended. Now, the Python code stops but the fpga logic loops (runaway carriage for those familiar with real 1403 behavior when skipping to a channel that has no holes punched in its control tape).

I have to step through some diagnostic investigations to determine whether the tape image is correctly held in the buffer memory in the fpga and that the skip list issued by the program is properly stored in the UCW. I will work on these tomorrow.


One of the purposes of the restored 1401 systems at CHM is educational. STEM education and adult interest in understand this classic system can involve a learner stepping through instructions from the control panel. While most of the information needed to understand the behavior is displayed with lamps, one area is partially obscured.

The 1401 uses addresses which are three BCD digits each, able to address up to 16000 locations. A character in memory has (besides the parity and wordmark) six bits called B, A, 8, 4, 2 and 1. Binary coded decimal provides for up to three decimal digits, but that only addresses 1000 locations. The B and A bits on the high order address character are used to select one of four groups of 1000 locations, thus with the 'zone' bits you can address 0 to 3999. The B and A bits on the low order digit are used to select which of four blocks of 4000 characters you are addressing.

An address with three characters of B 4 2,  8, and A 4 1 would be for 6685  (low character zone bit picks block 4000 to 7999, high character zone bit selects third of four blocks of 1000 within the 4000 group, thus 4000 + 2000 and then the 8-4-2-1 bits of each character yield 685. BCD encodes non-numeric characters by combinations of bits having nonzero zone bits. Thus, you might see the address as O8U when you look at the three address characters on the printer.

The 1401 maintains three address registers, called STARs, to hold the three characters of an address. The current instruction address is in the I STAR. The 1401 instruction format provide for two fields, as it is a memory to memory design rather than changing registers as is done on most machines. These are the A and B fields, thus our other two address registers are the A STAR and the B STAR.

On the console, there is only one set of lamps displaying an address. Which STAR you see depends on the machine operation during execution or can be changed by pushing the ISTAR, ASTAR or BSTAR buttons. You need to flip between these STARs by pushing buttons.

My auxiliary display will show all three STARS simultaneously, in three formats. You will see the BA8421 bits as they exist in core (e.g B42, 8, A41), the BCD character (e.g. O8U) and the full decimal equivalent (e.g. 6685). This will make hand debugging and learning easier.

One additional wrinkle with the 1401 is that the high bits of the middle address character are used to specify whether an index register is used - the bits coding for no register, reg 1, reg 2 or reg 3. This was an optional advanced programming option, so not all 1401 systems implement it. I intend to display the IX along with the STAR contents since it is part of an address. Thus, if we wanted our 6685 address to also include the content of index register three, we would add the B and A zone bits to the middle character. Our address in BCD is now OHU when printed.

I devised a simple circuit to convert the SMS T level signal (binary 1 is +6V, binary 0 is -6V) into CMOS levels (binary 1 is 3.3V, binary 0 is 0V). This uses a diode, four resistors and a transistor for each bit. I am tracking six bits per character, or a total of 18 bits. I intend to use an MBED, Arduino or similar microcontroller to interpret the signals and control the display.

I know where most of the signals occur in the 1401 - in frame 1, gate A7, cards C01 to C21 for all but the index register bits. I need to work on the physical aspects - cable connectors, PCB for the 18 circuits, connection to the microcontroller, power supply and mounting inside or atop the 1401. 

No comments:

Post a Comment