-
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
- Jaka ładowarka sieciowa do Iphona?
- Taśma izolacyjna do prac elektrycznych
- Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Wkrętarki, wiertarki...
- Zasilacz impulsowy 12V 10A, coś godnego uwagi jako zamiennik akumulatora wkrętarki
- Mouser - koszt wysyłki
- [OT] Jak wycinac ksztalt w piance lub styropianie?
- FV--> ciepła woda w kranie
- Szok
- Dziwny schemat wzmacniacza m.cz.
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- CGNAT i ewentualne problemy
Najnowsze wątki
- 2025-07-05 Shrek, wzrośnie cena prądu :-)
- 2025-07-05 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2025-07-05 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-07-05 Środa Wielkopolska => SAP FI/CO Konsultant wewnętrzny <=
- 2025-07-06 Płacić za wodę ze studni
- 2025-07-06 Kolejny inżynier...
- 2025-07-05 UE ustępuje pod presją Trumpa. Socjaldemokraci: oddaliśmy miliardy
- 2025-07-04 od kiedy można obrażać Plastusia i do kiedy Batyra?
- 2025-07-05 UE ustępuje pod presją Trumpa. Socjaldemokraci: oddaliśmy miliardy
- 2025-07-03 Trybik
- 2025-07-04 Renault Symbioz
- 2025-07-04 Architektura IIIRP: Wyjątkowa, a prymitywniejsza niż stodoła pod zaborami
- 2025-07-04 Warszawa => International Freight Forwarder <=
- 2025-07-04 Wrocław => SAP ABAP Developer <=
- 2025-07-04 Warszawa => Mid/Senior IT Recruiter <=