Index: avrdude.1
===================================================================
--- avrdude.1	(revision 1018)
+++ avrdude.1	(working copy)
@@ -206,127 +206,25 @@
 does not know about a part that you have, simply add it to the config
 file (be sure and submit a patch back to the author so that it can be
 incorporated for the next version).  See the sample config file for
-the format.  Currently, the following MCU types are understood:
+the format. 
+For currently supported MCU types use ? as partno, this will print a list of partno ids and official part names on the terminal. (Both can be used with the -p option.)
 .Pp
-.TS
-ll.
-\fBOption tag\fP	\fBOfficial part name\fP
-1200	AT90S1200 (****)
-2313	AT90S2313
-2333	AT90S2333
-2343	AT90S2343 (*)
-4414	AT90S4414
-4433	AT90S4433
-4434	AT90S4434
-8515	AT90S8515
-8535	AT90S8535
-c128	AT90CAN128
-c32	AT90CAN32
-c64	AT90CAN64
-m103	ATmega103
-m128	ATmega128
-m1280	ATmega1280
-m1281	ATmega1281
-m1284p	ATmega1284P
-m128rfa1	ATmega128RFA1
-m16	ATmega16
-m161	ATmega161
-m162	ATmega162
-m163	ATmega163
-m164	ATmega164
-m164p	ATmega164P
-m168	ATmega168
-m168p	ATmega168P
-m169	ATmega169
-m16u2	ATmega16U2
-m2560	ATmega2560 (**)
-m2561	ATmega2561 (**)
-m32	ATmega32
-m324p	ATmega324P
-m325	ATmega325
-m3250	ATmega3250
-m328p	ATmega328P
-m329	ATmega329
-m3290	ATmega3290
-m329p	ATmega329P
-m3290p	ATmega3290P
-m32u2	ATmega32U2
-m32u4	ATmega32U4
-m48	ATmega48
-m64	ATmega64
-m640	ATmega640
-m644p	ATmega644P
-m644	ATmega644
-m645	ATmega645
-m6450	ATmega6450
-m649	ATmega649
-m6490	ATmega6490
-m8	ATmega8
-m8515	ATmega8515
-m8535	ATmega8535
-m88	ATmega88
-m88p	ATmega88P
-m8u2	ATmega8U2
-pwm2	AT90PWM2
-pwm2b	AT90PWM2B
-pwm3	AT90PWM3
-pwm3b	AT90PWM3B
-t10	ATtiny10
-t12	ATtiny12 (***)
-t13	ATtiny13
-t15	ATtiny15
-t2313	ATtiny2313
-t25	ATtiny25
-t26	ATtiny26
-t261	ATtiny261
-t4	ATtiny4
-t4313	ATtiny4313
-t44	ATtiny44
-t45	ATtiny45
-t461	ATtiny461
-t5	ATtiny5
-t84	ATtiny84
-t85	ATtiny85
-t861	ATtiny861
-t88	ATtiny88
-t9	ATtiny9
-ucr2	AT32uca0512
-usb1286	ATmega1286
-usb1287	ATmega1287
-usb162	ATmega162
-usb646	ATmega647
-usb647	ATmega647
-usb82	ATmega82
-x128a1	ATxmega128A1
-x128a1d	ATxmega128A1revD
-x128a3	ATxmega128A3
-x128a4	ATxmega128A4
-x16a4	ATxmega16A4
-x192a1	ATxmega192A1
-x192a3	ATxmega192A3
-x256a1	ATxmega256A1
-x256a3	ATxmega256A3
-x256a3b	ATxmega256A3B
-x32a4	ATxmega32A4
-x64a1	ATxmega64A1
-x64a3	ATxmega64A3
-x64a4	ATxmega64A4
-.TE
-.Bl -tag -width "(**) "
-.It "(*)"
+Following parts need special attention:
+.Bl -tag -width "ATmega1234"
+.It "AT90S1200"
+The ISP programming protocol of the AT90S1200 differs in subtle ways
+from that of other AVRs.  Thus, not all programmers support this
+device.  Known to work are all direct bitbang programmers, and all
+programmers talking the STK500v2 protocol.
+.It "AT90S2343"
 The AT90S2323 and ATtiny22 use the same algorithm.
-.It "(**)"
+.It "ATmega2560, ATmega2561"
 Flash addressing above 128 KB is not supported by all
 programming hardware.  Known to work are jtag2, stk500v2,
 and bit-bang programmers.
-.It "(***)"
-The ATtiny11 uses the same algorithm, but can only be
+.It "ATtiny11"
+The ATtiny11 can only be
 programmed in high-voltage serial mode.
-.It "(****)"
-The ISP programming protocol of the AT90S1200 differs in subtle ways
-from that of other AVRs.  Thus, not all programmers support this
-device.  Known to work are all direct bitbang programmers, and all
-programmers talking the STK500v2 protocol.
 .El
 .It Fl b Ar baudrate
 Override the RS-232 connection baud rate specified in the respective
@@ -346,7 +244,7 @@
 file to assign a default value to keep from having to specify this
 option on every invocation.
 .It Fl c Ar programmer-id
-Use the pin configuration specified by the argument.  Pin
+Use the programmer specified by the argument.  Programmers and their pin
 configurations are read from the config file (see the
 .Fl C
 option).  New pin configurations can be easily added or modified
@@ -358,6 +256,8 @@
 .Pa ${HOME}/.avrduderc
 file to assign a default programmer to keep from having to specify
 this option on every invocation.
+A full list of all supported programmers is output to the terminal 
+by using ? as programmer-id.
 .It Fl C Ar config-file
 Use the specified config file to load configuration data.  This file
 contains all programmer and part definitions that
Index: doc/avrdude.texi
===================================================================
--- doc/avrdude.texi	(revision 1018)
+++ doc/avrdude.texi	(working copy)
@@ -307,106 +307,7 @@
 Currently, the following MCU types are understood:
 
 @multitable @columnfractions .15 .3
-@item @code{1200}  @tab AT90S1200 (****)
-@item @code{2313}  @tab AT90S2313
-@item @code{2333}  @tab AT90S2333
-@item @code{2343}  @tab AT90S2343 (*)
-@item @code{4414}  @tab AT90S4414
-@item @code{4433}  @tab AT90S4433
-@item @code{4434}  @tab AT90S4434
-@item @code{8515}  @tab AT90S8515
-@item @code{8535}  @tab AT90S8535
-@item @code{c128}  @tab AT90CAN128
-@item @code{c32}   @tab AT90CAN32
-@item @code{c64}   @tab AT90CAN64
-@item @code{m103}  @tab ATmega103
-@item @code{m128}  @tab ATmega128
-@item @code{m1280} @tab ATmega1280
-@item @code{m1281} @tab ATmega1281
-@item @code{m1284p} @tab ATmega1284P
-@item @code{m128rfa1} @tab ATmega128RFA1
-@item @code{m16}   @tab ATmega16
-@item @code{m161}  @tab ATmega161
-@item @code{m162}  @tab ATmega162
-@item @code{m163}  @tab ATmega163
-@item @code{m164}  @tab ATmega164
-@item @code{m164p} @tab ATmega164P
-@item @code{m168}  @tab ATmega168
-@item @code{m168p} @tab ATmega168P
-@item @code{m169}  @tab ATmega169
-@item @code{m16u2} @tab ATmega16U2
-@item @code{m2560} @tab ATmega2560 (**)
-@item @code{m2561} @tab ATmega2561 (**)
-@item @code{m32}   @tab ATmega32
-@item @code{m324p} @tab ATmega324P
-@item @code{m325}  @tab ATmega325
-@item @code{m3250} @tab ATmega3250
-@item @code{m328p} @tab ATmega328P
-@item @code{m329}  @tab ATmega329
-@item @code{m3290} @tab ATmega3290
-@item @code{m329p} @tab ATmega329P
-@item @code{m3290p} @tab ATmega3290P
-@item @code{m32u2} @tab ATmega32U2
-@item @code{m32u4} @tab ATmega32U4
-@item @code{m48}   @tab ATmega48
-@item @code{m64}   @tab ATmega64
-@item @code{m640}  @tab ATmega640
-@item @code{m644p} @tab ATmega644P
-@item @code{m644}  @tab ATmega644
-@item @code{m645}  @tab ATmega645
-@item @code{m6450} @tab ATmega6450
-@item @code{m649}  @tab ATmega649
-@item @code{m6490} @tab ATmega6490
-@item @code{m8}    @tab ATmega8
-@item @code{m8515} @tab ATmega8515
-@item @code{m8535} @tab ATmega8535
-@item @code{m88}   @tab ATmega88
-@item @code{m88p}  @tab ATmega88P
-@item @code{m8u2}  @tab ATmega8U2
-@item @code{pwm2}  @tab AT90PWM2
-@item @code{pwm2b} @tab AT90PWM2B
-@item @code{pwm3}  @tab AT90PWM3
-@item @code{pwm3b} @tab AT90PWM3B
-@item @code{t10}   @tab ATtiny10
-@item @code{t12}   @tab ATtiny12 (***)
-@item @code{t13}   @tab ATtiny13
-@item @code{t15}   @tab ATtiny15
-@item @code{t2313} @tab ATtiny2313
-@item @code{t25}   @tab ATtiny25
-@item @code{t26}   @tab ATtiny26
-@item @code{t261}  @tab ATtiny261
-@item @code{t4}    @tab ATtiny4
-@item @code{t4313} @tab ATtiny4313
-@item @code{t44}   @tab ATtiny44
-@item @code{t45}   @tab ATtiny45
-@item @code{t461}  @tab ATtiny461
-@item @code{t5}    @tab ATtiny5
-@item @code{t84}   @tab ATtiny84
-@item @code{t85}   @tab ATtiny85
-@item @code{t861}  @tab ATtiny861
-@item @code{t88}   @tab ATtiny88
-@item @code{t9}    @tab ATtiny9
-@item @code{ucr2}  @tab AT32uca0512
-@item @code{usb1286} @tab ATmega1286
-@item @code{usb1287} @tab ATmega1287
-@item @code{usb162}  @tab ATmega162
-@item @code{usb646}  @tab ATmega647
-@item @code{usb647}  @tab ATmega647
-@item @code{usb82}   @tab ATmega82
-@item @code{x128a1}  @tab ATxmega128A1
-@item @code{x128a1d} @tab ATxmega128A1revD
-@item @code{x128a3}  @tab ATxmega128A3
-@item @code{x128a4}  @tab ATxmega128A4
-@item @code{x16a4}   @tab ATxmega16A4
-@item @code{x192a1}  @tab ATxmega192A1
-@item @code{x192a3}  @tab ATxmega192A3
-@item @code{x256a1}  @tab ATxmega256A1
-@item @code{x256a3}  @tab ATxmega256A3
-@item @code{x256a3b} @tab ATxmega256A3B
-@item @code{x32a4}   @tab ATxmega32A4
-@item @code{x64a1}   @tab ATxmega64A1
-@item @code{x64a3}   @tab ATxmega64A3
-@item @code{x64a4}   @tab ATxmega64A4
+@include parts.texi
 @end multitable
 
 (*)   The AT90S2323 and ATtiny22 use the same algorithm.
@@ -416,7 +317,7 @@
 and bit-bang programmers.
 
 (***)
-The ATtiny11 uses the same algorithm, but can only be
+The ATtiny11 can only be
 programmed in high-voltage serial mode.
 
 (****)
@@ -455,149 +356,7 @@
 Currently, the following programmer ids are understood and supported:
 
 @multitable @columnfractions .2 .6
-@item @code{2232HIO}     @tab
-FT2232H based generic programmer
-@item @code{89isp}       @tab
-Atmel at89isp cable
-@item @code{abcmini}     @tab
-ABCmini Board, aka Dick Smith HOTCHIP
-@item @code{alf}         @tab
-Nightshade ALF-PgmAVR,@*
-@url{http://nightshade.homeip.net/}
-@item @code{arduino}
-Arduino board, protocol similar to STK500 1.x
-@item @code{atisp}       @tab
-AT-ISP V1.1 programming cable for AVR-SDK1 from,@*
-@url{http://micro-research.co.th/}
-@item @code{avr109}      @tab
-Atmel AppNote AVR109 Boot Loader
-@item @code{avr910}      @tab
-Atmel Low Cost Serial Programmer
-@item @code{avr911}      @tab
-Atmel AppNote AVR911 AVROSP (an alias for avr109)
-@item @code{avrftdi}     @tab
-FT2232D based generic programmer
-@item @code{avrisp}      @tab
-Atmel AVR ISP (an alias for stk500)
-@item @code{avrisp2}     @tab
-Atmel AVR ISP mkII in ISP mode, in PDI mode for ATxmega devices, or
-in TPI mode for ATtiny4/5/9/10
-@item @code{avrispmkII}  @tab
-Atmel AVR ISP mkII (alias for stk500v2)
-@item @code{avrispv2}    @tab
-Atmel AVR ISP, running a version 2.x firmware (an alias for stk500v2)
-@item @code{bascom}      @tab
-Bascom SAMPLE programming cable
-@item @code{blaster}     @tab
-Altera ByteBlaster
-@item @code{bsd}         @tab
-Brian Dean's Programmer,@*
-@url{http://www.bsdhome.com/avrdude/}
-@item @code{buspirate}   @tab
-The Bus Pirate
-@item @code{butterfly}   @tab
-Atmel Butterfly Development Board
-@item @code{c2n232i}     @tab
-C2N232I, reset=dtr sck=!rts mosi=!txd miso=!cts,@*
-@url{http://www.ktverkko.fi/~msmakela/8bit/c2n232/hardware/index.en.html}
-@item @code{dapa}        @tab
-Direct AVR Parallel Access cable
-@item @code{dasa}        @tab
-serial port banging, reset=rts sck=dtr mosi=txd miso=cts
-@item @code{dasa3}       @tab
-serial port banging, reset=!dtr sck=rts mosi=txd miso=cts
-@item @code{dragon_dw}   @tab
-AVR Dragon in debugWire mode
-@item @code{dragon_hvsp} @tab
-AVR Dragon in high-voltage serial programming mode
-@item @code{dragon_isp}  @tab
-AVR Dragon in ISP mode
-@item @code{dragon_jtag} @tab
-AVR Dragon in JTAG mode
-@item @code{dragon_pdi} @tab
-AVR Dragon in PDI mode
-@item @code{dragon_pp}   @tab
-AVR Dragon in (high-voltage) parallel programming mode
-@item @code{dt006}       @tab
-Dontronics DT006
-@item @code{ere-isp-avr} @tab
-ERE ISP-AVR,@*
-@url{http://www.ere.co.th/download/sch050713.pdf}
-@item @code{frank-stk200}@tab
-Frank's STK200 clone,@*
-@url{http://electropol.free.fr/spip/spip.php?article15}
-@item @code{futurlec}    @tab
-Futurlec.com programming cable
-@item @code{jtag1}       @tab
-Atmel JTAG ICE mkI, running at 115200 Bd
-@item @code{jtag1slow}   @tab
-Atmel JTAG ICE mkI, running at 19200 Bd
-@item @code{jtag2}       @tab
-Atmel JTAG ICE mkII, running at 115200 Bd
-@item @code{jtag2avr32}  @tab
-Atmel JTAG ICE mkII in AVR32 mode.
-@item @code{jtag2dw}     @tab
-Atmel JTAG ICE mkII in debugWire mode.
-@item @code{jtag2fast}   @tab
-Atmel JTAG ICE mkII, running at 115200 Bd
-@item @code{jtag2isp}    @tab
-Atmel JTAG ICE mkII in ISP mode.
-@item @code{jtag2pdi}    @tab
-Atmel JTAG ICE mkII in PDI mode.
-@item @code{jtag2slow}   @tab
-Atmel JTAG ICE mkII (default speed 19200 Bd)
-@item @code{jtagmkI}     @tab
-Atmel JTAG ICE mkI, running at 115200 Bd
-@item @code{jtagmkII}    @tab
-Atmel JTAG ICE mkII (default speed 19200 Bd)
-@item @code{jtagmkII_avr32} @tab
-Atmel JTAG ICE mkII in AVR32 mode.
-@item @code{mib510}      @tab
-Crossbow MIB510 programming board
-@item @code{pavr}        @tab
-Jason Kyle's pAVR Serial Programmer
-@item @code{picoweb}     @tab
-Picoweb Programming Cable,@*
-@url{http://www.picoweb.net/}
-@item @code{pony-stk200} @tab
-Pony Prog STK200
-@item @code{ponyser}     @tab
-design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts
-@item @code{siprog}      @tab
-Lancos SI-Prog,@*
-@url{http://www.lancos.com/siprogsch.html}
-@item @code{sp12}        @tab
-Steve Bolt's Programmer
-@item @code{stk200}      @tab
-STK200
-@item @code{stk500}      @tab
-Atmel STK500, probing for either version 1.x or 2.x firmware
-@item @code{stk500hvsp}  @tab
-Atmel STK500 in high-voltage serial programming mode(version 2.x firmware only)
-@item @code{stk500pp}    @tab
-Atmel STK500 in parallel programming mode (version 2.xfirmware only)
-@item @code{stk500v1}    @tab
-Atmel STK500, running a version 1.x firmware
-@item @code{stk500v2}    @tab
-Atmel STK500, running a version 2.x firmware
-@item @code{stk600}      @tab
-Atmel STK600 in ISP mode, in PDI mode for ATxmega devices, or
-in TPI mode for ATtiny4/5/9/10
-@item @code{stk600hvsp}  @tab
-Atmel STK600 in high-voltage serial programming mode
-@item @code{stk600pp}    @tab
-Atmel STK600 in parallel programming mode
-@item @code{usbasp}      @tab
-USBasp,@*
-@url{http://www.fischl.de/usbasp/}
-@item @code{usbtiny}     @tab
-USBtiny simple USB programmer,@*
-@url{http://www.ladyada.net/make/usbtinyisp/}
-@item @code{wiring}      @tab
-Wiring board, utilizing STK500 V2.x protocol,@*
-@url{http://wiring.org.co/}
-@item @code{xil}         @tab
-Xilinx JTAG cable
+@include programmers.texi
 @end multitable
 
 
Index: doc/Makefile.am
===================================================================
--- doc/Makefile.am	(revision 1018)
+++ doc/Makefile.am	(working copy)
@@ -22,6 +22,8 @@
 #
 
 CLEANFILES = \
+	programmers.texi \
+	parts.texi \
 	version.texi \
 	stamp-vti
 
@@ -40,6 +42,22 @@
 	 mv -f avrdude avrdude-html; \
 	fi;
 
+avrdude.texi: programmers.texi parts.texi
+
+programmers.texi: ../avrdude$(EXEEXT) ../avrdude.conf
+	../avrdude$(EXEEXT) -c \? 2>&1 \
+	| sort \
+	| $(AWK) '$$2 ~ /^=$$/ {printf("@item @code{%s} @tab %s\n",$$1,gensub("[^=]+=[ \t]*","",1))}' \
+	| sed "s#<\?\(http://[^ \t>]*\)>\?#@url{\1}#g" \
+	>programmers.texi
+
+parts.texi: ../avrdude$(EXEEXT) ../avrdude.conf parts_comments.txt
+	../avrdude$(EXEEXT) -p \? 2>&1 \
+	| sort \
+	| $(AWK) '$$2 ~ /^=$$/ {printf("@item @code{%s} @tab %s\n",$$1,$$3)}' \
+	| sed -e "`sed 's:\([^ \t]*\)[ \t]*\(.*\):s/\1$$/\1 \2/g:g' <parts_comments.txt`" \
+	>parts.texi
+
 clean-local:
 	rm -rf avrdude-html *.info
 
Index: doc/parts_comments.txt
===================================================================
--- doc/parts_comments.txt	(revision 0)
+++ doc/parts_comments.txt	(working copy)
@@ -0,0 +1,5 @@
+AT90S1200 (****)
+AT90S2343 (*)
+ATmega2560 (**)
+ATmega2561 (**)
+ATtiny11 (***)
