Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

CONTXT - Auf Prozessdaten zugreifen

&pagelevel(3)&pagelevel

Allgemeines

Anwendungsgebiet:

Contingency-Verfahren; siehe "Contingency-Prozesse";
STXIT-Verfahren; siehe "STXIT-Verfahren mit Contingency-Verarbeitung"

Makrotyp:

S-Typ, MF-Format 1: Standardform/L-/E-Form;
siehe "S-Typ-Makroaufrufe"

Wird ein Basis- oder Contingency-Prozess durch einen Contingency-Prozess unterbrochen, so wird u.a. der Inhalt seiner Register und des Befehlszählers im PCB (Process Control Block) abgespeichert.

Makrobeschreibung

Mit dem Makro CONTXT hat ein Contingency-Prozess Zugriff auf den Kontext (PCB, Process Control Block) eines unterbrochenen Prozesses.

CONTXT unterstützt alle aktuellen BS2000-Server. Demzufolge kann der unterbrochene Prozess in /390-Code mit /390-Kontext (/390-Server) oder in x86-Code mit x86-Kontext (x86-Server) vorliegen. Da sich die Kontexte unterscheiden, wird der Operand LAYOUT zur Unterscheidung verwendet.

Für LAYOUT=COMPATIBLE (Voreinstellung) werden für einen unterbrochenen /390-Prozess der vollständige Kontext (Register und PC) gelesen. Der gesamte Kontext kann verändert und geschrieben werden.
Für einen unterbrochenen x86-Prozess werden äquivalente Teile des Kontextes auf die entsprechenden Bereiche des Layouts abgebildet. Der Kontext wird also nicht vollständig ausgegeben. Er kann auch nur in Teilen geschrieben werden.

Für LAYOUT=FCONTXT wird der vollständige Kontext eines unterbrochenen x86-Prozesses gelesen. ILC wird gebildet. CC und PM sind ohne Bedeutung.
Der vollständige Kontext eines unterbrochenen /390-Prozesses wird auf die entsprechenden Teilbereiche des Layouts abgebildet.
Der gesamte Kontext eines Prozesses kann verändert und geschrieben werden. Für x86-Prozesse können CC, ILC und PM nicht geschrieben werden.

Siehe auch „PCB-Zugriffe im Prozess-Modus /390“.

Wenn x86-Code in Benutzeranwendungen (/390-Code) eingebunden oder nachgeladen wird (z. B. Nachladen des portierten Produktes SORT), kann an dieser Schnittstelle sowohl der Kontext von x86-Code als auch der Kontext von /390-Code sichtbar werden, je nachdem in welchem Modus die Unterbrechung stattfand. Programme, die vollständig im /390-Modus ablaufen, sind nicht betroffen.

Folgende Unterschiede im Kontext werden sichtbar, wenn ein x86-Programm unterbrochen wurde und der Kontext des unterbrochenen (x86-)Prozesses betrachtet wird (CONTXT SAVE=...,LAYOUT=FCONTXT):

  • der Kontext enthält die /390-äquivalenten Teile (Register, PC, Gleitpunkregister, usw.), die auch über die DSECT adressiert werden können und

  • einen HSI-abhängigen Bereich, der in Blockform gelesen oder geschrieben werden kann

Makroaufrufformat und Operandenbeschreibung

CONTXT

[{
   SAVE=adr / (r) |
   STACKR=(x1, x2, ...),OWNR=(y1, y2,...)
 }
]

[,{
    SAVACR=adr / (r) |
    STKACR=(x1, x2, ...),OWNACR=(y1, y2,...)
 
}
]

,FPR=NO / YES

,PROCESS=MAIN / LAST

,FUNCT=READ / WRITE

,LAYOUT=COMPATIBLE / FCONTXT

,LAYOUTF=DSECT[,PREFIX=p]

[,ILC=adr / (r)]

[,CC=adr / (r)]

[,PM=adr / (r)]

[,PMODE=adr / (r)]

[,MODE=adr / (r)]

[,ASCMOD=adr / (r)]

[,PRGCODE=adr / (r)]

[,PRGCODL=adr / (r)]

[,PARMOD=24 / 31]

[,MF=L / (E,..)]

Die Operanden ILC, CC, PM sind für x86-Server ohne Bedeutung.

SAVE=
Beschreibt die Adresse eines Feldes für den Datenaustausch mit dem PCB des angegebenen Prozesses (Operand PROCESS). Aufbau und Inhalt dieses Feldes hängen vom Operanden LAYOUT ab.

  • LAYOUT=COMPATIBLE (Voreinstellung)
    Das Datenaustauschfeld hat denselben Aufbau wie bei der bisherigen CONTXT-Schnittstelle im /390-Modus. Feldlänge = 68 Byte; Ausrichtung auf Wortgrenze nötig.
    Feldaufbau und Zuordnung:

    Byte  0 bis Byte 63: Register R0 bis R15 des /390-PCB
                         äquivalente Register des x86-PCB
    Byte 64 bis Byte 67: Adresse des nächsten Befehls (PC / NIA) 
    
  • LAYOUT=FCONTXT
    Zur Unterstützung des x86-Modus hat das Datenaustauschfeld einen eigenen Aufbau. Es enthält neben dem /390-PCB auch den gesamten x86-PCB und damit auch die Gleitpunktregister. Diese werden unabhängig vom Operanden FPR zwischen dem Datenaustauschfeld und dem PCB des angegebenen Prozesses übertragen.

    Falls der Prozess, auf dessen PCB zugegriffen wird, jedoch im /390-Modus abläuft, findet eine eingeschränkte Übertragung statt. Es werden nur die äquivalenten Bereiche des Datenaustauschfeldes versorgt bzw. gelesen.

    Die Feldlänge des Datenaustauschfeldes kann mit dem Makro STXIT, Operand CONTXTL, dynamisch ermittelt werden. Die Validierung des Datenaustauschfeldes geschieht aber immer in der jeweils benutzten Länge. Das Datenaustauschfeld muss auf Doppelwortgrenze ausgerichtet sein.

    Durch Aufruf des Makros CONTXT mit dem Operanden LAYOUTF=DSECT kann eine DSECT erzeugt werden, die den neuen Aufbau des Datenaustauschfeldes beschreibt. Mit dieser DSECT ist es möglich, die einzelnen Teilfelder des Datenaustauschfeldes symbolisch zu adressieren.

Bei FUNCT=READ wird der Kontext aus dem PCB des angegebenen Prozesses in das spezifizierte Feld übertragen.

Bei FUNCT=WRITE wird der Inhalt des spezifizierten Feldes in den Kontext des angegebenen Prozesses übertragen. Der Befehlszähler (PC / NIA = Next Instruction Address) kann nur dann geschrieben werden, wenn er in ein /390-Modul zeigt oder LAYOUT= FCONTXT angegeben wurde.

adr
symbolische Adresse (Name) des Feldes für den Datenaustausch

(r)
r = Register mit dem Adresswert von adr

STACKR=
Bezeichnet eine Folge ausgewählter Register (einschließlich Befehlszähler) des angegebenen Prozesses für den Datenaustausch. Für x86-Kontexte werden nur die Äquivalente der /390-Register R0 bis R15 unterstützt. Der Befehlszähler (PC / NIA = Next Instruction Address) darf nur dann geschrieben werden, wenn er in ein /390-Modul zeigt oder wenn LAYOUT=FCONTXT angegeben wurde. Für das Lesen des Befehlszählers gibt es keine derartige Einschränkung.

Hinweis
Bei den Operanden STACKR und OWNR muss jeweils die gleiche Anzahl von Operanden angegeben werden. Die Angaben in den Klammern werden für die Übertragung einander paarweise zugeordnet. Es erfolgt also eine Übertragung zwischen x1 und y1, x2 und y2, x3 und y3, usw.

(x1,x2,...)
x1,x2 = Elemente aus der Menge (0,1,2,.....,15,PC).
Die Zahlen 0, ....,15 stehen für die allgemeinen Register und PC für den Befehlszähler. Bezüglich des Befehlszählers wird nur die Adresse des nächsten Befehls übertragen.

OWNR=
bezeichnet eine Folge ausgewählter Register des aufrufenden (Contingency-)Prozesses, die die gelesenen Werte aufnehmen sollen oder die die zu schreibenden Werte enthalten (siehe auch Hinweis für STACKR).

(y1,y2,...)
y1,y2 = Elemente aus der Menge (0,1,2,.....,15,PC).
Die Zahlen 0, ....,15 stehen für die allgemeinen Register und PC für den Befehlszähler. Bei der Verwendung der Operanden STACKR und OWNR ist zu beachten, dass die Register R1 und R15 durch den Makroaufruf zerstört werden (Register R1: Adresse des Datenbereichs, Register R15: Rücksprunginformation). Daher ist „Schreiben“ des Inhalts von Register R1 und „Lesen“ in das Register R15 nicht möglich.

SAVACR=
Beschreibt die Adresse eines Feldes für den Datenaustausch mit dem PCB des angegebenen Prozesses (Operand PROCESS).
Feldlänge = 64 Byte; Ausrichtung auf Wortgrenze erforderlich.
Bei FUNCT=READ wird der Inhalt der Zugriffsregister AR0 bis AR15 aus dem PCB des angegebenen Prozesses in das spezifizierte Feld übertragen.
Bei FUNCT=WRITE wird der Inhalt des spezifizierten Feldes entsprechend obiger Zuordnung in die Zugriffsregister des angegebenen Prozesses übertragen.

adr
symbolische Adresse (Name) des Feldes für den Datenaustausch

(r)
r = Register mit dem Adresswert von adr

STKACR=
Bezeichnet eine Folge ausgewählter Zugriffsregister des angegebenen Prozesses für den Datenaustausch.

Hinweis
Bei den Operanden STKACR und OWNACR muss jeweils die gleiche Anzahl von Operanden angegeben werden. Die Angaben in den Klammern werden für die Übertragung einander paarweise zugeordnet. Es erfolgt also eine Übertragung zwischen x1 und y1, x2 und y2, x3 und y3, usw.

(x1,x2,...)
x1,x2 = Elemente aus der Menge (0,1,2,.....,15).
Die Zahlen 0, ....,15 stehen für die Zugriffsregister.

OWNACR=
bezeichnet eine Folge von Zugriffsregistern des aufrufenden (Contingency-)Prozesses, die die gelesenen Werte aufnehmen sollen oder die die zu schreibenden Werte enthalten (siehe auch Hinweis für STACKR).

(y1,y2,...)
y1,y2 = Elemente aus der Menge (0,1,2,.....,15).
Die Zahlen 0, ....,15 stehen für die Zugriffsregister.

FPR=
gibt an, ob die Inhalte der Gleitpunktregister übertragen werden sollen.
Dieser Operand ist nur in Verbindung mit LAYOUT=COMPATIBLE (Voreinstellung) von Bedeutung.
Läuft einer der beteiligten Prozesse im x86-Modus, sind von dessen Gleitpunktregistern nur diejenigen an der Übertragung beteiligt, die Äquivalente der /390-Gleitpunktregister darstellen.

NO
Die Inhalte der Gleitpunktregister werden nicht übertragen.

YES
Bei FUNCT=READ wird der Inhalt der Gleitpunktregister des angegebenen Prozesses in die Gleitpunktregister des aufrufenden (Contingency-) Prozesses übertragen.
Bei FUNCT=WRITE wird der Inhalt der Gleitpunktregister des aufrufenden (Contingency-) Prozesses in die Gleitpunktregister des angegebenen Prozesses übertragen.

Bei LAYOUT=FCONTXT findet grundsätzlich keine direkte Übertragung der Gleitpunktregister des aufrufenden Prozesses in die Gleitpunktregister des angegebenen Prozesses oder umgekehrt statt. Stattdessen werden die Gleitpunktregister über das Datenaustauschfeld übertragen, das mit dem Operanden SAVE festgelegt ist. Die Angabe des Operanden FPR wird ignoriert.

Dabei werden unabhängig vom Ablaufmodus des aufrufenden Prozesses alle Gleitpunktregister des x86-Modus übertragen, falls der angegebene Prozess im x86-Modus abläuft.

PROCESS=
gibt an, zu welchem Prozess der Zugriff gewünscht wird.

MAIN
Der Zugriff erfolgt zum Basisprozess, auch wenn der Basisprozess nicht durch den aufrufenden (Contingency-)Prozess unterbrochen wurde.

LAST
Der Zugriff erfolgt zu dem Prozess, der durch den aufrufenden Prozess unterbrochen wurde; das kann ein Contingency- oder der Basisprozess sein.

FUNCT=
gibt an, ob ein Lese- oder Schreibzugriff ausgeführt werden soll. Siehe auch „PCB-Zugriffe im Prozess-Modus /390“.

READ
Die Inhalte der spezifizierten Register und ggf. des Befehlszählers bzw. der komplette x86-Kontext (bei LAYOUT=FCONTEXT auf x86-Servern) werden aus dem PCB des angegebenen Prozesses gelesen und in die angegebenen Felder übertragen.

WRITE
Die spezifizierten Register und ggf. der Befehlszähler bzw. der komplette x86-Kontext (bei LAYOUT=FCONTEXT auf x86-Servern) des angegebenen Prozesses werden mit den Werten überschrieben, die der aufrufende Prozess angibt.
Der Schreibzugriff ist nur möglich, wenn der Speicherschlüssel im PCB des aufrufenden Prozesses mit dem im PCB des angegebenen Prozesses übereinstimmt.

Im /390-Prozess-Modus: Der Inhalt der durch ILC/CC/PM/ASCMOD beschriebenen Felder wird in den PCB des angegebenen Prozesses (unterbrochener Prozess oder Basisprozess) eingetragen. Die Information ist in den korrespondierenden Bits zu hinterlegen.

LAYOUT=
legt Umfang und Aufbau des Datenaustauschfeldes fest, dessen Adresse im Operanden SAVE angegeben wird. Er steuert auch die Funktion „Schreiben NIA“ über den Operanden STACKR=(PC), siehe "CONTXT - Auf Prozessdaten zugreifen".

COMPATIBLE
Umfang und Layout des /390-Kontexts werden erwartet. Die Gleitpunktregister werden nur übertragen, wenn gleichzeitig FPR=YES angegeben wurde.

FCONTXT
Umfang und Layout des jeweiligen x86-Kontextes werden erwartet. Für x86-Kontexte werden die Gleitpunktregister, unabhängig vom Operanden FPR, über das Datenaustauschfeld übertragen. Die Länge der dafür vom Benutzer bereitzustellenden SAVE-Area kann mit dem Makro STXIT, Operand CONTXTL, dynamisch ermittelt werden.
Die tatsächlich benötigte Länge hängt vom Prozess-Modus ab. Zur Länge und zum Layout des jeweiligen Datenaustauschfeldes siehe "Layout der DSECT" auf "CONTXT - Auf Prozessdaten zugreifen".

LAYOUTF=DSECT
veranlasst die Erzeugung einer DSECT für das Datenaustauschfeld wie beim Operanden LAYOUT=FCONTXT angegeben. Die Adresse des Datenaustauschfeldes wird beim Aktionsaufruf im Operanden SAVE angegeben. Bei Angabe dieses Operanden wird als einziger weiterer Operand PREFIX ausgewertet. Die DSECT ist auf "CONTXT - Auf Prozessdaten zugreifen" abgedruckt.

PREFIX=p
Angabe eines Buchstabens, mit dem das erste Zeichen der Feldnamen und der Equates bestimmt wird. Dieser Operand wird nur berücksichtigt, wenn gleichzeitig LAYOUTF= DSECT angegeben ist.

ILC, CC, PM=
Diese Operanden sind für einen x86-PCB ohne Bedeutung. Sie können nicht in einen x86-PCB geschrieben werden.

ILC=
beschreibt die Adresse eines Feldes für den Befehlslängencode (im PCR-Format).
Feldlänge = 1 Byte. Eintrag in Bit 0-1.

adr
symbolische Adresse (Name) des Feldes für den Befehlslängencode

(r)
r = Register mit dem Adresswert von adr

CC=
beschreibt die Adresse eines Feldes für den Condition Code (im PCR-Format).
Feldlänge = 1 Byte. Eintrag in Bit 2-3.

adr
symbolische Adresse (Name) des Feldes für den Condition Code

(r)
r = Register mit dem Adresswert von adr

PM=
beschreibt die Adresse eines Feldes für die Programmaske (im PCR-Format).
Feldlänge = 1 Byte. Eintrag in Bit 4-7.

adr
symbolische Adresse (Name) des Feldes für die Programmaske

(r)
r = Register mit dem Adresswert von adr

PMODE=
Beschreibt die Adresse eines Feldes für den Prozessormodus.
Feldlänge = 1 Byte.
Der Prozessormodus kann auf x86-Servern gelesen oder geändert werden. Auf anderen BS2000-Servern kann er nur gelesen werden.

Es bedeuten:

X'00': /390-Modus (native auf /390-Servern oder unter /390-Firmware auf x86-Servern)

X'01': x86-Modus native

adr
symbolische Adresse (Name) des Feldes für den Prozessormodus

(r)
r = Register mit dem Adresswert von adr

MODE=
beschreibt die Adresse eines Feldes für den Adressierungsmodus. Feldlänge = 1 Byte.
Der Adressierungsmodus des angegebenen Prozesses kann gelesen oder geändert werden.

Es bedeuten:

X'00': 24-Bit-Adressierungsmodus
X'01': 31-Bit-Adressierungsmodus

Bei FUNCT=READ wird der Adressierungsmodus aus dem PCB in das angegebene Feld übertragen.
Bei FUNCT=WRITE wird der angegebene Adressierungsmodus in den PCB übertragen. Bei einer Änderung des Adressierungsmodus muss der Anwender auch für einen gültigen 24-Bit- oder 31-Bit-Kontext sorgen.

adr
symbolische Adresse (Name) des Feldes für den Adressierungsmodus

(r)
r = Register mit dem Adresswert von adr

ASCMOD=
Beschreibt die Adresse eines Feldes für den ASC-Modus (Address Space Control). Feldlänge = 1 Byte. Der Adressierungsmodus des angegebenen Prozesses kann gelesen oder geändert werden.

Es bedeuten:

X'00': Program-Space-Mode
X'40': Access-Register-Mode (ASC-Modus), das Programm läuft im AR-Modus, siehe auch Abschnitt „Erweiterung durch Datenräume“.

adr
symbolische Adresse (Name) des Feldes für den ASC-Modus

(r)
r = Register mit dem Adresswert von adr

PRGCODE=
beschreibt die Adresse eines Feldes für den Programm-Code. In diesem Feld wird der unterbrochene Befehl bzw. der durch NIA (Next Instruction Address) festgelegte Befehl (aus dem spezifizierten Prozess: LAST- oder MAIN-PCB) linksbündig zur Verfügung gestellt. Nur Lesezugriff erlaubt. Feldlänge = 6 Byte. Angabe nur zusammen mit dem Operanden PRGCODL.

adr
symbolische Adresse (Name) des Feldes für den Programm-Code

(r)
r = Register mit dem Adresswert von adr

PRGCODL=
beschreibt die Adresse eines Feldes für den Programm-Code. In diesem Feld wird die Länge dieses Befehls abgelegt. Feldlänge = 1 Byte.
Angabe nur zusammen mit dem Operanden PRGCODE.
Folgende Werte sind möglich:

> 0: (=2 oder =4 oder =6): Länge des ermittelten Programm-Codes.

= 0: Anzeige: Der Programm-Code konnte nicht ermittelt werden. Das Feld PRGCODE bleibt unverändert.

adr
symbolische Adresse (Name) des Feldes für die Länge des Programm-Codes.

(r)
r = Register mit dem Adresswert von adr

PARMOD=
steuert die Makroauflösung. Es wird entweder die 24-Bit- oder die 31-Bit-Schnittstelle generiert.
Wenn PARMOD nicht spezifiziert wird, erfolgt die Makroauflösung entsprechend der Angabe für den Makro GPARMOD oder der Voreinstellung für den Assembler (= 24-Bit-Schnittstelle).

24
Die 24-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 24-Bit-Adressen (Adressraum <= 16 MB).

31
Die 31-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 31-Bit-Adressen (Adressraum <= 2 GB).

MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. für einen Präfix) siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.

Layout der DSECT für LAYOUT=FCONTXT

CONTXT LAYOUTF=DSECT
1 *
1 **********************************************************************
1 *           DSECT  FOR  SAVE-FIELD  BY  LAYOUT = FCONTXT             *
1 **********************************************************************
1 *
1 SFCONTXT   DSECT
1 *
1 SAVEHSI    DS    X            HSI INDICATOR
1 SHSI390    EQU   X'01'          /390 HSI
1 SHSI390E   EQU   X'03'          /390 HSI + ESA
1 SHSIRISC   EQU   X'04'          RISC HSI  (NOT USED)
1 SHSISPAC   EQU   X'08'          SPARC HSI
1 SHSISPME   EQU   X'0A'          SPARC HSI + ESA
1 SHSISXI    EQU   X'10'          IA64 HSI
1 SHSISXE    EQU   X'12'          IA64 HSI+ ESA
1 SHSIX86    EQU   X'20'          X86 HSI
1 SHSIX86E   EQU   X'22'          X86 HSI+ ESA
1 *
1 SAVEAMOD   DS    X            ADDRESS MODE
1 SAMODE24   EQU   X'00'          24-BIT ADDRESS MODE
1 SAMODE31   EQU   X'01'          31-BIT ADDRESS MODE
1 *
1 SAVEPMOD   DS    X            PROCESSOR MODE
1 SPMODE1    EQU   X'00'          "/390" (/390 - MASCHINE)  RESP.
1 *                               "/390-EMULATION" (SPARC-MASCHINE)
1 SPMODE2    EQU   X'01'          "SPARC " (SPARC-MASCHINE)
1 *
1 SAVEILC    DS    X            INSTRUCT LENGTH CODE (PCR-FORMAT:BIT 0-1)
1 SAVECC     DS    X            CONDITION CODE (PCR-FORMAT: BIT 2-3)
1 SAVEPM     DS    X            PROGRAM MASK (PCR-FORMAT: BIT 4-7)
1 *
1 SAVEASCM   DS    X            ASC-MODE (ESA)  >> NOT USED ON RISC 
1 *
1            DS    XL1          UNUSED
1 *
1 *----------------------------------------------------------------
1 *          PROCESS MODE DEPENDENT AREA
1 *----------------------------------------------------------------
1 *
1 SAV390A    DS    0D         AREA FOR PMODE = /390 AND SPARC
1 *
1 *                           ( RISC )  &  /390   GENERAL REGISTERS
1 *
1 SAVERR0    DS    2F           R0    )       (HARD-WIRED TO ZERO ! )
1 SAVERR1    DS    2F           R1    )
1 SAVERR2    DS    2F           R2    )
1 SAVERR3    DS    2F           R3    )
1 SAVERR4    DS    2F           R4    >> RISC ONLY
1 SAVERR5    DS    2F           R5    )
1 SAVERR6    DS    2F           R6    )
1 SAVERR7    DS    2F           R7    )
1 *
1 SAVERR8    DS    2F           R8
1 SAVEGR0    EQU   SAVERR8+4      /390:  R0  EQUIVALENT
1 SAVERR9    DS    2F           R9
1 SAVEGR1    EQU   SAVERR9+4      /390:  R1  EQUIVALENT
1 SAVERR10   DS    2F           R10
1 SAVEGR2    EQU   SAVERR10+4     /390:  R2  EQUIVALENT
1 SAVERR11   DS    2F           R11
1 SAVEGR3    EQU   SAVERR11+4     /390:  R3  EQUIVALENT
1 SAVERR12   DS    2F           R12
1 SAVEGR4    EQU   SAVERR12+4     /390:  R4  EQUIVALENT
1 SAVERR13   DS    2F           R13
1 SAVEGR5    EQU   SAVERR13+4     /390:  R5  EQUIVALENT
1 SAVERR14   DS    2F           R14
1 SAVEGR6    EQU   SAVERR14+4     /390:  R6  EQUIVALENT
1 SAVERR15   DS    2F           R15
1 SAVEGR7    EQU   SAVERR15+4     /390:  R7  EQUIVALENT
1 SAVERR16   DS    2F           R16
1 SAVEGR8    EQU   SAVERR16+4     /390:  R8  EQUIVALENT
1 SAVERR17   DS    2F           R17
1 SAVEGR9    EQU   SAVERR17+4     /390:  R9  EQUIVALENT
1 SAVERR18   DS    2F           R18
1 SAVEGR10   EQU   SAVERR18+4     /390:  R10 EQUIVALENT
1 SAVERR19   DS    2F           R19
1 SAVEGR11   EQU   SAVERR19+4     /390:  R11 EQUIVALENT
1 SAVERR20   DS    2F           R20
1 SAVEGR12   EQU   SAVERR20+4     /390:  R12 EQUIVALENT
1 SAVERR21   DS    2F           R21
1 SAVEGR13   EQU   SAVERR21+4     /390:  R13 EQUIVALENT
1 SAVERR22   DS    2F           R22
1 SAVEGR14   EQU   SAVERR22+4     /390:  R14 EQUIVALENT
1 SAVERR23   DS    2F           R23
1 SAVEGR15   EQU   SAVERR23+4     /390:  R15 EQUIVALENT
1 *
1 SAVERR24   DS    2F           R24   )
1 SAVERR25   DS    2F           R25   )
1 SAVERR26   DS    2F           R26   )
1 SAVERR27   DS    2F           R27   >> RISC ONLY
1 SAVERR28   DS    2F           R28   )
1 SAVERR29   DS    2F           R29   )
1 SAVERR30   DS    2F           R30   )       (ADDRESS MODE MASK)
1 SAVERR31   DS    2F           R31   )
1 *
1 *
1 SAVENIA    DS    2F           NIA/PC (NEXT INSTRUCTION ADDRESS)
1 SVNIA390   EQU   SAVENIA+4      /390:  NIA-EQUIVALENT
1 *
1 *
1 SAVEHI     DS    2F           MULTIPLE/DIVIDE REG HI RESULT (RISC ONLY)
1 SAVELO     DS    2F           MULTIPLE/DIVIDE REG LO RESULT (RISC ONLY)
1 *
1 *
1 *                           ( RISC )  &  /390  FLOATING POINT REGISTERS 
1 *
1 SAVEF0     DS    F            F0 : F0/1   = /390: EXT FPR 8  EQUIVALENT
1 SAVEF1     DS    F            F1
1 SAVEF2     DS    F            F2 : F2/3   = /390: EXT FPR 10 EQUIVALENT
1 SAVEF3     DS    F            F3
1 SAVEF4     DS    F            F4 : F4/5   = /390: EXT FPR 12 EQUIVALENT
1 SAVEF5     DS    F            F5
1 SAVEF6     DS    F            F6 : F6/7   = /390: EXT FPR 14 EQUIVALENT
1 SAVEF7     DS    F            F7
1 SAVEF8     DS    F            F8 : F8/9   = /390: EXT FPR 1  EQUIVALENT
1 SAVEF9     DS    F            F9
1 SAVEF10    DS    F            F10: F10/11 = /390: EXT FPR 3  EQUIVALENT
1 SAVEF11    DS    F            F11
1 SAVEF12    DS    F            F12: F12/13 = /390: EXT FPR 5  EQUIVALENT
1 SAVEF13    DS    F            F13
1 SAVEF14    DS    F            F14: F14/15 = /390: EXT FPR 7  EQUIVALENT
1 SAVEF15    DS    F            F15
1 SAVEF16    DS    F            F16: F16/17 = /390: EXT FPR 9  EQUIVALENT
1 SAVEF17    DS    F            F17
1 SAVEF18    DS    F            F18: F18/19 = /390: EXT FPR 11 EQUIVALENT
1 SAVEF19    DS    F            F19
1 *
1 SAVEF20    DS    2F           F20/21  =   /390:  FPR 0  EQUIVALENT
1 SAVEF22    DS    2F           F22/23  =   /390:  FPR 2  EQUIVALENT
1 SAVEF24    DS    2F           F24/25  =   /390:  FPR 4  EQUIVALENT
1 SAVEF26    DS    2F           F26/27  =   /390:  FPR 6  EQUIVALENT
1 *
1 SAVEF28    DS    F            F28: F28/29 = /390: EXT FPR 13 EQUIVALENT
1 SAVEF29    DS    F            F29
1 SAVEF30    DS    F            F30: F30/31 = /390: EXT FPR 15 EQUIVALENT
1 SAVEF31    DS    F            F31
1 *
1 SAVEFCR    DS    F          FP-CONTROL-/STATUS REG >> NOT USED ON RISC
1 *
1 *
1 *                           /390-ESA  ACCESS REGISTERS
1 *
1 SAVEAR0    DS    F            ACR0       )
1 SAVEAR1    DS    F            ACR1       )
1 SAVEAR2    DS    F            ACR2       )
1 SAVEAR3    DS    F            ACR3       >> NOT USED ON RISC
1            DS    9F           ACR4-ACR12 )
1 SAVEAR13   DS    F            ACR13      )
1 SAVEAR14   DS    F            ACR14      )
1 SAVEAR15   DS    F            ACR15      )
1 *
1 SWOSPARC   EQU   *-SFCONTXT   LENGTH   -  WITHOUT SPARC-BLOCK
1 *
1 *----------------------------------------------------------------
1 *                          SPARC  CONTEXT  BLOCK
1 *----------------------------------------------------------------
1 *
1            DS    0D                              )
1 SSPARCB    DS    100D         SPARC-AREA: BEGIN  )
1            DS    100D                            >> /390: NOT USED
1            DS    15D                             )
1 SSPARCE    DS    0D           SPARC-AREA: END    )
1 SLSPARCB   EQU   SSPARCE-SSPARCB       LENGTH OF SPARC-BLOCK (SPARC)
1 *
1 *----------------------------------------------------------------
1 * 
1 SAVLNGTH   EQU   *-SFCONTXT   LENGTH  OF  SAVE-FIELD
1 * 
1 *---------------------------------------------------------------1
 *         IA64 CONTEXT  BLOCK: FCONTEXT
1 *---------------------------------------------------------------1
 * 
1            ORG   SSPARCB      REDEFINITION OF NATIVE AREA
1 SSXIB      DS    0D         IA64-AREA: BEGIN
1 SLIA64     EQU   SWOSPARC+4064        LENGTH OF IA64 CONTEXT
1 *
1 *
1 *
1 *---------------------------------------------------------------1
 *         X86  CONTEXT  BLOCK: FCONTEXT 
1 *---------------------------------------------------------------- 
1 *
1            ORG   SSPARCB      REDEFINITION OF NATIVE AREA 
1 SX86E      DS    0D         X86-AREA: BEGIN 
1 SLX86E     EQU   SWOSPARC+4096        LENGTH OF X86 CONTEXT
1 *
1 *----------------------------------------------------------------

Rückinformation und Fehleranzeigen

Während der Makrobearbeitung enthält Register R1 die Adresse der Operandenliste.

R15:

+---------------+
|   |   |   |   |
|b|b| | | | |a|a|
+---------------+

Über die Ausführung des Makros CONTXT wird ein gegliederter Returncode (aa=primärer RC, bb=sekundärer RC) im Register R15 übergeben.
aa=X'00': normale Ausführung
aa!=X'00': Funktion nicht ausgeführt.

X'bb'

X'aa'

Erläuterung

X'00'

X'00'

normale Ausführung. PCB wurde (im aktuellen Unterbrechungszustand) noch nicht verändert.

X'04'

X'00'

normale Ausführung. PCB wurde (im aktuellen Unterbrechungszustand) bereits mit CONTXT verändert.

X'04'

X'04'

Funktion nicht ausgeführt. Ungültige Operanden.

X'04'

X'08'

Funktion nicht ausgeführt. Makroaufruf erfolgte im Basisprozess.

X'04'

X'18'

Schreiben nicht zulässig
Folgende Ursachen können vorliegen:

  • Schreiben von PRGCODE

  • Schreiben von CC, ILC, PM in x86-PCB

  • Schreiben eines Befehlszählers, der in ein x86-Modul zeigt, bei LAYOUT=COMPATIBLE

X'04'

X'1C'

Funktion nicht ausgeführt. Bei FUNCT=WRITE stimmt der Speicherschlüssel im zu ändernden PCB nicht mit dem im aktuellen PCB überein

X'04'

X'20'

Funktion nicht ausgeführt:
kein Zugriff auf die Zugriffsregister möglich.

PCB-Zugriffe im Prozess-Modus /390

Die folgende Tabelle zeigt das Ergebnis der Zugriffe auf den PCB in Abhängigkeit von den CONTXT-Operanden, vom Ablaufmodus des unterbrochenen Prozesses und der Angabe im Operanden LAYOUT:

CONTXT
Operand

CONTXT
FUNCT=

LAYOUT=COMPATIBLE

LAYOUT=FCONTXT

/390-PCB

x86-PCB

/390-PCB

x86-PCB

SAVE

READ

(1)

(2)

(3)

(4)

WRITE

(1)

RC=X'18' (*)

(3)

(4)

OWNR/STACKR
(ohne PC/NIA)

READ

wie bisher

R0-R15

wie bisher

R0-R15

WRITE

wie bisher

R0-R15

wie bisher

R0-R15

STACKR=(PC)

READ

wie bisher

x86 native NIA

wie bisher

x86 native NIA

WRITE

wie bisher

RC=X'18' (*)

wie bisher

x86 native NIA

SAVACR/
OWNACR /

READ

wie bisher

wie bisher

wie bisher

wie bisher

STKACR /
ASCMOD

WRITE

wie bisher

wie bisher

wie bisher

wie bisher

FPR

READ

(5)

(5)

(6)

(7)

WRITE

(5)

(5)

(6)

(7)

ILC

READ

wie bisher

Wert: 0 oder 4

wie bisher

Wert: 0 oder 4

WRITE

wie bisher

RC=X'18'

wie bisher

RC=X'18'

CC

READ

wie bisher

Wert: X'00'

wie bisher

Wert: X'00'

WRITE

wie bisher

RC=X'18'

wie bisher

RC=X'18'

PM

READ

wie bisher

Wert: X'00'

wie bisher

Wert: X'00'

WRITE

wie bisher

RC=X'18'

wie bisher

RC=X'18'

MODE

READ

wie bisher

wie bisher

wie bisher

wie bisher

WRITE

wie bisher

wie bisher

wie bisher

wie bisher

PMODE

READ

X'00'

X'01'

X'00'

X'01'

WRITE

(8)

(8)

(8)

(8)

Bedeutung der in der Tabelle verwendeten Abkürzungen:

R0 - R15: allgemeine Register

RC: Returncode

Bedeutung der in der Tabelle verwendeten Anmerkungen:

(*)

Der Befehlszähler (PC / NIA = Next Instruction Address) darf nur dann geschrieben werden, wenn er in ein /390-Modul zeigt (mit LAYOUT= COMPATIBLE) oder wenn LAYOUT=FCONTXT angegeben wurde.

(1)

Das Datenaustauschfeld hat den gleichen Aufbau wie bisher.

(2)

Das Datenaustauschfeld hat den gleichen Aufbau wie bisher.
Es werden nur die zu /390-Registern äquivalenten Register und NIA gelesen oder geschrieben.

(3)

Das Datenaustauschfeld hat den neuen Aufbau. Es werden nur die zu den /390-Registern äquivalenten Register, die zu den /390-Gleitpunktregistern äquivalenten x86-Gleitpunktregister, NIA und die weiteren Prozessstati gelesen oder geschrieben (soweit überschreibbar). Der Austausch erfolgt über die entsprechenden Felder SAVExxxx

(4)

Zusätzlich zu (3) wird der vollständige x86-Kontext gelesen oder geschrieben (über den Austauschbereich SSPARCB in der Länge SLSPARCB). Das Ändern einzelner Daten im Kontext ist nur über die Felder SAVExxxx möglich.

(5)

Die Datenübertragung findet zwischen den /390-Gleitpunktregistern des angegebenen PCB und denen des Contingency-PCB statt.

(6)

Nur über den Operanden SAVE, siehe (3)

(7)

Nur über den Operanden SAVE, siehe (4)

(8)

Das Schreiben des PMODE wird erlaubt, um z.B. den unterbrochenen PCB auf einer zentralen Beendigungsroutine wieder aufzusetzen, deren PMODE nicht der unterbrochene PMODE ist. Sinnvoll ist das Schreiben des PMODE nur, wenn gleichzeitig NIA verändert wird.