Microsoft Open-Sources GW-BASIC
We are excited to announce the open-sourcing of Microsoft GW-BASIC on GitHub!
Yes, seriously 😀
Since re-open-sourcing MS-DOS 1.25 & 2.0 on GitHub last year, we’ve received numerous requests to also open-source Microsoft BASIC.
Well, here we are! 😁
These sources, as clearly stated in the repo’s readme, are the 8088 assembly language sources from 10th Feb 1983, and are being open-sourced for historical reference and educational purposes. This means we will not be accepting PRs that modify the source in any way.
A little historical context
The GW-BASIC source code being published is dated Feb 10th 1983. That was quite a while ago, so just to set a little historical perspective:
The week this source was created Men At Work topped the US and UK singles charts with “Down Under”, Dustin Hoffman starred in the #1 US box-office movie, “Tootsie”. In 1983, “Star Wars Episode VI – Return of the Jedi” was released, as was “War Games”! And, Emily Blunt, Kate Mara, Jonah Hill, Chris Hemsworth, and Henry Cavill, were born! Ronald Reagan was President of the USA, and Margaret Thatcher was the UK’s Prime Minister.
That same year, Bjarne Stroustrup was in the middle of developing the first version of the C++ programming language, ARPANET standardized TCP/IP. Borland announced Turbo Pascal, created by Anders Hejlsberg (who went on to join Microsoft, and create J++, C# and TypeScript).
1983 was also the year AT&T released UNIX System V R1, and BSD 4.2 was released, introducing the pseudoterminal for the first time (the progenitor to Windows’ ConPTY we introduced to Windows in 2018 😁)
I was 13, and spent every spare second that I wasn’t finishing my homework or doing my chores, writing BASIC and assembly code on one of the hottest home computers of the time – the BBC Micro sporting 32KB RAM (yes, 32,768 bytes, total!), powered by a 6502 processor running at a BLAZING 2MHz. When not coding, I was usually playing one of the most groundbreaking games of all time: “Elite” by David Braben & Ian Bell.
In 1983, Apple launched the 1MHz 6502-powered Apple IIe for US$1,395 (> $3,500 in 2020). Apple also launched the first retail-available computer with a GUI – the Apple Lisa. The Lisa contained a staggering 1MB RAM, and ran the awesome Motorola 68000 processor at an astounding 5MHz, but it cost $9,995 (> $25,000 in 2020 dollars), so all I could do was peer at it through the window of the one computer store in our town authorized to sell Apple’s products … and dream.
And, in 1983 Microsoft released MS-DOS 2.0 (source here), and GW-BASIC for the IBM PC XT and compatibles.
What IS GW-BASIC?
GW-BASIC was a BASIC interpreter derived from IBM’s Advanced BASIC/BASICA, which itself was a port of Microsoft BASIC.
Microsoft’s various BASIC implementations can trace their origins all the way back to Bill Gates & Paul Allen’s implementation of Microsoft’s first product – a BASIC interpreter for the Altair 8800.
During the late ’70s and 80s, Microsoft’s BASIC was ported to many OEM’s specific platform and hardware needs, and for several processors popular at that time, including the 8088, 6502, 6809, Z80, and others.
Wait – where’s the C source code?
There is no C source code!
Like much software from the 70s and 80s, and just like the source for MS-DOS, the source code of GW-BASIC is 100% assembly language.
Why assembly? Why didn’t developers use higher-level languages like C, or Pascal?
When developing on/for mainframes and minicomputers of the day, developers were sometimes able to use higher-level languages like FORTRAN, LISP, COBOL, RPG, CPL/BCPL, C, etc. but the compilers for such languages were often hugely expensive, rarely generated efficient code, and were generally unavailable for the space and performance constrained home and personal computers of the day.
When writing software for early PCs, every single byte and every single instruction mattered, so developers often wrote code entirely in assembly language simply to be able to physically fit their software into the available memory, and to be able to access the computer’s resources and internal workings.
Thus, all the source code for GW-BASIC is pure assembly code, translated on a per-processor/per-machine basis from core/master sources.
This source was ‘translated’?
Each of the assembly source files contains a header stating
This translation created 10-Feb-83 by Version 4.3
Since the Instruction Set Architecture (ISA) of the early processors used in home and personal computers weren’t spectacularly different from one another, Microsoft was able to generate a substantial amount of the code for a port from the sources of a master implementation. (Alas, sorry, we’re unable to open-source the ISA translator.)
What about other ports?
Many have asked if we can also open-source implementations for processors other than the 808x. Alas, we’re unable to provide sources for these ports and/or customizations.
We hope you enjoy exploring this fascinating snapshot of what software development looked like during the glorious, exciting, heady days of the ’70s and early ’80s at the dawn of “the personal computer” 😁
Many thanks to Amy, Julia Liuson, Amanda Silver, and our awesome CELA team for their approval and help finding, reviewing, and open-sourcing GW-BASIC.
Very cool, Rich. Thanks
When Microsoft released MS-DOS 2.0 and GWBASIC it make IBM clones run the same software as PC-DOS and BASICA from IBM. It started the PC Clone era.
Preserving the timestamp on files (“38 years ago”) before importing into Github was a nice touch!
This is not a timestamp on files. This is a commit date which anyone could set to anything as long as you have push rights to the repo.
Nice touch indeed, but not really a preservation 🙂
Yes, the code_of_conduct.md file is also dated “Feb 10, 1983” or about 21 years before the existence of MarkDown.
Any chance of opening Professional Basic 7.0? I can’t imagine it’s written in assembly. More likely it’s in C++.
PDS was QuickBASIC bundled with a few extra features & tools (inc. BASIC compiler). It was last released in 1990 – long before C++ became popular for commercial software development on the PC.
There may be some C in there, but there’s a 90% chance that 90% of the code was all assembler even then.
And, no, sorry, no plans to OSS QuickBASIC/PDS.
90% assembler is about right. I recall that portions of the QuickBasic UI were in C, but the interpreter, runtime, and compiler were all hand-coded assembler. Each code review looked for both size and speed optimizations, with size taking precidence, since we had to fit the user’s code and data into the scarce memory in addition to our own.
I still have a payroll app I built with this in production. Still own the manuals and probably have the floppy disks somewhere. It was a great platform for building custom DOS-based software.
I actually have DOSbox and PDS loaded for nostalgia. It’s a pain to work with, but it works.
So the only true way to bring it forward would be a complete rebuild of a QBasic compiler from scratch. Has anyone done that?
Yes, QB64 is cross-platform (Windows, Linux, macOS) even includes a QBasic-like IDE. Not sure if the source is being maintained anymore, but it doesn’t seem to be. Its forums don’t have any new posts since 2018.
QB64 underwent a brief period of stagnation a few years ago and the QB64.net domain was lost (it is unknown who currently owns it, but it appears to have been hacked). Thankfully, a number of dedicated contributors recreated the site, have built active forums, and are regularly releasing updates (including a debugger, interpreter, and VB-esque form builder) at http://www.qb64.org/
Highly recommend checking it out!
You can try this: https://github.com/QB64Team/qb64/releases/tag/v1.4
This is the forum: https://www.qb64.org/forum/
It runs well under Win 10 and accepted also QuickBasic 4.5 code; but not QB 4.01 code
I wonder what are the legal obstacles MS is facing (if any) when releasing such ancient software.
I know one big problem with open sourcing proprietary software is that they often rely on other proprietary software and/or patents associated with them. Finding open source, yet compatible, equivalents can be difficult. It’s why it took Id Software forever to open source the Doom 3 engine.
GW-BASIC only contains Microsoft-owned IP. It’s also one of the reasons why we cannot provide source for ports to specific OEM hardware – they often required or implemented customizations for their specific architecture, hardware, etc.
You think I’d risk my career by publishing Microsoft source code without fully reviewing with our legal teams? 😜
What about the “master sources” that you mention? While I understand that you can’t share the translator, that would give people quite a good insight on the process.
Ahh.. That explains why just the 8088 then… Bummer.. I think this is super cool for the retro computer community, and those building single board 8 bit computers of various types just for the learning experience (see Ben Eater’s 6502 series on Youtube for an awesome example!) but I was really hoping this had a chance of being extended eventually to the 6809 (for the TRS-80 COCO) but I guess there could be Tandy/Radio shack IP in there.. ugh..
Back in the 5150 PC days, when I learned Assembly, I remember just how much it helped to have the IBM published source code to the IBM BIOS. Now a new generation can use this to learn too!
Thanks for all the effort I’m sure this was.. I saw a thread just a few months ago discussing just how cold it would have to get in hell before this would happen, so although that specific discussion was about the 6502 C64 variant, I’m sure this was no small effort to get through all the red tape that would be protecting this in a company like Microsoft!
I used to have a Tandy/Radio Shack TRS-80 model 1 (with an Z80 processor) and wrote a disassembler in Basic to disassemble the 12K ROM and figured out large portions of the code and was very impressed! But I also noticed that some portions of the code were written for the 8080 and other portions also used the extended Z80 instructions. BTW. later I also wrote a TRS-80 emulator.
80s assembly code is something I’m not familiar with.
Anyone manage to rebuilt it?
There is the original Intel 8080 and later the Zilog Z80 (which is binary compatible but has extra instructions) and then Intel made the 8086 which is compatible on the assembler source code level but IBM used the Intel 8088, which is a 8086 with an external 8 bit (instead of 16 bit) data interface, which saves a lot on hardware costs.
What do you mean with rebuilding 80’s code?
Please add on the “releases” section of GW-BASIC and MS-DOS on GitHub precompiled … eh… I mean preassembled binaries
With which assembler was GW-BASIC and MS-DOS generated?
Which assembler can build it today?
I am very happy that Microsoft continues in the work of releasing the sources of its historical software, this is certainly a positive thing. But Rich, I must correct you for the short historical paragraphs that you wrote, you managed to insert a serious historical error: The Apple Lisa wasn’t the first commercially available computer with a GUI but it was the Xerox Star workstation, officially named Xerox 8010 Information System, Introduced by Xerox Corporation on April 27, 1981.
The Xerox Star (not to be confused with the 1973 Xerox Alto that wasn’t really a commercial system) was the first commercial system to incorporate a window-based graphical user interface with icons, folders, mouse (two-button), Ethernet networking, file servers, print servers, and also e-mail.
Then, I see that you love your first computer, the BBC Micro, but you’ve had to know that the BBC was hardly known outside UK, worldwide sales are very low. In 1983 the IT world was dominated by Commodore with the Vic 20 and the Commodore 64 (both of them had Microsoft Basic also), and also your beloved 6502 was made by Commodore (in 1983 “MOS Technology” was named “Commodore Semiconductor Group” and fully owned by Commodore).
Hey Carlo. Thanks – I should’ve been clearer: I don’t believe that the Star was available at retail – only via business-business sales, whereas that Lisa was available at retail. I’ll amend the text above.
While Commodore’s C64 and Vic20 (and PET, etc.) were indeed very popular here in the US and elsewhere in the world, and indeed in the UK too, the UK had its own explosion of computers:
The BBC Micro Mode A & B, and/or Electron were present in the majority of UK secondary schools, colleges, and universities throughout the ’80s. They were preceded by the Acorn Atom, and was followed by the Acorn Archimedes which hosted the (then quite novel) Acorn RISC Machine processor. The processor was later spun-off (at Apple’s behest) into Advanced RISC Machines (now ARM Holdings), and renamed the processor to the Advanced RISC Machine – ARM – … derivatives of which now run many of the smartphones we all carry around with us today.
Sinclair’s ZX-80, ZX-81, and ZX-Spectrum were also enormously popular (you may know clones offered by Timex. Also the Oric-1 and Oric Atmos, the Jupiter Ace (which used Forth as it’s programming language rather than BASIC).
The Research Machines (RM) LINK’s 380-Z and 480-Z were also popular in some schools and colleges. RM went on to be the major supplier of PC architecture machines into Schools and colleges throughout the UK and much of EMEA and Asia throughout the ’90s.
Interestingly, Apple had very little footprint in the UK & EMEA in the 80s and 90s – they were just sooo expensive when compared to home-grown tech and PC clones from Asia.
And yet … despite owning MOS, CSG continued to brand their processors MOS until the late ’80s 😜 I’ll make a note above.
Thank you very much for your reply! Yes, I know the computer history of England (and Europe in general) as I’m italian and in the 80’s I studied in England, my first computer was a Sinclair ZX Spectrum (I also was 13 years old in 1983).
Regarding the commercial issue or retail (in stores) I do not find relevant differences between the Xerox Star and the Lisa. They had similar commercial policies, dedicated to business and office programs, available in brand stores (Xerox also had its stores like Apple). Xerox also suffered from less recognition in the computer market as it was famous primarily for its photocopiers market domination. Both are to be considered commercial failures for very similar reasons, solved only by the Apple Macintosh which really was the first computer that popularized the window/icon interface and the mouse. So I would say that in general it cannot be said that the Lisa was the first available in stores or retail available since the availability of the Star was pretty the same, if you want you can say that the Lisa was the first Apple computer with icons and mouse, but in the end the most people of that time (like me) knew the mouse with the Apple Macintosh and for years nobody knew even about the existence of the Apple Lisa.
What I know is Steve from Apple scrapped the Lisa unit after he became incharge for Lisa. He treated Lisa was a failed product developed by ‘B’ class employees and layed off most of Lisa employees. Although Lisa is part of the Apple, he always treated it as rival.
My understanding is that nostalgic memories of the BBC Micro inspired the Raspberry Pi.
Actually, as Eben Upton himself generously put it:
“When we started Raspberry Pi, we had a simple goal: to increase the number of people applying to study Computer Science at Cambridge. By putting cheap, programmable computers in the hands of the right young people, we hoped that we might revive some of the sense of excitement about computing that we had back in the 1980s with our Sinclair Spectrums, BBC Micros and Commodore 64s.”
Another account from IEEE Spectrum:
“In 1988, 10-year-old Eben Upton bought his first computer: a beat-up, secondhand BBC Micro. This little machine was ubiquitous in British schools at the time, not least because it ran a simple programming language called BASIC, which Upton quickly mastered and used to create various games.”
Hey Jim! I am convinced that Eben & team’s approach and positioning was a major reason people paid attention to the Pi from even the earliest days. Note that the Pi wasn’t the first/only cheap single-board computer, but by plugging into the zeitgeist of the 80s I think they plumbed directly into the cerebral memory and pleasure centers of the brains of so many of us who got our start on simple, cheap (ish) home computers in the 80s.
I wonder jow many early Pi’s were bought for their kids by parents who’d spent most of their youth in front of a BBC, Electron, C64, Speccy, etc. 😜
Why ar you unable to open-source the Instruction Set Architecture (ISA) translator? Is it because you don’t have the source code or because it’s still a secret?
Guessing they used The Seattle Computer Products Z80 to 8086 Translator. You can find a version (2.21) of it’s source (trans.asm) in the MSDOS 1.25 source
I started programming BASIC in the fall of 1981: Luxor ABC80 and Sinclair ZX81 BASIC. About 1983 I learned Forth. It was in spring 1987 that I started to program in Microsoft GW-BASIC, and then I wrote programs to simulate physics, e.g. elastic pendulum in 2D, orbits, and heat conduction. I also programmed Turbo Pascal at this time, but we were required at University to hand in some assignments in GWBASIC. One of the programs later became a success when I translated it into Scratch in 2013: https://scratch.mit.edu/projects/11504974/. The GW-BASIC source code is there too in Notes and Credits section.