BATAS: 8086 assembler written in MSDOS batch
github.com
github.com
That is mad as badgers. The batch file assembler is merely what will get him more years in the asylum. ;)
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
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.
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.
(Source: https://en.wikipedia.org/wiki/IBM_BASIC#IBM_Disk_BASIC, https://en.wikipedia.org/wiki/IBM_BASIC#IBM_Advanced_BASIC)
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...)
:label
net send username
goto label
Someone then substituted * for username and flooded the network. I got to spend a week in in school suspension for that!!!Wasn’t some version of BASIC provided with every version of MSDOS?
If you can create an assembler with batch files it should certainly be possible to create one with BASIC. :)
Hmm, interesting idea...
If you have spare time can you recreate the .Net ILR from batch scripts? :-J