Malfunction wrote:
Can I add a device to this I/O bus without using PCI or any other bus?
It sounds like you're thinking of the CPU's local bus (as opposed to something like PCI or LPC), which is still a bus. Whether you can attach devices to the CPU's local bus or not depends on the CPU; some of them don't expose the local bus externally.
Malfunction wrote:
If yes how are I/O addresses assigned? Don't they conflict?
If you're not using a standardized bus, then you can assign them however you want, and you'll cause conflicts if you are careless in how you assign them. Modern x86 PCs tell the OS about these assignments using firmware (e.g. ACPI), so the OS won't try to configure some other device to use a conflicting address. Non-PC x86 hardware, as well as very old PCs, may expect the OS to know about reserved addresses without being told.
Malfunction wrote:
If my CPU supports PCI and I²C (yes some do!), how does the cpu differentiate between their I/O addresses?
If your CPU has integrated peripherals like that, then it must also have integrated address decoders that decide which integrated peripheral is selected by each I/O address. Those address decoders may be configurable, fixed, or a mixture of both (for example, a fixed address decoder to address the PCI configuration space, where the configurable address decoders appear as PCI devices).
Malfunction wrote:
(btw I don't know if I²C addresses are just logical and not about I/O ports but this is another question I also need the answer of)
The answer to that question is most likely in the CPU datasheet, but I can't help more than that without knowing which CPU it is.