[8bit] Niezainicjowana karta CF powodem problemó

Eksperymentuję ostatnio z konstrukcjami retro. jakiś czas temu odpaliłem prosty komputer ośmiobitowy na 6502. Całość siedzi na dwóch płytkach - jedna z CPU i pamięciami, druga z układami I/O. Działa na tym na razie BASIC obsługiwany przez terminal szeregowy, a ja powoli zabieram się za uruchamianie kolejnych układów I/O (RTC, karta CF, kontroler klawiatury AT). Dzisiaj zabrałem się za kartę CF. Oryginalny plan zakładał eksperymentowanie pod BASIC-iem, za pomocą komend PEEK i POKE. Karta to

32MB wersja przemysłowa. Połączenia na płytce wykonane wg tego schematu:
formatting link
więc karta ma pracować w trybie 8-bit.

Włożyłem kartę, odpaliłem komputer i tutaj niespodzianka. Nie wystartował. Zamiast normalnego komunikatu powitalnego miałem w terminalu krzaki. Wyłączyłem komputer, wyjąłem kartę, włączyłem go ponownie i wszystko wróciło do normy. Przy ponownej próbie uruchomienia konstrukcji z kartą problem się powtórzył.

Teraz zabieram się za debugowanie. Połączenia zdają się być w porządku.

Chciałem zapytać Was co sądzicie o roboczej hipotezie - czy to możliwe, że powodem jest niezainicjowana karta? Czy może ona mieszać coś na magistrali? Czyżbym nie mógł eksperymentować z nią od początku w BASIC-u, tylko muszę z poziomu asemblera zainicjować ją do pracy w trybie 8-bit, tuż po starcie komputera?

A może powinienem szukać gdzie indziej?

Reply to
Atlantis
Loading thread data ...

Pierwsze co rzuca się w oczy to intelowski interfejs na CF - jak to podłączyłeś do motorolowskiego interfejsu 6502?

Reply to
Dawid Rutkowski

To akurat bardzo proste - intelowskie sygnały !WR i !RD bardzo prosto generuje się z motorolowskich E oraz R/!W. Wystarczy prosta logika na paru bramkach. Jej obecność i tak wymuszają pamięci projektowane z myślą o procesorach zgodnych ze standardem Intela.

Reply to
Atlantis

No racja - to pozostaje jeszcze kwestia, co podłączyłeś do !CS0 (i ew. !CS1)? Bo skoro z wyjętą kartą działa, to w interfejsie nie narobiłeś zwarć. CF w trybie IDE działa jak dysk twardy - można go podłączyć do gniazda PATA. Tak samo można było zrobić z dyskami PCMCIA. Zaś PATA to podzbiór 16-bit ISA + dodatkowe sygnały. Bez CS karta CF powinna się od magistrali odłączać, niezależnie od ustawienia na 8 bitów.

Ale nie myśl, że zobaczysz kartę CF jako bajty pamięci - będzie widoczna jako dysk IDE/ATA niezależnie od trybu (w trybie mem i i/o będxie miała dodatkowe funkcje jak karta PCMCIA).

Reply to
Dawid Rutkowski

Użytkownik "Atlantis" napisał w wiadomości grup dyskusyjnych:5db4419c$0$17360$ snipped-for-privacy@news.neostrada.pl...

Terminal jakis typowy, łączony interfejsem szeregowym ?

Krzaki sugerowaly totalnie inne dzialanie systemu, czy tylko cos z portem ?

Najpierw bym sprawdzil dekoder adresowy i sygnal RD/. Karta moze przeszkadzac samym obciazeniem magistrali czy pojemnoscia - zwolnij zegar do testow.

A jakas inicjacja .. kto wie, ale nie znam CF niestety. Z tego artykulu patrzac ... powinna byc raczej "grzeczna".

J.

Reply to
J.F.

Normalny interfejs szeregowy, RS232. Od strony sprzętowej UART zrobiony na 6551. Programowo po stronie PC obsługą tego zajmuje się zwyczajny, linuksowy screen.

Dekoder adresowy zdaje się być w porządku. Mierzyłem poziom napięcia na linii CS podczas normalnej pracy i wynosi ona 5V, co oznacza nieaktywną kartę CF. Poza tym ten sam dekoder adresów (układ 74HCT138) obsługuje także inne peryferia (UART, RTC), które działają zupełnie prawidłowo. To samo z sygnałem /RD - steruje on odczytem nie tylko z peryferiów, ale także RAM-u i EPROM-u.

Magistrala adresowa jest buforowana przez układy HCT. Bezpośrednio do procesora są podłączone tylko pamięci (CMOS) - bufory znajdują się przed złączem magistrali systemowej. Sygnały /WR i /RD również są generowane za pomocą układów HCT, podobnie jak sygnały CS. Obciążalność linii powinna więc być całkiem spora. Pozostaje tylko linia danych, ale ta w karcie CF powinna się znajdować w stanie wysokiej impedancji, do momentu pojawienia się odpowiednich sygnałów na liniach CS oraz !RD lub !WR.

W tej chwili mam jeszcze inną roboczą hipotezę - być może winę ponosi zasilanie. Zasilacz niby powinien dawać 3A, ale kto wie jaka jest jego rzeczywista wydajność. W układzie znajduje się układ resetujący, który ściąga linię !RESET do masy, gdy napięcie zasilania spadnie poniżej określone wartości. Do tej samej linii jest podłączona karta CF. Jeśli po restarcie zaczyna ona pobierać znaczna ilośc prądu (i/lub występuje spadek np. na bezpieczniku) to będziemy mieć cykliczny reset.

Sprawdzę, gdy tylko będę miał czas zająć się tym projektem po pracy. ;)

Reply to
Atlantis

To swoja droga - usterka powodujaca "krzaki na terminalu" musi byc ciekawa. Bo cos jednak trzeba zapisywac do portu, wczesniej zainicjowac ... byc moze zle sie inicjuje ...

Oscyloskop by sie przydal. Albo ... podlacz ja na stale do 5V, i zobacz co wyjdzie.

HCT wydajnosc maja umiarkowana, a pojemnosci w ukladach MOS spore.

Chyba, ze bruzdzi pojemnoscia. Na danych ... lub na adresie.

A owszem. No i takie oczywistosci jak krotkie kable z zasilacza i duzo kondensatorow na plytce ...

Tak sobie czytam, ze CF ma tryb bus master ... ale on chyba wymaga zainicjowania odpowiedniego.

J.

Reply to
J.F.

Jedno i drugie zamierzam zrobić. Przy czym porządnego oscyloskopu obecnie nie mam w domu, w związku z czym będę musiał się wybrać do lokalnego hackerspace'u. :)

HCT mają na tyle dużą wydajność, że można za ich pomocą sterować diodami LED bez pomocą dodatkowych driverów, w obydwie strony. To jednak sporo wedle standardów z czasów, kiedy produkowano MOS6502. :) No i układ jednak nie chodzi na zbyt szybkim taktowaniu - 2 MHz (CPU to wersja A), a więc sygnały na większości linii będą miały parę razy mniejsza częstotliwość.

Reply to
Atlantis

A skąd masz basic na 6502 obsługujący port szeregowy zamiast monitora+klawiatury? Wysyła sekwencje ANSI? Choć w sumie 6502 to nie tylko C64 czy atari xl/xe - lub egzotyczne apple I i ][...

Reply to
Dawid Rutkowski

Współcześnie napisany EhBasic. Kod jest napisany w ten sposób, że interpreter jest niezależny od warstwy I/O. Twórca konkretnej implementacji musi dostarczyć dwie niewielkie procedury, odpowiedzialne za odbieranie i wysyłanie pojedynczego znaku. Interpretera nie obchodzi czy będzie to port szeregowy, czy też fizyczna klawiatura i monitor. Trzeba też oczywiście dodać inicjalizację interfejsu szeregowego w części odpowiedzialnej za ustawienie peryferiów. Kod zawiera też dwie procedury odpowiedzialne za obsługę poleceń SAVE i LOAD. Domyślnie nie robią one nic, jednak można je dostosować do własnych potrzeb.

Wbrew pozorom społeczność ludzi bawiących się sprzętem retro jest całkiem spora i trochę się w tym temacie dzieje, a 6502 cieszy się całkiem dużą popularnością.

Reply to
Atlantis

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.