1

Temat: IRQ podstawowe pytania

prosze o pomoc w debugowaniu, po uruchomieniu przerwan TIMER1 otrzymuje nieprawidlowe wyniki w zwiazku z tym musze zadac nawet podstawowe pytania:

1. czy IRQ ma priorytet nad NMI
2. co sie stanie gdy wystapi NMI podczas wykonywania IRQ
3. co sie stanie gdy wystapi IRQ podczas wykonywania NMI
4. czy przed ustawieniem przerwania TIMER1 trzeba resetowac POKEY
5. jesli chce uzyskac przerwanie z czestotliwoscia 200hz dla zegara bazowego 15khz ile musze wpisac do AUDF1 i czy wartosc zalezy od PAL/NTSC
6. czy AUDC1 musi byc = 0
7. czy po zapisie do STIMER i odliczaniu do zera przez TIMER trzeba kazdorazowo ustawiac AUDF1 
8. jesli w czasie obslugi przerwania irq zablokujemy przymowanie kolejnych rozkazem sei a takie przerwanie wystapi to po powrocie z obecnego przerwania to ktore wystapilo 'sie zgubi'? (czy znacznik I jest ustawiany automatycznie w moemencie obslugi przerwania)
9. czy bity w rejestrze IRQST sa typu 'zastrzask' - to sie wiaze z pytaniem 8.
10. czy zablokowanie przerwania w IRQEN nie pozwala sprzetowo skasowac bitu w IRQST.

Ostatnio edytowany przez xxl (2010-04-30 10:54:06)

> produkcje xxl'a prawdopodobnie dzialaja przez przypadek

2

Odp: IRQ podstawowe pytania

Ad 2. w 6502 jest błąd objawiający się tym, że jednoczesne wystąpienie przerwania NMI oraz IRQ powoduje, że to pierwsze zostane zignorowane.

Co do priorytetów: http://atariki.krap.pl/index.php/IRQ

- Zobaczycie, Stirlitz, że niedługo będziemy w Moskwie świętować zwycięstwo! - powiedział Himmler.
- Czyżby był pan kibicem Bayernu, Reichsführer? - zapytał Stirlitz.

3

Odp: IRQ podstawowe pytania

nie wiem czy to jest blad, jesli p.1 jest prawda to wlasnie takiego zachowania bym oczekiwal (nie wykonanie sie NMI) chyba ze chodzi o niefortunna nazwe "niemaskowalne" ;-) np. 'kolejkowanie' irq jeszcze bym zrozumial (jesli tak jest - p.9) ale odpalenie nmi poniewczasie juz zupelnie nie.

> produkcje xxl'a prawdopodobnie dzialaja przez przypadek

4

Odp: IRQ podstawowe pytania

1. Tylko w tym znaczeniu, że jak wyskoczą w tym samym cyklu, to może pójść IRQ.
2. Wykona się NMI.
3. Rozumiem, że IRQ to TIMER1. IRQ będzie obsłużone po skasowaniu znacznika I (np. przez RTI).
4. Nie.
5. 15000/200-1. Ale jak chcesz dokładnie, to "15kHz" to w PAL 1773447/114 Hz, a co znaczy "200 Hz" to musisz sam określić. Jeśli chodzi Ci o 4x / ramkę, to w PAL wpisz 77 (312/4-1).
6. Nie musi, najwyżej będziesz słyszał dźwięk. Włączenie przerwań nie ma wpływu na dźwięk.
7. Nie. Nie ma też obowiązku zapisywać do STIMER.
8. IRQ nie powinny się zgubić, o ile ich nie zresetujesz zapisem do IRQEN. Znacznik I jest ustawiany przez procesor przy przyjęciu IRQ i NMI.
9. Sprecyzuj pytanie albo obejrzyj poniższy link.
10. Blokując przerwanie w IRQEN kasujesz status przerwań w IRQST, czyli ustawiasz bity.

Ogólnie polecam http://asap.sourceforge.net/pokeydoc.zip

s/Fox/0xF/

5

Odp: IRQ podstawowe pytania

Na niektóre pytania odpowiedzi są w Resjestry POKEY-a oraz w dokumentacji
9. Wszystkie bity w IRQST poza 3. (XMTDONE) są zatrzaskowe. Tylko skasowanie danego bitu IRQEN powoduje zresetowanie odpowiedniego bitu w IRQST (poza bitem XMTDONE).
10. Tak, ale wyjątkiem znowu jest bit XMTDONE - nawet gdy przerwanie jest zablokowane, jego wartość może zostać przez POKEY zmieniona.

xxl napisał/a:

nie wiem czy to jest blad

W 65C02 i następnych zostało to poprawione, zatem wg twórców był to błąd.

Ostatnio edytowany przez Krótki (2010-04-30 13:14:07)

A8CAS, narzędzie do 100% archiwizacji kaset Atari - http://a8cas.sourceforge.net/
Posiadasz polskie ORYGINALNE gry na kasetach? (Avalon, Mirage, ASF, itp.) Przyślij mi listę - chciałbym je zdumpować.

6

Odp: IRQ podstawowe pytania

dzieki, sporo mi sie wyjasnilo... a w p.9 byl moj problem, pomoglo!

a poza tematem,
@Krotki, czyli w 6502 IRQ ma priorytet nad NMI a w 65c02 odwrotnie?

Ostatnio edytowany przez xxl (2010-04-30 15:37:43)

> produkcje xxl'a prawdopodobnie dzialaja przez przypadek

7

Odp: IRQ podstawowe pytania

Nie wiem, cytowałem Atariki.

Właściwie to jest ciekawa sprawa. W żadnej dostępnej literaturze nie ma informacji o tym, że w 6502 IRQ ma prioryter nad NMI - co więcej, źródła twierdzą coś wprost przeciwnego. Np. 6502.org:

Note also that if an NMI and an IRQ hit at the same time, the NMI has the higher priority and will get serviced first.

W dyskusji na AtariAge mówili, że nie jest to problem samego procesora, tylko specyficznej architektury Atari, i że nie występuje on w innych komputerach używających 6502. Być może powodem ignorowania NMI przez procesor jest fakt, że ANTIC umie zatrzymać zegar CPU.

Więc może informacje w Atariki są nieścisłe.

EDIT: A wystarczyło doczytać do końca smile Faktycznie chodzi o to, że jeśli CPU już zaczyna obsługiwać IRQ i w tym momencie na nóżkę NMI procesora przyjdzie sygnał, i jeśli dodatkowo sygnał ten jest krótszy niż 3 cykle, to przerwanie NMI zostanie zignorowane. Natomiast wszystko będzie dobrze jeśli sygnał NMI będzie dłuższy.

Tyle że w przypadku Atari, ANTIC ustawia linię NMI tylko na 2 cykle. Co więcej, podobno stara dokumentacja do 6502 mówi, że minimalny czas trwania sygnału NMI to właśnie 2 cykle. Można więc powiedzieć, że błąd jest nie tyle w procesorze, co w dokumentacji smile

A ponieważ 65C02 jest procesorem CMOS o zupełnie innej konstrukcji, to problem został w tym procku rozwiązany może nawet nieświadomie.

Ostatnio edytowany przez Krótki (2010-04-30 18:40:31)

A8CAS, narzędzie do 100% archiwizacji kaset Atari - http://a8cas.sourceforge.net/
Posiadasz polskie ORYGINALNE gry na kasetach? (Avalon, Mirage, ASF, itp.) Przyślij mi listę - chciałbym je zdumpować.

8

Odp: IRQ podstawowe pytania

xxl: Nie wiem czy ci to potrzebne ale można w sposób programowy zapewnić, żeby żadne NMI się nie zgubiło. Ja stosuję to w IK+.

9

Odp: IRQ podstawowe pytania

taka wiedza moze sie przydac nie tylko mnie

Ostatnio edytowany przez xxl (2010-05-01 19:19:14)

> produkcje xxl'a prawdopodobnie dzialaja przez przypadek

10

Odp: IRQ podstawowe pytania

Zgaduję, że chodzi o sprawdzenie NMIST w obsłudze IRQ.

s/Fox/0xF/

11

Odp: IRQ podstawowe pytania

Tak, dokładnie. Z tym, że cała sztuczka jest, powiedziałbym, nietrywialna i wymaga porządnego opisu, na który trzeba czasu. Kiedyś postaram się to zrobić. Póki co mogę podesłać kod, gdyby ktoś potrzebował pilnie.