Hallo mare_crisium,

je intensiver ich mich damit beschaeftige, um so mehr bewegt sich der Groschen dem Boden.
... aber der Kopf qualmt schon ein wenig... - macht aber nichts -
Meine Frau liest einen Krimi und finde es eben spannend mich durch den Code zu arbeiten.
Trotzdem bitte ich Dich mal das Untere zu lesen und ggf. zu korrigieren.
- bin aber noch nicht ganz fertig, mit dem Durcharbeiten und Verstehen -
Den kompletten "MNU8CTL_HANDLER" habe ich noch nicht durch...

Frage zum Ablauf:
In der Doku auf Seite 1 "Jedes Menu hat 8 Menupunkte, die durch Betätigen eines einzelnen Tasters
(Taste0 bis Taste7) ausgewählt werden."
-->> die Idee war ein Menue, in dem 8 Menuepunkte erkannt werden koennen. Meintest Du es so? oder meinst Du 8 Menues mit 8 Menuepunkten?


Doku mare_crisium(wie ich es verstanden habe - bitte verbessere mich, wenn es anders gemeint war):
A.0 Abfrage auf Ta0 oder Ta7 log 1
Rueckgabe 0 -> A.0
Rueckgabe 1 -> A.1

A.1 1.Abfrage auf Ta0 oder Ta7 log 1
Rueckgabe 0 -> A.0
Rueckgabe 1 -> 2. Abfrage
2.Abfrage auf Ta0 oder Ta7 log 1 nach Ablauf von T1
Rueckgabe 0 -> A.0
Rueckgabe 1 -> A.2

A.2 Abfrage aller Tasten(0-7)
Rueckgabe := Tasten-ID
Rueckgabe mehrere Tasten IDs = Fehlerfall ->Signalisierung + Start von A.2
T2 abgelaufen -> A.0

ICALL hatte ich bis jetzt noch nie verwendet - nun weiss ich, was es damit auf sich hat.




############# meine Gedankenstuetze
Ablauf der Menuesteuerung nach mare_crisium
Bsp.:
Code:
Datenspeicher(Datensegement) 
MNU8CTL = RAM_Anfang = 0x60
MNU8CTL_LNG = 12 = 0x0C (Byte im Datenspeicher reserviert)
MNU8CTL_TBL_LNG = 16 = 0x10 (Laenge der Zustandstabelle)

 aktuelle Zustandsnummer der Menusteuerung
MNU8CTL_FLAGS	    =  0 (Flags)
MNU8CTL_AKTZUST	    =  1 (aktueller Zustand)	
MNU8CTL_TASTZUST	=  2 (Tastenzustand)
MNU8CTL_ZYTZHLRL	=  3 (Zaehler-Adresse-Low)
MNU8CTL_ZYTZHLRH	=  4 (Zaehleradresse -High)
MNU8CTL_TBLADRL	    =  5 (Adresse Zustandstabelle -Low)
MNU8CTL_TBLADRH	    =  6 (Adresse Zustandstabelle -High)
MNU8CTL_MAXNR		=  7 (maximale Anzahl Datensaetz in Zustandstabelle)

-----------------------------------------------------------------------------------------------------------------------------------
                          0x60     0x61     0x62     0x63     0x64     0x65     0x66     0x67     0x68     0x69     0x6A     0x6B
-----------------------------------------------------------------------------------------------------------------------------------
y = MNU8CTL                X
-----------------------------------------------------------------------------------------------------------------------------------
y+MNU8CTL_LNG                                                                                                                 X
-----------------------------------------------------------------------------------------------------------------------------------
y+MNU8CTL_FLAGS            X
-----------------------------------------------------------------------------------------------------------------------------------
y+MNU8CTL_AKTZUST                   X
-----------------------------------------------------------------------------------------------------------------------------------
y+MNU8CTL_TASTZUST                           X
-----------------------------------------------------------------------------------------------------------------------------------
y+MNU8CTL_ZYTZHLRL                                    X
-----------------------------------------------------------------------------------------------------------------------------------
y+MNU8CTL_ZYTZHLRH                                             X
-----------------------------------------------------------------------------------------------------------------------------------
y+MNU8CTL_TBLADRL                                                      X
-----------------------------------------------------------------------------------------------------------------------------------
y+MNU8CTL_TBLADRH                                                               X
-----------------------------------------------------------------------------------------------------------------------------------
y+MNU8CTL_MAXNR                                                                          X
-----------------------------------------------------------------------------------------------------------------------------------
reserve                                                                                            X        X        X       X
-----------------------------------------------------------------------------------------------------------------------------------
MNU8CTL_CREATE:
im Datenspeicher ab 0x60 mit einer Laenge von MNU8CTL_LNG :=16 Byte reservieren und mit 0 fuellen
in Speichertstelle y+MNU8CTL_MAXNR(0x67) die Anzahl der max. Zustaende speichern
in Speicherstellen y+MNU8CTL_TBLADRL und y+MNU8CTL_TBLADRH den Zeiger auf die Zustandstabelle speichern(0x65 und 0x66)

MNU8CTL_ZYTRESET:
im Datenspeicher an y+MNU8CTL_ZYTZHLRL(0x63) und y+MNU8CTL_ZYTZHLRH(0x64) den Wert von T0 speichern

MNU8CTL_SETTASTEN:
im Datenspeicher an y+MNU8CTL_TASTZUST(0x62) die statischen( simulieret Tasten) Zustaende der Tasten speichern

MNU8CTL_ZYTCOUNT:
aus Datenspeicher an y+MNU8CTL_ZYTZHLRL(0x63) und y+MNU8CTL_ZYTZHLRH(0x64) den Wert von T0 lesen
MU8CT_ZTCT04:
im Datenspeicher an y+MNU8CTL_ZYTZHLRL(0x63) und y+MNU8CTL_ZYTZHLRH(0x64) den decr. Wert von T0 speichern

MNU8CTL_HANDLER:
1.Byte low =(0x1 und 2.Byte high =(0x01) aus Zustandstabelle lesen - Zeiger auf die auszuefuehrende Prozedur (icall)???? - zusammen das DoppelByte 0x0118
3.Byte low =(0x00) und 4.Byte high =(0x00) aus Zustandstabelle lesen - Folgezustand
icall ruft Prozedur welche an FlashAdresse (0x011 vom Z-Zeiger auf

bis zum naechsten MAIN-Aufruf
##################