-
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
- Czy cos fi przechodzi przez trafo separujące?
- śrubka masy
- Ciekawostka na dziś lock bity
- [OT] napisy w YT
- Było 83V
- Stare komputery
- Odbiornik ADS-B i wzmacniacze
- Thunderbird i dysk...
- opornosc falowa
- Bateria 9V 6F22, alkaliczna v cynkowa, samorozładowanie, bateria wysokiej trwałości do miernika
- Tani zakup z ali?
- w czasach LED komary mają ciężko
- walizka z kodami
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
Najnowsze wątki
- 2025-08-06 Gdynia => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-08-06 Białystok => Inżynier oprogramowania .Net <=
- 2025-08-06 "[...] sejmowe wystąpienie posłanki Klaudii Jachiry, która zakończyła je słowami ,,Sława Ukrainie"."
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Panuje się 181 159,42 zł./mies. na posła w 2026r.
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Czy cos fi przechodzi przez trafo separujące?
- 2025-08-05 kajaki i promile
- 2025-08-05 Re: Tesla jest bezpieczna, wczoraj spaliła się doszczętnie na Ursynowie i nikomu się nic nie stało
- 2025-08-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-08-05 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-05 B2B i książka przychodów i rozchodów
- 2025-08-04 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML