{###########################################################################}
//Angepasst für Mini-DDS und MP3-Steuerplatine

procedure WriteLCD(myAdr : pointer);
//Kurze, schnelle Ausgabe eines Strings aus ROM
//über Adresspointer LCDwrite(@myString).
begin
//normales LCD an Port
  asm;
    LDD       _ACCCLO, Y+000h
    CLR       _ACCA
    LDD       _ACCCHI, Y+001h
    ADC       _ACCCHI, _ACCA   ; Z-Pointer gesetzt auf String-Adresse
    LPM       _ACCDLO, Z+      ; Pascal-Längenbyte
    WriteLCDLoop:
    LPM       _ACCA, Z+        ; nächstes Zeichen in _ACCA
    PUSH      _ACCCHI
    PUSH      _ACCCLO
    RCALL     SYSTEM.LCDOUT
    POP       _ACCCLO
    POP       _ACCCHI
    DEC       _ACCDLO
    BRNE      WriteLCDLoop
  endasm;
end;

procedure FastRepeatRelease;
{Warten bis alle Tasten vom Bedienpanel losgelassen oder Timer abgelaufen}
begin
  dectolim(BtnTime2, 0);
  repeat
    dec(BtnTime);
    if BtnTime2 = 0 then
      mdelay(4); //Schnelldurchlauf
    else
      mdelay(15); //Langsamdurchlauf
    endif;
    BtnInState:= PinD; // für später, sonst Fehlverhalten wg. Prellen
    i:= BtnInState or %01000011;
  until (i = %11111111) or (BtnTime = 0);
  if i = %11111111 then  // wenn losgelassen, Timer zurücksetzen
    BtnTime:= 40; // Initial timer value
    BtnTime2:= 5; // Anzahl Durchläufe bis fast forward
  else
    BtnTime:= 10; // Repeat timer value
  endif;
end;

procedure SlowRepeatRelease;
begin
  BtnTime2:= 255; // Anzahl Durchläufe bis fast forward
  FastRepeatRelease;
end;

function NaviButton : Boolean;
{Liefert true wenn irgendeine Taste außer Up/Down gedrückt, Sample in BtnInState}
begin
  BtnInState:= PinD; // für später, sonst Fehlverhalten wg. Prellen
  aBool := ((BtnInState or %00001111) <> %11111111);
  return (aBool);
end;

function UpDownButton : Boolean;
{Liefert true wenn eine der Up/Down-Tasten gedrückt, Sample in BtnInState}
begin
  BtnInState:= PinD; // für später, sonst Fehlverhalten wg. Prellen
  aBool := ((BtnInState or %11110011) <> %11111111);
  return (aBool);
end;

