DataMuseum.dk

Presents historical artifacts from the history of:

Bogika Butler

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Bogika Butler

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦d50a62df8⟧ TextFile

    Length: 32640 (0x7f80)
    Types: TextFile
    Names: »COMDEF.S«, »COMDEF.SA«

Derivation

└─⟦08e5746f0⟧ Bits:30009789/_.ft.Ibm2.50007359.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »COMDEF.S« 
└─⟦0b578df25⟧ Bits:30009789/_.ft.Ibm2.50006602.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »COMDEF.SA« 
└─⟦798d317aa⟧ Bits:30009789/_.ft.Ibm2.50006626.imd Mogens Pelles Zilog 80,000 / EOS projekt
└─⟦798d317aa⟧ Bits:30009789/_.ft.Ibm2.50006628.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »COMDEF.SA« 
└─⟦8592db80f⟧ Bits:30009789/_.ft.Ibm2.50007350.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »COMDEF.S« 

TextFile

 
***********************************************************************
*                       Copyright 1984 by                             *
*                       NCR Corporation                               *
*                       Dayton, Ohio  U.S.A.                          *
*                       All Rights Reserved                           *
***********************************************************************
*                       EOS Software produced by:                     *
*                       NCR Systems Engineering - Copenhagen          *
*                       Copenhagen                                    *
*                       DENMARK                                       *
***********************************************************************
 
           NOFORMAT
*
* THE FOLLOWING TEXT DEFINES CONSTANTS, OFFSETS AND MACROES.
* NO LINKAGE MODULES ARE PRODUCED IF THE TEXT IS ASSEMBLED ALONE.
* ---------------------------------------------------------------------
* CHAIN AND MEMBER
 
           OFFSET 0
           DS.L   1               NEXT ELEMENT, ABS ADDR, ALWAYS MEANINGFUL
           DS.L   1               PREVIOUS ELEMENT, ABS ADDR, ALWAYS MEANINGFUL
 
CH_SIZ     DS.W   0               SIZE OF CHAIN ELEMENT
CHAIN      EQU  CH_SIZ/2          NUMBER OF WORDS IN CHAIN
CH_HOLD    DS.L   1               ADDR OF STRUCTURE HOLDING CHAIN HEAD
MEMBER     EQU  CHAIN+2           NUMBER OF WORDS IN MEMBER ELEMENT
*
*----------------------------------------------------------------------
* SIZE TYPE
           OFFSET 0
           DS.L   1                   NO. OF BYTES IN USER PART
SZ_K       DS.W   1                   NO. OF BYTES IN KERNEL PART
 
SZ_SIZ     DS.W   0                   SIZE OF SIZE TYPE
SZ_TYP     EQU    3                   NUMBER OF WORDS IN SIZE TYPE
    PAGE
*----------------------------------------------------------------------
* POINTER AND FORMAL POINTER
 
           OFFSET 0
           DS.W   MEMBER          OWNSET AND MANSET: POINTER -> OBJ OR ENV
*                                 REFOBJ AND REFENV: OBJ OR ENV -> POINTER
*                                 NIL: EMPTY CHAIN
PT_REF     EQU  CH_HOLD           OWNSET, MANSET, NIL: NOT USED
*                                 REFOBJ AND REFENV: ADDR OF OBJ OR ENV
PT_KIN     DS.B   1               POINTER KIND: SEE BELOW
PT_INF     DS.B   1               POINTER INF: SEE BELOW (PT_KIN+PT_INF=WORD)
PT_SIZ     DS.W   0               SIZE OF NON_FORMAL POINTER
 
* PART PRESENT ONLY FOR FORMAL POINTERS:
FP_ACT     DS.W   MEMBER          ACTUAL: ENV OR CTX -> FORMAL POINTER
FP_STR     EQU FP_ACT+CH_HOLD         ADDR OF ENV OR CTX STRUCTURE, 0 IF DUMMY
FP_OFF     DS.W   1                   ACTUAL POINTER OFFSET WITHIN ENV OR CTX
FP_SIZ     DS.W   0               SIZE OF FORMAL POINTER
FP_POW2    EQU   32               POWER OF TWO THAT IS GREATER THAN FP_SIZ
 IFGE FP_SIZ-FP_POW2              FP_POW MUST BE GREATER THEN FP_SIZ
  FAIL FP_SIZ
 ENDC
PT_MASK    EQU 1<<15/FP_POW2-1    MASK FOR POINTER INDEX, <= 1<<15/FP_SIZ
 
* PT_KIN IS ENCODED AS FOLLOWS:
 
PT_NIL     EQU 0    NIL POINTER   (OFTEN SET WITH CLR-INSTRUCTION)
PT_OBJ     EQU 1    REF OBJ
PT_ENV     EQU 2    REF ENV       (<= PT_ENV MEANS SIMPLE REF)
PT_OWN     EQU 3    OWN SET
PT_MAN     EQU 4    MAN SET
PT_INT     EQU 5    INTERRUPT POINTER, ALWAYS LOCAL (REFERS TO A CODE SEGMENT)
PT_MMU     EQU 6    MMU DESCRIPTION REF TO OBJECT (NOT REAL POINTER)
PT_SEG     EQU 7    SEGMENT DESCR REF TO OBJECT (NOT REAL POINTER)
 
PT_VOI     EQU 6    VOID ARGUMENT     (USED FOR ARGUMENT CHECK)
 
* PT_INF IS ENCODED AS FOLLOWS:
* FOR PT_NIL,...PT_MAN:  BITS IN PT_INF USED AS FOLLOWS:
 
PT_LSC     EQU 0    BIT=1:  LOCAL SCOPE POINTER
PT_TSC     EQU 1    BIT=1:  TEMP SCOPE POINTER
PT_FSC     EQU 2    BIT=1:  FORMAL SCOPE POINTER  (REDUNDANT, BUT CONVENIENT)
 
PT_CC      EQU 3    BIT=1:  SIMPLE POINTER WITH CALL CAPABILITY (0 IF NIL)
PT_CON     EQU 4    BIT=1:  MANAGER ENFORCES COPY CONTROL (0 IF NIL)
PT_IO      EQU 5    BIT=1:  SIMPLE POINTER WITH IO-LOCK   (0 IF NIL)
PT_RES     EQU 6    BIT=1:  SIMPLE POINTER WITH RESIDENT LOCK (0 IF NIL)
PT_RET     EQU 7    BIT=1:  FORMAL RETURN POINTER (ALSO =1 FOR DUMMY ACTUAL)
 
* PT_INF FOR INTERRUPT POINTER:
* ALL BITS REPRESENT INTERRUPT VECTOR NO.
* (POINTER ALWAYS LOCAL IN RESIDENT ENVELOPE).
*
    PAGE
*----------------------------------------------------------------------
* OBJECT, COMMON PART
 
           OFFSET 0
           DS.W   MEMBER OWNER:  OWNSET -> OBJECT
OB_OWN     EQU CH_HOLD           ADDR OF OWNER ENV OR CTX
OB_OFF     DS.W   1              OWNER POINTER OFFSET IN ENV OR CTX
*                                    (ZERO FOR INITIAL OWNER POINTER)
OB_REF     DS.W   CHAIN  REFERRED BY: OBJECT -> REFOBJ, SUBSEGM,MMU DESCR
OB_RES     DS.W   1      RESIDENT COUNT: NON SEGMENT OBJECT = #RES_PT TO OBJ.
*                        NON ABORTED SEGMENT OBJECTS = SUM OF OB_RES IN SUB_
*                        SEGM_OBJECTS + #RES_PT + #INT_PT + #MMU_PT IN RES_CTX
OB_SIZK    DS.W   1      SIZE OF KERNEL PART  (USED ALSO FOR EMB.OBJECT)
OB_KIN     DS.B   1      OBJECT KIND:  SEE BELOW
OB_STA     DS.B   1      OBJECT STATE:  SEE BELOW  (OB_KIN+OB_STA=WORD)
OB_SPA     DS.L   1      SPACE DESCR:  TOP OBJECT,  ABS ADDR
*                                 DISAGREES WITH SIZE OF OBJECT DURING
*                                 RELOCATION (NOT USED FOR EMBEDDED OBJECTS)
OB_SIZ     DS.W   0      SIZE OF COMMON PART
 
*------------------------------------------------------------------------
* SPACE DESCRIPTION, PRESENT ONLY FOR NON_EMBEDDED OBJECTS.
*          ADDRESSES RELATIVE TO TOP OF KERNEL PART
 
SP_SIZ     EQU   CH_SIZ+SZ_SIZ+4+4+4
           OFFSET -SP_SIZ
SP_ENV     DS.W   CHAIN    ENVELOPE STACK:  OBJECT -> ENV
SP_FREU    DS.W   SZ_TYP   FREE BYTES:  USER PART
SP_FREK    EQU SP_FREU+SZ_K             KERNEL PART
SP_FIRU    DS.L   1        FIRST FREE:  USER PART
SP_FIRK    DS.L   1                     KERNEL PART
SP_SIZU    DS.L   1        TOTAL SIZE:  USER PART
 
* OB_KIN IS ENCODED AS FOLLOWS:
 
OB_GEOB    EQU 0     GENERAL OBJECT (INCL. GENERAL SCHEDULER OBJECTS)
OB_GAOB    EQU 1     GATE OBJECT
OB_COOB    EQU 2     CONDITION OBJECT
OB_OPOB    EQU 3     OPEN OBJECT
OB_DOOB    EQU 4     DORMANT OBJECT
OB_PROB    EQU 5     PROCESS OBJECT
OB_EXOB    EQU 6     EXTENSION OBJECT (KIND NOT VISIBLE TO USER)
OB_SEOB    EQU 7     SEGMENT OBJECT (EMB OR NON-EMB,SUBSEGM OR ROOT SEGM)
OB_ALLO    EQU 8     ALLOCATE
OB_SCHE    EQU 9     INTERNAL SCHEDULER
 
* BITS IN OB_STA ARE USED AS FOLLOWS:
 
OB_REEN    EQU 0     REENTRANT OBJECT  (ONLY GENERAL OBJECTS)
OB_EMB     EQU 1     EMBEDDED OBJECT   (ONLY SEGMENT OBJECTS)
OB_SUB     EQU 2     SUBSEGMENT OBJECT
OB_OCC     EQU 3     OWNER HAS CALL CAPABILITY  (ONLY GENERAL OBJECTS)
OB_READ    EQU 4     READ ALLOWED  (ONLY SEGMENT OBJECTS)
OB_WRIT    EQU OB_READ+1  WRITE ALLOWED (ONLY SEGMENT OBJECTS)
OB_EXEC    EQU OB_READ+2  EXECUTE ALLOWED  (ONLY SEGMENT OBJECTS)
OB_ABOR    EQU 7     ABORTED OBJECT  (GENERAL AND SEGM OBJECTS)
OB_SEGM    EQU 1<<OB_READ+1<<OB_WRIT+1<<OB_EXEC
OB_SUBS    EQU 1<<OB_SUB+OB_SEGM
    PAGE
*-----------------------------------------------------------------------
* GATE OBJECT
 
           OFFSET    OB_SIZ
GA_SCH     DS.B      PT_SIZ   SCHEDULER: OBJ_REF TO SCHEDULER OBJ, OR NIL
GA_SET     DS.W      CHAIN    MANSET:    GATE -> COND
* LOK/RELOK/SPLOK ARE USED AS AN ARRAY OF CHAINS.
GA_LOK     DS.W      CHAIN    LOCKING:   GATE -> PROCESSES WAITING ON
*                                        GATE.LOCK
GA_RELOK   DS.W      CHAIN    RELOCKING: GATE -> PROCESSES RELOCKING AFTER
*                                        BEING SIGNALLED
GA_SPLOK   DS.W      CHAIN    SPEED RELOCKING:  GATE -> PROCESSES RELOCKING
*                                        AFTER SPEED_UP OR TIME_OUT
GA_STA     DS.B      1        STATE:     OPEN = 0, LOCKED = 1<<7
*                                        ONLY USED FOR NORMAL GATES.
GA_LEV     DS.B      1        LEVEL:     NORMAL GATE = 0, DEVICE GATE 1..7
*                             STATE+LEVEL USED AS ONE WORD.
 
GA_SIZ     DS.W      0        SIZE OF COMMON OBJECT PLUS GATE
 
*-----------------------------------------------------------------------
* CONDITION OBJECT
 
           OFFSET    OB_SIZ
CO_MAN     DS.W      MEMBER   MANAGER: MANSET IN GATE -> CONDITION
CO_GA      EQU CO_MAN+CH_HOLD          ADDR OF MANAGING GATE OBJECT
*                                      ZERO WHEN COND IS ABORTED.
CO_WAIT    DS.W      CHAIN    WAITING: CONDITION -> PROCESSES WAITING ON
*                                      COND.WAIT
 
CO_SIZ     DS.W      0        SIZE OF COMMON OBJECT PLUS CONDITION
    PAGE
*-----------------------------------------------------------------------
* EXTENSION AND PROCESS OBJECT
 
           OFFSET    OB_SIZ
EX_CTX     DS.W      CHAIN    CONTEXTS:  EXTENSION OBJECT -> CTX
EX_EXT     DS.W      MEMBER   EXTENSION: PROCESS OBJECT -> EXT
EX_PR      EQU EX_EXT+CH_HOLD            ADDRESS OF PROCESS OBJECT
 
EX_SIZ     DS.W      0        SIZE OF COMMON OBJECT PLUS EXTENSION
 
* PROCESS OBJECT
 
PR_MAIN    DS.W      CHAIN    MAIN QUEUE: GATE LOCKING, GATE RELOCKING,
*                                        GATE SPEED LOCK,
*                                        TIMER, OR DRIVING -> PROCESS.
PR_AUX     DS.W      MEMBER   AUX QUEUE: CONDITION, RUNNING,
*                                        SE_WAIT, PR_TERM, MM_QUEUE -> PROCESS.
PR_CON     EQU PR_AUX+CH_HOLD     ADDR OF CONDITION OBJECT OR UNDEF.
PR_TERM    DS.W      CHAIN    PROC WAITING FOR TERMINATE: PROC -> PROC
PR_D0.A3   DS.L      12       REGISTER SAVE AREA: USED BETWEN TIME SLICES.
*                                        ALLOC SAVES PART OF STACK, NOT REGS.
PR_TIMO    DS.L      2        TIMEOUT: 64-BIT POINT IN TIME FOR RESCHEDULE
PR_CPU     DS.L      2        CPU_TIME: NO OF USEC USED BY THEPROCESS (64-BITS
PR_PRI     DS.B      1        PRIORITY: USED FOR INTRPT. LEVEL AND LOCK CONTRL.
PR_STA     DS.B      1        STATE: RUN=0, 2=WAIT, 4=D_WAIT, 6=LOCK, 8=SIGNLD.
*                                        USED WHEN A 'PROCESS' IS SPEEDED UP.
PR_SYN     DS.W      1        SYNC_RESULT: RESULT OF A SYNC_FUNC. (E.G. WAIT)
PR_SIZ     DS.W      0        SIZE OF COMMON OBJECT PLUS PROCESS OBJECT
    PAGE
*-----------------------------------------------------------------------
* SEGMENT AND SUBSEGMENT OBJECT
 
           OFFSET    OB_SIZ
SE_IO      DS.W      1        IO_COUNT, #IO_REFS TO SEGMENT AND TO SUB SEGMENTS
SE_FIR     DS.L      1        FIRST PHYSICAL ADDR OF USER SEGMENT (EVEN)   *)
SE_LEN     DS.L      1        LENGTH OF USER SEGMENT (EVEN)                *)
SE_WAIT    DS.W      CHAIN    IO_COUNT_WAIT: SEGM -> PROC WAITING FOR
*                                        IO_COUNT TO BECOME ZERO.
SE_SIZ     DS.W      0        SIZE OF SEGMENT DESCRIPTOR PLUS COMMON OBJECT
 
* PART PRESENT ONLY FOR SUBSEGMENT DESCRIPTOR
 
SU_P       DS.B      PT_SIZ   POINTER:   POINTS TO BASE SEGMENT OR SUBSEGMENT
SU_REF     EQU       SU_P+PT_REF         ADDR OF BASE SEGMENT OR SUBSEGMENT
*                                        (0 IF BASE SEGMENT REMOVED)
SU_KIN     EQU       SU_P+PT_KIN         KIND = SUBSEGMENT
SU_INF     EQU       SU_P+PT_INF         INF, NOT USED
 
SU_SIZ     DS.W      0        SIZE OF SUBSEGM DESCRIPTOR PLUS COMMON OBJECT
 
*) THESE VALUES ARE UNDEFINED WHEN THE SEGMENT IS ABORTED
 
*-----------------------------------------------------------------------
* MMU DESCRIPTOR  (ONLY USED AS PART OF CTX)
 
           OFFSET    0
           DS.B      PT_SIZ   POINTER:   POINTS TO SEGMENT OR SUBSEGMENT MAPPED
MM_REF     EQU       PT_REF              ADDR OF SEGMENT OR SUBSEGM OBJECT
*                                        0 IF UNMAPPED OR BASE SEGMENT REMOVED
MM_KIN     EQU       PT_KIN              KIND = MMU DESCRIPTOR
MM_REG     DS.L      2        MMU REGISTER CONTENTS:  *)
*                             +0         FIRST LOGICAL ADDRESS//256
*                             +2         LAST LOGICAL ADDRESS//256
*                             +4         OFFSET//256  (LOGICAL+OFFSET=PHYSICAL)
*                             +6         BIT0=1: ENABLE, BIT1=1: READ ONLY
 
MM_SIZ     DS.W      0        SIZE OF MMU DESCRIPTOR
 
*) ALSO USED TO SAVE D6/D7 (=RESULT) DURING DELETE CONTEXT (DEL_CTX IN KNELOP)
 
    PAGE
*-----------------------------------------------------------------------
* GENERAL OBJECT
 
           OFFSET    OB_SIZ
GE_EX      DS.W      CHAIN   EXECUTED BY: GENERAL OBJECT -> CTX
GE_CON     DS.W      1       CONTROL PROCEDURE <= 0
GE_TEMP    DS.W      1       NO.OF TEMP POINTERS IN CONTEXTS (INCL. T(0))
GE_TEMD    DS.L      1       NO.OF BYTES IN TEMP STACK, > 0, <= MAX-AR_MAXVAL
GE_STK     DS.W      SZ_TYP  SIZE OF REQUIRED FREE CALL STACK
GE_STKM    DS.L      1       LOGICAL ADDRESS FOR MAPPING TEMP STACK:
FL_TEMPD   EQU $200000           $200000 FOR NORMAL OBJECTS
GE_ENT     DS.L      1       LOGICAL ADDRESS FOR ENTRY
 
GE_SIZ     DS.W      0       SIZE OF COMMON OBJECT PLUS GENERAL OBJECT
 
*-----------------------------------------------------------------------
* STACK ELEMENT:  COMMON PART OF ENVELOPES AND CONTEXTS.
 
*          EMBEDDED SEGMENTS AND SUBSEGMENTS ALLOCATED HERE.
 
           OFFSET    0
           DS.W      MEMBER  VARIOUS USAGE: HEAD -> STACK ELEMENT
ST_REF     EQU CH_HOLD           ADDR OF ENTITY HOLDING HEAD
ST_WORD    DS.W      1           VARIOUS USAGE
ST_STK     DS.W      MEMBER  STACK: HEAD -> STACK ELEMENT
ST_HOLD    EQU ST_STK+CH_HOLD    ADDR OF OBJECT HOLDING STACK ELEM
ST_ACT     DS.W      CHAIN   ACTUAL: STACK ELEMENT -> FORMAL POINTER
ST_TOP     DS.W      1       TOP POINTERS, RELATIVE TO STACK ELEMENT
ST_FIR     DS.W      1       FIRST EMBEDDED, RELATIVE TO STACK ELEMENT
ST_RES     DS.W      1       RESIDENT COUNT: <>0 WHEN STACK ELEMENT IS RESIDENT
ST_IO      DS.W      1       IO COUNT: #SIMPLE POINTERS WITH IO_CAP IN ELEMENT
 
ST_SIZ     DS.W      0       SIZE OF COMMON PART
 
*          POINTERS ALLOCATED HERE
 
* NOTE: SIZE OF ENVELOPE/CONTEXT INCLUDING POINTERS AND EMBEDDED
* STRUCTURES IS ALWAYS:
*                    TOP POINTERS - FIRST EMBEDDED
 
    PAGE
*-----------------------------------------------------------------------
* ENVELOPE
 
*          DS.W      MEMBER  MANAGER: MANSET -> ENVELOPE
EN_MAN     EQU       ST_REF      ADDR OF MANAGER ENVELOPE (0 IF DUMMY MAN)
*                                (ALSO TERM_PROC = 0 FOR DUMMY MANAGER)
EN_OFF     EQU       ST_WORD     MANSET POINTER OFFSET IN MANAGER ENVELOPE
EN_STK     EQU       ST_STK  ENVELOPE STACK: OBJECT -> ENVELOPE
EN_OBJ     EQU       ST_HOLD     ADDR OF OBJECT HOLDING ENV
EN_ACT     EQU       ST_ACT  ACTUAL: ENV -> FORMAL POINTERS
EN_TOPL    EQU       ST_TOP  TOP LOCAL POINTERS, RELATIVE TO ENVELOPE
EN_FIR     EQU       ST_FIR  FIRST EMBEDDED, RELATIVE TO ENVELOPE
EN_RES     EQU       ST_RES  RESIDENT COUNT= #RES_PT TO ENV + #DRIV_PT IN ENV +
*                                #RES_CTX IN THE OBJ HAVING ENV AS PRIMARY ENV
EN_IO      EQU       ST_IO   IO COUNT: #SIMPLE POINTERS WITH IO_CAP IN ENV.
 
           OFFSET    ST_SIZ
EN_REF     DS.W      CHAIN   REFERRED BY: ENV -> REFENV POINTERS
EN_TERM    DS.W      1       TERMINATION PROCEDURE: < 0: NORMAL
*                                = 0: DUMMY OR DUMMY MANAGER
*                                = 1: TERM PROC CALLED.
EN_TERMU   DS.W      SZ_TYP  TERMINATION REQUIREMENT: FREE STACK NEEDED TO ENTER
EN_TERMK   EQU EN_TERMU+SZ_K     TERM PROCEDURE, USE CALL STACK OR DEALLOC
*                                STACK+DELETE LOCALS AND OLDER ENVELOPES.
EN_FIXU    DS.W      SZ_TYP  FIXED TERM REQUIREMENT: FREE STACK NEEDED TO ENTER
EN_FIXK    EQU EN_FIXU+SZ_K      TERM PROCEDURE AND USE DEALLOC STACK.
EN_MAXU    DS.W      SZ_TYP  MAX STACK: FREE STACK SUFFICIENT TO DELETE ALL
EN_MAXK    EQU EN_MAXU+SZ_K      LOCALS IN ENVELOPE.
EN_COU     DS.W      1       NUMBER OF "LOCALS" WITH TERM REQ = MAX FOR BOTH
*                            COMPONENTS.  "LOCALS" ARE LOCALLY OWNED OBJECTS
*                            AND OLDER ENVELOPES.  EN_COU MAY BE ZERO IN
*                            CASE MAX COMPONENTS ARE FROM DIFFERENT "LOCALS".
 
EN_SIZ     DS.W      0       SIZE OF ENVELOPE, EXCLUDING LOCAL POINTERS
*          LOCAL POINTERS ALLOCATED HERE.
 
    PAGE
*-----------------------------------------------------------------------
* CONTEXT
 
*          DS.W     MEMBER    EXECUTES: GEN. OBJ. -> CTX  (SELF-REF IF ABORTED)
CT_OBJ     EQU      ST_REF        ADDR OF GENERAL OBJECT  (0 IF ABORTED)
CT_MODE    EQU      ST_WORD   EXC_MODE << 2 + PROPAGATION MODE:
*                             EXC_MODE: 0=NO_EXC,1=UNDEF_EXC,3=UNDEF/REJECT_EXC
*                             PROPAGATION MODE: 0=STOP, 1=REJECT, 3=SAME
CT_SPE     EQU      ST_WORD+1 SPEEDEXC << 7 + SPEED_UP;SPEEDEXC=1 ==> EXCEPTION
*                             SPEED_UP: 0=NORMAL, 1=REJECT, 3=UNDEF
CT_STK     EQU      ST_STK    CONTEXT STACK: PROCESS OR EXTENSION OBJ -> CTX
CT_HOLD    EQU      ST_HOLD       ADDR OF PROCESS OR EXTENSION OBJ
CT_ACT     EQU      ST_ACT    ACTUAL: CTX -> FORMAL POINTERS
CT_TOPF    EQU      ST_TOP    TOP FORMAL POINTERS, RELATIVE TO CTX
CT_FIR     EQU      ST_FIR    FIRST EMBEDDED, RELATIVE TO CTX
CT_RES     EQU      ST_RES    RESIDENT COUNT= 0 FOR NORMAL, 1 FOR RESIDENT CTX.
CT_IO      EQU      ST_IO     IO COUNT: #SIMPLE POINTERS WITH IO_CAP IN CTX.
 
           OFFSET   ST_SIZ
CT_TOPT    DS.W     1         TOP TEMP POINTERS, RELATIVE TO CONTEXT
*                                 = FIRST FORMAL POINTER, RELATIVE TO CTX
*                             CT_TOPT MUST BE PLACED ON OFFSET ST_SIZ.
CT_STKU    DS.W     SZ_TYP    SIZE OF FREE CALL STACK IN CONTEXT
CT_STKK    EQU CT_STKU+SZ_K       USED WHEN TEMP/FORMAL IN OLD CTX GROWS.
 
* THE FOUR DESCRIPTORS ARE USED AS AN ARRAY (0..3) OF MMU_DESC
CT_MM0     DS.B     MM_SIZ    MMU DESCRIPTOR 0  USED AS SAVE AREA IN DEL_CTX
CT_MM1     DS.B     MM_SIZ    MMU DESCRIPTOR 1
CT_MM2     DS.B     MM_SIZ    MMU DESCRIPTOR 2
CT_MM3     DS.B     MM_SIZ    MMU DESCRIPTOR 3
 
CT_CON     DS.L     1         CONTINUE ADDRESS IN KERNEL WHEN USER RETURNS
CT_USP     DS.L     1         SAVED USER STACK POINTER
CT_SIZW    EQU      12        SIZE OF WORK AREA TO HOLD SUPV STACK (#LONGS)
           DS.L     CT_SIZW   SUPERVISOR STACK: SAVED IN OLD CONTEXT WHEN NEW
CT_WRK     DS.W     0             CONTEXT IS CREATED
CT_COUNT   DS.W     1         - #SUPERVISOR STACK WORDS SAVED IN ADDITION
*                                 TO "A4,A5,A6,SR,PC" WHICH ARE ALWAYS SAVED.
*                                 KERNEL RETURN IS ALSO ALWAYS SAVED(COUNT=-2)
*                                 USED BY PROCEDURES "SAVE_STK" AND "RSTO_STK"
*                             VAL DATA DESCRIPTION:
CT_VAL     DS.W     1         POINTER OFFSET IN PREV CTX FOR VAL BASE SEGM
CT_FREL    DS.L     1         FIRST REL ADDR OF VAL IN VAL BASE SEGM
CT_TREL    DS.L     1         TOP REL ADDR OF VAL IN VAL BASE SEGM
 
CT_SIZ     DS.W     0         SIZE OF CONTEXT, EXCLUDING POINTERS
 
* TEMP POINTERS ALLOCATED HERE.  T(0) IS AUX POINTER FOR DEALLOC
* FORMAL POINTERS ALLOCATED HERE.
 
    PAGE
*-----------------------------------------------------------------------
* RESULT ARGUMENT, ERROR CODES.
*  RESULT:  MAIN   = D7, BIT  7:0
*           FAMILY = D7, BIT 15:8
*           ORGNO  = D7, BIT 31:16   ALWAYS ZERO FOR KERNEL
*           ARGNO  = D6, BIT  7:0    ARGUMENT NUMBER WHERE ERROR FOUND
*           AUXCAU = D6, BIT 15:8
*           ORGSYS = D6, BIT 31:8    ALWAYS ZERO FOR KERNEL
 
EC_OK      EQU 0      MAIN: OK    (SET BY CLR D7)
 
ECSADDR    EQU $01    CAUSE: ADDRESS ILLEGAL
ECRADDR    EQU $FF
ECSFUNC    EQU $02           FUNCTION ILLEGAL    (ENTRY ILLEGAL)
ECRFUNC    EQU $FE
ECSSCOPE   EQU $03           POINTER SCOPE ILLEGAL
ECRSCOPE   EQU $FD
ECSVALUE   EQU $04           POINTER VALUE ILLEGAL
ECRVALUE   EQU $FC
ECSRETURN  EQU $05           RETURN POINTER ILLEGAL
ECRRETURN  EQU $FB
ECSSTATE   EQU $06           OBJECT STATE ILLEGAL
ECRSTATE   EQU $FA
ECSDATA    EQU $07           DATA VALUE ILLEGAL
ECRDATA    EQU $F9
ECSCAP     EQU $08           CAPABILITY VIOLATION
ECRCAP     EQU $F8
ECSCONC    EQU $09           CONCURRENCY VIOLATION
ECRCONC    EQU $F7
ECSSELF    EQU $0A           SELF DELETION
ECRSELF    EQU $F6
ECSOBJSP   EQU $0B           OBJECT SPACE LIMITED
ECROBJSP   EQU $F5
ECSPROSP   EQU $0C           PROCESS SPACE LIMITED
ECRPROSP   EQU $F4
ECSENVLIM  EQU $0D           OWNER ENVELOPE LIMIT
ECRENVLIM  EQU $F3
ECSCONLIM  EQU $0E           OWNER CONTEXT LIMIT
ECRCONLIM  EQU $F2
ECSSPEED   EQU $0F           SPEED UP
ECRSPEED   EQU $F1
ECSTIME    EQU $10           TIME OUT
ECRTIME    EQU $F0
ECSDUMMY   EQU $11           DUMMYFIED
ECRDUMMY   EQU $EF
ECSG_UP    EQU $12           GIVE UP
ECRG_UP    EQU $EE
ECSARGMIS  EQU $13           ARGUMENTS MISSING
ECRARGMIS  EQU $ED
ECSVALMIS  EQU $14           VALUE PARAMS MISSING
ECRVALMIS  EQU $EC
ECSNOT_IN  EQU $15           NOT_IN_SET
ECRNOT_IN  EQU $EB
ECSNO_RES  EQU $16           NO RESOURCES
ECRNO_RES  EQU $EA
 
    PAGE
*-----------------------------------------------------------------------
* ARGUMENT LIST:     LOWARG: LAST ARGUMENT  (LOW ADDRESS)
*                            ...
*                            FIRST ARGUMENT (HIGH ADDRESS)
 
* SCOPE_AND_INDEX1  (16 BITS)
*                    BIT 15:14: SCOPE    = 00: FORMAL
*                                          01: TEMP
*                                       10,11: LOCAL
*                    BIT 13:0 : INDEX1
 
* DUMMY_AND_INDEX2  (16 BITS)
*                    BIT 15:14: DUMMY  (IGNORED)
*                    BIT 13:0 : INDEX2
 
* POINTER ARGUMENT  (4 BYTES)
*         DIRECT ADDRESS:
*                    +0: ZERO    (16 BITS)
*                    +2: SCOPE_AND_INDEX1
*         INDIRECT ADDRESS:
*                    +0: SCOPE_AND_INDEX1
*                    +2: DUMMY_AND_INDEX2
*         VOID POINTER ARGUMENT
*                    +0: IGNORED (16 BITS)
*                    +2: ZERO    (16 BITS)
 
* SUBSEGMENT ARGUMENT/ACTUAL (14 BYTES)
*                    +0: LENGTH  (32 BITS INTEGER)
*                    +4: FIRST   (32 BITS OFFSET)
*                    +8: USE     (16 BITS)  BIT 0=1 READ ALLOWED
*                                           BIT 1=1 WRITE ALLOWED
*                                           BIT 2=1 EXECUTE ALLOWED
*                    +10: POINTER ARGUMENT  (NOT VOID)
 
* POINTER ACTUAL    (14 BYTES)
*                    +0: ZERO    (32 BITS)
*                    +4: DUMMY   (32 BITS IGNORED)
*                    +8: IN/OUT  (16 BITS)  BIT 0=1 CALL POINTER
*                                           BIT 1=1 RETURN POINTER
*                    +10: POINTER ARGUMENT  (NOT VOID)
 
* VOID ACTUAL/VOID VALUE DATA    (14 BYTES)
*                    +0: DUMMY   (10 BYTES IGNORED)
*                    +10: VOID POINTER ARGUMENT
 
    PAGE
* SIZE ARGUMENT     (6 BYTES)
*                    +0: USER BYTES    (32 BITS NON NEGATIVE INTEGER)
*                    +4: KERNEL BYTES  (16 BITS NON NEGATIVE INTEGER)
*         VOID SIZE:
*                    +0: <0            (32 BITS)
*                    +4: <0            (16 BITS)
 
* CAPABILITY ARGUMENT  (2 BYTES)
*                    +0: CAPABILITY    ( 8 BITS)  ZERO=NO_CALL_CAP
*                    +1: IGNORED       ( 8 BITS)
 
* INTEGER ARGUMENT  (4 BYTES)    (ALSO USED FOR PROPAGATION MODE)
*                    +0: INTEGER VALUE (32 BITS)
 
AR_SIZ    EQU   14   SIZE OF ONE ACTUAL/SUBSEGMENT ARGUMENT
AR_PTSIZ  EQU    4   SIZE OF ONE POINTER ARGUMENT
AR_MAXVAL EQU 2048   MAX LENGTH OF VALUE SUB SEGM
 
*-----------------------------------------------------------------------
* VALUE PARAMETER SUBSEGMENT:
*                 SEGM FIRST ADDR: ITEM VALUEN   (ITEM LENGTHN BYTES)
*                                  FILLERN       (ITEM LENGTHN MOD 2 BYTES)
*                                  ITEM LENGTHN  (WORD)
*                                  ---
*                                  ITEM VALUE2   (ITEM LENGTH2 BYTES)
*                                  FILLER2       (ITEM LENGTH2 MOD 2 BYTES)
*                                  ITEM LENGTH2  (WORD)
*                                  ITEM VALUE1   (ITEM LENGTH1 BYTES)
*                                  FILLER1       (ITEM LENGTH1 MOD 2 BYTES)
*                 SEGM LAST  ADDR: ITEM LENGTH1  (WORD)
 
    PAGE
*-----------------------------------------------------------------------
* INS_ELEM   MACRO
 
* CALL:    INS_ELEM  OLD, NEW, PREV, OLD/PREV
*          OLD:   A-REGISTER, ADDRESS OF CHAIN ELEMENT (OFTEN CHAIN HEAD)
*          NEW:   A-REGISTER, ADDRESS OF NEW ELEMENT
*          PREV:  A-REGISTER, BECOMES ELEMENT PRECEDING "OLD"
*          OLD/PREV:  TO REMIND YOU THAT OLD REGISTER# < PREV REGISTER#
* INSERT THE NEW ELEMENT IN THE CHAIN BETWEEN PREV AND OLD.
INS_ELEM MACRO
    MOVE.L 4(Ø1),Ø3                  PREV:= OLD.PREVIOUS;
    MOVEM.L Ø4,(Ø2)                   NEW.NEXT:=OLD; NEW.PREVIOUS:=PREV
    MOVE.L Ø2,(Ø3)                    PREV.NEXT:=NEW;
    MOVE.L Ø2,4(Ø1)                   OLD.PREVIOUS:=NEW;
  ENDM
 
*------------------------------------------------------------------------
* REM_ELEM   MACRO
 
* CALL:    REM_ELEM  ELEM, NEXT, PREV, NEXT/PREV
*          ELEM:  ADDR REFERING TO ELEMENT, E.G.  HXY(A5)
*          NEXT:  A-REGISTER, BECOMES ELEMENT SUCCEEDING ELEM
*          PREV:  A-REGISTER, (#>#OF NEXT) BECOMES ELEMENT PRECEDING ELEM
* REMOVES ELEMENT FROM THE CHAIN. DOES NOT MAKE ELEM SELF-REFERENCING
REM_ELEM MACRO
    MOVEM.L Ø1,Ø4                     NEXT:=ELEM.NEXT; PREV:=ELEM.PREVIOUS;
    MOVE.L Ø2,(Ø3)                    PREV.NEXT:=NEXT;
    MOVE.L Ø3,4(Ø2)                   NEXT.PREVIOUS:=PREV;
  ENDM
 
*-------------------------------------------------------------------------
* INIT_HEAD  MACRO
 
* CALL:    INIT_HEAD  ELEM, ABSELEM
*          ELEM:  ADDR REFERRING TO ELEMENT, E.G.  HXY(A5)
*          ABSELEM:  A-REGISTER, BECOMES ABS ADDR OF ELEMENT
* MAKES CHAIN SELF-REFERENCING
INIT_HEAD MACRO
    LEA    Ø1,Ø2                      ABS ELEM:=ADDR OF ELEM;
    MOVE.L Ø2,(Ø2)                    ELEM.NEXT:=ABS ELEM;
    MOVE.L Ø2,4(Ø2)                   ELEM.PREV:=ABS ELEM;
  ENDM
 
    PAGE
*-----------------------------------------------------------------------
* CASEJMP    MACRO
*
* CALL:    CASEJMP,CR                 CR IS AN A OR D REGISTER, WORD USED.
*                                     THE VALUE OF CR IS 0,2,4,6 ETC.
*                                     THE VALUE OF CR WILL BE DESTROYED.
* EXAMPLE:
*   MOVE.W KIND,D7
*   CASEJMP D7
*   CASELAB KIND0
*   CASELAB KIND2
*   CASELAB KIND4
*   CASELAB KIND6
CASEJMP MACRO
    ADD    Ø@CTAB(PC,Ø1.W),Ø1
    JMP    Ø@CTAB(PC,Ø1.W)
Ø@CTAB     EQU *
  ENDM
 
*-------------------------------------------------------------------------
* CASELAB    MACRO
*
* SEE CASEJMP
CASELAB MACRO
    DC.W   Ø1-*
  ENDM
    PAGE
*--------------------------------------------------------------------------
* ENTRYSAV   MACRO
*
* CALL:    ENTRYSAV  REGLIST,NAME     REGLIST HAS THE FORM USED BY THE
*                                     MOVEM INSTRUCTION. THE MACRO
*                                     SAVES THE REGISTERS. THE NAME HOLDS
*                                     THE REGISTER LIST TO BE USED BY
* EXAMPLE:                            THE RETURN MACRO.
*      MYPROC    EQU *
*          ENTRYSAV  D1-D3/A0,.MYPROC
*          .
*          .
*          BODY OF PROCEDURE
*          .
*          .
*          RETURN  .MYPROC
ENTRYSAV MACRO
Ø2  REG Ø1
    MOVEM.L Ø2,-(A7)
  ENDM
 
*---------------------------------------------------------------------------
* RETURN     MACRO
*
* CALL:    RETURN NAME                RESTORE REGISTERS AND RETURN
*
* EXAMPLE: SEE ENTRYSAV MACRO
RETURN MACRO
    MOVEM.L (A7)+,Ø1
    RTS
  ENDM
 
    PAGE
*----------------------------------------------------------------------
* PRT_REG    MACRO
* CALL
*          PRT_REG  <IDENT>
* <IDENT> MUST BE A TEXT WITHOUT SPACES (' NOT REQUIRED)
PRT_REG MACRO
    PEA    -74(A7)                    PUSH ADDR OF SAVED REGISTERS
    TRAP   #9                         CALL TEST OUTPUT
    DC.B   'Ø1'                       INLINE <IDENT> TEXT
    DC.B   0                          END OF TEXT
    DC.W   $D0A7                      INLINE >REG<   PARAMETER
    ENDM
 
*------------------------------------------------------------------------
* PRT_MEM    MACRO
* CALL
*          PRT_MEM  <IDENT>,<ADDR>,<BYTES>
* <IDENT> MUST BE A TEXT WITHOUT SPACES (' NOT REQUIRED)
* <ADDR>  MUST BE A "CONTROL ADDRESS"
* <BYTES> MUST BE A CONSTANT EXPRESSION
PRT_MEM MACRO
    PEA    Ø2                         PUSH ADDRESS
    TRAP   #9                         CALL TEST OUTPUT
    DC.B   'Ø1'                       INLINE <IDENT> TEXT
    DC.B   0                          END OF TEXT
    DC.W   Ø3                         INLINE <BYTES> PARAMETER
    ENDM
*
 
*---------------------------------------------------------------------------
* ERROR MACRO <HEXCODE>  WITHOUT DOLLAR SIGN IN FRONT
* USED WHEN AN ERROR THAT CANNOT BE REPAIRED IS DETECTED
* NORMAL EXECUTION IS TERMINATED WITH THE ERROR CODE ON TOP OF THE STACK.
* THE STACK MAY BE PRINTED BY THE PUSH BOTTON INTERRUPT RUTINE (DUMMYRTE).
*
ERROR MACRO
      MOVE #$Ø1,-(A7)  PUSH HEXCODE ON STACK
Ø@REP STOP #$2700      STOP PROCESSING
      BRA.S Ø@REP      REPEAT STOP
      ENDM
 
    PAGE
* OTHER CONSTANTS USED IN MORE THAN ONE MODULE (TO BE REMOVED FROM THIS SOURCE)
 
 
SCHTEMP EQU 3     TEMP POINTERS IN CTX IN GENERAL SCHEDULER OBJECTS (INCL.T(0))
SCHTEMD EQU 200   TEMP DATA IN CONTEXT IN GENERAL SCHEDULER OBJECTS (#BYTES)
 
KV_STKSIZ EQU $800 INITIAL SIZE OF THE SUPV. STACK (IN BYTES)
TRP7STAK  EQU $100 STACK SPACE REQUIRED BY NORMAL KERNEL OPERATIONS
*                  I.E. OPERATIONS CALLED FROM NORMAL CONTEXTS ONLY
TRP7RESI  EQU $80+$FF   $FF IS A 'ROUND UP' VALUE. THE REST IS THE
*                  STACK SPACE NEEDED BY THE KERNEL ON EACH OF THE
*                  INTERRUPT LEVELS, TO EXECUTE THE KERNEL OPERATIONS
*                  CALLED BY RESIDENT CONTEXTS AND BY INTERRUPT PROCEDURES
* KV_STACKSIZ - TRAP7STAK - (TRP7RESI-$FF)*8 MUST BE POSITIVE. THE VALUE GIVES
*                  THE NUMBER OF BYTES IN THE SUPERVISOR STACK THAT CAN BE
*                  USED BY THE INTERRUPT PROCEDURES.
* TRP8STACK EQU $FE?  STACK SPACE REQUIRED TO SAVE THE PROCESSOR STATE
*                  WHEN TRAP #8 IS CALLED. IT IS NOT SIGNIFICAND BECAUSE
*                  IT IS LESS THAN ONE PAGE.(ONE PAGE IS ENSURED BY TRP7RESI)
 
* TEST PRINTER DESCRIPTION:
 
TSTPANEL EQU $FE0000    ADDRESS OF THE TEST PANEL STATUS WORD
 
PRTBUF   EQU $FEE009    PRINTER OUTPUT CHAR BUFFER
PRTCONTA EQU $FEE00B    PRINTER CONTROLL OUTPUT LINES
PRTSTATU EQU $FEE00D    PRINTER INPUT STATUS BUFFER
PRTCONTB EQU $FEE00F    PRINTER CONTROL INPUT LINES
 
* MMU DEVICE
 
KV_MMU   EQU $FE2000    BASE ADDRESS OF MMU REGISTERS
 
* TIMER DEVICE
 
PTM_VEC  EQU $8C*4      VECTOR INDEX FOR INTERRUPTS  * 4
PTMCHIP  EQU $FEE040    BASE ADDRESS OF TIMER REGISTERS
CONTRL13 EQU $1         CONTROL REGISTER 1 OR 3
STATCON2 EQU $3         CONTROL REGISTER 2 AND STATUS
TIMER_2  EQU $9         COUNTER OF TIMER 2
TIMER_3  EQU $D         COUNTER OF TIMER 3
 
TIMESLIC EQU 10000000   10 SECONDS IS USED FOR TEST
*TIMESLIC EQU (1<<10)*25         25,6 MILLISECONDS IS A RESONABLE VALUE
 
* MEMORY OPTION
 
DONT_USE EQU 0          NUMBER OF BYTES.
* THE LAST 'DONT_USE' BYTES OF THE MEMORY, WILL NEVER BE USED.
* IF ALL AVAILABLE MEMORY CAN BE REQUESTED BY THE USERS, COMPRESSION WILL
* OFTEN TAKE PLACE WHEN THE SYSTEM IS HEAVILY LOADED (SLOW ALLOC).
* IF MEMORY IS DIVIDED IN SEVERAL RAM AREAS, THE MEMORY EXCHANGE GUARANTEE
* CANNOT BE FULLFILLED DUE TO MEMORY FRAGMENTATION. THIS PROBLEM DISAPPERAS
* IF LARGEST_SEGMENT*NO_OF_RAM_AREAS < DONT_USE. (I THINK THIS IS OK ???).
 
 
«eof»