I don't know about 20 MHz, but arduino bootloaders will work at 16 MHz.
Check out the core files here for 1284's.
skyjumper made this bootloader for me.
(right-click, save-target-as, rename to .hex if need to).
Then get yourself an AVR ISP such as this to load the bootloader into it.
http://www.mdfly.com/index.php?main_page=product_info&cPath=5&products_id=415
add these 2 lines to programmers.txt to use it in the IDE. Tools:Burn Bootloader: w/ MDFLY
usbasp.name=MDFLY
usbasp.protocol=usbasp
and add a section like this in boards.txt
##############################################################
atmega1284p.name=Arduino-Bobuino 1284p <<< this will show up in the IDE boards list
atmega1284p.upload.protocol=stk500
atmega1284p.upload.maximum_size=129024
atmega1284p.upload.speed=38400
atmega1284p.bootloader.low_fuses=0xFF
atmega1284p.bootloader.high_fuses=0xDC
atmega1284p.bootloader.extended_fuses=0xFD
atmega1284p.bootloader.path=Bobuino <<< change to your path
atmega1284p.bootloader.file=ATmegaBOOT_1284P_16MHz.hex
atmega1284p.bootloader.unlock_bits=0x3F
atmega1284p.bootloader.lock_bits=0x0F
atmega1284p.build.mcu=atmega1284p
atmega1284p.build.f_cpu=16000000L
atmega1284p.build.core=arduino
Can you follow all that?
ATmegaBOOT_1284P_16MHz.hex (5.5 KB)