
BATAS: 8086 assembler written in MSDOS batch - akkartik
https://github.com/mniip/BOOTSTRA/tree/master/
======
classichasclass
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](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. ;)

~~~
userbinator
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](https://news.ycombinator.com/item?id=17851311)

~~~
mniip
I had initially considered doing it that way but deemed it too tedious. I
really can't stand calculating and correcting offsets all the time.

~~~
Someone
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...](https://github.com/nornagon/jonesforth/blob/master/jonesforth.S)
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.

------
userbinator
Appears to be based on a very similar design to
[https://news.ycombinator.com/item?id=7882066](https://news.ycombinator.com/item?id=7882066)
, except that batch files are far more limited than bash.

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 ;-)

~~~
sqldba
Sorry I think you’re very slightly wrong.

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...)

------
171243
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.

~~~
contingencies
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!

~~~
171243
I showed off the "net send" flood in my school which was a batch file that
looked like this:

    
    
        :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!!!

------
maxxxxx
Ouch! The author must have incredible pain tolerance doing this in batch.

------
RcouF1uZ4gsC
>He's trying to bootstrap a programming environment from the basic tools
provided with a default MS-DOS install

Wasn’t some version of BASIC provided with every version of MSDOS?

~~~
pan69
Up until MSDOS version 5, MSDOS was shipped with GW-BASIC. From MSDOS 5 onward
it shipped with QBasic.

If you can create an assembler with batch files it should certainly be
possible to create one with BASIC. :)

Hmm, interesting idea...

~~~
pjmlp
I don't remember any longer, did PC-DOS, DR-DOS and all other DOS compatible
variants also ship GW-BASIC?

~~~
pan69
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. :)

------
zoom6628
This is glorious for its clever use of batch. Like another poster says "mad as
badgers".

If you have spare time can you recreate the .Net ILR from batch scripts? :-J

------
zamalek
Now we need an LLVM target for this.

------
LocalH
Nice. A more period-accurate name, I think, would have been “BatAss” lmao

------
pjmlp
I would say it is quite ingenious.

------
wiz21c
Obligatory FSF idea : why not start from a blank disk ?

~~~
IcePic
blank as in "no bootblock on it written as a binary blob from a non-free tool"
then?

~~~
wiz21c
Yeah, I know the limits of the FSF reasoning. Well, what about starting from
Silicium and Carbon molecules ? :-)

