ArSid - Arduino Sid Synthesizer

Tue 16-Apr-24
09:35:30


Lib: Cursor-Keys

Datum: Sun 10 February 2019
Samenvatting: Het afhandelen van de Cursor-Keys.
Soort Artikel: Software
Status: Afgerond


[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]
lib_crsr_01-keyhelp.jpg
1/10: lib_crsr_01-keyhelp.jpg.
lib_crsr_02-help.jpg
2/10: lib_crsr_02-help.jpg.
lib_crsr_03-content.jpg
3/10: lib_crsr_03-content.jpg.
lib_crsr_04-ctrlhex.jpg
4/10: lib_crsr_04-ctrlhex.jpg.
lib_crsr_05-sidhex.jpg
5/10: lib_crsr_05-sidhex.jpg.
lib_crsr_06-notehex.jpg
6/10: lib_crsr_06-notehex.jpg.
Meer
[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]

Deze Library bevat de routines om de Cursor-Keys af te handelen. Wie namelijk op de ArSid kijkt, zal geen enkele druktoets kunnen ontdekken. Maar links en rechts om het Lcd-Display zitten 4 schakelaars, deze functioneren als de zogenaamde Cursor-Keys. En deze schakelaars kunnen twee kanten op schakelen, maar wanneer ze losgelaten worden, springen ze weer terug naar de middenstand. De bovenste schakelaars kunnen naar links en rechts schakelen, de onderste schakelaars naar boven en beneden. Zo vormen de rechter 2 schakelaars de 4 (overbekende) cursor-richtingen <Links>, <Rechts>, <Op>, <Neer>. De linker 2 schakelaars zijn voor andere display-besturing zaken, namelijk <Escape>, <Help>, een <Quiet> en een <Return>. En zo moet het Display gemakkelijk om te schakelen zijn om andere informatie te kunnen laten zien.

Welke informatie dat is, laat de volgende tabel zien:

Nr.- Achtergrond-kleur <Links>/<Rechts>1 2 3 Opmerking:
<Op>/<Neer> ArSid Funktie
0 - Rood Check Panel -geen- -geen- -geen- Controleer alle Besturing-knoppen van de ArSid.
1 - Groen Cursor Help -geen- -geen- -geen- De Functie van de Cursor-schakelaars.
2 - Blauw Controls DecimaalHexaDecimaalTijden, Procenten Informatie van de ArSid Control-knoppen en schakelaars.
3 - Cyan Sids DecimaalHexaDecimaalTijden, Procenten Informatie van de Sid-gegevens.
4 - Geel Noten DecimaalHexaDecimaalNamen Informatie van de noten en akkoorden.
5 - Paars Midi DecimaalHexaDecimaal-geen- Informatie wat er via Midi binnen komt, uitgesplitst per funktie. -nog-niet-geprogrammeerd-
6 - Wit Monitor DecimaalHexaDecimaal-geen- Monitoren wat er via Midi binnenkomt (2 inkomende kanalen). -nog-niet-geprogrammeerd-

Wie de Help-Library al doorgenomen heeft, zal overeenkomsten kunnen ontdekken tussen de nummeringen van de Help-Pagina's en de ArSid functies. Hier is echter niet de funkties in de ArSid van belang. Van belang is de nummering en de methodiek van de Cursor besturingen.

In het kort wisselen de Cursor-Keys de volgende taken:

  • <Op> en <Neer>: Hiermee wisselt het display van waar de informatie, volgens bovenstaand tabel, vandaan komt.
  • <Links> en <Rechts>: Hiermee wisselt het display in welke notatie de informatie getoond wordt, Decimaal (0..9), Hexadecimaal ($0..$F) of Tijden, Procenten of Namen.
  • <Help>: Hiermee wordt het HELP-systeem geactiveerd.
  • <Escape>: Algemene ESCAPE-funktie, zoals, het verlaten van het Help-Systeem. Het Dislay toont alleen het woord <Esc>.
  • <Quiet>: Hiermee worden ALLE Sids het zwijgen opgelegd, handig als er een ongewild geluid uit de ArSid komt, wat men niet meer wilt horen - iets wat tijdens Midi gebruik wel eens voor kan komen. Het Display toont de kreet: "Panic!" en het doel van deze funktie: "Quiet All Sids".
  • <Enter>: Voor het bevestigen van een speciale keuze - op het moment van schrijven is deze funktie nog niet ge-implementeerd, maar ik zie hier een toekomst in wanneer de FpgaSids ingebouwd zijn, voor het omschakelen tussen de 6581 of en 8580 Sid-mode.

Taken van deze Library.

Om deze taken uit te voeren, bevat deze Library hiervoor enkele functies, enkele eigen constantes en enkele "externe" variabelen. Enkele variabelen en constantes worden in de functies gebruikt, anderen zijn nodig voor elders in het ArSid programma. Deze constantes en variabelen zijn in deze Library geplaatst, omdat ze allen te maken hebben met de pagina-besturing.

  • Constantes: Bron-Pagina Index: MaxUnit; CurrentPg en PageKleur.
  • Constantes: Info-Bron Volgnummer: PageCheck; PageHelp; PageControl; PageSid; PageNote; PageMidi en PageMonitor.
  • Externe Variabelen - Info-Bronnen: MaxNumberPage; NumberUnit[][] en NumberPage.

  • Constantes: Maskeringen voor de Cursor-Keys: MaskLeft; MaskRight; MaskUp; MaskDown; MaskQuiet; MaskReturn; MaskHelp en MaskEscape.
  • Externe Variabelen - Cursur-Key bijhouden: KeysCrsr en KeysCrsrPrev.
  • Oproepbare Funktie: Check_KeysCrsr(): Controleert of er een Cursor-Key is geaktiveerd en (zo ja) welke dat is.
  • Oproepbare Funktie: Handle_KeysCrsr(): Verwerkt de Cursor-Key verder.
  • Oproepbare Funktie: Show_Escape(): Laat de tekst "<Esc>" op het display zien.
  • Interne Funktie: Display_Quiet(): Laat de "Panic!"-tekst zien op het display.

  • Externe Variabelen - Semifores: Do_Sid_Data; Do_ShowLegend en Do_ShowData.

Variabelen voor de Info-Bronnen.

Om door de diverse Informatie-Bronnen te kunnen bladeren, is er informatie nodig over uit hoeveel pagina's een Bron bestaat en welke kleur er hiervoor op het Display wordt getoond. Dit wordt opgeslagen in het array NumberUnit[][].

  • MaxNumberPage - Deze bevat het maximum aantal Informatie-Bronnen die er beschikbaar is in de ArSid.
  • NumberPage - Hiermee wordt er bijgehouden welke pagina er op het moment worden getoond.
  • NumberUnit[][]: De eerste dimensie (van 0 .. 6) bevat de informatie van de diverse informatie-bronnen. De betreffende nummering is opgeslagen in de volgende constantes en deze wordt elders in het programma gebruikt.

    1. PageCheck = 0;
    2. PageHelp = 1;
    3. PageControl = 2;
    4. PageSid = 3;
    5. PageNote = 4;
    6. PageMidi = 5;
    7. PageMonitor = 6;

    De tweede dimensie betreft (per Informatie-Bron) 3 losse gegevens en wel de volgende:

    1. MaxUnit = 0 - De maximale waarde van het aantal "Units" (= Pagina's) per Informatie-Bron. Sommigen hebben 1 pagina (= waarde 0) en anderen hebben er 3 (= waarde 2).
    2. CurrentPg = 1 - Een Index om bij te houden in welke eenheid men een bepaalde Info-Bron wil zien (welke pagina het is).
    3. PageKleur = 2 - De kleur van het display van een Informatie-Bron. Zo kan men een Display-kleur meteen associeren bij een bepaalkde funktie/ Info-Bron.

    Vooral bij de tweede dimensie mis ik de leesbaarheid die men wel krijgt bij de Records van Pascal.

Controleer of er een Cursor-toets aktief is.

Terug naar het Paneel: Er zijn 4 schakelaars die de Cursor-Funkties bepalen en deze informatie wordt opgeslagen in het Schakelaar-Array en wel in de elementen $0A en $0B - een aktie die de interupt in de I/O-Library verricht. Elke schakelaar-stand bezet een bit in dit array-elementen.

Check_KeysCrsr() - Om te kijken of er een Cursor-Toets aktief is, moet de functie Check_KeysCrsr() worden aangeroepen. In het kort kijkt deze in het schakelaar-Array naar de aktieve toestanden van de elementen $0A en $0B. Aan de hand van enkele bits die in deze elementen HOOG moeten zijn, wordt gezien welke cursor-key het betreft. Welke bitjes het zijn, staat in de volgende tabel.

Element Bit 7 Bit 6Bit 5Bit 4 Bit 3Bit 2 Bit 1 Bit 0Opmerking:
$0A Neer Links n.c. n.c. n.c. n.c. Enter Help
$0B Op Rechtsn.c. n.c. n.c. n.c. QuietEscape
bitmask maskUDmaskLR maskRQmaskHELokale bitmaskers in de Functie.

Met behulp van 8 losse IF-statements wordt er op al deze bitjes gecontroleerd, door een AND bewerking met zogenaamde bit-maskers te gebruiken. Bij het kijken naar het Schakelaar-Array kunnen de maskers per bitje twee Keys worden gecontroleerd, bijvoorbeeld Links en Rechts (bitje6) of Help en Escape (bitje 0).

Daarna wordt het resultaat weer in een andere variabele gestopt, namelijk KeysCrsr. Ook daarin krijgt elke Cursor-Key een bitje toegewezen en wel volgens de volgende tabel:

Element Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Opmerking:
KeysCrsr Escape Help Enter Quiet Neer Op Rechts Links
bitmask MaskEscapeMaskHelp MaskReturnMaskQuiet MaskDown MaskUp MaskRight MaskLeft Library bitmaskers.

Via een OR bewerking wordt er per toets een bitje HOOG gemaakt. Staat er in KeysCrsr meerdere bitjes op HOOG, dan zijn er ook meerdere Cursor-Keys aktief. Uiteraard moet de variabele KeysCrsr eerst op NUL worden gezet (dus alle bitjes op LAAG), voordat alle IF-statements worden afgelopen.

Het afhandelen van de Cursor-Keys.

Na het controleren op de Cursor-Keys moet deze natuurlijk nog verwerkt worden. Voor het algemene ArSid-programma wordt hiervoor de funktie Handle_KeysCrsr() gebruikt.

Handle_KeysCrsr(): Controleert met 4 losse IF-statements, WELKE cursor-handeling moet worden verwerkt. En afhankelijk hiervan worden er een bepaalde teller verhoogd, of verlaagd. Bereikt een teller zijn eindstand (NUL of het maximum), dan vindt er GEEN verhoging / verlaging plaats - dit in tegenstelling tot de Help-Pagina's.

Cursor-Key NumberPage[currentPage]Opmerking:
Einde Links EindStop.
Links -1
Rechts +1
Einde rechts EindStop.
Einde Op EindStop.
Op -1
Neer +1
Einde Neer EindStop.
Escape -geen-funktie-.
Help -geen-funktie-.
Quiet Legt alle Sids het zwijgen op met funktie Sid_Init() (Library Arsid_Sids).
Enter -geen-funktie-.

Na elke Cursor-aktiviteit, worden er nog diverse Semiforen (Do_Sid_Data, Do_ShowLegend en Do_ShowData) omgezet, zodat er het totale display weer compleet van nieuwe informatie wortd voorzien.

Quiet-Key: Een extra IF-statement wordt er gebruikt om de Quiet-key af te handelen. Het enige doel van deze activiteit is dat ALLE Sids vol met NUL wordt geschreven en zo alle geluiden worden gedimt en/ of worden ge-deaktiveerd. Hiertoe worden de Sids allemaal opnieuw ge-initialiseerd met de funktie Sid_Init().

Tevens wordt de funktie Display_Quiet() opgeroepen, voor een tekst op het display.

De Help-, Escape- en Enter-key worden niet in deze funktie verwerkt.

Enkele extra funkties.

  • Show_Escape(): Deze laat alleen de tekst "<Esc>" op het display zien (zie foto's).

  • Display_Quiet() (interne functie): Deze laat de volgende tekst mooi aangekleed op het display zien: "Panic! ---> Quiet All Sids", waarna er wordt gewacht tot er geen enkele Cursor-Key meer aktief is. Het Display wordt weer gewist en diverse Semiforen (Do_Sid_Data, Do_ShowLegend en Do_ShowData) worden omgezet, zodat er het totale display weer compleet van nieuwe informatie wortd voorzien (zie foto's).

  • [Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]

    Afbeeldingen

    lib_crsr_01-keyhelp.jpg
    1/10: lib_crsr_01-keyhelp.jpg.
    lib_crsr_02-help.jpg
    2/10: lib_crsr_02-help.jpg.
    lib_crsr_03-content.jpg
    3/10: lib_crsr_03-content.jpg.
    lib_crsr_04-ctrlhex.jpg
    4/10: lib_crsr_04-ctrlhex.jpg.
    lib_crsr_05-sidhex.jpg
    5/10: lib_crsr_05-sidhex.jpg.
    lib_crsr_06-notehex.jpg
    6/10: lib_crsr_06-notehex.jpg.
    lib_crsr_07-midihex.jpg
    7/10: lib_crsr_07-midihex.jpg.
    lib_crsr_08-monitorhex.jpg
    8/10: lib_crsr_08-monitorhex.jpg.
    lib_crsr_09-escape.jpg
    9/10: lib_crsr_09-escape.jpg.
    lib_crsr_10-panic.jpg
    10/10: lib_crsr_10-panic.jpg.

    [Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]
    Broncode: [1: Lib: Cursor Schakelaars (.cpp)] [2: Lib: Cursor Schakelaars (.h)]

    1: De broncode van Lib: Cursor Schakelaars (.cpp)

    (Sun 10 February 2019) ArSid_Crsr.cpp: Het afhandelen van de Cursor Schakelaars.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    //=======================================================================================
    //
    // ArSid_Crsr - Library to check the frontpanel Cursor-keys and Handle them
    //
    // 1)
     Functions to check the Cursor Keys (Switches)
    // 2) Functions to handle some funktions of the Cursor Keys
    //
    //=======================================================================================

    //
    //  Mind you, there are severall Extern Vars from/ for other libraries
    //

    #ifndef ARSID_CRSR_CPP
    #define ARSID_CRSR_CPP

    #include "Arduino.h"
    #include "ArSid_Crsr.h"
    #include "Arsid_Sid.h"
    #include "Arsid_Lcd.h"
    #include "ArSid_Panel.h"
    #include "ArSid_Control.h"

    //=====================================================================================

    //    333333      33333333        333333      33333333
    //  33      33    33      33    33      33    33      33
    //  33            33      33    33            33      33
    //  33            33333333        333333      33333333
    //  33            33  33                33    33  33
    //  33      33    33    33      33      33    33    33
    //    333333      33      33      333333      33      33

    // Some Semifores for Doing Stuff Only when Needed.
    extern byte Do_Sid_Data   ;   // >0 => To Set Sid Data into the Sid
    extern byte Do_ShowLegend ;   // >0 => To Show Legend On The Screen
    extern byte Do_ShowData   ;   // >0 => To Show Data On The Screen

    // Some Cursor Vars and BitMasks
    extern byte KeysCrsr       = 0;       // Keys Cursor/ Main BitPatern 0bEHRSDURL
    extern byte KeysCrsrPrev   = 0;       // Keys Cursor/ Main - Vorige

    extern byte MaxNumberPage = 6;        // (Check, Help, Control, Sid, Note, Midi, Monitor)
    extern byte NumberUnit [7][3] =       // = [0..6][0..2] To keep track "The Unit the numbers are given in"
      //{Max,Current,Color} Number of Units (Decimal, Hex, Hz-Secs, Text)
      { {  0,   0   ,  1  },   // 0 = PageCheck
        {  0,   0   ,  2  },   // 1 = PageHelp
        {  2,   2   ,  4  },   // 2 = PageControl
        {  2,   1   ,  6  },   // 3 = PageSid
        {  2,   1   ,  3  },   // 4 = PageNote
        {  1,   1   ,  5  },   // 5 = PageMidi
        {  1,   1   ,  7  }    // 6 = PageMonitor
      };
    extern byte NumberPage = PageNote;    // To keep track of "The Page which is shown"

    //=====================================================================================

    void Show_Escape()
    { // Clear 3 lines and show <Esc> on the Display.
      Lcd_Gotoxy(0, 1);
      Lcd_Print("                    ");
      Lcd_Gotoxy(0, 2);
      Lcd_Print("       <Esc>        ");
      Lcd_Gotoxy(0, 3);
      Lcd_Print("                    ");
    }

    void Display_Quiet()
    { // Display Quiet-Key Screen
      // Send Characters
      Clear_Led(0,19);
      Lcd_Clr();
      Write_Lcdback(1);
      Lcd_Gotoxy(0,0);  Lcd_Print("99__[Quiet Sids]___9");
      Lcd_Gotoxy(0,1);  Lcd_Print("                    ");
      Lcd_Gotoxy(0,2);  Lcd_Print(" Panic! ---> Quiet  ");
      Lcd_Gotoxy(0,3);  Lcd_Print("           All Sids ");

      // Wait till Keys are Released
      while (KeysCrsr != 0)
        { // Keep on checking
          Check_KeysCrsr();
        }
      // Clear Screen and "Clearing" Some Vars
      Lcd_Clr();
      KeysCrsr = 0;
      Do_Sid_Data   = 255;
      Do_ShowLegend = 255;
      Do_ShowData   = 255;
    }

    //=====================================================================================
    //
    //    333333      33333333        333333      33333333
    //  33      33    33      33    33      33    33      33
    //  33            33      33    33            33      33
    //  33            33333333        333333      33333333
    //  33            33  33                33    33  33
    //  33      33    33    33      33      33    33    33
    //    333333      33      33      333333      33      33
    //

    void Check_KeysCrsr()
    { // Check for the Cursor Keys
      // KeysCrsr = BitPatern  0bEHRSDURL
      // <7:Esc><6:Help><5:Return><4:Quiet><3:Down><2:Up><1:Right><0:Left>
      const byte bitmaskLR = 0b01000000;  // Mask of Switch: Left Right
      const byte bitmaskUD = 0b10000000;  // Mask of Switch: Up Down
      const byte bitmaskEH = 0b00000001;  // Mask of Switch: Esc Help
      const byte bitmaskRQ = 0b00000010;  // Mask of Switch: Return Quiet
      byte crsr_A = Read_Schak(0x0A);
      byte crsr_B = Read_Schak(0x0B);

      KeysCrsr = 0b00000000;
      if ((crsr_A & bitmaskLR) != 0)
         { // Left    0bEHRQDURL
           KeysCrsr = KeysCrsr | MaskLeft;
         }
      if ((crsr_B & bitmaskLR) != 0)
         { // Right   0bEHRQDURL
           KeysCrsr = KeysCrsr | MaskRight;
         }
      if ((crsr_A & bitmaskUD) != 0)
         { // Up      0bEHRQDURL
           KeysCrsr = KeysCrsr | MaskUp;
         }
      if ((crsr_B & bitmaskUD) != 0)
         { // Down    0bEHRQDURL
           KeysCrsr = KeysCrsr | MaskDown;
         }

      if ((crsr_A & bitmaskRQ) != 0)
         { // Silence 0bEHRQDURL
           KeysCrsr = KeysCrsr | MaskQuiet;
         }
      if ((crsr_B & bitmaskRQ) != 0)
         { // Return  0bEHRQDURL
           KeysCrsr = KeysCrsr | MaskReturn;
         }
      if ((crsr_A & bitmaskEH) != 0)
         { // Escape  0bEHRQDURL
           KeysCrsr = KeysCrsr | MaskEscape;
         }
      if ((crsr_B & bitmaskEH) != 0)
         { // Help    0bEHRQDURL
           KeysCrsr = KeysCrsr | MaskHelp;
         }
    }

    void Handle_KeysCrsr()
    { // Handle Cursor Keys
      // KeysCrsr = BitPatern  0bEHRQDURL   <7:Esc><6:Help><5:Return><4:Quiet><3:Down><2:Up><1:Right><0:Left>
      if (KeysCrsr != KeysCrsrPrev)
         { // Decode The Cursor Keys
           if ((KeysCrsr & MaskLeft) != 0)
              { // Left
                if ( NumberUnit[NumberPage][currentPg] > 0 )
                   { NumberUnit[NumberPage][currentPg] = NumberUnit[NumberPage][currentPg] - 1;
                   }
                Do_ShowLegend = 1;
                Do_ShowData = 1;
              }
           if ((KeysCrsr & MaskRight) != 0)
              { // Right
                if ( NumberUnit[NumberPage][currentPg] < NumberUnit[NumberPage][MaxUnit] )
                   { NumberUnit[NumberPage][currentPg] = NumberUnit[NumberPage][currentPg] + 1;
                   }
                Do_ShowLegend = 1;
                Do_ShowData = 1;
              }
           if ((KeysCrsr & MaskUp) != 0)
              { // Up
                if (NumberPage > 0 )  { NumberPage = NumberPage - 1; }
                Do_ShowLegend = 1;
                Do_ShowData   = 1;
              }
           if ((KeysCrsr & MaskDown) != 0)
              { // Down
                if (NumberPage < MaxNumberPage )  { NumberPage = NumberPage + 1; }
                Do_ShowLegend = 1;
                Do_ShowData   = 1;
              }
           if ((KeysCrsr & MaskQuiet) != 0)
              { // Silence
                Sid_Init();
                Display_Quiet();
              }
           KeysCrsrPrev = KeysCrsr ;
         }
    }

    //=====================================================================================

    #endif // ARSID_CRSR_CPP

    Broncode: [1: Lib: Cursor Schakelaars (.cpp)] [2: Lib: Cursor Schakelaars (.h)]

    2: De broncode van Lib: Cursor Schakelaars (.h)

    (Sun 10 February 2019) ArSid_Crsr.h: Het afhandelen van de Cursor Schakelaars.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    //=======================================================================================
    //
    // ArSid_Crsr - Library to check the frontpanel Cursor-keys and Handle them
    //
    // 1)
     Functions to check the Cursor Keys (Switches)
    // 2) Functions to handle some funktions of the Cursor Keys
    //
    //=======================================================================================

    #ifndef ARSID_CRSR_H
    #define ARSID_CRSR_H

    #include "Arduino.h"

    //=====================================================================================

    // Constants for making Page Handling more readable
    const byte MaxUnit     = 0;  // "Field" 0 of eacht Page Array"record" Max Units per Page
    const byte currentPg   = 1;  // "Field" 1 of eacht Page Array"record" Current Page
    const byte PageKleur   = 2;  // "Field" 2 of eacht Page Array"record" Color
    const byte PageCheck   = 0;
    const byte PageHelp    = 1;
    const byte PageControl = 2;
    const byte PageSid     = 3;
    const byte PageNote    = 4;
    const byte PageMidi    = 5;
    const byte PageMonitor = 6;

    // Masks for the Cursor Keys    <7:Esc><6:Help><5:Return><4:Quiet><3:Down><2:Up><1:Right><0:Left>
    const byte MaskLeft       = 0b00000001;
    const byte MaskRight      = 0b00000010;
    const byte MaskUp         = 0b00000100;
    const byte MaskDown       = 0b00001000;
    const byte MaskQuiet      = 0b00010000;
    const byte MaskReturn     = 0b00100000;
    const byte MaskHelp       = 0b01000000;
    const byte MaskEscape     = 0b10000000;

    void Show_Escape();
      // Clear 3 lines and show <Esc> on the Display.

    void Check_KeysCrsr();
      // Check for the Cursor Keys

    void Handle_KeysCrsr();
      // Handle Cursor Keys
      // KeysCrsr = BitPatern  0bEHRQDURL
      // <7:Esc><6:Help><5:Return><4:Quiet><3:Down><2:Up><1:Right><0:Left>

    //=====================================================================================

    #endif // ARSID_CRSR_H


    Broncode: [1: Lib: Cursor Schakelaars (.cpp)] [2: Lib: Cursor Schakelaars (.h)]
    [Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]