~~META: description abstract = 8086/80x86 DOS ASM: Programming a "common" household computer (x86) to do cool things. ~~ ====== x86 On Acid ====== **Abstract:** To really get to know the inter-workings of a "common" computer at the machine level. One can make/do very cool things using assembly with DOS (FreeDOS of course!), a parallel port, a COM port and even the video display! This would prelude into building some devices (via parallel port or even PCI bus) and controlling them using DOS in ASM. **Why DOS (FreeDOS) and not GNU/Linux?** We keep it simple. DOS doesn't have the overhead like GNU/Linux. That is to say, DOS will provide only the basics for one to start playing around with the hardware directly on the computer without any restrictions and if you make a mistake it will blow up in your face. (Hit reset and try again! :) **Why 80x86 and not ARM/PIC/Z80?** Because the chances are higher to find a x86 box on the side of the road than a nice micro-controller. They are easily obtainable and (IMO) fun to program. **Why assembly and not C or something higher level?** Psh... whats the fun in a higher level language? ASM will bring the programmer to a more "intimate" level to the hardware. **Equipment:** * A 80x86 machine with: * KVM ability * Parallel/Serial port(s) * Hard Disk (>= 1 GB) * Serial and Parallel port breakout boxes (can be made) * Male/Female serial/parallel ports (many!) * Oscilloscope (or a voltmeter would do) * Some LEDs, switches, basic ICs... the normal hacker tool-chest of components. **Some projects ideas after learning basic ASM:** * Basic I/O from keyboard/mouse * Video Display Hacking: * With DOS calls, then BIOS calls. * Working with the display memory directly. * Sound: * Working with the sound card * Working with the internal system bell (that can be fun) * Flipping of LEDs on the parallel port. * Reading switches from the parallel port. * Combining all of the above to make a simple game (space invaders or pong using custom controllers though the parallel port) * Simple operating system development * The list goes on! Many very cool things one can do with a x86 machine and ASM! **Tutorials/Reference:** * [[http://www.intel.com/products/processor/manuals/|Intel IA-32 and 64 Architectures Software Developer's Manuals]] * [[http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_instruction_set.html|8086 Instruction Set]] * [[http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_bios_and_dos_interrupts.html|BIOS and DOS Soft Interrupt Table]] * [[http://www.emu8086.com/assembly_language_tutorial_assembler_reference/asm_tutorial_01.html|ASM Tutorial #1]] * [[http://www.xs4all.nl/~smit/asm01001.htm|Another ASM Tutorial]] **Document TODO:** * Add more tutorials and maybe write up some... * Add schematics with PCB layout... {{tag>projects hardware software 80x86 asm FreeDOS}}