Hi,
First, it's simply doesn't work like that - it just can't.

Second, even if it COULD be made to work that way you have a couple of issues with your code
1) Arrays are indexed starting at 0, you're writing outside of the declared array. An array of 4 elements is indexed from 0 to 3.
2) IR_D[1] = GPIO.1 will READ the state of GPIO.1 and assign the value of it TO IR_D[1] - not what you're after.

You can create aliases to the same register/variable using the VAR statement, it is well explained in the manual. The rule is that there is ONE place to which the alias is pointing, what you're trying to do is to have BOTH a memory location in RAM (the array) AND the GPIO register automatically merged into one single entity - it just doesn't work that way I'm afraid.

Perhaps something like this would do what you want:
Code:
PortOffset VAR BYTE
For T = 0 to 3
  LOOKUP T, [1,2,4,5], PortOffset
  FOR Cycles = 1 TO PulseCnt
    GPIO.0[PortOffset] = 1
    PAUSEUS 100
    GPIO.0[PortOffset] = 0
    PAUSEUS 200
  NEXT
  PAUSEUS 350
NEXT
/Henrik.