ISA bus is basically just quasi-memory bus with some extras. You get address, you either get data or send data, done.
You just set an address and write/read data to it.
All you need to do simple input/output on it is to
* wait for "right" address on bus and "right" pins to light up * either latch the data, or output the data * bang the right control bit.
It is entirely doable using basic logic chips, because back then any kind of programmable logic was super expensive.
Compare it to usb-c where you need tens of thousands of lines of code to even negotiate some power stuff (or use specialized chips... that have those tens of thousands of lines of code baked in).