How I Build the Official NitrOS-9 Repo From Windows

This will turn into a more proper article when I get more details added in rough form.  Bear with me.

First, let me thank a few people who if not for their knowledge and time I’d be still trying to figure some of this out.  It’s not like there’s a manual for everything we do in development land, and piecing it all together can take a lot of time.

Bill Nobel, Allen Huffman, Boisy Pitre, — thank you for your skills, your time, your efforts, your love for the Tandy Color Computer and OS-9, and for being there to help another determined developer hop on the NitrOS-9 bandwagon.

Why would I want to build a custom NitrOS-9 boot disk, or boot ROM from Windows?  Because I can, and it’s super fast.

Install these tools, some of which are required:

LWTOOLS

LWTools is a set of cross-development commands that the repo will call on many, many, times during the whole ‘make’ process.

GNU MAKE

GNU Make is the ‘make’ command we’ll run from within cygwin from inside one of the repo’s folders.

GITHUB DESKTOP and VS CODE

GitHub Desktop and VS Code recognize each other and work in tandem.  When you change branches within GitHub Desktop, the files you have open in VS Code will change right in front of your eyes to reflect what it looks like in the current branch.  This is like a God-send.  VS Code and GitHub Desktop is what I personally use to fetch the latest repo snapshot and even to contribute to my RealCoCoFPGA port.

CYGWIN

Cygwin is a Linux-type environment almost the same as working from a Linux computer.  For our purposes, it’s essentially the same.  During the installation it’ll ask you what packages to install.  You can install these later using the same or a new setup installer without worrying about it erasing anything in your cygwin root folder. Because I can’t recall this writing what packages that were included, and which ones I installed by checking some boxes, I’ll just dump the current packages installed for my cygwin environment.  See the list near the end of this article.  From the cygwin console, I typed cygcheck -c to see what I had installed.  See anything familiar?  “git” will be something you’ll want if you love doing that from a console, but personally I use GitHub Desktop software to automate all that for me.  I think all I installed for cygwin was “git” but we’ll see.

In your Windows SYSTEM environment variables you need to add NITROS9DIR = {full_path_to_cygwin_root} (for me it’s c:/cygwin/home/users/taylo/nitros9).  Notice the forward slashes?  Yea… those aren’t Windows compatible, but you’ll be working from within a pretend Linux environment when you launch the cygwin console.  It’s similar to the Windows “command prompt”, “console”, and PowerShell, but way more friendly to the cause.  You need to close down cygwin and reopen it after adding or changing the NITROS9DIR environment variable.

After cygwin installs, I think it creates the /home/users/taylo path automatically based on the Windows user criteria gathered, so you’ll have to create the “nitros9” folder yourself.  I created mine inside the “taylo” folder.  Get it?  So when I launch into cygwin, the current work directory alias will say taylo@DESK, and from there I see the nitros9 and other folders.  Anyway, that’s more or less where we’re at here.

In my WINDOWS USER environment variables PATH strings I point to the directories where I have LWTOOLS.  The space in the pathname has not presented a single issue for me.  The PATH environment variable is actually a collection of pathnames, so you’re just adding these paths to that list.

PATH -> “c:\users\taylo\desktop\coco studio\tools\lwtools\” (notice the BACKSLASHES and TRAILING BACKSLASH are required)

In my WINDOWS SYSTEM environment variables PATH strings I point to where Gnu is:
PATH -> “c:\GnuWin32\bin” (notice the BACKSLASHES but *NO* TRAILING BACKSLASH !!)

Now, getting the NitrOS-9 repo into c:/cygwin/home/users/taylo/nitros9 or c:\cygwin\home\users\taylo\nitros9:

You can either download the .zip from the repo front page, clone it to this directory using GitHub Desktop, or clone it manually using the “git” command… however you like, but the git system is going to keep you synchronized with latest changes that the NitrOS-9 mob are making daily.  Personally, I’d just download the .zip of the latest snapshot and you should be good for quite a while.

Visit the Official NitrOS-9 repo site

Hopefully if anything I said made sense above, you’ll be inside of cygwin/…/nitros9/ with a flashing cursor waiting for something to do.  This is where you MAKE the project, turning the repo into whatever it’s supposed to generate, but this will depend on what subfolder you’re inside of when you type “make”, more or less.

At this time you should be able to type “make clean” and see it cranking along trying to clean up objects and files that are not part of the actual source.  The repo keeps up with this so the objects don’t get passed around as part of the project unless they’re meant to be there.

Since I’m involved in cloning the CoCo on as many devices as I can imagine, we’ll try to build the 128MB boot image for the RealCoCoFPGA (Matchbox, MiSTer, SiDI, etc.):

“cd” into the realcocofpga part of the repo and let’s do a few things.

Moments later I checked what packages were part of my cygwin installation:

taylo@DESK ~/nitros9/level2/realcocofpga
$ cygcheck -c

Cygwin Package Information
Package Version Status
_autorebase 001091-1 OK
alternatives 1.26-1 OK
base-cygwin 3.8-2 OK
base-files 4.3-3 OK
bash 5.2.21-1 OK
bzip2 1.0.8-1 OK
ca-certificates 2024.2.66_v8.0.302-1 OK
coreutils 9.0-1 OK
crypto-policies 20190218-1 OK
csih 0.9.14-1 OK
cygrunsrv 1.64-1 OK
cygutils 1.4.17-1 OK
cygwin 3.5.3-1 OK
dash 0.5.12-5 OK
dejavu-fonts 2.37-1 OK
diffutils 3.10-1 OK
editrights 1.04-1 OK
file 5.44-1 OK
findutils 4.10.0-1 OK
gawk 5.3.0-1 OK
getent 2.18.90-5 OK
gettext 0.22.4-1 OK
git 2.45.1-1 OK
gitk 2.45.1-1 OK
grep 3.11-1 OK
groff 1.23.0-1 OK
gzip 1.13-1 OK
hostname 3.13-1 OK
info 7.1-1 OK
ipc-utils 1.1-1 OK
less 643-1 OK
libargp 20230708-2 OK
libattr1 2.5.1-1.20.g0981a7bfe487 OK
libblkid1 2.39.3-2 OK
libbrotlicommon1 1.1.0-1 OK
libbrotlidec1 1.1.0-1 OK
libbz2_1 1.0.8-1 OK
libcom_err2 1.44.5-1 OK
libcrypt2 4.4.20-1 OK
libcurl4 8.9.1-1 OK
libdb5.3 5.3.28-2 OK
libedit0 20221030-4 OK
libexpat1 2.6.2-1 OK
libfdisk1 2.39.3-2 OK
libffi6 3.2.1-2 OK
libffi8 3.4.6-1 OK
libfido2 1.12.0-1 OK
libfontconfig-common 2.15.0-3 OK
libfontconfig1 2.15.0-3 OK
libfreetype6 2.13.2-1 OK
libgc1 8.2.6-1 OK
libgcc1 12.4.0-3 OK
libgcrypt20 1.11.0-1 OK
libgdbm6 1.18.1-1 OK
libgdbm_compat4 1.18.1-1 OK
libgmp10 6.3.0-1 OK
libgpg-error0 1.50-2 OK
libgsasl-common 2.2.1-1 OK
libgsasl18 2.2.1-1 OK
libgssapi_krb5_2 1.15.2-2 OK
libguile3.0_1 3.0.9-3 OK
libiconv2 1.17-1 OK
libidn12 1.42-1 OK
libidn2_0 2.3.7-1 OK
libintl8 0.22.4-1 OK
libk5crypto3 1.15.2-2 OK
libkrb5_3 1.15.2-2 OK
libkrb5support0 1.15.2-2 OK
liblz4_1 1.9.4-1 OK
liblzma5 5.6.2-1 OK
libmpfr6 4.2.1-1 OK
libncursesw10 6.5+20240427-1 OK
libnettle8 3.9.1-1 OK
libnghttp2_14 1.61.0-1 OK
libntlm0 1.4-1 OK
libopenldap2 2.6.8-1 OK
libopenldap2_4_2 2.6.8-1 OK
libp11-kit0 0.23.20-1 OK
libpcre1 8.45-1 OK
libpcre2_8_0 10.44-1 OK
libpipeline1 1.5.6-1 OK
libpng16 1.6.42-1 OK
libpopt-common 1.19-1 OK
libpopt0 1.19-1 OK
libpsl5 0.21.5-1 OK
libreadline7 8.2-2 OK
libsasl2_3 2.1.27-1 OK
libsmartcols1 2.39.3-2 OK
libssh2_1 1.11.0-1 OK
libssl1.1 1.1.1w-1 OK
libssl3 3.0.14-1 OK
libstdc++6 12.4.0-3 OK
libtasn1_6 4.14-1 OK
libuchardet0 0.0.8-1 OK
libunistring5 1.2-1 OK
libuuid1 2.39.3-2 OK
libX11_6 1.8.9-1 OK
libXau6 1.0.11-1 OK
libxcb1 1.17.0-1 OK
libXdmcp6 1.1.5-1 OK
libXext6 1.3.6-1 OK
libXft2 2.3.7-1 OK
libXrender1 0.9.11-1 OK
libXss1 1.2.4-1 OK
libxxhash0 0.8.2-1 OK
libyaml0_2 0.2.5-1 OK
libzstd1 1.5.6-1 OK
lighttpd 1.4.76-1 OK
login 1.13-1 OK
man-db 2.12.1-1 OK
mintty 3.7.4-1 OK
ncurses 6.5+20240427-1 OK
openssh 9.8p1-1 OK
openssl 3.0.14-1 OK
p11-kit 0.23.20-1 OK
p11-kit-trust 0.23.20-1 OK
perl 5.36.3-1 OK
perl-CGI 4.66-1 OK
perl-Clone 0.46-2 OK
perl-Encode-Locale 1.05-5 OK
perl-Error 0.17029-3 OK
perl-HTML-Parser 3.83-1 OK
perl-HTML-Tagset 3.24-1 OK
perl-HTTP-Date 6.06-1 OK
perl-HTTP-Message 6.46-1 OK
perl-IO-HTML 1.004-3 OK
perl-JSON-PP 4.16-2 OK
perl-LWP-MediaTypes 6.04-4 OK
perl-TermReadKey 2.38-4 OK
perl-TimeDate 2.33-3 OK
perl-URI 5.28-1 OK
perl_autorebase 5.36.3-1 OK
perl_base 5.36.3-1 OK
publicsuffix-list-dafsa 20240531-1 OK
rebase 4.6.6-1 OK
rsync 3.3.0-1 OK
ruby 3.2.2-2 OK
ruby-rake 12.3.2-1 OK
ruby-rdoc 6.7.0-1 OK
rubygems 3.5.11-1 OK
run 1.3.4-2 OK
sed 4.9-1 OK
tar 1.35-2 OK
tcl 8.6.12-1 OK
tcl-tk 8.6.12-1 OK
terminfo 6.5+20240427-1 OK
tzcode 2024a-1 OK
tzdata 2024a-1 OK
util-linux 2.39.3-2 OK
vim-minimal 9.0.2155-2 OK
which 2.20-2 OK
xorg-x11-fonts-dpi75 7.6-3 OK
xz 5.6.2-1 OK
zlib0 1.3.1-1 OK
zstd 1.5.6-1 OK

Follow more of my projects at: https://www.patreon.com/rogertaylor