All Projects → tkchia → GW-BASIC

tkchia / GW-BASIC

Licence: MIT License
Assembling Microsoft GW-BASIC from 1983, with MASM or JWasm • "pre-release" binaries at https://github.com/tkchia/GW-BASIC/releases • source mirror at https://gitlab.com/tkchia/GW-BASIC • fork of https://github.com/dspinellis/GW-BASIC

Programming Languages

assembly
5116 projects

Projects that are alternatives of or similar to GW-BASIC

masm-tasm
run and debug TASM/MASM code in VSCode via JSDos, DOSBox and msdos-player
Stars: ✭ 115 (+109.09%)
Mutual labels:  masm, 8086
sebasic4
SE Basic IV 4.2 Cordelia - A free BASIC interpreter written in Z80 assembly language
Stars: ✭ 44 (-20%)
Mutual labels:  microsoft, retrocomputing
jSH
A Javascript scripting engine for DOS
Stars: ✭ 79 (+43.64%)
Mutual labels:  retrocomputing, msdos
blog
retrohunblog
Stars: ✭ 46 (-16.36%)
Mutual labels:  retrocomputing, 8086
ts-c99-compiler
ANSI C 16bit Compiler + NASM Assembler + Intel 8086 / 80186 + X87 emulator written entirely in TypeScript
Stars: ✭ 78 (+41.82%)
Mutual labels:  8086, x86-16
Facial-Recognition-Attendance-System
An attendance system which uses facial recognition to detect which people are present in any image.
Stars: ✭ 48 (-12.73%)
Mutual labels:  microsoft
microsoft-download-link-archive
Archive of various Microsoft Download Links.
Stars: ✭ 15 (-72.73%)
Mutual labels:  microsoft
alfred-microsoft-onenote-navigator
Use Alfred to browse through your Microsoft OneNote notebooks, section groups and sections and then jump to them instantly.
Stars: ✭ 52 (-5.45%)
Mutual labels:  microsoft
Windows-Optimize-Harden-Debloat
Fully Optimize, Harden, and Debloat Windows 10 and Windows 11 Deployments to Windows Best Practices and DoD STIG/SRG Requirements. The ultimate Windows 10 & 11 security and privacy script!
Stars: ✭ 304 (+452.73%)
Mutual labels:  microsoft
script-samples
A sample gallery of scripts to manage all things Microsoft 365.
Stars: ✭ 56 (+1.82%)
Mutual labels:  microsoft
WinHub-98
A modern-looking userstyle for GitHub
Stars: ✭ 59 (+7.27%)
Mutual labels:  microsoft
hoard-of-bitfonts
turns out I like bitmap fonts
Stars: ✭ 811 (+1374.55%)
Mutual labels:  retrocomputing
azure-functions-swift
Azure Functions in Swift! Purely in Swift!
Stars: ✭ 86 (+56.36%)
Mutual labels:  microsoft
MBBSDASM
MBBSDASM is an x86 Disassembler for 16-bit DOS / Windows 3.0 Segmented Executable (NE) EXE/DLL File Format with special features related to The MajorBBS & Worldgroup Modules
Stars: ✭ 34 (-38.18%)
Mutual labels:  x86-16
microsoft teams clone
Microsoft Teams Clone is a Video conference application with a rich integrated chat experience, to connect with friends,family & colleagues. Developed as a redesign of Microsoft Teams during my menteeship at Microsoft Engage 2021
Stars: ✭ 52 (-5.45%)
Mutual labels:  microsoft
tmbasic
TMBASIC programming language
Stars: ✭ 33 (-40%)
Mutual labels:  basic-programming-language
FigureQA-baseline
TensorFlow implementation of the CNN-LSTM, Relation Network and text-only baselines for the paper "FigureQA: An Annotated Figure Dataset for Visual Reasoning"
Stars: ✭ 28 (-49.09%)
Mutual labels:  microsoft
Activity-Recognition-CovMIJ
Skeleton-based method for activity recognition problem
Stars: ✭ 13 (-76.36%)
Mutual labels:  microsoft
retro-computing
🤓🕹💾 This hobby project contains software implementations of old microprocessors and complete computer systems. I'm very interested in retrocomputing and this is how I learn about the inner workings of these old, classic and amazing computers and game consoles.
Stars: ✭ 15 (-72.73%)
Mutual labels:  retrocomputing
ATKSpy
this repository is a python package that supports SOAP interface to communicate with the Microsoft ATKS
Stars: ✭ 27 (-50.91%)
Mutual labels:  microsoft

Microsoft GW-BASIC Interpreter Source Code

(Travis CI build status) · (GitLab pipeline status)

This repo contains the original source-code for Microsoft's GW-BASIC interpreter, as of 1983, adjusted for assembling with JWasm or available versions of the Microsoft Macro Assembler, plus additional "OEM" modules needed to complete the interpreter.

There is also a still-experimental subproject (GWBASICA.EXE) to re-introduce features to GW-BASIC which were only present in post-1983 BASIC interpreters.

Announcement blog (from Microsoft)

https://devblogs.microsoft.com/commandline/microsoft-open-sources-gw-basic/

Progress

Assembling

All files can now be assembled with Microsoft MASM 5.1A. This is the version that currently seems to match the code most closely.

It is now also possible to cross-assemble the source files ― with some preprocessing ― using JWasm and JWlink.

Implementation ― GWBASIC.EXE

The interpreter is semi-working, but some parts of the platform-specific support code are still missing or incomplete.

Specifically, Diomidis Spinellis had observed that several OEM-specific functions were missing from the original source code release, and have to be added. Most of these have been implemented in the new modules OEM.ASM, OEMEV.ASM, and OEMSND.ASM, mainly from scratch.

However:

  • Some routines are still missing, and are currently stubs: INICOM, RECCOM, SNDCOM, STACOM, TRMCOM. These are meant to implement serial port I/O.
  • Some routines need testing with the appropriate hardware: POLLEV, RDPEN, RDSTIK, RDTRIG, SNDLPT. These currently implement general event polling, light pen input, joystick input, and printer output.

(Many of the needed OEM routines, such as SETC and MAPXYC, turn out to be present in BASICA.COM from Microsoft's earlier MS-DOS v1.25 code release. However, BASICA.COM is only released in binary form, so some analysis is needed to extract the routines.)

Implementation ― GWBASICA.EXE

GWBASICA adds the following post-1983 features:

  • The TIMER function, for getting the time of the day in floating-point form.
    • The semantics of the RANDOMIZE statement have also been altered, so that the command RANDOMIZE TIMER works (mostly) as expected.
  • The MKDIR, CHDIR, and RMDIR statements.
    • However, other file-oriented commands, such as OPEN and LOAD, still do not work with subdirectory paths. These should be fixed in due course.

Building instructions

With JWasm and JWlink

You need a system with

  • AWK and GNU Make, and
  • either
    • installed binaries for JWasm and JWlink, or
    • Git and GCC, for downloading and building JWasm and JWlink.

Run make. This should build two executable files, GWBASIC.EXE and GWBASICA.EXE.

With MASM 5.10A

Using DOSBox mount a directory containing:

  • This code
  • The Microsoft Macro Assembler (MASM) version 5.1A (MASM.EXE).
  • The Microsoft MAKE and LINK programs that come with MASM (MAKE.EXE, LINK.EXE).

Run make Makefile.mas to assemble the files. This currently just builds GWBASIC.EXE. Note the tools may leave behind partly-built executables or object files. If you want to rebuild them without changing the source code, you need to delete these files by hand.

You can fetch MASM 5.1A from this site as follows.

  • From the pull-down menu select MS Macro Assembler 5.10A (Update)
  • Press the Load button to load the disk image into the emulator
  • Press the Save button to save the disk image to your computer
  • Copy the saved disk image to a Linux computer
  • Mount the image using the command sudo mount MASM51A-UPDATE.img /mnt
  • Copy the files from /mnt to your development directory

You can fetch MAKE.EXE and LINK.EXE from the same site, under MS Macro Assembler 5.00 (Disk 1).

License

All files within this repo are released under the MIT (OSI) License as per the LICENSE file stored in the root of this repo.

Contributing

Pull requests addressing problems in getting GW-BASIC to build and run are welcomed.

Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].