• 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ň