ND-100/CX Emulator written in C
For more information about the ND-100 series of minicomputers: https://www.ndwiki.org/wiki/ND-100
This project (nd100x) is a fork of nd100em, started in 2025 by Ronny Hansen. It remains under the GNU General Public License (GPL v2 or later).
This project is based upon the source code from the nd100em project. Their latest version was version 0.2.4, which can be found here https://github.com/tingox/nd100em Read more about the nd100em project here https://www.ndwiki.org/wiki/ND100_emulator_project
The original authors of the nd100em are:
The emulator is under active development. Current work in progress includes:
This project continues from nd100em version 0.2.4 and includes significant enhancements:
## Project Goals
The project is organized into several key components:
src/cpu/ - CPU emulation implementationsrc/devices/ - Device emulation (I/O, peripherals)src/machine/ - Machine state and main emulation loopsrc/ndlib/ - Supporting library functions (loading BPUN and a.out formats++)src/debugger/ - DAP Debugger supporting functionalitysrc/frontend/ - User interface and emulator frontend(s)tools/ - Development and build toolsimages/ - Norsk-Data SMD disk, floppy and BPUN files.build/ - Build output directoryThe floppy menu functionality requires additional libraries:
Install these dependencies on Ubuntu/Debian:
sudo apt update
sudo apt install libcurl4-openssl-dev libncurses5-dev
On FreeBSD
pkg install curl ncurses
Note: The floppy menu requires an internet connection to function properly.
Note 2: The floppy menu is disabled on RISC-V and WASM builds.
git submodule update –init –recursive
2. Build the project:
- For debug build (default):
```bash
make debug
make release
make sanitize
Sometimes the submodules are updated and you need to manually refresh them
The emulator supports the following command line options:
Usage: nd100x [options]
Options:
-b, --boot=TYPE Boot type (bp, bpun, aout, floppy, smd)
-i, --image=FILE Image file to load
-s, --start=ADDR Start address (default: 0)
-a, --disasm Enable disassembly output (dump after emulator stops)
-d, --debugger Enable Enable DAP debugger
-v, --verbose Enable verbose output
-h, --help Show this help message
Examples:
build/bin/nd100x -b aout -i a.out -v -d # Loads an a.out file from the current directory in verbose mode and enables disassembly
build/bin/nd100x -b bpun -i images/FILSYS-INV-Q04.BPUN # Loads the latest version of FILSYSTEM INVESTIGATOR (Version: Q04 - 1987-10-10)
build/bin/nd100x -b bpun -i images/CONFIGURATIO-C08.BPUN # Loads an old version of CONFIGURATION-C08
build/bin/nd100x -b bpun -i images/INSTRUCTION-B.BPUN # Loads an old version of INSTRUCTION VERIFIER
build/bin/nd100x -b floppy # Boots from a floppy file named FLOPPY.IMG
Boot Types:
smd: SMD disk boot (default)bp: Boot programbpun: Boot program unprotectedaout: BSD 2.11 a.out formatfloppy: Floppy disk bootCurrently the file names used for floppy and SMD are hard coded. And the files are expected to be in the current folder.
Other floppy images can be mounted via the Floppy Menu
The emulator requires a system image file (SMD0.IMG) to run. Place the image file in the project root directory.
To boot a SINTRAN image from an SMD disk
build/bin/nd100x --boot=smd
Read more about how to boot sintran

The emulator requires a floppy image to boot from. Place the image file in the current directory.
cp images/Nd-210523I01-XX-01D.img FLOPPY.IMG
build/bin/nd100x --boot=floppy
Now you have access to test programs like CONFIG, PAGING, INSTRUCTION and more.
The emulator includes a built-in floppy disk browser that allows you to browse and mount floppy disk images from the ND100 floppy database.
While the emulator is running, press F12 to open the floppy menu.

Floppy database is available directly at https://ndlib.hackercorp.no/
Using the assembly tool from Ragge nd100-as you can compile ND assembly to a.out format and load into the emulator.
This assembler is following the AT&T syntax so it differs a bit from the ND-100 MAC assembler.
lda foo
sta bar
opcom
bar: .word 11
foo: .word 22
Remember to end your code with ‘opcom’ to make the emulator stop executing your code.
Overview of all assembly instructions
The nd100x emulator has been compuiled and tested on multiple different systems. For more information, read the Tested systems document
See the LICENSE file for detailed licensing information.
See the CONTRIBUTING.md file for more information