eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProcesor NMOS i karta CFProcesor NMOS i karta CF
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED.cdk152.neoplus.adsl.tpnet.pl!no
    t-for-mail
    From: Atlantis <m...@w...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Procesor NMOS i karta CF
    Date: Wed, 22 May 2024 10:27:16 +0200
    Organization: ICM, Uniwersytet Warszawski
    Message-ID: <v2ka94$2ncku$1@news.icm.edu.pl>
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    Injection-Date: Wed, 22 May 2024 08:27:16 -0000 (UTC)
    Injection-Info: news.icm.edu.pl;
    posting-host="cdk152.neoplus.adsl.tpnet.pl:83.30.160.152";
    logging-data="2863774"; mail-complaints-to="u...@n...icm.edu.pl"
    User-Agent: Mozilla Thunderbird
    Content-Language: en-US, pl-PL
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:791919
    [ ukryj nagłówki ]

    Parę lat temu zacząłem budować prosty komputerek na polskim
    mikroprocesorze MCY7880. Zaczęło się od migania diodą i przesyłania
    znaków przez UART, ale na chwilę obecną mam już właściwie kompletny
    system z klawiaturą i monitorem, zdolny do uruchamiania Tiny Basica z
    pamięci EPROM. Docelowo jednak moim celem od początku było uruchomienie
    na tym CP/M 2.2 i ładowanie programów z dysku (w tej roli podpięta
    bezpośrednio do magistrali karta CF, pracująca w trybie 8bit).

    Podczas pandemii prace nad projektem nieco spowolniły, ale ostatnio
    powróciłem do niego. Na chwilę obecną mam już działający bootloader,
    który pozwala na załadowanie programu do pamięci RAM. Działa to mniej
    więcej w następujący sposób:

    1. Program podejmuje próbę zainicjowania karty CF, pobiera strukturę z
    informacjami i wyświetla na ekranie jej nazwę.
    2. Program odczytuje pierwszy sektor karty CF i sprawdza, czy określone
    bajty mają wartości, których można się spodziewać po MBR w stylu MS-DOS.
    3. Program odczytuje i wyświetla na ekranie tablicę partycji (adresy i
    rozmiary poszczególnych partycji).
    4. Program wyświetla menu, pozwalając użytkownikowi wybrać bootowanie z
    karty albo uruchomienie Tiny Basica z EPROM-u.
    5. Jeśli użytkownik wybierze bootowanie z CF, program sprawdza czy
    pierwsza partycja ma odpowiedni rozmiar. Jeśli tak, pobiera jej adres i
    ładuje pierwszych 16kB do RAM-u (zaczynając od adresu 0x0000).
    6. Program wykonuje skok bezwarunkowy pod adres 0x0000.
    7. Jeśli karta CF nie zostanie poprawnie zainicjowana lub nie powiedzie
    się któryś z wspomnianych testów, uruchamiany jest od razu TinyBasic.

    Takie podejście pozwala mi dość łatwo wgrywać na kartę testowe programy
    - wystarczy wrzucić plik bin za pomocą dd:

    dd if=source.bin of=/dev/sdx1 bs=512

    Podczas wstępnych testów miałem problem z niektórymi modelami karty CF.
    O ile struktura z nazwą odczytywała się zawsze poprawnie, to karta użyta
    początkowo (wszystkie egzemplarze tego samego modelu, bodajże SanDisk
    32MB) dawała dziwne rezultaty podczas próby odczytu MBR-a/tablicy
    partycji. Co kilka prób pojawiały się przekłamania wartości i jakieś
    dziwne przesunięcie o kilka bajtów w buforze. Kolejna karta (jakaś
    przemysłowa WD 256MB) działa już o wiele lepiej i to właśnie jej używam
    obecnie podczas testów.

    O ile MBR jak dotąd ładuje się zawsze poprawnie, to jednak ze dwa razy
    rzucił mi się w oczy dziwny błąd. Jak wspominałem, program testowy to
    krótka pętla printująca z opóźnieniem wartość hex jednego bajtu
    (konkretnie 0xFA). Wykonywany kod wykorzystuje gotowe procedury,
    zapisane w pamięci EPROM, tak wiec składa się on zaledwie z kilku
    wywołań CALL, poprzedzonych ładowaniem wartości do rejestrów. Testując
    program od kilku dni już dwa razy zauważyłem sytuację, kiedy wykonywał
    się on znacznie szybciej - zupełnie jakby przekłamana została wartość
    odpowiadająca za czas trwania pętli opóźniającej. Trochę mnie to dziwi,
    bo byłoby to dość specyficzne przekłamanie, które pojawiło się dwa razy.

    Trochę mnie to jednak niepokoi, bo jeśli problemy pojawiają się przy
    ładowaniu tak krótkiego programu, to tym bardziej mogą pojawić się przy
    próbie załadowania całego CP/M (gdy już przygotuję niskopoziomowe
    procedury I/O).

    Zacząłem trochę czytać i analizować inne podobne projekty retro i widzę,
    że w wielu z ich przed kartą CF stosowane są bufory 74HC245. Ludzie
    wspominają też o problemach i konieczności dobierania kompatybilnej
    karty w przypadku, gdy tego bufora nie ma. W dodatku ja w tej chwili
    pracują na prototypie zbudowanym na płytce uniwersalnej (przy pomocy
    dużej ilości kynaru), gdzie karta jest umieszczona na osobnym module,
    podpiętym za pomocą taśmy (jednocześnie powstaje nowsza wersja na
    trawionym PCB).

    Myślicie, że jest szansa na dobranie karty, która będzie poprawnie
    pracowała ze starym procesorem NMOS (tym bardziej, że raz dobrana karta
    zostanie tam na stałe i nie będzie podmieniana) czy jednak nieuniknione
    będzie zmodyfikowanie projektu i dodanie 74HC245?

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: