MC6800
: wtorek 08 lip 2025, 00:03
MC6800
Nadeszła pora zmierzyć się z chyba najdziwniejszym
prockiem jaki powstał → MC6800. Jak ktoś
się przyzwyczaił do procków zilogowych czy intelowych
to doznaje zdziwienia. Sposób współpracy proca ze światem
zewnętrznym jest pokrętny. W dodatko, wszystko
jest memory mapped. Jego młodszy brat MC6809
też jest trochę dziwny, ale już inaczej. No cóż, jest jak jest...
Mój pierwszy procek, jaki nabyłem to był właśnie MC6800, taki piękny, w ceramicznym fioletowym kubraczku ze złotymi kończynami (taki jak na focie wyżej, ale to nie ten). Tamten poszedł w ludzi zanim zdążyłem coś na nim zrobić. Jednak jakaś podświadoma pamięć pozostała i kilka lat temu znowu takie trafiły w moje ręce. Odleżały w szufladzie aż przyszła na nie pora.
No więc zanim coś na takim procku zrobić, to postanowiłem sprawdzić czy on oddycha i jest sens się trudzić. Nie obeszło się bez różnych doświadczeń i prób, bo literatura na jego temat nie należy do popularnej a i w necie nie specjalnie dużo tego jest, niby jest, ale jak masz konkretne pytania, to nie specjalnie znajdziesz na nie odpowiedź. Trzeba samemu docierać do sedna sprawy.
No więc ów procek to:
Jak każdy ma szynę danych, szynę adresową i zasilanie. Ma dwufazowy sygnał taktujący, coś podobnego było w Intel8080 (ale tu jest w standardzie TTL). Próżno szukać scalaczka będącego generatorem taktu dla procka (taki odpowiednik I8224). Gdzieś trafiłem na informacje, że Motorola taki zaprojektowała, ale go zdobyć, to już inna sprawa. Oczywiście manuale pokazują jak mają wyglądać te zegary, ale okazuje się, że jeden może być negacją drugiego. IRQ i NMI jeszcze mogą poprawnie się kojarzyć, reszta to już jakieś dziwności. Wg danych katalogowych BA, R/W i VMA to sygnały wyjściowe, reszta to wejściowe. Logika ich mnie zadziwiła, bo część ma stan aktywny zerem a część ma stan aktywny jako jeden.
Tak sobie wymyśliłem, że napędzę procka jakimś niezbyt wyśrubowanym sygnałem zegarowym. Użyłem typowego generatora (użyty napędza UARTY – 1,8432MHz), jego częstotliwość podzieliłem na dwa by mieć ładne wypełnienie a przy okazji mam sygnał prosty i zanegowany. One poszły do napędzania procka. Sygnały sterujące dałem do stanu pasywnego a reset zrobiłem wręcz w klasyczny sposób, z bramką Schmitta. Szyna danych jest tak skonstruowana, by dawać stały rozkaz do wykonania. Schemat jak poniżej:
Zmontowałem i podłączyłem do prądu i … nic się nie dzieje.
Po odpaleniu, zegar wygląda następująco:
Nawet się zgadza: 1,8MHz podzielone przez 2 tyle daje.
Trochę rozkminy, a pomógł przypadek. Stała czasowa od reset jest spora, a na oscylku było widać, że procek rusza i się zawiesza. Okazało się, że działa, jak trzymam reset, jak puszczę to chwilę później staje. No tak, zapomniałem dodać negator (początkowo była jedna bramka 74HCT14). Po korekcie na szynie danych ustawiłem kod rozkazu 5F hex (CLR B, taki by miał dużo jedynek, bo nie chciało mi się „drutować” dip-switcha) jednobajtowy kod rozkazu, który nie wymaga dostępu do szyny danych (lepiej by nie pisał nic do pamięci, bo się pogryzie z 74HCT245). Dałem ten bufor 3-stanowy by nie zaszkodzić prockowi jak bym się pomylił i wyszła operacja zapisu a szyna byłaby sterowana bezpośrednio z dip-switch.
No więc procek coś robi, na szynie adresowej osylek pokazuje aktywność: A0
Mamy 230 kHz na najmłodszym bicie adresowym, prosty rachunek mówi, że do tej operacji procek potrzebuje 4 taktów. Kolejny bit adresu: A1
ma dwa razy mniejszą częstotliwość. Znaczy wszystko działa zgodnie z oczekiwaniem. Teraz trzeba będzie dołączyć pamiątki.
Nadeszła pora zmierzyć się z chyba najdziwniejszym
prockiem jaki powstał → MC6800. Jak ktoś
się przyzwyczaił do procków zilogowych czy intelowych
to doznaje zdziwienia. Sposób współpracy proca ze światem
zewnętrznym jest pokrętny. W dodatko, wszystko
jest memory mapped. Jego młodszy brat MC6809
też jest trochę dziwny, ale już inaczej. No cóż, jest jak jest...
Mój pierwszy procek, jaki nabyłem to był właśnie MC6800, taki piękny, w ceramicznym fioletowym kubraczku ze złotymi kończynami (taki jak na focie wyżej, ale to nie ten). Tamten poszedł w ludzi zanim zdążyłem coś na nim zrobić. Jednak jakaś podświadoma pamięć pozostała i kilka lat temu znowu takie trafiły w moje ręce. Odleżały w szufladzie aż przyszła na nie pora.
No więc zanim coś na takim procku zrobić, to postanowiłem sprawdzić czy on oddycha i jest sens się trudzić. Nie obeszło się bez różnych doświadczeń i prób, bo literatura na jego temat nie należy do popularnej a i w necie nie specjalnie dużo tego jest, niby jest, ale jak masz konkretne pytania, to nie specjalnie znajdziesz na nie odpowiedź. Trzeba samemu docierać do sedna sprawy.
No więc ów procek to:
Jak każdy ma szynę danych, szynę adresową i zasilanie. Ma dwufazowy sygnał taktujący, coś podobnego było w Intel8080 (ale tu jest w standardzie TTL). Próżno szukać scalaczka będącego generatorem taktu dla procka (taki odpowiednik I8224). Gdzieś trafiłem na informacje, że Motorola taki zaprojektowała, ale go zdobyć, to już inna sprawa. Oczywiście manuale pokazują jak mają wyglądać te zegary, ale okazuje się, że jeden może być negacją drugiego. IRQ i NMI jeszcze mogą poprawnie się kojarzyć, reszta to już jakieś dziwności. Wg danych katalogowych BA, R/W i VMA to sygnały wyjściowe, reszta to wejściowe. Logika ich mnie zadziwiła, bo część ma stan aktywny zerem a część ma stan aktywny jako jeden.
Tak sobie wymyśliłem, że napędzę procka jakimś niezbyt wyśrubowanym sygnałem zegarowym. Użyłem typowego generatora (użyty napędza UARTY – 1,8432MHz), jego częstotliwość podzieliłem na dwa by mieć ładne wypełnienie a przy okazji mam sygnał prosty i zanegowany. One poszły do napędzania procka. Sygnały sterujące dałem do stanu pasywnego a reset zrobiłem wręcz w klasyczny sposób, z bramką Schmitta. Szyna danych jest tak skonstruowana, by dawać stały rozkaz do wykonania. Schemat jak poniżej:
Zmontowałem i podłączyłem do prądu i … nic się nie dzieje.
Po odpaleniu, zegar wygląda następująco:
Nawet się zgadza: 1,8MHz podzielone przez 2 tyle daje.
Trochę rozkminy, a pomógł przypadek. Stała czasowa od reset jest spora, a na oscylku było widać, że procek rusza i się zawiesza. Okazało się, że działa, jak trzymam reset, jak puszczę to chwilę później staje. No tak, zapomniałem dodać negator (początkowo była jedna bramka 74HCT14). Po korekcie na szynie danych ustawiłem kod rozkazu 5F hex (CLR B, taki by miał dużo jedynek, bo nie chciało mi się „drutować” dip-switcha) jednobajtowy kod rozkazu, który nie wymaga dostępu do szyny danych (lepiej by nie pisał nic do pamięci, bo się pogryzie z 74HCT245). Dałem ten bufor 3-stanowy by nie zaszkodzić prockowi jak bym się pomylił i wyszła operacja zapisu a szyna byłaby sterowana bezpośrednio z dip-switch.
No więc procek coś robi, na szynie adresowej osylek pokazuje aktywność: A0
Mamy 230 kHz na najmłodszym bicie adresowym, prosty rachunek mówi, że do tej operacji procek potrzebuje 4 taktów. Kolejny bit adresu: A1
ma dwa razy mniejszą częstotliwość. Znaczy wszystko działa zgodnie z oczekiwaniem. Teraz trzeba będzie dołączyć pamiątki.
