• Program NO13H.PAS • {M 1024,0,0} {F+} Uses Dos; var OldTimer : procedure; Procedure Handler; Interrupt; assembler; asm mov ah,0fh { ah <- 0fh : funkce zjištění aktivního video-režimu } int 10h { provede přerušní BIOSu INT10h } cmp al,13h { porovná al s 13h } jnz @@1 { pokud se nejedná o režim 320x200x256 skočí na @@1 } mov cx,256 { cx <- 256 : počet barev } @@SetPal: { smyčka zajišťující vynulování aktivní palety } mov al,cl { al <- cl : aktuální barva } mov dx,3c8h { dx <- 3c8h : } out dx,al { zapíše na port dx hodnotu z registru al } inc dx { dx <- dx + 1 (dx=3c9h) : } xor al,al { vynuluje registr al } out dx,al { zapíše na port dx hodnotu z registru al } xor al,al { vynuluje registr al } out dx,al { zapíše na port dx hodnotu z registru al } xor al,al { vynuluje registr al } out dx,al { zapíše na port dx hodnotu z registru al } loop @@SetPal { skáče na @@SetPal dokud není cx rovno 0 } @@1: pushf { uloží flagy do zásobníku (pro Pascal) } call OldTimer { zavolá starý interupt timeru } end; Begin GetIntVec(8,@OldTimer); { uloží starý handler přerušní 8 do OldTimer) } SetIntVec(8,@Handler); { nastaví nový handler přerušení 8 Handler } asm mov al,34h { al <- 34h (BCD 4, counter 1 pro control word PIT port) } out 43h,al { zapíše na port 43h (control/w) hodnotu z registru al } mov dx,40h { dx <- 40h (channel 0 PIT port) } mov al,0Bh { al <- 0bh (nastaví frekevenci PIT kanálu 0) } out dx,al { zapíše na port dx hodnotu z registru al } mov al,0E9h { al <- 0e9h } out dx,al { zapíše na port dx hodnotu z registru al } end; Keep(0) { rezidentně ukončí program } End. výheň