Apparently, I don't understand what I thought I knew about what this macro does. It is a very simple macro included as an example in the gpasm assembler. movwf1 MACRO arg ;diddle regs in RAM bank 1 movwf (arg^0x80) ;invert MSB endm I had written some code to build the option register 1 bit at a time by setting and clearing bits in a RAM register and then writing the byte to OPTION_REG which is in Bank 1 so I wrote: BCF STATUS, RP0 ; Bank0 CLRF option_reg_init ;Know what we are turning on by ;first turning off everything. BCF option_reg_init, PSA ;TMR0 gets the prescaler. BSF option_reg_init, PS2 BSF option_reg_init, PS1 BSF option_reg_init, PS0 ;1/256 BCF option_reg_init, T0CS ;TMR0 to clock BCF option_reg_init, INTEDG ;int on drop of GP2 pin 5 MOVFW option_reg_init ;Get ready to set OPTION_REG movwf1 OPTION_REG I thought this macro would invert the bank select bit and write to 0x81 but instead, it wrote to TMR0 at address 1 which is what you would get if you tried to write to OPTION_REG without setting Bank 1 in status. If I set Bank 1 in status, then this macro does invert the bit and a write accesses a register in Bank 0 so it works that way, just not from Bank 0, trying to write to Bank 1. The main question boils down to proper use of the resources in gpasm. Can you actually write 1 bit at a time to W, using the provided names of the bits from the PIC's include file somewhat the same way that config works? __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _BOREN= _ON & _BODEN_ON & _CP_OFF & _CPD_OFF This is not the first PIC code I've written, but I had run in to some issues that raised these questions. I like to try to write code that one can still read years later and truly understand what was supposed to happen at the time. Thanks very much. Martin McCormick WB5AGZ --=20 http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .