I agree with your statement about "A1 A2 A3 A4 DIM" dimming simultaneously, but how can that be true for "A1 B2 C3 D4 DIM" ?
Wouldn't there have to be a separate DIM command for each housecode?
No, and you can verify this with a Maxi controller. When address only are sent (house code/unit code - i.e. A1, B2, C3, etc), those modules on those addresses are essentially told "obey the NEXT function(s) code(s) you see". They stay in that mode until they "see" another (different from their own) HCUC which puts them back in the "ignore" mode.
If that were to be true, there would be no need for a function to be associated with a specific Housecode.
Here's what I'm seeing with an X-10 MaxiController and two X-10 LM465 Lamp Modules set to A1 and B2 with incandescent lamps attached.
First, make sure that everything is Off and un-addressed:
Transmit:
A AllUnitsOff
B AllUnitsOff
Now transmit:
A1
B2
B On
Results: Lamp B2 turns On; Lamp A1 remains Off.
Transmit:
A On
Result: Lamp A1 turns On; Lamp B2 remains On.
Transmit:
A Off
Result: Lamp A1 turns Off; Lamp B2 remains On
Transmit:
B Off
Result: Lamp B2 turns Off.
Here are the addressing rules for ordinary X-10 modules like the LM465:
1. A module becomes addressed when it receives a Housecode|Unitcode matching its own.
2. An addressed module responds to (supported) functions on its own Housecode and remains addressed until it becomes un-addressed.
3. A module becomes un-addressed either when it receives a different Unitcode on its own Housecode following any function on that same Housecode -- or -- when it receives the AllUnitsOff function on that same Housecode.
Note: The addressing rules for modules which support the old-style Preset Dim 1 and Preset Dim 2 functions, like Smarthome's 'Linc modules, are different and more complex.