we just figured out that placing "using 0" after an interrupt handler definition is a bad idea. At least when using optimize 9,size, "using 0" tells the compiler not to bother pushing/popping R0. Then it happily goes around writing to R0, doesn't pop it, and all sorts of interesting (bad) things happen. Take away "using 0," and the compiler starts pushing/popping R0, and life gets boring (good) again.