{"id":5,"date":"2011-06-11T15:43:08","date_gmt":"2011-06-11T20:43:08","guid":{"rendered":"http:\/\/tommysprinkle.com\/txxos\/?p=5"},"modified":"2021-04-17T18:32:52","modified_gmt":"2021-04-17T23:32:52","slug":"introduction","status":"publish","type":"post","link":"https:\/\/tommysprinkle.com\/txxos\/?p=5","title":{"rendered":"Introduction"},"content":{"rendered":"<p><a href=\"http:\/\/tommysprinkle.com\/txxos\/wp-content\/uploads\/2011\/06\/IBM-360-40-Crop.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6\" data-permalink=\"https:\/\/tommysprinkle.com\/txxos\/?attachment_id=6\" data-orig-file=\"https:\/\/tommysprinkle.com\/txxos\/wp-content\/uploads\/2011\/06\/IBM-360-40-Crop.jpg\" data-orig-size=\"566,572\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"IBM-360-40-Crop\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/tommysprinkle.com\/txxos\/wp-content\/uploads\/2011\/06\/IBM-360-40-Crop.jpg\" class=\"alignleft size-thumbnail wp-image-6\" title=\"IBM-360-40-Crop\" src=\"http:\/\/tommysprinkle.com\/txxos\/wp-content\/uploads\/2011\/06\/IBM-360-40-Crop-150x150.jpg\" alt=\"\" width=\"150\" height=\"150\" \/><\/a>This site is devoted to exploring how to program an IBM 370 Mainframe at the &#8220;Bare Metal&#8221; level. \u00a0This is how to program without any preexisting supervisor or operating system code.<\/p>\n<p>It is assumed that the reader is familiar with the basics of the IBM 360\/370 architecture. \u00a0The IBM System\/370 Principles of Operation (POPS) is the base level document. \u00a0I am \u00a0using GA22-7000-5 (Fifth Edition, August 1976).<\/p>\n<p>I first became interested in programming without an operating system \u00a0in 1975. \u00a0I was learning to program on a IBM 360 Model 20. \u00a0The model 20 was a very limited version of the 360 architecture. \u00a0It was a half-word machine and only had eight half-word registers. \u00a0The system I was using had a total of 12K of memory. \u00a0It did have a 2311 disk and a Disk Operating System (DOS). \u00a0I was programming in assembler and quickly found that I didn&#8217;t have much of the 12K of memory left over after loading in the operating system routines.<\/p>\n<p>I decided that I needed to learn how to live without the resident DOS code. \u00a0I began to\u00a0experiment\u00a0and learn the basics. \u00a0The biggest issue was how to do Input\/Output (I\/O). \u00a0I quickly learned how to access the various devices using Channel Command Words (CCW). \u00a0The 360\/20 didn&#8217;t use SIO (Start I\/O) &#8211; it used an instruction called XIO (eXecute I\/O) which did pretty much the same as SIO. \u00a0It also used an instruction called TIOB (Test I\/O and Branch) which combined the function of \u00a0TIO (Test I\/O) with a branch instruction.<\/p>\n<p>From then on I used the Model 20 mostly without any Operating System. \u00a0This 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).<\/p>\n<p>In the early 1980&#8217;s I was a systems programmer at a facility upgrading from a 370\/158 to an 3033. \u00a0When 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. \u00a0There were no I\/O devices connected to the 158 except for the integrated operator console.<\/p>\n<p>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.<\/p>\n<p>I began with very simple programs which evolved into larger, more complex programs over time.<\/p>\n<p>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.<\/p>\n<p>With Hercules I now have my own personal IBM mainframe to once again play with. \u00a0Not only do I have a mainframe but I have my choice of peripheral devices to attach.<\/p>\n<p>One final question &#8211; what does TXXOS mean? \u00a0When I first started playing with bare metal programming on Hercules I called my mini-operating system TXOS. \u00a0It was a bit of an inside joke on a &#8220;very short&#8221; OS. \u00a0When I decided to register a domain name I picked TXXOS.com &#8211; bottom line is it really doesn&#8217;t mean anything but I needed a domain name.<\/p>\n<p><a title=\"Card Loader\" href=\"http:\/\/tommysprinkle.com\/txxos\/?p=10\">[ Next &#8211; Card Loader]<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This site is devoted to exploring how to program an IBM 370 Mainframe at the &#8220;Bare Metal&#8221; level. \u00a0This is how to program without any preexisting supervisor or operating system code. It is assumed that the reader is familiar with &hellip; <a href=\"https:\/\/tommysprinkle.com\/txxos\/?p=5\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"template-page-builder-no-sidebar.php","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[],"class_list":["post-5","post","type-post","status-publish","format-standard","hentry","category-introduction"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1CPQT-5","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=\/wp\/v2\/posts\/5","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5"}],"version-history":[{"count":7,"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=\/wp\/v2\/posts\/5\/revisions"}],"predecessor-version":[{"id":540,"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=\/wp\/v2\/posts\/5\/revisions\/540"}],"wp:attachment":[{"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tommysprinkle.com\/txxos\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}