SAC INTERFACE FOR ADDING PERIPHERALS TO THE 1130
Implementing virtual 1403 printer
I ran a test to display the first 8 bits of the virtual carriage control tape buffer at the current line. That began as line 1, which had only a punch in channel 1. It displayed correctly as x80 upon testing. Next, I set up the display to show the latched up channel seek list from an XIO Control - this should be non-zero after I issue the Skip to Channel operation (XIO Control).
The next test latched up the code I put in memory and referenced with the XIO Control - skip to channel 4 - which should have matched a number of lines in the buffer. In spite of seeing some good values in the buffer, I might not have a full and faithful copy of the carriage tape words I pushed down from the PC.
It occurred to me that my problem may be byte order differences resulting in swapping of the bytes from what I planned for in the carriage tape and what arrives to the FPGA and makes its way to the buffer memory. I had some diagnostic LEDs set to show me the high bits of the current buffer and with the print line set to 1, it displayed 0b10000 when I should have seen 0b10111 if it was correctly stored.
Finally, I caught the problem in my process that loads the carriage control tape image into a buffer memory. I made a change and now the carriage is not running away. I have a minor problem left with synchronizing - what line the fpga thinks we stopped at versus the Python code - but I already know at least one fix.
I spotted flaws in the Python code related to the mismatch of line numbers I was seeing. Partly it is a matter of the pernicious 'off by one' problem - people think of line numbers starting at 1 but the array holding the carriage tape values is origin 0. I had to adjust the line number at the appropriate times.
It appears my skipping works right, but I need to do some careful tests that verify the line we should reach for various sequences of space and channel skips. This will take a bit of design work, to be sure I have a good test and can definitively mark the virtual 1403 as done.
I spotted flaws in the Python code related to the mismatch of line numbers I was seeing. Partly it is a matter of the pernicious 'off by one' problem - people think of line numbers starting at 1 but the array holding the carriage tape values is origin 0. I had to adjust the line number at the appropriate times.
It appears my skipping works right, but I need to do some careful tests that verify the line we should reach for various sequences of space and channel skips. This will take a bit of design work, to be sure I have a good test and can definitively mark the virtual 1403 as done.
This retirement stuff ain't easy - it takes a good year or two before you get it right and about then people start calling you and saying things like,"You're not too busy, right, so maybe ...".
ReplyDelete