Although that date should really only apply to the `m6502.asm` file. I think for a historical archive accuracy should be important. For example when was it licensed under the MIT license, I assume fairly recently. The file date should reflect that.
Are GitHub commit timestamps stored as Unix epoch time? If so, could we get similar timestamp accuracy when working with historical source code from systems like UNIVAC?
The GIT_AUTHOR_DATE and GIT_COMMITTER_DATE environment variables[1] are what you use for things like that. (The former can also be overridden by the --date= option to git commit, and there’s also various situational stuff like --reset-author for git commit or --reset-author-date and --committer-date-is-author-date for git rebase. No, that last one is not parody.)
I have source I wrote using SCCS as version control, which later was moved to CVS, preserving the commits as well as commit dates, and at some point moved to Git, again preserving commits and dates. So some of my personal Git repositories have commit entries going back to the late eighties.
For any ordinary commit you can simply include "--date=" with the 'git commit' command, e.g. -m "This is an old change" --date="2001-03-02 18:05:47"
I really appreciate that they bothered to set an artificial timestamp for these git commits, roughly 30 years before Git itself existed. The thing is, the other files do, too, and the .gitignore is full of hilariously anachronistic references.
I don't think that the .gitignore file is meant to reflect anything about when this BASIC interpreter was written, it looks like it's just a MS managed .gitignore that accounts for everything that was ever popular for development in Visual Studio, even things that have been obsolete for decades. In order to handle your most legacy C#, F#, VB.NET, or Visual C++ solutions.
VB6 is as stretch, but I'd love to see Microsoft Visual Basic 1.0 for MS-DOS open-sourced.
It is the only DOS version of Visual Basic.
What is remarkable about VB for DOS is that it's a complete text-mode RAD IDE [1] for TUIs.
There is no TUI builder that I know of like it.
It is obscure and barely discussed by retrocomputing enthusiasts.
Your best resource outside of early-1990s books and magazines is a 2020 blog post [2] that demonstrates building a "Hello, world!" project with screenshots.
Google of 3 words Vermont Views, software still picks up several links
Borland Turbo Pascal and Borland Delphi where also (similar) products from around that time. These products where popular at the time. ( The development system provide include some kind of windows system for the application )
I'm very surprised it's organized as just a single 162 kB source document instead of being divided into smaller modules to make the code easier to work with, speed up build times, etc.
Were PDP-10 text editors of the day able to easily work with such large documents? And how long would it typically take to assemble all of that code in one go?
"7/27/78 FIXED BUG WHERE FOR VARIABLE AT BYTE FF MATCHED RETURN SEARCHING
FOR GOSUB ENTRY ON STACK IN FNDFOR CALL BY CHANGING STA FORPNT
TO STA FORPNT+1. THIS IS A SERIOUS BUG IN ALL VERSIONS."
Not far off from a comment I might make these days
This is great. I've been around since the BASIC days and I always found awesome that most older personal computers had a programming language available within seconds of turning the computer on!
I did a lot of hobby programming in BASIC. But I wonder how many commercial applications were written with it. Did small or big businesses write their own BASIC programs for internal needs?
The original version of Ultima I was written in a mixture of BASIC and assembly. BASIC is pretty slow, but most BASIC implementations let you call into optimized assembly routines.
Though, past a certain point of complexity, performance aside, assembly might be more readable than BASIC because BASIC relied on line numbers for jumping around, whereas assemblers offered named labels.
This is cool, my Dad has an old OSI (Ohio Scientific) computer circa 1978 that likely used this or similar version of BASIC. He fired it up a couple of years ago and it booted to the welcoming Micro-Soft message (I think it had a hyphen like that).
I'm really hoping that this will perhaps lead to other BASIC implementations being open sourced as well.
I've written a fully functional emulator for my first love, the Philips P2000T [1], but never released it because I couldn't find a legal way to distribute it. Most software for this machine requires the BASIC ROM, and even reverse engineering it might not be entirely legal.
If anyone knows where to address my requests to Microsoft, I'd be very happy to hear that.
Anyway, Id start with the Microsoft CEO. Id even email Bill Gates - he would have to"have some sway" if you could get his support - maybe internally ...?
May be the old authors of the software could request it be released.
Is it know who the authors of the ROM was?
OR
Even other hardware designers / workers who worked on original system - would bring interest to Microsoft and have to have some kind of positive momentum to such a request.
Is it possible to work out the reasons how other old Microsoft software was released ? I imagine there would be reluctance to release anything that they thought had commercial value?
As several products have been released over the years - there must be some offical or unoffical process
Legal would have to have input
I imagine there would be some close examination of software to verify , no negatives against Microsoft would / could he harboured in code OR found.
So it would take some resources - maybe several days as a guess - but I really have no idea ... For example probably would want to verify it can be rebuilt - maybe?? would need to setup old toolchains , old hardware etc
Also Some of these software may have been lost - could be embarrassing for Microsoft to admit this.
{Aside - I used to work as a software configuration manager for a larger company - whose job it was to ensure all project code was collect, ensure we capture all the artifacts ( source and deliverables etc ) so it could be reliably independently rebuilt. This included all needed tools etc etc]
Thanks for the suggestions. I tried my very best a few years ago, and the release of 6502 BASIC has lifted my spirits a bit, so I'll try again and see where it gets me :)
Unfortunately, the outlook for most Philips P2000T software is rather bleak, at least from a legal standpoint. The machine enjoyed only limited popularity, and commercial developers showed little interest in supporting it. As a result, much of the available software, particularly games, was written by hobbyists, and sharing through copied tapes was common practice.
In the Netherlands, where the P2000T had its strongest following, copying software was legally permitted until 1990. After that, it became prohibited. Complicating matters further, many original developers released their programs under pseudonyms and provided no contact details. One can obtain quite a lot of this software by buying second-hand machines and tapes. However, redistribution is not legally allowed. As the magnetic tapes gradually degrade, many titles risk being lost forever.
Regarding other BASIC versions: it's probably-abandonware rather than open source, but the (more than slightly inscrutable) source code for Acorn's 8-bit BBC BASIC is here: https://github.com/stardot/AcornDmosBasic (there are commented disassemblies available - you would probably find those more illuminating...)
(BBC BASIC is pretty horrid by modern standards, but you'll probably still like it more than Microsoft BASIC. Has arbitary length variable names, multi-dimensional arrays, integer variables, PROCs, FNs, and an inline assembler.)
It's likely that is is mostly just the standard Microsoft Basic with some modified I/O routines. Since Microsoft Basic is now under the MIT license you are free to modify the code, it may be relatively easy to re-implement the I/O routines and have a legal 'recreation' of the P2305 cartridge.
I don't see any credit being given to Digital Equipment Corporation (DEC) upon whose work this is based [1] [2] [3].
The quotes below only talk about OS source code, but they found language interpreter source code as well, see register story.
> "So, for a few years that is where I spent my time. I'd skip out on athletics and go down to this computer center. We were moving ahead very rapidly: BASIC, FORTRAN, LISP, PDP-10 machine language, digging out the operating system listings from the trash and studying those. Really not just banging away to find bugs like monkeys[laughs], but actually studying the code to see what was wrong." [4]
> "While his parents were concerned with his slipping grades, there was no slowing him down. He and Bill would go “dumpster diving” in C-Cubed’s garbage to find discarded printouts with source code for the machine’s operating system"
The most significant contribution that DEC BASIC made was the REPL-like "immediate mode" that lets you execute individual statements without having to RUN the whole program. It was copied by both Microsoft and almost every other BASIC implementation since. Being able to fiddle around with "PRINT 2+2" is so fundamental to the BASIC experience that it surprised me to learn that Kemeny & Kurtz didn't come up with it, DEC did. (It came from DEC's earlier language FOCAL, which had an "English-like" syntax and doesn't resemble BASIC in any other way, and probably ultimately from LISP.)
In that Basic 80 link (number 2) I would have expected another variant to be listed: Microsoft Basic for the Interact Home Computer which used an 8080 processor. BTW I still have my Interact in its box and the MS Basic on tape and some other stuff. Looking for a museum or appropriate place to send it.
I would try to computer history museum in Mountain View - they don’t accept everything, but if they want it it’d go to a super cool spot: https://computerhistory.org/acquisitions/
I saw an ebay listing for one of these Interact computers today and spent a little time learning about it on YouTube. It's so strange to see your post on the same day about a computer I didn't know existed yesterday.
The Microsoft BASIC language is similar to DEC BASIC, but the actual implementation is completely different. For example, DEC BASIC compiles the BASIC source code into bytecode as it's entered for faster execution, while Microsoft BASIC is a pure interpreter that simply interprets the source code tokens at runtime. You have to remember how different the memory-constrained 8-bit microcomputers were from a PDP-11. Even if Gates looked at the DEC BASIC source code, there wasn't much there that he could have used.
digging out the operating system listings from the trash and studying those.
A lot of us did the same thing in that era. It's surprising how much information can be learned from what others think is useless.
Thank you SUNY New Paltz and the IBM submarine facility (no idea what it was called) for not securing your Dumpsters. It's how I learned computing before it was taught in schools.
Back in those days, software was just an accessory to hardware, not something that was valuable and could be sold by itself. So they would not have thought to secure their dumpsters.
Bill Gates played a significant role in jumpstarting the commercial software industry, especially with his "An Open Letter to Hobbyists" in 1976, which urged people to pay for software.
DonHopkins on Sept 16, 2018 | parent | prev | next [–]
Speaking of weird BASIC features, does anyone know why DECSYSTEM 20's BASIC had a "LISTREVERSE" command?
Yes, it actually did exactly what it sounds like!
Chalk one up for DEC and BASIC. What other programming languages support that feature, huh?
DECSYSTEM 20 BASIC User's Guide: LISTREVERSE command
LISTREVERSE
LISTNHREVERSE
LISTREVERSE and LISTNHREVERSE print the contents of the
user's memory area in order of descending line numbers.
LISTREVERSE precedes the output with a heading,
LISTNHREVERSE eliminates the heading.
LISTREVERSE
EQUIV 10:53 13-NOV-75
40 END
35 PRINT "THE EQUIVALENT CURRENT IS",I, " AMPERES"
25 I=E1/R
10 INPUT R
5 INPUT E1
READY
All I can think of is that it was a way to look at the end of a long program which wouldn't all fit on a display. Predating, I suppose, the 'tail' program, or whatever the DECSYSTEM 20 equivalent was.
I assume that it would be clearly useful if your terminal was a slow paper teleprinter. Once you got used to reading listings with the lines in reverse order, which shouldn't really be very difficult, LISTREVERSE would let you start reading from wherever you had got up to in your partly-completed listing, then cancel whenever you'd got enough context, instead of having to guess in advance how far up the program you'd want to look. You could even then print out the same range of lines again unreversed, if you wanted.
Erum, none of your references show this (or come remotely close).
MS did base NT on DEC work, and settled a court case as a result. Perhaps you're thinking of that story?
BASIC the language pre-dates the DEC implementation (it came from Dartmouth College), and nobody would reasonably think that seeing the code for a high level language BASIC interpreter implementation for Machine A, then writing an assembler implementation for Machine B means you "based it on their work".
It may be widely considered, but that doesn't mean it's an accurate assertion.
The internal structure of DEC BASIC PLUS is a far, far cry from what MS-BASIC (MSB) is. Outside of some shared syntax, the implementations are night and day.
BASIC+ (B+) is compiled to p-code, not tokenized and then interpreted. Those are completely different runtime approaches. B+ has a raw text source that is edited and maintained by the runtime, MSB does not. After you hit ENTER on MSB, your "source code" is gone. It's converted, and not necessarily losslessly, into an internal tokenized form. That tokenized form is read and recreated into the source lines you see when you LIST the program.
This scratch text file for the B+ program actually allows B+ to work in even more memory starved environments than MSB because the text is never fully loaded into RAM, so the bulk of RAM is compiled byte codes and data. You also don't have to "pay" for having extra spaces in your code, as the raw text does not impact that actual runtime size in contrast to MSB tokenized form.
B+, being compiled, supported much different styles of things like loops and if statements.
10 ODDSUM=ODDSUM + A(I) IF A(I) MOD 2 = 0 FOR I = 1 TO 10
MS-BASIC can not handle that properly with it tokenizer based system.
On the surface, they look similar with their interactive development environment. Internally, it was a completely different story.
Right, though there's two or three different questions here: whether DEC BASIC influenced MS BASIC, whether MS should have acknowledged that today, and whether DEC BASIC's influence on MS BASIC amounted to a copyright violation. On the last question, my guess would be that there's at least a reasonable argument that MS' use of the DEC BASIC code was transformative enough to get it off the hook, but IANAL. To the extent that it is in a grey area, honestly that's probably a good reason for MS to keep a diplomatic silence about any possible DEC influence today.
But that doesn't mean that there aren't two or three questions, just that there there are answers to which I, and most people here, aren't privy. And, sure, that wouldn't come as a suprise.
It definitely democratized programming. There were a lot of us buying home computers and writing little programs that nobody ever saw. Nothing commercial ever came of the little utilities or games we made.
Before we got our home computer, the closest I ever got to a computer was reading about them in the encyclopedia.
What Stallman did a decade later was great if you happened to have access to the type of computer that could run Emacs. Even then, you probably didn't own the machine and maybe even had to pay for time on it by the hour. The small machines that ran Microsoft Basic were in people's homes.
Yeah, my Commodore 128 came with a 400-page system guide, nearly half of which was a BASIC reference and programming tutorial that explained concepts like looping and arrays. Those computers assumed you might want to program at least a little, and tried to make it easy to get started, so a lot of us did.
BASIC put programming in reach of a wide range of people. Steve Wozniak himself documented his personal progression from implementing a Breakout game with gates (see [1]) to implementing it in 6502 assembly to implementing it in BASIC [2]
You could have that BASIC experience on a minicomputer like the PDP-8, 11, or 20 which you might have at a high school or college earlier but with microcomputers you could have it in elementary school or at home.
Kemeny and Kurtz's BASIC was an ahead-of-time compiled language which ran on time-shared machines; mainframes at first then smaller "mini"-computers. The typical interpreted BASIC for microcomputers was quite a bit simpler than that.
What editor did they use to write this code? I think this predated vi, and folks were probably using older tools they were familiar with. ed? How much of the source code could they see at once? Was there such thing as a "full screen editor"? If anyone can illuminate the development environment/workflow from the late 1970s I'd love to hear about it.
I don't know my history well enough to answer your question, but you can see one approach to the 1970s computing experience in this excellent video series about the Altair 8800 by deramp5113 on YouTube: https://www.youtube.com/playlist?list=PLB3mwSROoJ4KLWM8KwK0c...
While the bullshit generator might think it's "Compatible with period assemblers for 6502 development", that's a weird-ass cross assembler. For my money, a commented disassembly like https://6502disassembly.com/a2-rom/Applesoft.html using a more standard assembler is easier to read. It's interesting to compare the two though.
It's not that weird, and it's a lot simpler. It maps directly to how the opcodes are represented in the binary machine code and saves the effort of parsing and pretty-printing the standard syntax. With a different ISA one might argue that there's simply too many insn+addressing mode combinations to represent each with its own mnemonic, but this doesn't really apply to something as simple as the 6502.
I'd say it's definitely weird for a standalone assembler. For standalone 6502 assemblers, some approximation of the standard MOS-type syntax has always been near-universal. Though you're quite correct about some of the advantages of doing it this way.
And, also, there are probably assemblers smooshed into Forth or Lisp (or implemented with assembler macros for an assembler targeting some completely unrelated CPU) that work in a similar way, because you're limited by the pre-existing syntax rules. But that feels like a separate category
I had my Commodore PET for 10 years from 1977 to 1987 until I went away and my cousin borrowed it, and then believing I was not coming back to the US from Spain, sold it!
I loved the cassette drive and all-in-one chassis. Ah, typing in programs from magazines and creating programs from scratch with PET graphics on the keys! I miss those days. So much wonder and fun.
I did self-learned programming on an PET with the half-sized keyboard and cassette deck at highschool starting 1980. After 3 weeks or so I had filled the 7 KB of memory and needed to optimize GOTO commands by rearrangign the code. Every digit in the line number took 1 Byte, so many GOTO 20000 were wasteful. The trick to reveal the Microsoft text was known, but nobody knew what company that was. The PC did not exist yet.
My next step was Pascal on a VAX at Uni. Never looked back to PET or Microsoft. Linux user today.
I cannot recommend enough Ben Eater's 6502 computer build on YouTube[1] if you want to play with a 6502 computer from the ground up. It is meant to be accessible to the ambitious amateur. It is roughly Apple 1 compatible, and he has videos on how to add new commands in Microsoft BASIC as well as how to modify Microsoft BASIC to support the computer.
Seeing him git clone Microsoft BASIC and make the changes atop it was definitely a weird but awesome moment.[2]
That recent "purchase of Commodore" by some Youtuber... it doesn't really include the distribution rights of the C64 ROM containing (a newer version of) this 6502 Basic, right?
IP of the original Commodore kinda got scattered after the breakup in the 1990s. The Youtuber AIUI have the trademarks, so they can call themselves Commodore, and sell Commodore branded computers.
The original C64 ROMs (along with AmigaOS) are owned by a company called Cloanto. (Well, I suspect with Amiga OS in particular, it's probably more complicated than that). Not sure if you have to licence MS BASIC separately, or if the favourable deal Jack Tramiel negotiated way back when still covers it.
This split is why the mini C64/A500 units a few years back had actual Commodore software, but didn't have Commodore branding, as they could get a deal with Cloanto, but not the previous owners of the C= logo etc.
The new Commodore folks seem to be on friendly terms with Cloanto, so this MIT-licensed release from Microsoft is great news for them and I wonder if it was partly instigated by the Commodore developments. If only because, in principle, it saves everyone the effort and cost of having a difficult negotiation over something as silly as the purported IP value of those old BASIC ROMs.
A long time ago my uncle gave me his old Exidy Sorceror, Z80/S100 system. It came with MS BASIC V1.0 on a ROM cartridge. Sadly I never copied the image. Sold it to a collector in Germany IIRC.
That readme is obviously AI generated. I’m happy for anything this historical being open sourced, but I now wonder what the AI has done to the code itself. What a shame.
I assume AI only generated the readme file. But I would say if AI boilerplate eases Microsoft releasing more of their old code to the public, I am okay with that.
Microsoft recently closed a 7 year old .NET documentation bug I opened using Copilot. I am not a fan of AI but the submitted fix was far superior to the basically useless message that had been previously present, so net positive. At being ignored for 7 years, it was unlikely to get better from human effort.
I wouldn't assume that at all. If they're using AI for something as trivial as a readme, I think it is a very safe assumption that that's not all they're using it for.
I wish code repos had a "contaminated by AI" flag.
Why do you have any reason to believe AI generated any of the 6502 code? What possible reason or motivation could there be for that? Wouldn't it spoil the entire reason for releasing it, totally miss the point of releasing original historic code? Who might possibly benefit by doing that? Are you just making up baseless conspiracy theories or do you have any factual basis for that accusation?
Seems hypocritical for a human being to hallucinate a conspiracy theory about LLMs, with no evidence whatsoever.
There's the "WAIT 6502,X" Easter egg[0]!
Lines 6530 - 6539 are the "MICROSOFT!" that gets printed.
Line 4914 is the code to check the address passed to WAIT and, if correct, print the "MICROSOFT!".
It really is inconspicuous. A source licensee definitely wouldn't find it by quickly perusing.
[0] https://www.pagetable.com/?p=43
I love how the initial commit is "48 years ago."
If you enjoyed the datestamps on that repository, you will definitely enjoy the datestamps on this one:
* https://github.com/dspinellis/unix-history-repo
You'll also enjoy the contributors list.
I recently diffed Unix 10 and NetBSD to see if or how many common actual byte-for-byte original code I could find. I found some.
Man, imagine a 2.5k line kernel. You could probably fully understand how part of the computer works.
2.5 lines of J, K, or some other APL-family language?
https://news.ycombinator.com/item?id=13590065
How do you write half a line of code?
Odd, I guess my autocorrect got rid of the k. Thanks! Luckily the edit window was still open.
Do you know about half button presses?
Although that date should really only apply to the `m6502.asm` file. I think for a historical archive accuracy should be important. For example when was it licensed under the MIT license, I assume fairly recently. The file date should reflect that.
because MS owns GitHub, so they manipulated the Db/Storage to change the commit date after the fact?
I love even more how it's a .md file from well before Markdown even existed.
I bet it being a Git repo must straight up feel otherwordly then.
It's just a nice touch.
No, skynet went to the past and gave git and md to microsoft, which then proceeded to create the doc format from the md as a starting point :P
Way before git was even released in 2005.
I wish they set the author to the appropriate person. I assume Bill Gates.
Are GitHub commit timestamps stored as Unix epoch time? If so, could we get similar timestamp accuracy when working with historical source code from systems like UNIVAC?
Yes, somebody could doctor those commits with the right timestamp so that we would get a clear historical progression.
It's doable, but would have to doctored, there was no git then, obviously.
Even if it was a 32-bit timestamp, you could still express dates back to December 13, 1901.
I noticed that right away, too - I didn't know you could force backdates of git history like that.
The GIT_AUTHOR_DATE and GIT_COMMITTER_DATE environment variables[1] are what you use for things like that. (The former can also be overridden by the --date= option to git commit, and there’s also various situational stuff like --reset-author for git commit or --reset-author-date and --committer-date-is-author-date for git rebase. No, that last one is not parody.)
[1] https://git-scm.com/docs/git-commit#_commit_information
I have source I wrote using SCCS as version control, which later was moved to CVS, preserving the commits as well as commit dates, and at some point moved to Git, again preserving commits and dates. So some of my personal Git repositories have commit entries going back to the late eighties.
For any ordinary commit you can simply include "--date=" with the 'git commit' command, e.g. -m "This is an old change" --date="2001-03-02 18:05:47"
All git data can be modified
Thanks!
I really appreciate that they bothered to set an artificial timestamp for these git commits, roughly 30 years before Git itself existed. The thing is, the other files do, too, and the .gitignore is full of hilariously anachronistic references.
Speaking about .gitignore. What is this?
I could only find this: https://github.com/MonzUn/MightyMooseCoreLink to the file: https://github.com/microsoft/BASIC-M6502/blob/main/.gitignor...
Regardless, thank you Mr. Hanselman. This is great!
Looks to be for "Continuous Tests" [0] found through git blame [1]
[0] https://continuoustests.com/
[1] https://github.com/github/gitignore/commit/2183a6c531d7085e2...
I think it's that.
I don't think that the .gitignore file is meant to reflect anything about when this BASIC interpreter was written, it looks like it's just a MS managed .gitignore that accounts for everything that was ever popular for development in Visual Studio, even things that have been obsolete for decades. In order to handle your most legacy C#, F#, VB.NET, or Visual C++ solutions.
ditto! It was really a nice touch (pun intended since touch is what I'd use to produce such timestamps)
I'm trying for Visual Basic 6 to show up on GitHub someday.
VB6 is as stretch, but I'd love to see Microsoft Visual Basic 1.0 for MS-DOS open-sourced. It is the only DOS version of Visual Basic. What is remarkable about VB for DOS is that it's a complete text-mode RAD IDE [1] for TUIs. There is no TUI builder that I know of like it. It is obscure and barely discussed by retrocomputing enthusiasts. Your best resource outside of early-1990s books and magazines is a 2020 blog post [2] that demonstrates building a "Hello, world!" project with screenshots.
[1] https://en.wikipedia.org/wiki/Graphical_user_interface_build...
[2] https://www.cloudwisp.com/exploring-visual-basic-1-0-for-ms-...
Microsoft Visual Basic 1.0 for MSDOS -
Sounds like competitor For Vermont Views or the previous product Windows for Data and windows for C
No sure of the names ... my recollection this software was in use in early 90s and maybe late 80s
Google of 3 words Vermont Views, software still picks up several links
Borland Turbo Pascal and Borland Delphi where also (similar) products from around that time. These products where popular at the time. ( The development system provide include some kind of windows system for the application )
Microsoft even hired key Delphi person ....
Same. This got me smiling, from some days ago:
Visual Basic 6 rebuilt in C# – complete with form designer and IDE in browser
https://news.ycombinator.com/item?id=42105869
I'm very surprised it's organized as just a single 162 kB source document instead of being divided into smaller modules to make the code easier to work with, speed up build times, etc.
Were PDP-10 text editors of the day able to easily work with such large documents? And how long would it typically take to assemble all of that code in one go?
Love the comments:
"7/27/78 FIXED BUG WHERE FOR VARIABLE AT BYTE FF MATCHED RETURN SEARCHING FOR GOSUB ENTRY ON STACK IN FNDFOR CALL BY CHANGING STA FORPNT TO STA FORPNT+1. THIS IS A SERIOUS BUG IN ALL VERSIONS."
Not far off from a comment I might make these days
https://github.com/microsoft/BASIC-M6502/blob/main/m6502.asm...
This is great. I've been around since the BASIC days and I always found awesome that most older personal computers had a programming language available within seconds of turning the computer on!
I did a lot of hobby programming in BASIC. But I wonder how many commercial applications were written with it. Did small or big businesses write their own BASIC programs for internal needs?
The original version of Ultima I was written in a mixture of BASIC and assembly. BASIC is pretty slow, but most BASIC implementations let you call into optimized assembly routines.
Though, past a certain point of complexity, performance aside, assembly might be more readable than BASIC because BASIC relied on line numbers for jumping around, whereas assemblers offered named labels.
The original version of Ultima I was written in a mixture of BASIC and assembly.
True that. Who could forget "One moment for house-cleaning!"
(... uh, everybody?)
This is cool, my Dad has an old OSI (Ohio Scientific) computer circa 1978 that likely used this or similar version of BASIC. He fired it up a couple of years ago and it booted to the welcoming Micro-Soft message (I think it had a hyphen like that).
I'm really hoping that this will perhaps lead to other BASIC implementations being open sourced as well.
I've written a fully functional emulator for my first love, the Philips P2000T [1], but never released it because I couldn't find a legal way to distribute it. Most software for this machine requires the BASIC ROM, and even reverse engineering it might not be entirely legal.
If anyone knows where to address my requests to Microsoft, I'd be very happy to hear that.
[1] https://en.wikipedia.org/wiki/Philips_P2000
Maybe a Microsoft employee could give some hints?
Anyway, Id start with the Microsoft CEO. Id even email Bill Gates - he would have to"have some sway" if you could get his support - maybe internally ...?
May be the old authors of the software could request it be released. Is it know who the authors of the ROM was? OR Even other hardware designers / workers who worked on original system - would bring interest to Microsoft and have to have some kind of positive momentum to such a request.
Is it possible to work out the reasons how other old Microsoft software was released ? I imagine there would be reluctance to release anything that they thought had commercial value?
As several products have been released over the years - there must be some offical or unoffical process
Legal would have to have input
I imagine there would be some close examination of software to verify , no negatives against Microsoft would / could he harboured in code OR found.
So it would take some resources - maybe several days as a guess - but I really have no idea ... For example probably would want to verify it can be rebuilt - maybe?? would need to setup old toolchains , old hardware etc
Also Some of these software may have been lost - could be embarrassing for Microsoft to admit this.
{Aside - I used to work as a software configuration manager for a larger company - whose job it was to ensure all project code was collect, ensure we capture all the artifacts ( source and deliverables etc ) so it could be reliably independently rebuilt. This included all needed tools etc etc]
Thanks for the suggestions. I tried my very best a few years ago, and the release of 6502 BASIC has lifted my spirits a bit, so I'll try again and see where it gets me :)
Unfortunately, the outlook for most Philips P2000T software is rather bleak, at least from a legal standpoint. The machine enjoyed only limited popularity, and commercial developers showed little interest in supporting it. As a result, much of the available software, particularly games, was written by hobbyists, and sharing through copied tapes was common practice.
In the Netherlands, where the P2000T had its strongest following, copying software was legally permitted until 1990. After that, it became prohibited. Complicating matters further, many original developers released their programs under pseudonyms and provided no contact details. One can obtain quite a lot of this software by buying second-hand machines and tapes. However, redistribution is not legally allowed. As the magnetic tapes gradually degrade, many titles risk being lost forever.
Regarding other BASIC versions: it's probably-abandonware rather than open source, but the (more than slightly inscrutable) source code for Acorn's 8-bit BBC BASIC is here: https://github.com/stardot/AcornDmosBasic (there are commented disassemblies available - you would probably find those more illuminating...)
(BBC BASIC is pretty horrid by modern standards, but you'll probably still like it more than Microsoft BASIC. Has arbitary length variable names, multi-dimensional arrays, integer variables, PROCs, FNs, and an inline assembler.)
I feel like Raymond Chen [0] might be a good place to start.
[0] https://devblogs.microsoft.com/oldnewthing/author/oldnewthin...
which basic rom is needed?
It's the P2305 cartridge, originally sold as "Module microsoft basic interpreter" [1], [2]. It's jointly copyrighted by Microsoft and Philips.
I have discussed this with Philips [3] a few years ago, and they were open to sharing it, but I could not find a contact at Microsoft.
[1] https://archive.org/details/20230420_20230420_1351
[2] https://www.retrocomputing.nl/p2000-basic-cartridge/
[3] https://github.com/philips-software
Edit: for reference, the startup screen shows
It's likely that is is mostly just the standard Microsoft Basic with some modified I/O routines. Since Microsoft Basic is now under the MIT license you are free to modify the code, it may be relatively easy to re-implement the I/O routines and have a legal 'recreation' of the P2305 cartridge.
Jointly copyright would have to make it moore complicated ....
I don't see any credit being given to Digital Equipment Corporation (DEC) upon whose work this is based [1] [2] [3].
The quotes below only talk about OS source code, but they found language interpreter source code as well, see register story.
> "So, for a few years that is where I spent my time. I'd skip out on athletics and go down to this computer center. We were moving ahead very rapidly: BASIC, FORTRAN, LISP, PDP-10 machine language, digging out the operating system listings from the trash and studying those. Really not just banging away to find bugs like monkeys[laughs], but actually studying the code to see what was wrong." [4]
> "While his parents were concerned with his slipping grades, there was no slowing him down. He and Bill would go “dumpster diving” in C-Cubed’s garbage to find discarded printouts with source code for the machine’s operating system"
[1] https://en.wikipedia.org/wiki/BASIC-PLUS#Comparison_to_MS_BA...
[2] https://everybasic.info/doku.php/basics/decbasic#influence_f...
[4] https://americanhistory.si.edu/comphist/gates.htm
[3] https://www.theregister.com/2000/06/29/bill_gates_roots/
[5] https://paulallen.com/Futurist/Microsoft.aspx
The most significant contribution that DEC BASIC made was the REPL-like "immediate mode" that lets you execute individual statements without having to RUN the whole program. It was copied by both Microsoft and almost every other BASIC implementation since. Being able to fiddle around with "PRINT 2+2" is so fundamental to the BASIC experience that it surprised me to learn that Kemeny & Kurtz didn't come up with it, DEC did. (It came from DEC's earlier language FOCAL, which had an "English-like" syntax and doesn't resemble BASIC in any other way, and probably ultimately from LISP.)
Kemeny and Kurtz BASIC was compiled so the lack of a REPL makes sense.
In that Basic 80 link (number 2) I would have expected another variant to be listed: Microsoft Basic for the Interact Home Computer which used an 8080 processor. BTW I still have my Interact in its box and the MS Basic on tape and some other stuff. Looking for a museum or appropriate place to send it.
I would try to computer history museum in Mountain View - they don’t accept everything, but if they want it it’d go to a super cool spot: https://computerhistory.org/acquisitions/
I saw an ebay listing for one of these Interact computers today and spent a little time learning about it on YouTube. It's so strange to see your post on the same day about a computer I didn't know existed yesterday.
Chances are the tape is no longer readable.
The Microsoft BASIC language is similar to DEC BASIC, but the actual implementation is completely different. For example, DEC BASIC compiles the BASIC source code into bytecode as it's entered for faster execution, while Microsoft BASIC is a pure interpreter that simply interprets the source code tokens at runtime. You have to remember how different the memory-constrained 8-bit microcomputers were from a PDP-11. Even if Gates looked at the DEC BASIC source code, there wasn't much there that he could have used.
digging out the operating system listings from the trash and studying those.
A lot of us did the same thing in that era. It's surprising how much information can be learned from what others think is useless.
Thank you SUNY New Paltz and the IBM submarine facility (no idea what it was called) for not securing your Dumpsters. It's how I learned computing before it was taught in schools.
Back in those days, software was just an accessory to hardware, not something that was valuable and could be sold by itself. So they would not have thought to secure their dumpsters.
Bill Gates played a significant role in jumpstarting the commercial software industry, especially with his "An Open Letter to Hobbyists" in 1976, which urged people to pay for software.
We pulled a lot of hardware out of those, too.
;)
https://news.ycombinator.com/item?id=17998940
DonHopkins on Sept 16, 2018 | parent | prev | next [–]
Speaking of weird BASIC features, does anyone know why DECSYSTEM 20's BASIC had a "LISTREVERSE" command?
Yes, it actually did exactly what it sounds like!
Chalk one up for DEC and BASIC. What other programming languages support that feature, huh?
http://www.bitsavers.org/www.computer.museum.uq.edu.au/pdf/D...All I can think of is that it was a way to look at the end of a long program which wouldn't all fit on a display. Predating, I suppose, the 'tail' program, or whatever the DECSYSTEM 20 equivalent was.
I assume that it would be clearly useful if your terminal was a slow paper teleprinter. Once you got used to reading listings with the lines in reverse order, which shouldn't really be very difficult, LISTREVERSE would let you start reading from wherever you had got up to in your partly-completed listing, then cancel whenever you'd got enough context, instead of having to guess in advance how far up the program you'd want to look. You could even then print out the same range of lines again unreversed, if you wanted.
When you want to see the beginning of the program, but the terminal you're using is too laggy to send ^S in time to pause the listing?
Unlikely. LIST and LISTNH took an optional line number range.
> upon whose work this is based
Erum, none of your references show this (or come remotely close).
MS did base NT on DEC work, and settled a court case as a result. Perhaps you're thinking of that story?
BASIC the language pre-dates the DEC implementation (it came from Dartmouth College), and nobody would reasonably think that seeing the code for a high level language BASIC interpreter implementation for Machine A, then writing an assembler implementation for Machine B means you "based it on their work".
MS BASIC is widely considered to have been based on the internal structure of DEC BASIC.
It may be widely considered, but that doesn't mean it's an accurate assertion.
The internal structure of DEC BASIC PLUS is a far, far cry from what MS-BASIC (MSB) is. Outside of some shared syntax, the implementations are night and day.
BASIC+ (B+) is compiled to p-code, not tokenized and then interpreted. Those are completely different runtime approaches. B+ has a raw text source that is edited and maintained by the runtime, MSB does not. After you hit ENTER on MSB, your "source code" is gone. It's converted, and not necessarily losslessly, into an internal tokenized form. That tokenized form is read and recreated into the source lines you see when you LIST the program.
This scratch text file for the B+ program actually allows B+ to work in even more memory starved environments than MSB because the text is never fully loaded into RAM, so the bulk of RAM is compiled byte codes and data. You also don't have to "pay" for having extra spaces in your code, as the raw text does not impact that actual runtime size in contrast to MSB tokenized form.
B+, being compiled, supported much different styles of things like loops and if statements.
MS-BASIC can not handle that properly with it tokenizer based system.On the surface, they look similar with their interactive development environment. Internally, it was a completely different story.
Right, though there's two or three different questions here: whether DEC BASIC influenced MS BASIC, whether MS should have acknowledged that today, and whether DEC BASIC's influence on MS BASIC amounted to a copyright violation. On the last question, my guess would be that there's at least a reasonable argument that MS' use of the DEC BASIC code was transformative enough to get it off the hook, but IANAL. To the extent that it is in a grey area, honestly that's probably a good reason for MS to keep a diplomatic silence about any possible DEC influence today.
there's two or three different questions here
Only if you weren't there.
You won't find the answers to everything online.
But that doesn't mean that there aren't two or three questions, just that there there are answers to which I, and most people here, aren't privy. And, sure, that wouldn't come as a suprise.
that Readme smells of LLMs and elderberries
QuillBot reports 100% AI for section "Why This Document is Historically Important"
> It democratized programming
Yawn. Everything “democratizes” everything these days.
I think it commercialized programming. True democratization didn't really happen until Stallman, GCC, and the GPL.
It definitely democratized programming. There were a lot of us buying home computers and writing little programs that nobody ever saw. Nothing commercial ever came of the little utilities or games we made.
Before we got our home computer, the closest I ever got to a computer was reading about them in the encyclopedia.
What Stallman did a decade later was great if you happened to have access to the type of computer that could run Emacs. Even then, you probably didn't own the machine and maybe even had to pay for time on it by the hour. The small machines that ran Microsoft Basic were in people's homes.
Yeah, my Commodore 128 came with a 400-page system guide, nearly half of which was a BASIC reference and programming tutorial that explained concepts like looping and arrays. Those computers assumed you might want to program at least a little, and tried to make it easy to get started, so a lot of us did.
BASIC put programming in reach of a wide range of people. Steve Wozniak himself documented his personal progression from implementing a Breakout game with gates (see [1]) to implementing it in 6502 assembly to implementing it in BASIC [2]
You could have that BASIC experience on a minicomputer like the PDP-8, 11, or 20 which you might have at a high school or college earlier but with microcomputers you could have it in elementary school or at home.
[1] https://thedoteaters.com/?bitstory=bitstory-article-2/breako...
[2] http://blog.hardcoregaming101.net/2012/09/basic-history-of-b...
How about when they invented BASIC
by "they" do you mean Kemeny and Kurtz at Dartmouth, back in the early 60s?
Kemeny and Kurtz's BASIC was an ahead-of-time compiled language which ran on time-shared machines; mainframes at first then smaller "mini"-computers. The typical interpreted BASIC for microcomputers was quite a bit simpler than that.
Pretty sure linguistically the important bit is "when" and the "they" is not defined
Like when awaiting pizza delivery, "they're here in 10 mins" doesn't directly relate to a specific guy
Could be wrong though
And no, to answer your question
Who cares?
The "48 years ago" detail for the commit date is genius.
thanks!
i believe the markdown docs weren't 48y ago though /pedantic-scarcasm
What editor did they use to write this code? I think this predated vi, and folks were probably using older tools they were familiar with. ed? How much of the source code could they see at once? Was there such thing as a "full screen editor"? If anyone can illuminate the development environment/workflow from the late 1970s I'd love to hear about it.
I don't know my history well enough to answer your question, but you can see one approach to the 1970s computing experience in this excellent video series about the Altair 8800 by deramp5113 on YouTube: https://www.youtube.com/playlist?list=PLB3mwSROoJ4KLWM8KwK0c...
There were fullscreen editors. You can see one with a 1978 copyright date at about 14:45 in this video: https://www.youtube.com/watch?v=YQNHg1XuFR4
in 1978, emacs was a possibility
but i'm gonna guess SOS or TECO, if they were running a bog standard PDP-10 OS from DEC
Looks like the comments were sanitized but they missed some:
> CHKVAL: BIT VALTYP ;WILL NOT F UP "VALTYP".
I wrote a replica of the Macintosh in my game using Lua and Classic BASIC on my homemade engine. You can check it here:
http://reprobate.site/?stage=pearintosh
Happy to see it works for the KIM-1.
But you'll need one of the 8K boards ...
While the bullshit generator might think it's "Compatible with period assemblers for 6502 development", that's a weird-ass cross assembler. For my money, a commented disassembly like https://6502disassembly.com/a2-rom/Applesoft.html using a more standard assembler is easier to read. It's interesting to compare the two though.
to expand on that, this assembler include the address mode as part of the instruction opcode rather than as part of the operand.
normal:
weird:It's not that weird, and it's a lot simpler. It maps directly to how the opcodes are represented in the binary machine code and saves the effort of parsing and pretty-printing the standard syntax. With a different ISA one might argue that there's simply too many insn+addressing mode combinations to represent each with its own mnemonic, but this doesn't really apply to something as simple as the 6502.
I'd say it's definitely weird for a standalone assembler. For standalone 6502 assemblers, some approximation of the standard MOS-type syntax has always been near-universal. Though you're quite correct about some of the advantages of doing it this way.
(I say "near universal", because Acorn's MASM had a similar syntax. (See, e.g., https://github.com/stardot/AcornDmosBasic/blob/master/src/DB...) I don't remember ever seeing that described as anything other than an oddity.)
And, also, there are probably assemblers smooshed into Forth or Lisp (or implemented with assembler macros for an assembler targeting some completely unrelated CPU) that work in a similar way, because you're limited by the pre-existing syntax rules. But that feels like a separate category
First assembly language I learned was 6502 for the Apple II. Brings back some memories (...once I scrolled way way way down to actual 6502 code!).
I cut my teeth on that language, and still keep a Commodore PET around for old times sake.
I had my Commodore PET for 10 years from 1977 to 1987 until I went away and my cousin borrowed it, and then believing I was not coming back to the US from Spain, sold it!
I loved the cassette drive and all-in-one chassis. Ah, typing in programs from magazines and creating programs from scratch with PET graphics on the keys! I miss those days. So much wonder and fun.
I did self-learned programming on an PET with the half-sized keyboard and cassette deck at highschool starting 1980. After 3 weeks or so I had filled the 7 KB of memory and needed to optimize GOTO commands by rearrangign the code. Every digit in the line number took 1 Byte, so many GOTO 20000 were wasteful. The trick to reveal the Microsoft text was known, but nobody knew what company that was. The PC did not exist yet.
My next step was Pascal on a VAX at Uni. Never looked back to PET or Microsoft. Linux user today.
I had such a good time on my Commodore 64
I cannot recommend enough Ben Eater's 6502 computer build on YouTube[1] if you want to play with a 6502 computer from the ground up. It is meant to be accessible to the ambitious amateur. It is roughly Apple 1 compatible, and he has videos on how to add new commands in Microsoft BASIC as well as how to modify Microsoft BASIC to support the computer.
Seeing him git clone Microsoft BASIC and make the changes atop it was definitely a weird but awesome moment.[2]
[1] https://youtube.com/playlist?list=PLowKtXNTBypFbtuVMUVXNR0z1...
[2] https://youtu.be/XlbPnihCM0E
That recent "purchase of Commodore" by some Youtuber... it doesn't really include the distribution rights of the C64 ROM containing (a newer version of) this 6502 Basic, right?
IP of the original Commodore kinda got scattered after the breakup in the 1990s. The Youtuber AIUI have the trademarks, so they can call themselves Commodore, and sell Commodore branded computers.
The original C64 ROMs (along with AmigaOS) are owned by a company called Cloanto. (Well, I suspect with Amiga OS in particular, it's probably more complicated than that). Not sure if you have to licence MS BASIC separately, or if the favourable deal Jack Tramiel negotiated way back when still covers it.
This split is why the mini C64/A500 units a few years back had actual Commodore software, but didn't have Commodore branding, as they could get a deal with Cloanto, but not the previous owners of the C= logo etc.
The new Commodore folks seem to be on friendly terms with Cloanto, so this MIT-licensed release from Microsoft is great news for them and I wonder if it was partly instigated by the Commodore developments. If only because, in principle, it saves everyone the effort and cost of having a difficult negotiation over something as silly as the purported IP value of those old BASIC ROMs.
Thanks. Odd product portfolio: https://cloanto.com/
What's the timeline of BASICs here? I thought GW-Basic was the MS one of my youth after Altair?
More details in the blog post: https://opensource.microsoft.com/blog/2025/09/03/microsoft-o...
GW-Basic was the IBM PC port. Kind of more consequential no?
` LDWDI WORDS ;MORE BULLSHIT.`
I think, it's the first time I saw "48 years ago" in the most recent change column on Github.
Now release the Z80 port!
A long time ago my uncle gave me his old Exidy Sorceror, Z80/S100 system. It came with MS BASIC V1.0 on a ROM cartridge. Sadly I never copied the image. Sold it to a collector in Germany IIRC.
https://github.com/microsoft/BASIC-M6502/blob/main/m6502.asm...
> SECURITY.md
Never change, bureaucracy :)
If you love that, check out the auto/AI generated issues:
https://github.com/microsoft/BASIC-M6502/issues/5
https://github.com/microsoft/BASIC-M6502/issues/3
https://github.com/microsoft/BASIC-M6502/issues/1
sigh
Blog post: https://opensource.microsoft.com/blog/2025/09/03/microsoft-o...
Thanks! We'll add that link to the top text above.
That readme is obviously AI generated. I’m happy for anything this historical being open sourced, but I now wonder what the AI has done to the code itself. What a shame.
Well, we can be pretty sure it didn't touch comments :)
> 12/1/77 FIXED PROBLEM WHERE PROBLEM WITH VARTXT=LINNUM=BUF-2 CAUSING BUF-1 COMMA TO DISAPPEAR
They now have OKRs to use AI everywhere, even .NET tooling is getting AI tainted.
I assume AI only generated the readme file. But I would say if AI boilerplate eases Microsoft releasing more of their old code to the public, I am okay with that.
Microsoft recently closed a 7 year old .NET documentation bug I opened using Copilot. I am not a fan of AI but the submitted fix was far superior to the basically useless message that had been previously present, so net positive. At being ignored for 7 years, it was unlikely to get better from human effort.
I wouldn't assume that at all. If they're using AI for something as trivial as a readme, I think it is a very safe assumption that that's not all they're using it for.
I wish code repos had a "contaminated by AI" flag.
Why do you have any reason to believe AI generated any of the 6502 code? What possible reason or motivation could there be for that? Wouldn't it spoil the entire reason for releasing it, totally miss the point of releasing original historic code? Who might possibly benefit by doing that? Are you just making up baseless conspiracy theories or do you have any factual basis for that accusation?
Seems hypocritical for a human being to hallucinate a conspiracy theory about LLMs, with no evidence whatsoever.