I think people are missing the forest for the trees here. He's trying to bootstrap a programming environment from the basic tools provided with a default MS-DOS install ( https://github.com/mniip/BOOTSTRA ) and build everything from the "cleanest" possible state.
That is mad as badgers. The batch file assembler is merely what will get him more years in the asylum. ;)
I think a lot more people have tried something similar when they first read about DEBUG (and the source code listings in PC magazines of the time would use it for assembling short programs)... including me.
At the start, the most powerful tool is undoubtedly DEBUG.EXE with its ability to assemble and create executable files. It has just one handicap though: there are no labels. One has to manually adjust jump and variable locations.
My solution, instead of writing an assembler with batch files, was to use DEBUG itself to write the label-understanding assembler. I think I still have it somewhere, in incomplete form --- never got around to finishing the whole thing, because real life got in the way. ;-)
Looking at the number of "bootstrap pilgrimage" projects that have become public, it's great to see many others trying the same thing; there was this one recently too: https://news.ycombinator.com/item?id=17851311
I think I would get a Forth up and running ASAP, and write the assembler, if one still is needed, in that Forth.
looking at https://github.com/nornagon/jonesforth/blob/master/jonesfort... for a simple example, that needs assembler labels and macros, but I think a few batch files can give you rough approximations of those (example of rough approximation: assume every function is 64 bytes long, and every jump needs a 2-byte offset. That makes address calculations a bit easier. Wasteful, but that can be fixed later, once you have a better assembler written in your Forth.
I wrote my initial version on lined paper, using labels, and didn't calculate the offsets until I was ready to enter it in. The planning/design was also done on paper, away from a computer.
The state of mind required to do that is something I can safely say is foreign to the majority of developers today, who will write code they're not completely sure of and test/debug/modify later; but when each "cycle" of debugging may take many minutes instead of seconds, one learns to think very very carefully about what the code is doing. Code that works perfectly on the first run is not unusual when you have this mindset.
Those required the presence of a version of Basic in ROM (I guess to keep the size of the executable down, not primarily as a license-checking scheme), so they didn’t run on all hardware.
Also, may I suggest a small optimisation to APPFB.COM : there is no need for push cs/pop ds at the beginning, because in a .COM format executable all the segment registers are initially set to the same value. You can eliminate two unnecessary bytes ;-)
There was a bug in either some revision of MSDOS or a compatible version that needed it. That’s why it’s common (though agreed technically unnecessary as it’s unlikely to ever be run on those...)
Wow, this is a blast from the past. I got started "programming" by writing batch files to do all sorts of interesting and crazy things. Stuff like sleeping for a second by printing a predefined number of spaces because the sleep construct didn't exist. There was some guys homepage (think 1996/7) that I remember had an incredible amount of scripts to do things like grabbing the logged in users name, etc all through batch files. In the process of researching possible commands to use in the scripts I came upon "debug" which seemed to be its own language but was far too advanced for me as a 9/10 year old. Glad to see someone finally found a use for it! Good times.
I once wrote a batch file virus... it was mostly a proof of concept because the only programming documentation I had access to was an MSDOS 5 manual. It was a great manual!
I don't believe that is the case, Those versions of DOS might ship with some version of BASIC though. GW-BASIC was/is a Microsoft product. If I'm not mistaken (or as lore tells us), the GW-B stands for Gates William Bill. :)
That is mad as badgers. The batch file assembler is merely what will get him more years in the asylum. ;)