-
Data: 2021-08-06 09:00:31
Temat: Asembler 8080 - przerwania i zrzucanie stanu rejestrów na stos
Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- 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"
- jaki zasilacz laboratoryjny
Najnowsze wątki
- 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 <=
- 2025-03-03 Warszawa => Spedytor Międzynarodowy <=
- 2025-03-03 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-03-03 Katowice => Key Account Manager (ERP) <=
- 2025-03-02 Tusk idzie na rekord deportacji po 1989 [Będzie popyt na prawników]
- 2025-03-01 Obywatel telefonuje 112 lub 986
- 2025-03-01 detektyw (?) Rutkowski działał jako prasa