How is it possible to jam a virtual card reader?

Raymond Chen

Back in the day, I supported a time-sharing system known as VM/CMS. Each user signed into the system got their own virtual machine, with virtual hardware devices, a virtual card reader, a virtual card punch, and a virtual printer.

Okay great, you have a virtual card reader. How do you load virtual cards into your virtual card reader? And why would you even do that?

In the days of physical cards, you saved a file by creating a deck of punch cards. And to transfer that file to someone, you gave them the deck of cards. That person then turned on their system and put the punch cards in the card reader to load the file.

The virtual card punch and virtual card reader do the same thing, just without consuming any physical cards.

  • The virtual card punch is how you send files to another person. This eventually became overloaded as the way you send an email message.
  • The virtual card reader is where incoming files arrive, such as the output of jobs you have submitted. It’s also where incoming email sits, waiting to be read.¹
  • The virtual printer is, well, it’s a printer. Jobs sent to the virtual printer go to an actual printer, and you can pick up the results from the print room.

The command to check for email was Q RDR: The Query Reader command checked if there was anything in your virtual card reader. If so, then you got mail.

One day, we got a trouble report with an error message nobody had ever seen before: Card reader jammed.

How is it possible to jam a virtual card reader? Did you feed it a bent virtual card?

I was ending my shift and didn’t get to stick around for the resolution. I later learned that one of my colleagues dug deep into his memory and found some information in the manuals to resolve the problem.

I wonder if he virtually turned it off and on again.

Bonus chatter: Back before VM/CMS, the punch cards were real. I started programming just as punch cards were dying out, but I recall that during the hot summer months, one silly trick to cool off was to go to the service window in the computer room and submit a small job of a few dozen cards. The operators would open the window to pick up the deck, and during that time, you got a brief blast of cool air from the computer room.³

¹ Cards in your reader don’t count against your storage quota, so a common trick when you ran out of quota was to email a file to yourself, to give yourself some breathing room while you cleared up some space. You wanted to pull the file out soon, though, because the system would expire old card decks.²

² I guess you could read cards out of your punch, and then immediately send them back to yourself, thereby resetting the expiration date. But this was a high-risk maneuver, since one false step could cause you to lose your files.

³ When the job was finished, they would open the service window to return the deck, along with the printout of the job results. However, you couldn’t use this to sneak a second blast of cool air because you didn’t know whose job was coming out. You couldn’t just hang out right in front of the window, because the operators would think you were trying to submit a job. The convention was that if you were waiting for a job, you stood a small but respectful distance from the window so as not to confuse the operators. Close enough that you could get a small amount of cool air, but not so close that the operators would think that you are submitting a job.

20 comments

Discussion is closed. Login to edit/delete existing comments.

  • MGetz 0

    Could be worse… could be a virtual printer fire.

    FWIW I’d have probably used that jammed value to refer to a case when the buffer for incoming jobs, likely fixed in size, overflowed and couldn’t accept any more.

    • Ivan K 0

      I was thinking the same thing (re-used error code with the same result nevermind a different effect).
      If done today, a quick scan of winerror.h shows a nice prime number candidate for drive-by repurposing: 157 – ERROR_DISCARDED. (Maybe the only issue is the associated format message, but that just adds spice.)

  • Sunil Joshi 0

    My mum used to teach COBOL in the olden times with physical cards in evening classes for adults. In class, you would prepare your card and come back next class to see if it had worked. A syntax error meant you had wasted a week. Glad that ended before I was old enough to remember.

  • Joshua Hudson 0

    “How is a disk on an expletive virtual machine not spinning up?”

  • Erik Fjeldstrom 0

    Was there a virtual card sorter as well? My dad told me about a time where he dropped an attache case full of cards (for a final project at university) and spent about an hour making sure that none of the cards were missing or damaged, and then brought them to the index sorter. Those must have been fun times.

    • Dirk Koopman 0

      Back in the day, this was known as a “cascade sort”. It was one of the reasons that some early languages used numbered lines. A more typical setup was the practice of loading “card trolleys” with boxes of cards, each box containing 2000 cards. These trolleys were designed so that the boxes could be slotted into channels made of short raised metal fences to stop the boxes falling out of the trolley. Which was fine, except that the trolleys were never big enough and so operators routinely wedged another layer of boxes on top. Which mostly worked – until someone came around a blind corner with another trolley…

      If one was lucky, only the top layers slid off.

  • Henry Skoglund 0

    Reminds me of something I did on a PDP11/45 computer running RSTS/E (yes, this was some time ago). One day a fancy new device driver was installed, called BH:, shor for Black Hole, it was the precursor for the NUL device still present in Windows. Nowadays there isn’t much call for a null device, but in those days it came quite handy when you didn’t want your assembler listing printed, instead you could type in BH: as the filename.
    I decided to test that BH: device, so when the other students had left for the evening I installed a batch job on lots of terminals that just copied a big file to the BH: device repeatedly. And sat down on one terminal and started typing CTRL+T. It was the DEC standard command to see you job status, it showed something “Waiting for input”, “Waiting for disk” etc.
    And after some time, lo and behold, I managed to get the job status to show “Waiting for BH: device”, i.e. there was a busy queue for the NUL device! Next day I complained to the sysadmin that his new BH: device had inadequate bandwidth and perhaps he should consider adding another one 🙂
    (Sorry but I dont’ remember if he ever installed a second BH:)

  • cheong00 0

    Yeah the early days of air conditioning…

    Back when I was in secondary school, only the staff(teacher) room and the clerk’s office have air conditioning. When I was prefect, one of the most favorite position is to serve at the entrance of staff room to help students calling the teachers out. Not only you “get a small amount of cool air” when the door opens, you also get the chance to go inside the staff room when you’re requested to locate a teacher.

  • Nathaniel Mishkin 0

    I also started programming in the latter days of punch cards. As a summer intern at IBM I learned about the card saw a tool for unjamming keypunch machines. Back at school this knowledge proved useful because it was common for some number of keypunch machines to be out of commission due to jams and when there was a line of students waiting to get access to a machine I could go to the operator and ask for the card saw which I then used to unjam a machine for my own use. Those machines were tough. You just jammed the saw into the punch station and whaled away, shredding the jammed card to bits.

  • Dave Gzorple 0

    Not sure when this story occurred, but I was still using virtual card punches in 2001 on a VM/CMS machine in a cave in Poughkeepsie. Coding in C on that was painful because of the difficulties with EBCDIC so I wrote a script to transparently copy edited files back onto the mainframe after I’d edited them locally in ASCII, perform the appropriate conversion, and store them wherever they were needed. The only thing done on the mainframe was the actual compile.

  • word merchant 0

    Talking of virtual, I got refused entry to a work virtual meeting in Teams because the meeting room was ‘full’. Sigh.

    I’m not entirely surprised – Teams is possibly the most clunky, bloated, badly written and unfriendly pieces of software out there – I’ve used Lotus Notes, and even that’s nicer than Teams. Come to think of it, WordPerfect for DOS had a better UI than Teams.

    • Mike Morrison 0

      I’ve heard this complaint about MS Teams quite a bit here and on other forums. Two things: unless you’ve access to the source code, how could you know that it’s “badly written”? Second, I’m also a long-time Lotus Notes user – still use it about once a month for the rare* thing that requires the full Notes client – and I find Teams to be a massive improvement over Notes and sametime. I’ve used Teams professionally for just over two years now and I can’t imagine going back to the bad old days of Notes. The full notes client and it’s “Home” tab; now that’s a bad UI. Teams by contrast is a delight to use.

      • Joshua Hudson 0

        Any use of a web browser control by something not a web browser or an email client is badly written.

      • word merchant 0

        If Teams is “well written” then there’s something catastrophically wrong with whatever framework it runs in: it’s slow, it looks ugly, it tends to crash and freeze regularly, it’s unintuitive, it can’t render its conversation screens to keep up with any normal scrolling speed. I could go on, I really could. It is way worse than Skype for any sort of collaboration.

        It’s a horrible mishmash of bad ideas and bad execution. If I’d worked on it, I’d be ashamed of what I created.

        • Raymond ChenMicrosoft employee 0

          It’s no secret that Teams is written in Electron. Teams is listed right there on the front page as one of their many clients.

    • Dave Gzorple 0

      Dear God, how awful must Teams be that it can be worse than Lotus Notes? I thought all software was rated on a scale that went from $perfect (a hypothetical, empty set) down to Lotus Notes at the other extreme. It wasn’t on the scale, it represented where the scale ended.

      • word merchant 0

        Teams is truly awful. Notes at least was trying to do something very new when it came out; Microsoft has had every opportunity to create a decent collaboration tool, especially given all the bad examples out there, yet they ended up with Teams. I just don’t get it…

    • Stephen MAnsfield 0

      Over the past few months I’ve used MS Teams, Cisco Webex, Zoom and Google Hangouts, and I’m old enough to remember Lotus Notes.

      Cisco Webex is by far the worse of the modern contenders.

      Not slightly, not marginally, but by some distance. I might even put Webex as worse than Notes, but that’s probably recency bias.

      And guess which one our organisation bought a site license for, literally days before MS Teams was made free to use for healthcare organisations here in the UK.

      Having a full virtual meeting sucks though.

    • ketil albertsen 0

      At work, we have been using Teams for about a year, the last six months quite extensively. I cannot recall a single crash; it has been rock stable. We have had information meetings with 500+ participants (that is the majority of our employees; we have no simple way to test it with significantly more), distributed over at least five countries (far more if our international sales force participates), a certain share from inside company WiFi networks, but in these Corona times probably two thirds run from their home offices through a commercial ISP. Nor has performance problems been an issue.

      I do not understand the critical voices against Teams. It has been working to our full satisfaction, as I see it. I do not hear complaints from my colleagues.

      Over the years, I have seen a number of systems stable as rock at one location, but really shaky in other locations. In almost all cases, the unstable installations are configured and managed by an operator coming from a different platform, trying to handle this new system exactly as he handled the old one – maybe even trying to replace pieces to achieve that (such as throwing out PowerShell and replacing it by bash, which e.g. creates problems if people do not use consistent casing in environment symbol).

      I have myself come in as a “saviour”, taking over a non-Unix system from a Unix-based system manager who managed to crash the OS at least once a day, trying to run it as if it were Unix (this was before Windows). I spent a week cleaning up, after which it ran without a single hickup for more than three months. (Maybe it was much longer, but after 3 months, I had to dig up the system logs for a few users to “prove” that the system was no longer unstable.)

      So if Teams is unstable and has performance problems: Maybe you should check the competence of those managing it. If they grew up with, say, Lotus Notes and try to run Teams the same way, sending them to a course in Teams configuration and management might be a good investment.

  • ketil albertsen 0

    Long time ago, before both Linux and Windows, when card punches was real, we had an application that in some cases reported “Card reader error (card not read)” or “Card reader error (card read)”.

    This application had its own internal error codes. When an OS call returned an error code, the error text was requested from the OS for display. Some error situations were mistakenly treated as OS error returns, so the internal error code was looked up as an OS error text. If you knew that the first message corresponded to error code 3, the second one to 4, you could look up those codes in the application manual to see the real error message.

    For some reason, this prevailed for several years before it finally got fixed.

Feedback usabilla icon