Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

This page explains how to realize a very simple parallel ISP programmer:

In fact, the requirements for building it are only 3 resistors and a parallel cable (and a computer with a parallel port!). If you connect directly to the parallel cable (hence to a male connector), remember that the pins order is reverted with respect to what you see in the original wiring sketch:

(notice in this picture pin 19 is plugged into a connector only because I had no more single-wire connectors... in fact, the other end of that white wire is free)

When you connect it to the parallel port, the "on" led will turn to pale green. But remember that it will not work if you do not provide a power source (for instance through USB).

Once everything is set up the simplest way to test it is with the "uisp" utility, running (you probably need to be super-user):

uisp -dprog=dapa

You should get a message saying that a chip "similar to atmega323" has been found. That's good sign: uisp was released in 2005, and just doesn't know about the existence of atmega328.

Now, assuming you want to reprogram the bootloader, just start the arduino IDE (but ensure you have permissions to use the parallel port - for instance, run the IDE as root), choose "Parallel Programmer" from "Tools" -> "Programmer" and then click "Tools" -> "Burn Bootloader".

If however you want to clear the ATmega328's memory from any sketch before burning the bootloader (in other words, if your goal is to bring an Arduino microcontroller to its initial state), run

uisp -dprog=dapa -dpart=ATmega323 --erase

before starting the Arduino IDE.

Notice uisp itself is not capable of reprogramming your ATmega328, since it is persuaded it's talking to an ATmega323, which has less memory: if you try to send the bootloader with the "--upload" command, instead than with the Arduino IDE, you will get an error.