-
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?
Następne wpisy z tego wątku
- 06.08.21 09:39 Janusz
- 06.08.21 10:13 Zbych
- 06.08.21 10:15 MKi
- 06.08.21 10:15 Zbych
- 06.08.21 10:24 Atlantis
- 06.08.21 10:27 Janusz
- 06.08.21 10:30 Janusz
- 06.08.21 11:23 Atlantis
- 06.08.21 11:41 Atlantis
- 06.08.21 12:06 Atlantis
- 06.08.21 14:47 RoMan Mandziejewicz
- 06.08.21 15:00 Atlantis
- 06.08.21 15:14 Zbych
- 06.08.21 15:16 Janusz
- 07.08.21 11:25 Atlantis
Najnowsze wątki z tej grupy
- nie naprawiam więcej telewizorów
- Zrobił TV OLED z TV LCD
- Zasilacz USB na ścianę.
- Gniazdo + wtyk
- Aliexpress zaczął oszukiwać na bezczelnego.
- OpenPnP
- taka skrzynka do kablowki
- e-paper
- 60 mA dużo czy spoko?
- Dziwne zachowanie magistrali adresowej w 8085
- Współczesne mierniki zniekształceń nieliniowych THD audio, produkują jakieś?
- Jaki silikon lub może klej?
- Smar do video
- Litowe baterie AA Li/FeS2 a alkaliczne
- "ogrodowa linia napowietrzna"
Najnowsze wątki
- 2025-03-03 a Ty jak się zachowasz w godzinie próby?
- 2025-03-03 nie naprawiam więcej telewizorów
- 2025-03-03 Białystok => Gen AI Engineer <=
- 2025-03-03 Poznań => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-03-03 Olsztyn => Sales Specialist <=
- 2025-03-03 Gdy ministrowie sa golodupcami
- 2025-03-03 Pruszków => Specjalista ds. public relations <=
- 2025-03-03 Białystok => System Architect (Java background) <=
- 2025-03-03 Białystok => System Architect (background deweloperski w Java) <=
- 2025-03-03 China-Kraków => Senior PHP Symfony Developer <=
- 2025-03-03 China-Kraków => Senior PHP Symfony Developer <=
- 2025-03-03 Warszawa => Data Engineer (Tech Lead) <=
- 2025-03-03 Gliwice => Ekspert IT (obszar systemów sieciowych) <=
- 2025-03-03 Gliwice => IT Expert (Network Systems area) <=
- 2025-03-03 Mińsk Mazowiecki => Area Sales Manager OZE <=