Opis budowy i działania YAMOD.ATBUS. 1. IC1 (74LS254) jest wzmacniaczem linii adresowych A0..A3, oraz sygnałów sterujących /RD, /WR, /RESET i /P5. Większość z tych sygnałów jest podłączona do taśmy napędów lub wielu wejść, stąd wymaga wzmocnienia. Wzmacniacz pracuje tylko w jednym kierunku (DIR=GND) i przez cały czas (/G=GND). 2. YAMOD.ATBUS używa portów #B0..#BF,czyli linii /P5 z dekodera YABUS. Dioda D1 (1N4148) sygnalizuje magistrali, że porty są zajęte. 3. IC2 (74LS32) wraz z IC3 (74LS139) stanowią dekoder adresowy. Jedna bramka OR generuje sygnał wyboru napędu /CS0 z /P5 i A3 - odpowiada to adresom #B0..#B7. Drugi sygnał wyboru /CS1 jest tworzony dekoderem 139 z sygnałów /P5, A2 i A3 - adresy #BC..#BF. Dodatkowo powstaje tu sygnał dostępu do RTC w portach #BA..#BB oraz sygnał /A23P (porty #B0..#B3, do dalszego dekodowania portu #B0). Kolejne dwie bramki OR służą do zdekodowania portu #B0 (sygnał /16B), który w odróżnieniu od pozostałych pracuje w trybie 16bit - użyte są sygnały /A23P, A0 i A1. Ostatnia bramka OR jest użyta w sterowaniu dysku. Drugi dekoder 139 generuje sygnały dla RTC wyboru adresu /RAS - port #BA oraz dostępu do danych /RCS - port #BB. (Dodatkowo RTC dostępny jest w portach #B8 oraz #B9, ale te adresy są uboczne i nie należy ich używać - mogą być zastosowane do odczytu z CompactFlash.) 4. IC4 (74LS00) wspiera dekoder adresowy i sterowanie dysku. Jedna bramka NAND generuje z sygnałów /RD i /WR sygnał RW, który po opóźnieniu RC rzędu 100ns na R1 i C1 służy do zatrzaskiwania danych w trybie 16bit (narastającym zboczem). Sygnał RW jest również użyty do adresowania RTC w dekoderze 139 (IC3). Druga bramka NAND sumuje sygnały /CS0 i /CS1, generując sygnał ATCS, który przyjmuje stan wysoki przy dostępie do portów napędu. Trzecia bramka NAND blokuje sygnał RW sygnałem ATCS - generuje sygnał /ATRW, którego stan niski oznacza adresowanie napędów do odczytu lub zapisu. Sygnał /ATRW jest użyty do odblokowywania bufora D0..D7 dla trybu 8bit. 5. Przerzutnik IC5 służy do przełączania młodszego i starszego bajtu w trybie 16bit. Wejście zegarowe przerzutnika jest aktywowane sygnałem /ATRW, czyli przy każdym dostępie (/RD=0 albo /WR=0) do portów napędu (/CS0=0 albo /CS1=0). Uwzględnianie adresowania napędów IDE jest potrzebne, aby przerzutnik nie zmieniał stanu przy dostępie do innych portów oprócz IDE (przy operacjach na IDE mogą być włączone przerwania, a procedura obsługi przerwań może używać dowolnych portów, oprócz portów IDE). Zatrzaskiwany jest stan zanegowanego wyjścia (sygnał S), co daje zmianę stanu przy każdym przełączeniu. Dodatkowo bramką OR zanegowane wyjście jest blokowane sygnałem /16B. Dzięki temu przerzutnik zmienia stan tylko jeśli /16B=0 (czyli dla portu #B0). Jeśli jest dostęp do innego portu (#B1..#B7, #BC..#BF) przerzutnik jest przełączany w stan 1 (czyli S=0, co odpowiada operacji na parzystym bajcie). Pierwsza wersja YAMOD.ATBUS nie miała przerzutnika, a przełączenia bajtów dokonywane było linią A8. W podstawowej (domyślnej) konfiguracji można zastąpić przerzutnik linią A8, jednak w nietypowych konfiguracjach (przy przemapowaniu portów) wymaga to zaangażowania dodatkowej linii adresowej (w miejsce A8), co nie zawsze może być możliwe ze względu na istniejący kod sterownika IDE (inny niż DSKHNDLR.ATBUS). Przerzutnik jest również niezbędny, jeśli do przesyłania danych sektora wykorzystuje się układ Z80DMA. Aby zastąpiąpić przerzutnik linią A8 należy odciąć sygnał S od wejścia bramki OR i podłączyć go do wyjścia tej bramki, a linię A8 podłączyć do zwolnionego wejścia (na drugim wejściu pozostaje sygnał /16B, który sprawi, że linia A8 nie będzie miała znaczenia dla portów innych niż #B0). 6. Multiplekser IC6 obsługuje tryb 16bit i jego zadaniem jest generowanie innych sygnałów sterujących dla parzystych (S=0) i nieparzystych (S=1) bajtów. Dla bajtu parzystego dopuszczony jest sygnał odczytu (/SRD=/RD), sygnał zapisu jest zablokowany (/SWR=1), wyjście zatrzasku jest zablokowane (/ZO=1), a na wejściu generowane jest narastające zbocze (ZI=RWT). Dla bajtu nieparzystego sygnał odczytu jest zablokowany (/RD=1), sygnał zapisu jest dopuszczony (/SWR=/WR), wyjście zatrzasku jest odblokowane tylko dla portu #B0 (/ZO=/16B), a wejście zatrzasku jest zablokowane (ZI=0). 7. Multiplekser IC7 generuje sygnały sterujące IDE w zależności od trybu pracy - 8bit (/16B=1) lub 16bit (/16B=0). W trybie 8bit przepuszczane są wszystkie odczyty (/ATRD=/RD), zapisy (/ATWR=/WR), bufor młodszych linii danych D0..D7 jest otwarty zarówno dla odczytu jak i dla zapisu (/LEN=/ATRW), a bufor starszych linii danych D8..D15 jest zablokowany (/HEN=1). W trybie 16bit sygnały odczytu i zapisu zależą od tego, czy przesyłany jest bajt parzysty, czy nieparzysty (/ATRD=/SRD, /ATWR=/SWR), bufor młodszych linii danych D0..D7 jest otwarty dla odczytu (/LEN=/RD), a bufor starszych linii danych D8..D15 jest otwarty dla zapisu (/HEN=/WR). 8. IC8 jest buforem młodszych linii danych D0..D7 i pracuje w obu kierunkach. W trybie 8bit umożliwia dwukierunkowy dostęp do portów napędów. W trybie 16bit służy wyłącznie do odczytu - z portu napędu lub z zatrzasku. 9. IC9 jest buforem starszych linii danych D8..D15 i pracuje tylko przy zapisie w trybie 16bit - do portu napędu lub do zatrzasku. 10. IC10 zatrzaskuje młodszy bajt przy zapisie albo starszy bajt przy odczycie. Możliwe jest też przetestowanie tego zatrzasku poprzez pojedynczy zapis do portu #B0, a następnie pojedynczy odczyt portu #B0. W tym wypadku nie są generowane sygnały sterujące dla dysku (/ATRD=1, /ATWR=1). 11. IC11 jest zegarem czasu rzeczywistego (RTC) takim, jak w komputerach PC AT. Może być użyty zarówno układ MC146818 (w tym wypadku potrzebny jest kwarc 32768Hz oraz podłączenie baterii 3V do złącza JP1) albo DS1287 lub DS12887 (ma własny kwarc i baterię). Układ ten może generować przerwania okresowe (co jest niezbędne dla uruchomienia systemu UZI na Timex FDD 3000). Układ pracuje w trybie Motorola, czyli dla odczytu albo zapisu rejestru podawany jest sygnał /WR wraz z sygnałem DS=1 (port #BB). Z kolei zapis adresu rejestru (port #BA) generuje dodatni impuls na wejściu AS. (Odczyt portu #BA spowoduje wpisanie #FF jako adres rejestru.) 12. IC12 pracuje jako generator sygnału zegarowego dla MC146818 oraz jako inwerter sygnałów zatrzaskujących adres rejestru (/AS) i dane (/DS). Jeden inwerter nie jest wykorzystany. Układ jest również zasilany z baterii, co jest wymagane dla poprawnej pracy MC146818. Jeśli montowany jest układ DS1287 albo DS12887 (i generator kwarcowy nie jest potrzebny), z IC12 można zrezygnować, wykorzystując wolną bramkę NAND jako inwerter dla /RAS. 13. W miejcu diody D2 powinna zostać zamontowana listwa z 2 pinami do podłączenia diody mocowanej w obudowie (jak w PC). Rezystor R2 zapewnia ograniczenie prądu. Niestandardowe podłączenie. Domyślnie YAMOD.ATBUS używa portów #B0..#BF. Aby użyć innych portów, należy podać sygnał wyboru (/CS) na linię /P5, a linie adresowe podłączyć do A0..A3. Na linię A3 może zostać podany stan 1, jeśli jest wykorzystywany tylko multiplekser IDE i nie są potrzebne porty #BE i #BF. 1. Podłączenie jak ZXIDE128 (opracował Pera Putnik) nie jest zgodne z YAMOD.ATBUS, ponieważ przy zapisie jest odwrotna kolejność bajtów. Należałoby dokonać przeróbek na płytce. Zmiana połączeń w YABUS wygląda następująco. YABUS:D0..D7=Z80:D0..D7 YABUS:A0=Z80:A3 YABUS:A1=Z80:A6 YABUS:A2=Z80:A7 YABUS:A3=1 YABUS:/P5=Z80:A4 YABUS:/RD=Z80:/RD YABUS:/WR=Z80:/WR YABUS:/RES=Z80:/RESET 2. Podłączenie jak Z80_FPGA (opracował Alvin Albrecht). YAMOD.ATBUS potrzebuje dodatkowego obwodu, by generować przerwania. Linia przerwań z IDE nie jest podłączona. Adres na A0..A7 dekodowany na linię /ATAPORT jest mi nieznany. YABUS:D0..D7=Z80:D0..D7 YABUS:A0=Z80:A8 YABUS:A1=Z80:A9 YABUS:A2=Z80:A10 YABUS:A3=Z80:A11 YABUS:/P5=(Z80:A11 * Z80:A12) + /ATAPORT YABUS:/RD=Z80:/RD YABUS:/WR=Z80:/WR YABUS:/RES=Z80:/RESET 3. Podłączenie jak ZX Spectrum Extension - IDE Interface (źródło nieznane). Dysk jest dostępny w portach #59, #5B, #5D, #5F, #79, #7B, #7D, #7F. Dla ZX128 należy zablokować linię /IORQGE odwróconym sygnałem /SEL. Działanie nie jest przeanalizowane do końca. YABUS:D0..D7=Z80:D0..D7 YABUS:A0=Z80:A1 YABUS:A1=Z80:A2 YABUS:A2=Z80:A5 YABUS:A3=1 YABUS:/P5=/(Z80:A0 * Z80:A3 * Z80:A4 * Z80:A6) + A7 YABUS:/RD=Z80:/RD YABUS:/WR=Z80:/WR YABUS:/RES=Z80:/RESET 4. Podłączenie jak IDE Interface for MB02 (źródło: Sintech). YABUS:D0..D7=Z80:D0..D7 YABUS:A0=Z80:A2 YABUS:A1=Z80:A3 YABUS:A2=Z80:A4 YABUS:A3=1 YABUS:/P5=??? YABUS:/RD=Z80:/RD YABUS:/WR=Z80:/WR YABUS:/RES=1 5. Podłączenie jak DIVIDE (opracował Pavel Cimbal "Zilog"). Adresy #A3, #A7, #AB, #AF, #B3, #B7, #BB, #BF. YABUS:D0..D7=Z80:D0..D7 YABUS:A0=Z80:A2 YABUS:A1=Z80:A3 YABUS:A2=Z80:A4 YABUS:A3=1 YABUS:/P5=/(Z80:A0 * Z80:A1 * Z80:A5 * Z80:A7) + A6 YABUS:/RD=Z80:/RD YABUS:/WR=Z80:/WR YABUS:/RES=1 v011 złącze IDE przesunięte na środek, zmiana oficjalnych portów RTC na #BA..#BB (z #B8..#B9 ze względu na możliwość odczytu CompactFlash w tych portach) v010 dodane dodatkowe kondensatory v009 /ATRES podłączony do Vcc - dysk parkuje po wyłączeniu prądu v009 RTC podłączony w trybie Motorola, /CS=GND, inwersja na /AS i /DS