|
|
DataMuseum.dkPresents historical artifacts from the history of: Bogika Butler |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Bogika Butler Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 32640 (0x7f80)
Types: TextFile
Names: »COMDEF.S«, »COMDEF.SA«
└─⟦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«
***********************************************************************
* 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»