Skip to content

dosasm/masm-tasm

Repository files navigation

Basic Support for MASM/TASM v2.x

Chinese | English 中文 in Gitee

Basic language support for assembly in DOS environment. It may be suitable for studying MASM/TASM in DOSBox or courses like Principles and Peripheral Technology of Microprocessor.

  • Language Support: Offers grammar validation, basic outline view, hover tips, and code formatting support for DOS assembly language
  • Run and Debug: Right-click on the VS Code editor panel to run and debug your code
  • Diagnose: Processes the output of ASM tools and displays diagnostics in VS Code
  • Supports all platforms including Web — see Platform Support
  • Note: This extension is built for learning assembly in DOS, and it does not work with Win32 assembly

Demo

Demo 1: Language Features

Format Code Diagnose

The extension provides language features such as hover hints, code formatting, and jump to definition for the assembly language ID. You can also use other assembly language support extensions (e.g., the asm-collection language ID) by installing ASM Code Lens.

Demo 2: Run and Debug

Using TASM via DOSBox Using MASM via msdos-player

When editing assembly files, right-click in the editor panel to access the following options:

  1. Open Emulator: Launch DOSBox and prepare the runtime environment
  2. Run ASM Code: Assemble, link, and execute the program
  3. Debug ASM Code: Assemble, link, and debug the program

Run/Debug Notes

  • The extension copies your file to an isolated directory before assembling, to keep your workspace clean.
  • Note that this extension is not optimized for complex projects.

Project Configuration with dosasm.toml

For multi-file projects or custom build workflows, you can place a dosasm.toml file in your project directory. When you right-click an .asm file to run/debug, the extension searches upward from the file's directory for dosasm.toml. If found, it uses the configuration defined there instead of the default settings.

Example dosasm.toml:

[action]
before = """
mount c ${<built-in>/TASM.jsdos}
mount d ${actionFolder}
PATH %PATH%;C:\\TASM
d:
cd d:\\
"""
open = ""
run = """
TASM ${file}
TLINK ${filename}
>${filename}
"""
debug = """
TASM /zi ${file}
TLINK /v/3 ${filename}.obj
copy C:\\TASM\\TDC2.TD TDCONFIG.TD
TD -cTDCONFIG.TD ${filename}.exe
"""

Template variables:

  • ${file} — the full path of the assembly file in DOS
  • ${filename} — the file path without extension
  • ${actionFolder} — the directory containing the dosasm.toml file
  • ${<built-in>/TASM.jsdos} — the extracted bundle folder path (the extension automatically extracts the .jsdos zip bundle and mounts the resulting folder)

How it works:

  • The [action].before commands set up the DOS environment (mount drives, set PATH, etc.)
  • The [action].run commands assemble, link, and execute the program
  • The [action].debug commands assemble, link, and launch the debugger
  • The [action].open commands are used when opening the emulator without running
  • When dosasm.toml is found, the default single-file mount behavior is skipped — the before section fully controls the environment setup
  • Bundle extraction: ${<built-in>/TASM.jsdos} references a built-in .jsdos zip bundle. The extension extracts this bundle to a folder and replaces the variable with the folder path, so you can mount it as a DOS drive

Platform Support

This extension interfaces with the DOSBox(-X) binary via Node.js's child_process module. You must install DOSBox or DOSBox-X first to use this feature.

Since VS Code is primarily built with JavaScript (TypeScript), we support the WebAssembly (Wasm) version of DOSBox(-X) — namely js-dos. The extension bundles all required js-dos files, and it uses js-dos as the default DOS emulator for Web platform support.

Compiling to .com Files

You can customize the build commands by modifying the masmtasm.ASM.actions configuration. For example, to compile your code to a .com file, add the following configuration and set masmtasm.ASM.assembler to its key (TASM-com):

"masmtasm.ASM.actions": {
  "TASM-com": {
    "baseBundle": "<built-in>/TASM.jsdos",
    "before": [
      "PATH %PATH%;C:\\TASM"
    ],
    "run": [
      "TASM ${file}",
      "TLINK /t ${filename}",
      "${filename}"
    ],
    "debug": [
      "TASM /zi ${file}",
      "TLINK /t/v/3 ${filename}.obj",
      "TD ${filename}.exe"
    ]
  }
},
"masmtasm.ASM.assembler": "TASM-com"

Docs & Acknowledgments & Licenses

Enjoy! 😊

About

run and debug TASM/MASM code in VSCode via JSDos, DOSBox and DOSBox-x

Topics

Resources

License

Stars

183 stars

Watchers

2 watching

Forks

Packages

 
 
 

Contributors