I began this blog post series with the intention of covering IBM PC products in chronological order. So far, it is mostly true. However, you may have noticed that I’ve skipped IBM Personal Computer BASIC Compiler version 1.00 released in March 1982. Like other IBM products, it was licensed from Microsoft. My intention was to skip it because there are countless articles, books, and even films about BASIC in general, not this particular IBM product. Maybe I was going to write a short paragraph or two about its role. That there is a whole generation of programmers that started with BASIC and how it shaped the software industry.
My first experience with BASIC was on Pravetz 82 (Apple ][ clone), which I am not going to discuss in this post, and latter on Pravetz 16 (IBM PC clone). I am not sure about the exact BASIC variant, but it must have been GW-BASIC or QuickBASIC. I guess I fist started with GW-BASIC but I am pretty sure QuickBASIC followed shortly after because at the time I was already familiar with interpreter vs compiler performance tradeoffs. Also, I am pretty sure I used QuickBASIC version 1.00 and its glorious BASRUN.EXE I can’t count all the games made by various hobbyists that I’ve played. It would be fair to say that 90% of them were distributed with BASRUN.EXE which is a sure sign for BASIC compiler. I’ve made my first Snake-like game with QuickBASIC 1.00 and distributed it to my friends together with BASRUN.EXE
So, yesterday I was browsing my Downloads directory and I was about to delete the directory with IBM BASIC Compiler 1.00 when I saw a file named IBMCOM.OBJ My instant reaction was : Wait, what? Could that be the predecessor of GWCOM.OBJ? I was poured by memories for using BASCOM MYPROG/O/V; and then LINK MYPROG+GWCOM; So, what is so special about GWCOM.OBJ file? QuickBASIC documentation provides only one brief sentence Object module for communications support. It is the key for using serial ports from BASIC via OPEN "COMn... and ON COM(n) GOSUB... And for a long time, this was the only way I knew for two computers to communicate. You want add multiplayer support to your Snake-like game – use GWCOM.OBJ (who will want to share same keyboard, pah!) You want to implement a simple chat program – use GWCOM.OBJ (who will talk to their friend sitting 2 meters aside, pah!)
The next step was to check the official IBM BASIC Compiler 1.00 documentation. On page 5 there is even shorter description – IBMCOM.OBJ – the communications module. This confirmed my hypothesis. I decided to use MartyPC emulator. It turned out it does not have proper support for serial port bridging on macOS. After some vibe coding I had a working prototype.
This time I was happy to stay away from real hardware. Another option is to use DOSBox as it has decent support for working with serial ports (e.g. nullmodem port:...) Finally, it was time to write some actual BASIC code. You can find the floppy disk images here.
Leave a Reply