(on Linux)
- Switch off networking
 - connect laptop directly to LAN port on router
 - The router's going to be coming up on:192.168.1.1 so... set the laptop's IP to something else but in the same subnet (e.g. 192.168.1.123, I used 192.168.1.2 as per TFM), do it like this: sudo ifconfig eth0 192.168.1.2 netmask 255.255.255.0 up
 - start pinging the router (nothing's coming back), like this: ping -t -w2 192.168.1.1
 - hard-reset the router (it must be: 30/30/30)
 - during the last 30, the pings will start responding with a ttl of 100, when it's 100 you can tftp it, (normally when you boot the router, it gives a few ttl100's and then you get 64's if you have a look)
 - tftp can only send a 4MB file (or less) so no huge binaries, I used: dd-wrt.v24_mini_asus.trx,
 - When the ttl100's start coming, send the binary with this: echo -e "binary\nrexmt60\ntrace\nput dd-wrt.v24_mini_asus.trx\n" | tftp 192.168.1.1
 - If it's going ok, you'll see lots of:  sent 
 - DATA 
 - received ACK 
...  - After that finishes, leave the router to write to nvram, I gave it ten minutes, this is the important bit, you need to leave it alone for a bit
 - hard reboot it, so switch off, count to 30 and then switch on, you should be able to get on the web-if now
 - leave it alone for another 5 minutes
 - hard-reset the router again (it must be: 30/30/30) - and you're done!
 
I got my info from a few sites but this one which explained the "leave it alone for a bit" bit was best: http://www.dd-wrt.com/phpBB2/viewtopic.php?t=51486