ZX Spectrum > PROGRAMOWANIE

Tryby przerwań Z80 - czy można wywnioskować który jest aktywny.

<< < (2/2)

matofesi:
To nie jest kwestia "zapomnieli". W normalnych warunkach - pisanie programu do pracy na konkretnym sprzęcie - taka operacja nie jest potrzebna. Jak piszesz kod to wiesz jak ustawiłeś przerwania albo wiesz jak system ma ustawione przerwania. Z IFF jest inaczej - jak łapiesz NMI to może ci być potrzebna informacja czy IRQ były włączone czy nie. Dodanie możliwości sprawdzenia trybu IM to dodatkowa komplikacja, która w 99.999999% przypadków nie jest potrzebna.

Z $7FFd w 128 jest to samo - twój kod wie która strona jest aktywna albo nie jest mu to potrzebne. Dodawanie możliwości odczytu wymagałoby pewnie kilku/nastu dodatkowych bramek w GALu i było, z punktu widzenia konstruktorów, zbędne.

aqqman:
Po prostu nie uwzględnili pewnych opcji. Patrząc na dzisiejsze procesory czy mikrokontrolery, widać że programowy dostęp do wszelkich znaczników jest i programista nie musi "pamiętać" jak ustawiony jest dany znacznik bo może go po prostu pobrać. Powiedzmy że nastąpiła ewolucja, w pamiętaniu o pewnych rzeczach. W Z180 już wiedzieli jak to zrobić.
Wracając do tematu -
Po głębszym przemyśleniu postanowiłem tematu nie rozszerzać, a doraźnie jeśli coś nie będzie działać z ustawieniem IM1 to ustawić IM2 w .sna

Phonex:
A jak to rozwiązali inni?
Np. w MULTIFACE? Można zgrać grę w dowolnym momencie. Więc?
Przy uruchamianiu zrzuconych gier, odtwarzane są wszystkie rejestry, a na końcu sprawdzana zawartość rejestru I. Jeśli jest równa $3F - czyli tyle ile załadowane jest do niego po resecie Spectrum - to IM1, jeśli nie - to IM2.
I działa.
Najwyraźniej programy, które używają rejestru I do innych celów niż wektor przerwań (jako kolejny zwykły rejestr, chociaż z niektórymi wartościami zabronionymi, jak chyba sam raz czy dwa użyłem) nie były dla nikogo na tyle atrakcyjne, żeby je "cyknąć" Multifejsem ;)

Można by rozszerzyć na tą okoliczność sprawdzanie i dopisać dodatkowy test: jeśli I mniejsze od $39 to też IM1 (bo często się używa $39, $3A i $3B przy IM2).

krru:

--- Cytat: matofesi w 2023.02.10, 14:14:44 ---Z $7FFd w 128 jest to samo - twój kod wie która strona jest aktywna albo nie jest mu to potrzebne. Dodawanie możliwości odczytu wymagałoby pewnie kilku/nastu dodatkowych bramek w GALu i było, z punktu widzenia konstruktorów, zbędne.

--- Koniec cytatu ---

Kiedyś zrobiłem prototypowo interfejs typu Masterface do 128 to w sprzęcie był rejestr śledzący (taki "shadow register") pod oryginalnym adresem i jego można było przeczytać.

aqqman:

--- Cytat: Phonex w 2023.02.11, 10:35:15 ---A jak to rozwiązali inni?
Np. w MULTIFACE? Można zgrać grę w dowolnym momencie. Więc?
Przy uruchamianiu zrzuconych gier, odtwarzane są wszystkie rejestry, a na końcu sprawdzana zawartość rejestru I. Jeśli jest równa $3F - czyli tyle ile załadowane jest do niego po resecie Spectrum - to IM1, jeśli nie - to IM2.
I działa.
Najwyraźniej programy, które używają rejestru I do innych celów niż wektor przerwań (jako kolejny zwykły rejestr, chociaż z niektórymi wartościami zabronionymi, jak chyba sam raz czy dwa użyłem) nie były dla nikogo na tyle atrakcyjne, żeby je "cyknąć" Multifejsem ;)

Można by rozszerzyć na tą okoliczność sprawdzanie i dopisać dodatkowy test: jeśli I mniejsze od $39 to też IM1 (bo często się używa $39, $3A i $3B przy IM2).

--- Koniec cytatu ---

TO bardzo fajna informacja, dzięki.  :D



--- Cytat: krru w 2023.02.11, 11:07:55 ---Kiedyś zrobiłem prototypowo interfejs typu Masterface do 128 to w sprzęcie był rejestr śledzący (taki "shadow register") pod oryginalnym adresem i jego można było przeczytać.

--- Koniec cytatu ---
Tak też zrobiłem w swoim TIMEX-ie TC2160 (tak nazwałem swojego TC2068 +128k w banku D)  ;)

Nawigacja

[0] Indeks wiadomości

[*] Poprzednia strona

Idź do wersji pełnej