Oznámení

Sbalit
Aktuálně žádná oznámení.

Čekání na VBLANK v C

Sbalit
X
 
  • Filtr
  • Čas
  • Zobrazit
Vymazat vše
new posts

    Čekání na VBLANK v C

    Ahoj,

    Tohle jako čekání na VBLANK pro rozlišení 320x200px v C (např. k použití místo WaitTOF() z graphics.library) mi přijde funkční nebo je tam něco fundamentálně špatně?

    Díky moc
    Petr

    Code:
    // Actual vertical and horizontal scan line
    // High byte (08-15): vertical scanline
    // Low byte  (00-07): horizontal scanline
    // Note: We need only MSB
    volatile UBYTE* REG_VHPOSR_MSB = (UBYTE *) 0xDFF006;
    
    // PAL uses 320x256
    // But it is better for games to use the NTSC resolution 320x200 (e.g. scan lines fits a byte)
    // which most games of the era used
    #define SCANLINE_FIRST_INDEX 0x2C  // (44)
    #define SCANLINE_NTSC_LAST_INDEX (SCANLINE_FIRST_INDEX + 199)
    #define SCANLINE_PAL_LAST_INDEX (SCANLINE_FIRST_INDEX + 255)
    
    void waitVBLANK()
    {
        while ( *REG_VHPOSR_MSB != (UBYTE)( SCANLINE_NTSC_LAST_INDEX + 1 ) )
        {
        }
    }

    #2
    0x2C + 0xFF + 1 = 0x2C (pro PAL)
    Tento řádek (s touto hodnotou osmibitového čítače) se v obraze objevuje dvakrát. Tak jak to máš, nebudeš mít zaručeno, že počkáš na ten dole - podmínka bude splněna i nahoře.
    V případě NTSC, tedy menšího počtu řádků, ti to fungovat bude. Ale máš zaručeno, že jedeš skutečně v NTSC, a že se nezobrazuje víc řádků?
    Je na WaitTOF něco špatného?
    Naposledy upravil Defor; 23.02.2023, 21:32:37.

    Komentovat

    Zpracovávám...
    X