The "programmer operation not supported" tends to happen a lot to me too, but doesn't affect what I'm doing. If you're interested, you could look at avrdude.c and find out all the places where it says that, then come up with your own custom error strings and recompile.
Not sure that'd really be worth all the trouble though.
I'm not exactly sure what your command is, but if you're just running "avrdude -c usbtiny -p <processor> -vvvv", you might throw a -F in there and see if it'll give you an idea of what it thinks the device signature is. (At least I hope the attiny2313 has a standard type of device signature.) When I was getting rc=-1, it was usually because the signature was returned as basically random noise from across the line (such as 0x30a007) and would change each time I ran it. You might get the same rc=-1 if the device signature is read back as 0xffffff. What solved it for me was adding in an external clock -- somehow my fuse bits got corrupted and I had to add a clock in order for my chips to come back to life.
Note: I'm sure the Powers That Be might frown upon my speaking of -F; you should certainly avoid using it when you actually intend to write to the chip, as unpredictable things can happen.
There are 2 ways you can provide a clock:
1) (simple) Use another Arduino to generate a clock on an output pin.
2) (could be simpler or more advanced depending on your experience --
but you will brick your chip if not careful) Set the fuse bit CKOUT=0 so one of your output pins will output the chip's clock. If you haven't used ATmega fuses before, now might not be such a good time to attempt this.
If you need help with this, I can post some solid example code. One caveat is at the end of your loop(), there are some additional instructions executed before it begins the loop again, so on an oscilloscope, the last cycle in the loop will appear much longer than the others, and if you only write 1 cycle, it'll stay HIGH or LOW a lot longer than the other. Thus I made my loop contain many cycles before it ended. Even though the oscilloscope said my fake clock was only running at 4MHz, it still worked well enough for me to rescue one of my chips once.
If it turns out that a clock solves your problem, then you should research fuses specifically for your attiny2313 (as most every Atmel product uses different fuse settings) and find out how to make it use an internal clock if you so desire. It's certainly feasible that your chip was programmed to need an external oscillator or crystal, in which case you'd want to hook up the XTAL1 and/or XTAL2 port of your attiny2313 to the clock output of whatever chip that's serving as your oscillator. And, while some might regard this as sloppy, I don't tend to bother with capacitors when I'm hooking up a clock in this manner.
Best,
- Stephen