Your code looks good except for one line:
SET_TRIS_a(11111) ; set all 5 pins to 1=Input, using deprecated instruction.
I think you want something more like Example 5-1 on p. 43 of the datasheet:
banksel GPIO
movlw b'00010101' ; 0=low, 1=high
movwf GPIO
banksel ANSEL
clrf ANSEL ; digital I/O, rather than ADC
banksel TRISIO
movlw b'00000000' ; 0=output, 1=input
movwf TRISIO
You might want to check out the datasheet for the PIC12F609. A tiny little footnote on p. 16 (out of 212) of the datasheet says "TRISIO3 always reads as '1' since GP3 is an input only pin.". On p. 43, the datasheet mentions "Setting a TRISIO bit (=1) will make the corresponding GPIO pin an input (i.e., disable the output driver). Clearing a TRISIO bit (=0) will make the corresponding GPIO pin an output (i.e., enables output driver and puts the contents of the output latch on the selected pin)."
(Yes, 1=input, 0=output is exactly the opposite of certain other popular chips).
(Further details: Massmind: TRIS; Massmind: PIC12F example code )
EDIT: Even though we think the 12f609 doesn't "need" to have ANSEL cleared, I would clear it anyway. I've heard that fixes at least one Problem with 12f609.
#include <12F609.h>
// ...
main(){
OUTPUT_A(0xFF); // all high: 0=low, 1=high
// #BYTE ANSEL = 0x9F // defined in 12F609.h ?
ANSEL = 0;
SET_TRIS_A(0X00); // 0=output, 1=input
// ...
}