This site is devoted to exploring how to program an IBM 370 Mainframe at the “Bare Metal” level.  This is how to program without any preexisting supervisor or operating system code.

It is assumed that the reader is familiar with the basics of the IBM 360/370 architecture.  The IBM System/370 Principles of Operation (POPS) is the base level document.  I am  using GA22-7000-5 (Fifth Edition, August 1976).

I first became interested in programming without an operating system  in 1975.  I was learning to program on a IBM 360 Model 20.  The model 20 was a very limited version of the 360 architecture.  It was a half-word machine and only had eight half-word registers.  The system I was using had a total of 12K of memory.  It did have a 2311 disk and a Disk Operating System (DOS).  I was programming in assembler and quickly found that I didn’t have much of the 12K of memory left over after loading in the operating system routines.

I decided that I needed to learn how to live without the resident DOS code.  I began to experiment and learn the basics.  The biggest issue was how to do Input/Output (I/O).  I quickly learned how to access the various devices using Channel Command Words (CCW).  The 360/20 didn’t use SIO (Start I/O) – it used an instruction called XIO (eXecute I/O) which did pretty much the same as SIO.  It also used an instruction called TIOB (Test I/O and Branch) which combined the function of  TIO (Test I/O) with a branch instruction.

From then on I used the Model 20 mostly without any Operating System.  This fun all came to an end when I moved on to larger systems running production applications under more complex operating systems (MVT, MFT, VS1, SVS, and MVS).

In the early 1980’s I was a systems programmer at a facility upgrading from a 370/158 to an 3033.  When the upgrade was completed the 370/158 remained in the computer room and was powered up to serve as a backup in case there were problems with the new processor.  There were no I/O devices connected to the 158 except for the integrated operator console.

Since the machine was just sitting in the corner of the room idling I decided to start programming it through the operator console using the Storage Alter function.

I began with very simple programs which evolved into larger, more complex programs over time.

When I left the 158 behind I lost the ability to program a 370 mainframe at the bare metal level until years later when I discovered the Hercules emulator.

With Hercules I now have my own personal IBM mainframe to once again play with.  Not only do I have a mainframe but I have my choice of peripheral devices to attach.

One final question – what does TXXOS mean?  When I first started playing with bare metal programming on Hercules I called my mini-operating system TXOS.  It was a bit of an inside joke on a “very short” OS.  When I decided to register a domain name I picked – bottom line is it really doesn’t mean anything but I needed a domain name.

[ Next – Card Loader]


  1. Tom,

    I would like to add the XIO and TIOB instructions to the overviews on my site. Do you happen to have any additional info? E.g. the opcode would be nice to know…

    Kind regards,
    Abe Kornelis.

  2. Hi Abe,

    If you’re still watching this site, the opcode for XIO is D0 and the opcode for TIOB is 9A. Hope this helps.

    Andi Tepper

Leave a Reply

Your email address will not be published. Required fields are marked *