Create your own Version of Microsoft BASIC for 6. If you disassemble a single binary, you can never tell why something was done in a certain way. If you have eight different versions, you can tell a lot. This episode of Computer Archeology is about reverse engineering eight different versions of Microsoft BASIC 6. Commodore, Apple. Soft etc., reconstructing the family tree, and understanding when bugs were fixed and when new bugs, features and easter eggs were introduced. Trainer Of The Game Total Overdose on this page. This article also presents a set of assembly source files that can be made to compile into a byte exact copy of seven different versions of Microsoft BASIC, and lets you even create your own version. Microsoft BASIC for MOS 6. First written in 1. Microsoft BASIC for the 8 bit MOS 6. Commodore series PET, C6. Cambridge Theological Seminary International FREE DEGREES BASIC BIBLE STUDIES PROGRAM, One, Two, Three, FourYear Degrees, Masters Doctorate Accredited. Gw Basic Program Commands' title='Gw Basic Program Commands' />Gw Basic Program CommandsSAEGW Administration Guide, StarOS Release 20 SAE Gateway Overview. External links. Classic Basic Games Page, a resource for BASIC games and other programs Back to BASICs, another BASIC resource site GWBASIC interpreter program and. Download this app from Microsoft Store for Windows 10 Mobile, Windows Phone 8. Windows Phone 8. See screenshots, read the latest customer reviews, and compare. Apple II series, Atari 8 bit machines, and many more. These are the first eight versions of Microsoft BASIC Name. Release. VERROMFPRORBuffer. Extensions. Version. Commodore BASIC 1. Y9. YZPCBM1. 0. OSI BASIC1. Y6. Y 1. 0a. Apple. Soft I1. 97. 71. 1. N9. Y0. 20. 0Apple. KIM BASIC1. 97. 71. N9. NZP 1. 1a. Apple. Soft II1. 97. 8Y9. Y0. 20. 0Apple. 2Commodore BASIC 2. Y9. Y0. 20. 0CBM2a. KBD BASIC1. 98. 2Y6. Y0. 70. 0KBD2b. Micro. TAN1. 98. 0Y9. NZP 2c. Name Name of the computer system or BASIC interpreter. Release Release date of this version not necessarily the date when the source code was forked from Microsofts. VER Version string inside the interpreter itself. ROM Whether the software shipped in ROM, or was a program supposed to be loaded into RAMFP Whether the 6 digit or 9 digit floating point library was included. GET statement was supported. ROR Whether the ROR assembly instruction was used or whether the code worked around it. Buffer Location of the direct mode input buffer either zero page or above. Extensions What BASIC extensions were added by the OEM, of any. Version My private version number used in this article and in my combined source. The Microsoft BASIC 6. Combined Source Code. Download the assembly source code here msbasic. In order to assemble if, you will need the CC6. The source can be assembled into byte exact versions of the following seven BASICs Commodore BASIC 1. OSI BASICApple. Soft IKIM 1 BASICCommodore BASIC 2 PETIntellivision Keyboard Component BASICMicro. TAN BASICYou can build the source by running the shell script make. This will create the seven files cbmbasic. ROMs. You are welcome to help clean up the source more, to make it more readable and to break features out into CONFIG defines, so that the source base can be made more customizable. Make sure to read on to the end of the article, as it explains more about the source and what you can do with it. Microsoft BASIC 1. Ric Weiland, Bill Gates and Monte Davidoff at Microsoft wrote MOS 6. BASIC in the summer of 1. Intel 8. 08. 0 version. While the former could fit well into 8 KB, so that a computer manufacturer could add some machine specific IO code and ship a single 8 KB ROM, code density was less on the 6. KB it was around 7. BASIC in ROM would require more than a single 8 KB ROM chip. Spilling over 8 KB anyway, they decided to also offer an improved version with extra features in a little under 9 KB This version had a 4. BASIC9 digit BASICNF ERROROK NEXT WITHOUT FOR ERROROK9 digit BASIC also added support for the GET statement to read single keystrokes from the keyboard. Simcity Activation Code here. On startup, Microsoft BASIC 6. MEMORY SIZE If the user just presses return, BASIC detects the size of memory itself. If, on the other hand, the user enters A, it prints WRITTEN BY RICHARD W. WEILAND. Versions since 1. WRITTEN BY WEILAND GATESThen it asks TERMINAL WIDTH Microsofts codebase could also be assembled either for use in ROM or in RAM The RAM version additionally asks WANT SIN COS TAN ATNThese four statements are located at the very end of the interpreter image actually, the init code is at the very end, but that gets overwritten anyway, so that up to 2. BASIC program if the start of BASIC RAM was set to the beginning of the SINCOSTANATN code N, or to overwrite ATN only A in this case, the user would gain about 1. All these questions were very similar to the ones presented on an Intel 8. BASIC system after all, BASIC 6. The start message looks something like this. MOS TECH 6. 50. 2 BASIC V1. COPYRIGHT 1. 97. 7 BY MICROSOFT CO. Microsofts codebase was very generic and didnt make any assumptions on the machine it was running on. A single binary image could run on any 6. RAM was set correctly, the calls to MONRDKEY, MONCOUT, LOAD and SAVE were filled with pointers to the machine specific IO code, and the ISCNTC function was filled with code to test for CtrlC. Microsoft maintained this source tree internally and, at different points in time, handed their current version of the source to OEMs, which adapted andor extended it for their machines. While most OEM versions were heavily modified in its user interaction startup screen, line editing, most of the code was very similar some functions were even never changed for any version of BASIC. No OEM ever came back to Microsoft for updates, except for Apple and Commodore, which both synced once each, up to the bugfixed version 2. Commodore BASIC 1 1. The BASIC that shipped with the first Commodore PET in 1. Microsoft BASIC for 6. It does not say Microsoft anywhere, and memory size detection and screen width were hardcoded, so on startup, it just prints COMMODORE BASIC, followed by the number of bytes available for BASIC. Commodore added the OPEN, CLOSE, PRINT, INPUT and CMD statements for file IO and added VERIFY to compare a program in memory to a file on a storage device. They also added SYS to call into assembly code Microsofts code had only provided the USR function with a similar purpose. It seems Commodore didnt like the OK prompt, so they renamed it to READY. All machine specifics were properly abstracted by calls into the KERNAL jump table, the upper 7 KB of the 1. KB ROM except for one call out into the screen editor part of the PET ROM. INDEX,y. ifdef CONFIGCBM1PATCHES. LE7. F3 patch. ldy 0. INDEX. sta INDEX. L3. 3A7. inc INDEX1. This code fixes the garbage collector by doing the missing ldyasladc in the patch code. Speaking of patches Commodore BASIC 1 has been binary patched a lot There are six patch functions appended to the very end of the interpreter image that work around miscellaneous fixes. This is what one of these calls into a patch function looks like. CONFIGCBM1PATCHES. PATCH1. jmp CONTROLCTYPED. Here is the patch function someone indeed forget to clear the carry flag. CONTROLCTYPED. Some of these patches are in generic code, and some in Microsoft specific code. Later fixes in generic code are not necessarily identical to these patches. So this indicates that Commodore wrote the fixes. But it is unknown why these additions were done in the binary as opposed to the source Commodore had the source and made lots of additions to it. Maybe it was just more convenient to patch the binary for debugging at some point. Ohio Scientific 1. Ohio Scientific sold a wide series of 6. BASIC bought from Microsoft in 1. ADD MANTISSAS OF FAC AND ARG INTO FAC. ARGEXTENSION. sta FACEXTENSION. CONFIGSMALL. lda FAC4. ARG4. sta FAC4. FAC3. ARG3. FAC3. lda FAC2. ARG2. sta FAC2. FAC1. ARG1. FAC1. jmp NORMALIZEFAC5.