The solution to your problem is to read the TI Data Sheet.
So what are you doing IN DETAIL?
> - 0x 4 4 the address of the micro (0x44), with the R/W bit set to "Write",
> - 0x 8 4 command frame to indicate i want to write to the first ports (illegal)
> -0x data data of my program
> -0x data data of my program
> -0x data data of my program
The only valid values for that second byte are 0 to 7. "0x84" isn't a valid value for the command register.
If the chip happens to ignore the top bit, you're saying you want to "write to the first ports".
The problem there is the first port is Register 2 and not register 4, which is the value you're using.
You're writing to the two Priority Inversion registers and then the first Configuration register. What are you expecting to happen?
The most important thing (that you might have missed) is that the FIRST thing you have to do is to write to registers "6" and "7" to configure the pins that you want to be outputs to be OUTPUTS. If you don't do that they're configured to INPUTS, and writing to the output port registers won't do anything. Then you can perform two writes starting at "2" to set output pins and perform two reads starting at "0" to read the pin values of the ones configured as inputs.
Tom