31
AMSTRAD / Odp: Zagadki z wiedzy praktycznej o CPC.
« Ostatnia wiadomość wysłana przez ZorrO dnia 2025.04.28, 12:13:27 »ms to milisekunda czyli 1/1000 sekundy. Pytasz o 10ms czyli o 1/100 sekundy. To jest kłopot, bo komendy AFTER i EVERY pozwalają na przerwania z dokładnością do 1/50 sekundy czyli 2x za mało aby uzyskać nimi to o co pytasz. Gdyby chodziło o 1/10 sekundy to by było np tak:
10 EVERY 5 GOSUB 30
20 GOTO 20
30 ?"1";:RETURN
Oczywiście linia 20 może być zastąpiona dowolnym programem który robi cokolwiek.
Pozostaje kombinować ze zmienną TIME, bo ta sie zmienia aż 300 razy na sekundę. np:
10 IF (TIME-t)<3THEN 10
20 ?"1";:t=TIME:GOTO 10
Ale to właściwie nie jest przerwanie tylko pauza 1/100 sekundy (czyli te 10ms) pomiędzy printami. A nawet nie mam pewności czy ten warunek potrafi sie wykonać więcej niż raz w tym czasie, ale chyba tak bo gdy zmienię na <2 to mam wrażenie że jedynki pojawiają sie szybciej.
Gdyby to miało działać jak przerwanie to ten IF i tak by musiał być dodany do głównego programu najlepiej zapętlonego i to niezbyt długiego bo musiałby sprawdzać warunek przynajmniej raz na 10ms. A i tak te "przerwania" zapewne nie byłyby zbyt precyzyjne.
10 EVERY 5 GOSUB 30
20 GOTO 20
30 ?"1";:RETURN
Oczywiście linia 20 może być zastąpiona dowolnym programem który robi cokolwiek.
Pozostaje kombinować ze zmienną TIME, bo ta sie zmienia aż 300 razy na sekundę. np:
10 IF (TIME-t)<3THEN 10
20 ?"1";:t=TIME:GOTO 10
Ale to właściwie nie jest przerwanie tylko pauza 1/100 sekundy (czyli te 10ms) pomiędzy printami. A nawet nie mam pewności czy ten warunek potrafi sie wykonać więcej niż raz w tym czasie, ale chyba tak bo gdy zmienię na <2 to mam wrażenie że jedynki pojawiają sie szybciej.
Gdyby to miało działać jak przerwanie to ten IF i tak by musiał być dodany do głównego programu najlepiej zapętlonego i to niezbyt długiego bo musiałby sprawdzać warunek przynajmniej raz na 10ms. A i tak te "przerwania" zapewne nie byłyby zbyt precyzyjne.