Thanks Mackrackit, I tried that but that doesn't work right either. I first thought since the orginal code had "row = 0 to 3, and I am using TRISB = (DCD row) ^ $fe that it would seem that I would have to state "row = 1 to 3" the $fe in TRISB = (DCD row) ^ $fe allows for when I flip the bits to set only one to output bit 0 becomes an input, I am using bit 0 for my interrupt in which when no key is pressed it goes to sleep and right before I go back to the main program I do this:
CMCON=%00000111
vrcon = 0
pauseus 10
TRISB = $fe ' B7-B1 in, B0-out
PORTB = %00000001 ' All output-pins low except bit 0
pauseus 10
intcon.1 = 0 'clears flag
resume
then my main program is this:

enable
cycle:
pause 1
@ Sleep
@ nop
@ nop
goto cycle

I must admit I am confused about row = 1 to 3, that does mean bit 1-3 in the variable Row doesn't it? if so I thought perhaps I could shift by one bit and account for the change, key = ((row >> 1) * 3) + (NCD (col ^ $f) but that doesn't work either. Anyhow I haven't abandoned the ship yet

Again, Many thanks for your reply