przerwania

Szukasz drobnej pomocy przy kodowaniu, albo chcesz przedstawić światu swoją gotową lub w trakcie realizacji produkcję? To właściwy dział.
Wiadomość
Autor
Awatar użytkownika
at0mic
Posty: 82
Rejestracja: 02 gru 2011, 14:55

przerwania

#1 Post autor: at0mic »

Witam,

zauważyłem że są różne sposoby na korzystanie z przerwań IRQ (nie biorę pod uwagę źródła VIC czy CIA czy cokolwiek innego tylko procedurę)


1. wpisywanie wektora pod $03414 $0315 i skok JMP$EA31

2 wpisywanie wektora pod $03414 $0315 i PLA TAY PLA TAX PLA +RTI

3 wpisywanie wektora pod $FFFE $FFFF wyłaczanie romu przez $0001

na początku procedury (spod adresu z wektora IRQ) PLA TXA PLA TYA PLA (potem program wykonywany przerwaniem) i PLA TAY PLA TAX PLA +RTI

rozumiem że trzecim sposobem mam więcej pamięci na program albo grafikę a do czego i dlaczego są stosowane 1. i 2. ?

Czy są jeszcze inne sposoby na przerwania ?

domyślam się że stos jest używany do tego aby nie stracić wątku (wartości rejestrów) w programie z którego procesor będzie wyrwany sygnałem przerwania do obsługi programu przypisanego do wektora przerwerwań ale czy ma to jakieś znaczenie kiedy po CLI następuje zapętlenie JMP i tu wartość rejestrów nie jest modyfikowana ?
At0mic

Awatar użytkownika
skull
Posty: 760
Rejestracja: 15 wrz 2008, 08:18
Grupa: samar

#2 Post autor: skull »

polecam artykuł z c&a fan 7 (swojego autorstwa)
Bo pecet to zwykły banan...

brush
Posty: 254
Rejestracja: 20 kwie 2009, 10:32
Grupa: Elysium

Re: przerwania

#3 Post autor: brush »

at0mic pisze:Witam,
1. wpisywanie wektora pod $03414 $0315 i skok JMP$EA31

2 wpisywanie wektora pod $03414 $0315 i PLA TAY PLA TAX PLA +RTI

3 wpisywanie wektora pod $FFFE $FFFF wyłaczanie romu przez $0001

Czy są jeszcze inne sposoby na przerwania ?
To wszystko jedno i to samo. Po prostu przerwania zawsze wywołują wektor zapisany pod $fffe/ff. Tylko jak masz włączony ROM to tam jest adres procedury obsługi IRQ z ROMu, która z kolei wywołuje procedurę uzytkownika której wektore jest $0314/15.

Co do opcji 1/2 to to takze jest to samo zrób sobie disasemblacje co masz w romie pod adresem $EA31. Bodajże tylko ea31 zawiera jeszcze obsługę odczytu klawiatury, więc jak nie potrzebujesz bufora klawiature etc. to wersja z RTI jest szybsza.

Do co zapisywania na stosie i pobierania potem rejestrów to faktycznie w wypadku gdy tylko w głownym programie się w kółko petlisz to to nie ma znaczenia.
W każdym innym już ma :)
Elysium vs Arise. Czym byłoby dobro bez zła?

Awatar użytkownika
at0mic
Posty: 82
Rejestracja: 02 gru 2011, 14:55

#4 Post autor: at0mic »

dzięki za pomoc!


ten artykuł który napisał Skull - (masz łeb jak sklep), ja wymiękam, już kiedyś go czytałem ale pamięć mi trochę przyprószyło mgłą zapomnienia więc dzisiaj siedziałem na tym jakieś 3 godziny. Wszystko rozumiem do miejsca gdzie są NMI razem z IRQ mieszane - teoria niby też zrozumiała ale w kodzie się gubię i po 10 razy sprawdzać muszę co jaki bit w której komórce CIA ma robić a i tak chyba za trudne jest dla mnie dodawanie i odejmowanie jak dochodzi samo-modyfikujący się kod ze skokami warunkowymi.

Jeszcze ze 20 razy to przeczytam + trochę eksperymentów i może załapię.
At0mic

Awatar użytkownika
wegi
Posty: 839
Rejestracja: 14 lip 2009, 01:17

#5 Post autor: wegi »

Do tych eksperymentów polecam Ci monitor/debugger z hoxs'a - pokazuje w której linii rastra wykonuje się kod, w którym cyklu linii jest on wykonywany, możliwość krokowej pracy, cyklowej, widoczny stan rejestrów, znaczników, wywołanie debuggera w momencie wzbudzenia IRQ/NMI

ODPOWIEDZ