procedure FastRepeatRelease;
{Warten bis alle Tasten vom Bedienpanel losgelassen oder Timer abgelaufen}
begin
{$IFDEF IncrEnc}
  repeat
    BtnInPort:=PinD; // für später, sonst Fehlverhalten wg. Prellen
    i:= BtnInPort or %00000111;
    mdelay(10); //Prellzeit
  until (i = %11111111);
  mdelay(10); //Prellzeit
{$ELSE}
  dectolim(BtnTime2,0);
  repeat
    dec(BtnTime);
    if BtnTime2 = 0 then
      mdelay(4); //Prellzeit
    else
      mdelay(13); //Prellzeit
    endif;
    BtnInPort:=PinD; // für später, sonst Fehlverhalten wg. Prellen
    i:= BtnInPort or %00000111;
  until (i = %11111111) or (BtnTime = 0);
  if i= %11111111 then  // wenn losgelassen, Timer zurücksetzen
    BtnTime:=40; // Initial timer value
    BtnTime2:=10; // Anzahl Durchläufe bis fast forward
  else
    BtnTime:=10; // Repeat timer value
  endif;
{$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 BtnInPort}
begin
  BtnInPort:=PinD; // für später, sonst Fehlverhalten wg. Prellen
  aBool := ((BtnInPort or %01100111) <> %11111111);
  return (aBool);
end;

function UpDownButton : Boolean;
{Liefert true wenn eine der Up/Down-Tasten gedrückt, Sample in BtnInPort}
begin
  BtnInPort:=PinD; // für später, sonst Fehlverhalten wg. Prellen
  aBool := ((BtnInPort or %10011111) <> %11111111);
  return (aBool);
end;

procedure ROMStr16Out(myAdr : pointer);
{Kurze, schnelle Ausgabe eines 16 Zeichen langen Strings
 aus ROM über Adresspointer. Addiert 1 zum Pointer wg. Pascal-Längenbyte,
 bricht bei 0-Byte ab (C-String-kompatibel)}
begin
  asm;
    LDD       _ACCCLO, Y+000h
    LDI       _ACCA,1
    ADD       _ACCCLO,_ACCA     ;Pascal-Längenbyte übergehen (+1)
    CLR       _ACCA
    LDD       _ACCCHI, Y+001h
    ADC       _ACCCHI,_ACCA

    PUSH      _FRAMEPTR
    PUSH      _FPTRHI
    LDI       _ACCA, 1 SHLB _DEVICE
    OR        Flags, _ACCA
    LDI       _ACCB, SYSTEM.LCDOut_M SHRB 1
    LDI       _ACCA, SYSTEM.LCDOut_M SHRB 9
    ST        -Y, _ACCA
    ST        -Y, _ACCB
    LDI       _ACCBHI, 16
StrConst2Str:
    LPM       _ACCA, Z+
    TST       _ACCA
    BREQ      ROMStr16OutEnd    ;wenn 0-Byte, abbrechen
    RCALL     SYSTEM.Char2Str
    DEC       _ACCBHI
    BRNE      StrConst2Str
ROMStr16OutEnd:
    POP       _FPTRHI
    POP       _FRAMEPTR
  endasm;
end;

