Temat: pętla opóźniająca ???

trochę mi się pozapominało skacząc po różnych platformach sprzętowych.

potrzebuje zrobić pętelkę opóźniającą 10ms w assemblerze.

Na razie jestem na etapie sprawdzania rejestru zegara systemowego (#20). Z tego co pamiętam zmienia się co 1/50 sek.

Nie wiem czy nie będzie lepiej zrobić to na nop'ach (???)

Może dysponujecie listą czasów wykonywania poszczególnych rozkazów procesora ?

z góry dziękuje za pomoc

Takich dwóch jak nas trzech to niema ani jednego.

2

Odp: pętla opóźniająca ???

W atari odmierzać dokładny czas jest bardzo trudno, bo cykle procesora są bezustannie wywłaszczane przez pokaźną liczbę przeszkadzajek, więc liczenie cykli daje różne rezultaty w różnych warunkach. Proponowałbym dwa rozwiązania:
1) rejestr VCOUNT, który w systemie PAL co ramkę (1/50s) liczy od 0 do 155.
2) przerwania POKEYa. Jeśli się nie mylę, to jak to ma być opóźnienie, to nawet nie trzeba używać przerwań: można je wyłączyć przez SEI i pollować rejestr IRQST czekając na skasowanie bitu odpowiadającego danemu przerwaniu.

3

Odp: pętla opóźniająca ???

dzięki za info. ale chyba zostane przy RTCLOCK :)

znalazłem mapę rejestrów systemowych i wg niej 1 kliknięcie RTCLOCK to 16ms.

co do cykli procesora to się zgodzę wg datasheet'a MOS6502 ten sam cykl może trwać od 1 do 10ms, więc "pomysł" na loopa z pustych instrukcji poległ.

Takich dwóch jak nas trzech to niema ani jednego.

4

Odp: pętla opóźniająca ???

Prostując:

RTCLOCK cyka co ok. 20ms w PAL i 16.67ms w NTSC. Pytałeś o 10 ms, czego dobrym przybliżeniem będzie:

 ldx #155
delay_loop stx $d40a
 dex
 bne delay_loop

Cykl w Atari zawsze trwa tyle samo. Laoo miał na myśli DMA ANTICa oraz przerwania.

https://www.youtube.com/watch?v=jofNR_WkoCE