program proba03;

(*
Atmega32 15 MHz-es kristállyal megy !!!


*)

{ Declarations section }

var LED_Pin : sbit at PORTA.B0;
var Video_imp1: sbit at PORTA.B7;   // Ezek adják a szinkron
var Video_imp2: sbit at PORTA.B6;   // és a videojeleket

procedure blinking_led;
begin
  LED_pin:=1;
  delay_ms(100);
  LED_pin:=0;
  delay_ms(100);
end;

procedure fekete;     // 0,33V
begin
  Video_imp1:=1;
  Video_imp2:=0;
end;

procedure szurke;     // 0,67V
begin
  Video_imp1:=0;
  Video_imp2:=1;
end;

procedure feher;       // 1V
begin
  Video_imp1:=1;
  Video_imp2:=1;
end;

procedure csozar;     // 0V
begin
  Video_imp1:=0;
  Video_imp2:=0;
end;

procedure felsor;
begin
  fekete;
  delay_us(2);
  csozar;
  delay_us(5);
  fekete;
  delay_us(25);
end;

procedure teljessor;
begin
  fekete;
  delay_us(2);
  csozar;
  delay_us(5);
  fekete;
  delay_us(57);
end;

procedure sorszinkron;
begin
  fekete;
  delay_us(2);
  csozar;
  delay_us(5);
  fekete;
  delay_us(7);
end;

procedure elokiegyenlito;
var i: byte;
begin
  for i:=1 to 5 do
    begin
      csozar;
      delay_us(3);
      fekete;
      delay_us(29);
    end;
end;

procedure kepszinkron;
var i: integer;
begin
  for i:=1 to 5 do
    begin
      csozar;
      delay_us(29);
      fekete;
      delay_us(3);
    end;
end;

procedure utokiegyenlito(aa: byte);
var i: integer;
begin
  for i:=1 to 4+aa do
    begin
      csozar;
      delay_us(3);
      fekete;
      delay_us(29);
    end;
end;

procedure maradek_kiegyenlito(bb: byte);
var i: integer;
begin
  for i:=1 to 17+bb do         // maradék
    begin
      teljessor;
    end;
end;

procedure kep;
var j: integer;
begin
  kepszinkron;
  utokiegyenlito(1);
  maradek_kiegyenlito(0);
  
  for j:=1 to 288 do
    begin
      sorszinkron;      // 12us
      fekete;
      delay_us(24);
      feher;
      delay_us(3);
      fekete;
      delay_us(25);
    end;
  
  felsor;
  
  elokiegyenlito;
  kepszinkron;
  utokiegyenlito(0);
  maradek_kiegyenlito(1);

  felsor;

  for j:=1 to 287 do
    begin
      sorszinkron;      // 12us
      fekete;
      delay_us(24);
      feher;
      delay_us(3);
      fekete;
      delay_us(25);
    end;

  elokiegyenlito;
end;

begin
  { Main program }
  ddra:=0xff;   // kimenet
  porta:=0;
  
  blinking_led;
  
  while true do
    begin
      kep;
      
    end;
end.
