unit Usendsr;

interface
var korr:integer;
const
      kenn_ld='A8';
      kenn_tuner='A4';
      kenn_cd='A2';
      kenn_tape='A1';
      kenn_amp='A5';
      kenn_vcr='AB';

      bef_power='1C';

      bef_0='00';
      bef_1='01';
      bef_2='02';
      bef_3='03';
      bef_4='04';
      bef_5='05';
      bef_6='06';
      bef_7='07';
      bef_8='08';
      bef_9='09';

      bef_levelup='0A';
      bef_leveldown='0B';
      bef_mute='12';

      bef_ffwd='10';
      bef_rwd='11';
      bef_stop='16';
      bef_pause='18';
      bef_play='17';
      bef_rec='14';

      bef_eject='51';
      bef_pgm='0D';

procedure sendsr(kennung, befehl:string);


implementation
uses crt;
var x:string;



function hex2dez(hex:string):integer;
var zwischen,s,i:integer;stelle1,stelle2:char;
begin
  zwischen:=0;
  stelle1:=hex[2];
  case upcase(stelle1) of
    'A':zwischen:=zwischen+10;
    'B':zwischen:=zwischen+11;
    'C':zwischen:=zwischen+12;
    'D':zwischen:=zwischen+13;
    'E':zwischen:=zwischen+14;
    'F':zwischen:=zwischen+15;
  else
    val(stelle1,s,i);
    zwischen:=zwischen+s;
  end;
  stelle2:=hex[1];
  case upcase(stelle2) of
    'A':zwischen:=zwischen+10*16;
    'B':zwischen:=zwischen+11*16;
    'C':zwischen:=zwischen+12*16;
    'D':zwischen:=zwischen+13*16;
    'E':zwischen:=zwischen+14*16;
    'F':zwischen:=zwischen+15*16;
  else
    val(stelle2,s,i);
    zwischen:=zwischen+s*16;
  end;
  hex2dez:=zwischen;
end;

function dez2bin(dez:integer):string;
var i,a:integer;temp:string;temp2:string;
begin
  temp:='';
  temp2:='';
  for a:=7 downto 0 do
  begin
    if dez>=(trunc(exp(a*ln(2))))  then
    begin
      dez:=dez-trunc(exp(a*ln(2)));
      temp:=temp+'1';
    end
    else
      temp:=temp+'0';
  end;
  for a:=1 to 8 do
  begin
    temp2:=temp2+temp[9-a];
  end;
  dez2bin:=temp2;
end;

function hex2bin(hex:string):string;
begin
  hex2bin:=dez2bin(hex2dez(hex));
end;




procedure sendsr(kennung, befehl:string);
var a:integer;cont:string;

  procedure up; begin  port[$378]:=2 end;
  procedure down; begin  port[$378]:=3 end;
  procedure slope(time:integer);
  var i,ii:integer;
  begin
    for ii:=1 to (time div 2) do
    for i:=1 to korr do i:=i;
  end;

begin
  delay(10);
  {berechne String}
  cont:='';
  cont:=cont+hex2bin(kennung);
  cont:=cont+dez2bin(255-hex2dez(kennung));
  cont:=cont+hex2bin(befehl);
  cont:=cont+dez2bin(255-hex2dez(befehl));

  {Initialisiere Prozessor}
  down;slope(900);up;slope(450);down;slope(70);

  {Schicke 4x8-Bit-Paket}
  for a:=1 to 32 do
  begin
    up;
    case cont[a] of
       '0':slope(35);
       '1':slope(140);
    end;
    down;
    slope(70);
  end;
  up;
end;

begin korr:=262 end.