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
##################
Lesezeichen