[#1]
Własna Copperlista na ekranie Intuition
Zakładam wątek jako kontynuację rozmowy z działu "Strefa gier" w bardziej odpowiednim miejscu.
Otóż opisałem tam możliwość ładowania zupełnie własnej Copperlisty na ekran Intuition, która aktywuje się gdy nasz ekran staje się widoczny.
Dzisiaj udało mi się to pomyślnie zakodować.
Nie obyło się bez problemów, które okazały się być powodowane niewłaściwymi instrukcjami generowanymi przez kompilator C. Użycie Asemblera w tych newralgicznych miejscach rozwiązało te problemy.
Ekran najlepiej otworzyć w trybie Exclusive, tak że nie współdzieli obrazu z pozostałymi ekranami.
Kod podzielony jest na dwie części: Część w C, która:
- Otwiera ekran
- Instaluje krótką Copperlistę użytkownika, której celem jest wywołanie przerwania Coppera
- Alokuje sygnał
- Instaluje obsługę przerwania Coppera, w której ładowana jest nasza zupełnie własna Copperlista (właściwie wykonuje to główny Task, który jest sygnalizowany przez to przerwanie)
Część w asemblerze, która:
- Inicjuje copperlistę (ustawia bitplany)
- Obsługuje przerwanie Coppera
- Ładuje Copperlistę
Rezultatem działania programu jest ekran Intuition, który - kiedy staje się widoczny (przełączamy Amiga+N/Amiga+M) - natychmiast wyświetla zupełnie własną, customową Copperlistę. Nasza Copperlista przestaje być wyświetlana, gdy użytkownik z powrotem przełączy ekrany.
Nie ma w tym przypadku ograniczeń Copperlisty użytkownika.
W przykładzie program czeka aż 5-krotnie zostanie wyświetlony nasz ekran. Copperlista jest w przykładzie skromna: wyświetla raster z pionowymi paskami.
Do zrobienia zostało tylko wykrywanie sytuacji, kiedy nasz ekran przestaje być aktywny. Da się to zrobić również za pomocą przerwania Coppera. Oczywiście teraz przełączanie ekranów działa bez zarzutu. Ale w praktycznym zastosowaniu warto wykrywać taką sytuację, choćby by "uśpić" nasz program.
Tutaj linki do źródeł:
http://coreprogramming.pl/Materiały/CopperScreen/Test.c
http://coreprogramming.pl/Materiały/CopperScreen/Interrupt.s