W nawiązaniu do poprzedniego tematu.
Dwa dni już się ścieram i zrobić nie potrafię.
Źródło, w cholerę kaszaniaste, bo próbowałem różnych magicznych zabiegów, fragmenty kradzione

, nie wszystkie procedury były testowane, ale mi chodzi narazie o busywaitCIA(), jak to się uda, to resztę już zrobię:
http://shogoonn.w.interia.pl/cia.e
Program w skrócie wygląda tak:
szukam wolnego timera
wolny timer alokuję i podpinam pod niego przerwanie (AddICRVector()).
procedura do obsługi przerwania jest, ale jest nieużywana, bo wyłączam ją za pomocą AbleICR(), ale nawet, jeżeli przerwanie zostanie wywołane, to nic się nie stanie.
ustawiam tryb pracy timera (bit START wyzerowany, tryb one-shot, wejście zegarowe z linii 02, czyli niby wszystko(?) OK)
zapis do CIATxLO, potem do CIATxHI i powinien wystartować (piszą, że w trybie one-shot timer powinien ruszyć bez względu na wartość bitu START), ale tego nie robi, chyba, że ja o czymś nie wiem.
Drugi problem, to taki - jak CPU ma odczytać, czy timer zliczył do końca?
W autodoc'ach stoi, że w momencie zakończenia zliczania zerowany jest bit odpowiadający danemu timerowi w rejestrze ICR. Tylko, czy mam go ustawić ręcznie, czy bit jest ustawiany automatycznie?
W jednym źródle, konkretniej to t-loader (leży na aminecie) program czeka w pętli aż bit będzie miał wartość 1, nigdzie nie jest ustawiany "ręcznie", jak zrobiłem to samo u siebie, to czekał w nieskończoność :( .
Timery raczej mam sprawne (aczkolwiek układ CIA jest nieco nadpalony

, ale to tylko port parallel), wszystko, co wykorzystuje timery działa. Program, z którego "ukradłem" trochę kodu też działa, ale on jest na przerwaniach, a mój problem polega na tym, że oczekiwanie na zakończenie pracy timera ma być wykonywane pomiędzy Disable() i Enable()
Po wywołaniu funkcji busywaitCIA() nie mam żadnego opóźnienia. :(