First post, by Lazo
Hi,
I am studying ISA bus internals and reading classic ISA System Architecture, 3rd Edition book. There, in the section which describes data bus steering logic of 80286, this description is given:
"... in addition to chip-selecting its respective device it also asserts ISA signal M16# (Memory size 16) or IO16# (I/O size 16). This tells the bus control logic that the microprocessor is communicating with 16-bit device (as opposed to an 8-bit device). Not that the bus control logic samples either the M16# or IO16# signal depending on whether the bus cycle is referencing a memory or I/O location. Sampling the appropriate signal is important because both the M16# and IO16# signal may be asserted at the same time, since the generation of M16# is not qualified by whether the access is to a memory location or not."
I would like to ask experts here to clarify the highlighted statement. This statement confused me as I do not understand:
- how and under what circumstances it is possible that M16# and IO16# signals are asserted at the same time when bus cycle can explicitly assert (or decoder identify) that bus cycle is memory R/W or IO R/W.
- If M16# "is not qualified by whether the access is to memory location or not" then the question is why ISA designers included separate IO16 and M16 signals to distinguish IO from memory access if all they needed to communicate is that ISA device is 16-bit or 8-bit.
- Is there a legitimate use case where 16-bit ISA device would support 16-bit memory access but only 8-bit I/O access? Or that 16-bit ISA device will dynamically (or based on memory ranges/banks) enable 16-bit memory access on some block of addresses but 8-bit on another block of addresses? Such scenarios would obviously explain why there are M16# and IO16# signals and not just 16# signal.