XL741 – Discrete Op-Amp

Uncategorized 2 Comments

We’ve done it again! My friends at Evil Mad Scientist Laboratories have a new kit for sale. Following on the success of our Three Fives discrete 555 timer kit, we’ve had a lot of requests for a discrete 741 op-amp.

The XL741 is based on the datasheet schematic of the original uA741 op-amp IC from 1968. You can wire it up in a classic op-amp circuit and probe nodes inside the IC so you can see how the chip works. Play with differential pairs, modify the compensation, and change bias currents to your heart’s content!

Flea Market Find–Dual Gun CRT

Uncategorized 5 Comments

At the electronics flea market on Saturday, I found a 3ABP7 dual gun CRT. This one was built by DuMont, most likely intended for the 3″ version of their 5″ Type 279 Dual Beam Oscilloscope.

So of course I had to fire it up. There are two sets of deflection coils, so I drove them with one deflection board and cross-wired the deflection coils to flip the image around on the second gun.

The guns themselves have a common cathode connection and separate grids, which forces me to drive them both in parallel since my deflection board video amplifier keeps the grid at a constant potential and drives the video onto the cathode.
Dual gun 3ABP2 CRT

Here’s a closer look at the guns. The filaments are connected in parallel so this tube uses twice the normal current.
Dual gun 3ABP2 CRT

Compensating CRT Deflection Coils

Projects 3 Comments

Things look really weird when you use an uncompensated deflection coil with a vector graphics display. This is because the coil looks like an inductive load to the driver amplifier, and the parasitic capacitance makes it ring. Ringing and overshoot create the strange-looking display, basically extending every line past its destination.

One way to compensate for that is to add a series RC snubber in parallel with each deflection coil. You can perform some calculations to figure out the values of the resistor and capacitor but they won’t get you very close to the answer. There are just too many parasitics to model. It’s much faster just to build a RC substitution box and tweak the values until you get the result you want.

CRT Board BOM Updates

Uncategorized No Comments

I have corrected some mistakes in the bills of materials for the CRT driver boards (the files in GitHub have already been updated):

  • ScopePower U2 part number from TS271CN (DIP package) to TS271IDT (SOIC).
  • ScopePower R3 part number from VR37000003305JR500 (33 meg) to VR37000001005JR500 (10 meg).

If you already ordered parts, I apologize. The TS271CN is a great little op amp and the DIP package version will work fine in a breadboard. That’s what I will do with the ones I accidentally ordered. The 33 meg resistor is useful as a bleeder resistor if you build the post deflection acceleration module (to be posted soon).

Mel, Blackjack, and the LGP-30

Cleverness No Comments

A friend passed on the following articles regarding a rather famous hack:

https://news.ycombinator.com/item?id=7869771
http://www.jamtronix.com/blog/2011/03/25/on-the-trail-of-a-real-programmer/

The LGP-30 was an early computer manufactured in 1956 and sold by the Royal McBee division of the Royal Typewriter Company. It had 113 vacuum tubes, 1450 diodes, a magnetic drum memory, and an oscilloscope screen with a template marking the register bits (instead of the more traditional panel with blinking lights). Mel wrote a lot of code for this machine, including a blackjack demo program, entirely in raw machine code, taking advantage of various quirks in the machine to keep the program very compact.

The Jamtronix blog has a link to a purported paper tape dump of Mel’s program.

Foolishly I decided to figure out the paper tape dump. I succeeded, and it looks like it’s in a format that a bootloader was supposed to understand, but not the bootloader documented in the LGP-30 manual. So first I ran the raw file into a popcount routine to see what the most common letters were. It was a subset of the alphabet, but had all the numbers except for the number ’1′.

Wat?

Back then they did a few strange things. One of them was using the lowercase letter ‘L’ as the number 1. Right. Also, since the LGP-30 was hexadecimal, they used extra letters to represent numbers beyond 9, but instead of using a-f, they used fgjkqw.

Then the single quote ‘ is used as a record delimiter, and the letter ‘v’ at the beginning of the block of records identifies the track and sector where the data is to be loaded. Each block has 64 words, 8 per line (which fits perfectly in a single track on the magnetic drum memory). To save space, they omit leading zeros, so incoming characters of 4 bits each are shifted left 4 at a time. At the end of the block is a stray word whose purpose I cannot figure out. I suspect it’s a parity or checksum, but it doesn’t match a simple checksum of all the data.

This machine’s architecture is a clever nightmare. Self modifying code was encouraged and was the standard way to accomplish common tasks. For example, to branch to a subroutine, you do this:

1000: r 3050     <- Set up return address by writing PC+2 to the destination address of the instruction at 3050.
1001: u 3000     <- Unconditional branch to address 3000.
1002: ...        <- Magically we pop up back here!
...
3050  u 0000     <- Looks like a unconditional branch to location 0 right? No, it's just a placeholder address. Yay, we can do without a link register!

And Mel coded this up in machine code. Probably because the “assembly” mnemonics are not particularly helpful, he must have quickly memorized the opcodes themselves. And why did he use instructions as data? The machine doesn’t decode the upper 12 bits of a word, so if you didn’t use it, it was just wasted. Basically the architecture of the machine naturally led Mel down this slippery slope.

So you might think that Librascope/Royal McBee, based on customer feedback for this machine, must have simplified the design for a later machine, the RPC-4000. And you would be wrong–it’s even worse…

Anyway, here’s my disassembled version: blackjack.txt. The track number is listed first, once for every block. In each block, every line has the sector number first, followed by the instruction mnemonic, following by the track and sector numbers of the instruction’s target. After that are the raw bits. The first two instructions are clear instructions followed by an unconditional branch. This goes to track 49 sector 34. You can follow the instruction flow from there.

As for me, I’m going to stop now before I accidentally learn how to program the LGP-30.

 

« Previous Entries