ULA 48K ma tylko jeden pin - /IOREQ (pin 33). Logika z dodaniem A0 jest realizowana tranzystorem lub rezystor + dioda, ale i bez tego by działało - grunt, to móc "wyłączyć" adresowanie I/O w ULA właśnie tym pinem. Jeśli chce się być zgodnym w 100% z oryginałem - to A0 powinno być brane pod uwagę.
W Maxach 48/128 jest to niepotrzebnie przekombinowane, co kosztuje utratę 2 pinów CPLD.
Twoje rozumowanie jest prawidłowe, choć zapomniałeś, że do portu ULA można też zapisywać
Ale rozumiem, że w przypadku klawiatury się to nie zdarza.
/IORQULA = /IORQGE = !/IORQ * !A0
Ale cokolwiek sobie zrealizujesz w interfejsie, musisz pamiętać, by wystawiać stan wysoki na złącze krawędziowe (styk A-13).
Jeszcze jedna uwaga. Szyna danych CPU jest oddzielona od szyny danych ULA rezystorami 470 om (to dobrze), ale w innych konstrukcjach może to być 74LS245 (to źle). Interfejs wpinany do złącza krawędziowego ma dostęp do szyny CPU, tak więc ma wyższy priorytet przy wymuszaniu stanów na liniach danych - więc teoretycznie można całkowicie olać, co ULA wtedy wystawia, bo zostanie to po drugiej stronie rezystorów. Jedna w przypadku klawiatury, gdzie sygnały idą przez jakieś rezystancje oraz diody, Twój interfejs może dawać napięcia (na liniach danych) zbyt blisko progów TTL i dodanie do tego stanu przeciwnego przez rezystor 470 om spowoduje, że interfejs nie działa jak powinien (oczywiście zablokowanie adresacji I/O ULA rozwiązuje problem, bo mamy stan wysokiej impedancji po stronie ULA). Jeśli zamiast rezystorów jest bufor na TTL - to w ogóle umarł w butach
Ale nie wiem, czy i jakie mszyny mają LS245 zamiast rezystorów - na pewno timexy mają to przewidziane na PCB.