eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaAsembler 8080 - przerwania i zrzucanie stanu rejestrów na stosAsembler 8080 - przerwania i zrzucanie stanu rejestrów na stos
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erj
    e.net!feeder.erje.net!news.uzoreto.com!news-out.netnews.com!news.alt.net!fdc3.n
    etnews.com!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer01.ams4!peer.am4.
    highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.n
    ews.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-fo
    r-mail
    Newsgroups: pl.misc.elektronika
    X-Mozilla-News-Host: news://news.neostrada.pl:119
    From: Atlantis <m...@w...pl>
    Subject: Asembler 8080 - przerwania i zrzucanie stanu rejestrów na stos
    Date: Fri, 6 Aug 2021 09:00:31 +0200
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
    Thunderbird/78.12.0
    MIME-Version: 1.0
    Content-Type: text/plain; charset=utf-8
    Content-Language: pl
    Content-Transfer-Encoding: 8bit
    Lines: 66
    Message-ID: <610cde0f$0$23915$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 37.248.223.201
    X-Trace: 1628233231 unt-rea-a-01.news.neostrada.pl 23915 37.248.223.201:20492
    X-Complaints-To: a...@n...neostrada.pl
    X-Received-Bytes: 3660
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:766495
    [ ukryj nagłówki ]

    Chciałem trochę popchnąć do przodu prace nad swoim projektem komputera z
    polskim procesorem MCY7880 (klon intela 8080). Właśnie jestem w trakcie
    uruchamiania procedur do obsługi sterownika ekranu (TMS9918). Wszystko
    działa prawidłowo - jestem w stanie komunikować się układem poprzez jego
    dwa rejestry, wysyłać i odczytywać dane z VRAM-u oraz wypisywać znaki w
    odpowiednich miejscach na ekranie.
    Teraz postanowiłem napisać krótką funkcję do przewijania ekranu o jedną
    linię w momencie, gdy kursor dotrze do jego końca. Kod działa
    prawidłowo, ale tylko przez pewien czas - zwykle po kilku (czasem
    kilkunastu) minutach pojawia się błąd skutkujący zniknięciem wszystkich
    linii za wyjątkiem ostatniej.
    Raczej mogę wykluczyć problem sprzętowy. Wymieniłem zarówno pamięć jak i
    TMS9918, poza tym problem znika za każdym razem po ponownym uruchomieniu
    urządzenia i nie manifestuje się jeśli nie używam tej procedury do
    przewijania.

    Ponieważ błąd manifestuje się nieregularnie, wygląda mi to na problem z
    przerwaniem nadpisującym któryś z rejestrów. Sama funkcja do przewijania
    ekranu wywołuje kilka innych procedur do odczytu, zapisu i zerowania
    VRAM-u, które przyjmują parametry w parach rejestrów BC, DE oraz HL.

    VDPSCROLLUP:
    ;Mowe 12 lines
    ;Read them first
    LXI B, BLKDAT
    LXI D, 0828H
    LXI H, 01E0H
    CALL VDPRVRAM
    ;Move lines from buffer to the beginning of the screen
    LXI B, BLKDAT
    LXI D, 0800H
    LXI H, 01E0H
    CALL VDPWVRAM
    ;Move remaining 11 lines
    ;Read them first
    LXI B, BLKDAT
    LXI D, 0A08H
    LXI H, 01B8H
    CALL VDPRVRAM
    ;Write those lines to the middle of the screen
    LXI B, BLKDAT
    LXI D, 09E0H
    LXI H, 01B8H
    CALL VDPWVRAM
    ;Clear last line
    LXI D, 0B98H
    LXI H, 0028H
    CALL VDPZEROVRAM
    RET

    W aktywnych przerwaniach faktycznie mam instrukcje modyfikujące HL, DE
    oraz oczywiście akumulator/rejestr flag, jednak przed wykonaniem
    procedury obsługi przerwania zrzucam ich stany na stos za pomocą PUSH, a
    potem przywracam instrukcją POP.

    Aby oszczędzić jak najszybciej wyjść z procedury obsługi przerwania,
    zrzucam na stos tylko te rejestry, które są wykorzystywane w jego
    wnętrzu. Nie widzę więc gdzie przerwanie mogłoby mi mieszać w
    przewijaniu ekranu.

    No chyba, że któraś z instrukcji może w sposób niejawny modyfikować
    rejestry inne niż A/flagi? Czy wskazane jest na wszelki wypadek w
    przerwaniu zapisywać na stos wszystkie rejestry, nawet jeśli się ich nie
    używa?

    Ktoś ma pomysł co do innej możliwej przyczyny?

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: