Moim zdaniem najlepiej zrobić własną obsługę przerwań INT.
Po pierwsze, potrzebna jest tablica wektorów dla trybu drugiego (IM 2).
Potrzebujemy 2x256=512 bajtów.O ile mnie pamięć nie myli, działa to tak, że starszy bajt tej tablicy wektorów ładujemy do rejestru I, a młodszy bajt jest odczytywany z szyny danych w momencie przyjęcia przerwania. Jako że Spectrum nie ma żadnych urządzeń wystawiających wektory w ten sposób, młodszy bajt może być z zakresu 0..255, stąd potrzeba takiej tablicy.
Adres pobrany z tablicy (dwa bajty) jest adresem skoku do procedury obsługi przerwań.
Uwaga, żeby procedura była synchroniczna z ramką, nasz kod obsługi przerwania powinien być w "górnej" pamięci (uncontended).
Załóżmy, że nasza procedura zaczyna się od adresu 32768, czyli #8000. Budujemy naszą tablicę wektorów przerwań, dajmy na to, od adresu 49152 (#C000). Poczynając od tego adresu, wypełniamy 512 bajtów wartościami #00 i #80 (naprzemiennie), czyli mamy 256 razy słowo 16-bitowe #8000.Kod inicjujący obsługę przerwań powinien blokować przerwania (DI), ładować do rejestru
I starszy bajt tablicy (#C0), włączać tryb IM 2 i odblokowywać przerwania (EI).
Nasz kod obsługi przerwań pod adresem #8000 powinien (podobno) blokować przerwania rozkazem DI (choć podobno przyjęcie przerwania robi to automatycznie). Dalej mamy kod synchroniczny z ramką, bez skoków/pętli warunkowych. Na koniec skaczemy do ROM pod adres 56 (#38), by odczytać klawiaturę, zaktualizować licznik ramek itp.
Jak ktoś lubi cwaniaczyć, to jako tablicę wektorów może wykorzystać obszar ROM wypełniony wartościami #FF (255) od adresu #386E do #3CFF. Potrzebujemy 512 bajtów, a w podanym zakresie jest ponad kilobajt. Początek tablicy będzie oczywiście pod adresem #
nn00, czyli #3900, #3A00, #3B00 lub #3C00. Obsługa przerwania będzie wtedy pod adresem #FFFF, gdzie należy umieścić wartość 24 (#18), czyli kod operacji
JR. Następny odczytany bajt, czy adres skoku względnego, będzie pobrany spod adresu #0000 (pamięć ROM), czyli będzie to #F3 (kod instrukcji DI). Instrukcja JR #F3 oznacza skok o -13, czyli od bieżącej wartości licznika PC (#0001) odejmujemy 13 i lądujemy pod adresem #FFF4 (65524). Pod tym adresem robimy skok do naszego kodu obsługi przerwań, np. JP #8000.
EDIT: To co pokreślone, jest nie do końca prawdą zgodnie z tym, co napisał potem Phonex
