; RCSL: 43-GL11178 ; AUTHOR: JCO/EJ ; EDITED: 81.05.02 ; BAPAR.03 ;KEYWORDS: RC3600/RC7000, COPS, RC BASIC/COMAL, DOMAC, ; SYMBOLS ;ABSTRACT: THIS MODULE CONTAINS SYMBOLS AND MACROES WHICH ; MUST BE DEFINED IN DOMAC, WHEN ASSEMBLER-MODULES ; BELONGING TO COPS OR RC BASIC ARE ASSEMBLED. ; THE SYMBOLS ARE ALSO USED IN ASSEMBLER-CODED SUB- ; ROUTINES IN RC BASIC. ;ASCII: RCSL: 43-GL11177 ; .TITL BAPAR ; 80.03.20 .RDX 10 .TXTM 1 .NREL ; ; ******* SYMBOLS USED IN COPS ********* ; ; PROCESS DESCRIPTION DECLARATIONS ; .DUSR ITIME= SAVE3+1 ; INITIALISE TIME .DUSR SYLPT= CBUFF+1 ; NAMEADDR OF SYSTEM PRINTER .DUSR SYCDR= SYLPT+1 ; NAMEADDR OF SYSTEM CARDREADER .DUSR MTERM= SYCDR+1 ; MASTER TERMINAL .DUSR ALCORE= MTERM+1 ; ALLOCATE CORE CHAIN .DUSR CSTART= ALCORE+1 ; ALLOCATE CORE START ADDRESS .DUSR CTOP= CSTART+1 ; ALLOCATE CORE TOP ADDRESS .DUSR FREE= CTOP+1 ; FILERESERVE FILE CHAIN .DUSR SYLIB= FREE+1 ; NAMEADDR OF SYSTEM LIBRARY .DUSR FCSTART= SYLIB+1 ; FIXED CORE START ADDRESS .DUSR FCTOP= FCSTART+1 ; FIXED CORE TOP .DUSR MAXUSER= FCTOP+3 ; MAX USER IN THE SYSTEM .DUSR MAXCORE= MAXUSER+1 ; MAX CORE CLAIM PR USER .DUSR USERSIZE= MAXCORE+1 ; SIZE OF USER DESCRIPTION .DUSR MENTRY= USERSIZE+1 ; ENTRIES TO SYSTEM MONITORS ; ; ; ; COROUTINE DESCRIPTION DECLARATIONS ; .DUSR STTIME= CAC1SAVE+7 ; ACTIVATION TIME .DUSR MPMSK= STTIME+2 ; PRIORITY MASK .DUSR MBREAK= MPMSK+1 ; PROGRAM BREAK ADDRESS .DUSR MEXIT= MBREAK+1 ; SYSTEM MONITORS EXIT .DUSR MSAC0= MEXIT+1 ; SAVED AC0 IN SYSTEM MONITORS .DUSR MSAC1= MSAC0+1 ; SAVED AC1 IN SYSTEM MONITORS .DUSR MSAC2= MSAC1+1 ; SAVED AC2 IN SYSTEM MONITORS .DUSR MSAC3= MSAC2+1 ; SAVED AC3 IN SYSTEM MONITORS .DUSR ISTACK= MSAC3+1 ; INITIAL STACK POINTER .DUSR STTOP= ISTACK+1 ; CURRENT STACK TOP .DUSR STLEVEL= STTOP+1 ; CURRENT STACK LEVEL .DUSR STMAX= STLEVEL+1 ; STACK MAX .DUSR ACORE= STMAX+1 ; ALLOCATED CORE POINTER .DUSR CURCAT= ACORE+1 ; CURRENT CATALOG .DUSR CATDESC= CURCAT+1 ; ADDRESS OF CATALOG DESCR. .DUSR CWRK0= CATDESC+5 ; WORK 0 .DUSR CURZ= CWRK0 ; CURRENT ZONE .DUSR CWRK1= CWRK0+1 ; WORK 1 .DUSR CWRK2= CWRK1+1 ; WORK 2 .DUSR PIO= CATDESC+8 ; PRIMARY INPUT OUTPUT DEVICE .DUSR CIN= PIO+1 ; CURRENT INPUT DECIVE .DUSR COUT= CIN+1 ; CURRENT OUTPUT DEVICE .DUSR UBASE= COUT+3 ; USER WORK BASE ; COPS SYSTEM DEFINITIONS, 80.03.20 PAGE 02 ; ; CALL - RETURN - STACK ; .DUSR CALL= JSR@ MZSTART+4 ; .DUSR EXECU= JSR@ MZSTART+4 ; .DUSR RET0= JMP@ MZSTART+5 ; .DUSR RET1= JMP@ MZSTART+6 ; .DUSR RET2= JMP@ MZSTART+7 ; .DUSR ERROR= JSR@ MZSTART+8 ; ; ; ; SYSTEM MONITORS ENTRIES DEFINITION: ; MCALL= JSR@ +0,2 ; ALLOCATE= MCALL+MENTRY ; ; .DUSR A.EXTEND= ALLOCATE+0 ; .DUSR A.TRUNCATE= ALLOCATE+1 ; .DUSR A.RESERVE= ALLOCATE+2 ; .DUSR A.RELEASE= ALLOCATE+3 ; .DUSR A.GBYTE= ALLOCATE+4 ; .DUSR A.GWORD= ALLOCATE+5 ; .DUSR A.GDOUBLE= ALLOCATE+6 ; .DUSR A.GTRIPLE= ALLOCATE+7 ; .DUSR A.PBYTE= ALLOCATE+8 ; .DUSR A.PWORD= ALLOCATE+9 ; .DUSR A.PDOUBLE= ALLOCATE+10 ; .DUSR A.PTRIPLE= ALLOCATE+11 ; ; ALLAST= ALLOCATE+12 ; ALSIZE= ALLAST-ALLOCATE ; ; ; FILERESERVE= ALLOCATE+ALSIZE ; ; .DUSR F.RESERVE= FILERESERVE+0 ; .DUSR F.RELEASE= FILERESERVE+1 ; .DUSR F.OCHAR= FILERESERVE+2 ; .DUSR F.OTEXT= FILERESERVE+3 ; .DUSR F.OBLOCK= FILERESERVE+4 ; .DUSR F.ICHAR= FILERESERVE+5 ; .DUSR F.SETPOS= FILERESERVE+6 ; .DUSR F.BACKSPACE= FILERESERVE+7 ; .DUSR F.CHEOF= FILERESERVE+8 ; .DUSR F.PREPAREATT= FILERESERVE+9 ; .DUSR F.WAITATT= FILERESERVE+10 ; .DUSR F.CHATT= FILERESERVE+11 ; .DUSR F.CATALOG= FILERESERVE+12 ; .DUSR F.CREATE= FILERESERVE+13 ; .DUSR F.DELETE= FILERESERVE+14 ; .DUSR F.RENAME= FILERESERVE+15 ; .DUSR F.LOOKUP= FILERESERVE+16 ; .DUSR F.CLOSEUP= FILERESERVE+17 ; ; FILAST= FILERESERVE+18 ; FISIZE= FILAST-FILERESERVE ; ; COPS SYSTEM DEFINITIONS, 80.03.20 PAGE XX ; TIMING= FILERESERVE+FISIZE ; ; .DUSR T.DATE= TIMING+0 ; .DUSR T.ALL= TIMING+1 ; .DUSR T.SECONDS= TIMING+2 ; .DUSR T.TIME= TIMING+3 ; ; TILAST= TIMING+4 ; TISIZE= TILAST-TIMING ; ; ; COMUSINIT= TIMING+TISIZE ; ; .DUSR C.CREATE= COMUSINIT+0 ; .DUSR C.REMOVE= COMUSINIT+1 ; .DUSR C.CHANGEPROGRAM= COMUSINIT+2 ; ; CILAST= COMUSINIT+3 ; CISIZE= CILAST-COMUSINIT ; ; ; MAINCAT= COMUSINIT+CISIZE ; ; .DUSR M.FREECAT= MAINCAT+0 ; .DUSR M.NEWCAT= MAINCAT+1 ; .DUSR M.LOOKUP= MAINCAT+2 ; .DUSR M.CLOSEUP= MAINCAT+3 ; .DUSR M.INIT= MAINCAT+4 ; .DUSR M.LOCK= MAINCAT+5 ; .DUSR M.USERS= MAINCAT+6 ; .DUSR M.INCLUDE= MAINCAT+7 ; .DUSR M.EXCLUDE= MAINCAT+8 ; ; MCLAST= MAINCAT+9 ; MCSIZE= MCLAST-MAINCAT ; ; COPS SYSTEM DEFINITIONS, 80.03.20 PAGE 03 ; ; BASIC DECLARATIONS: ; .DUSR USER= COROUT ; ; ; ; ********* SYMBOLS USED IN BASIC ********* ; SPECIAL OPERATIONS: ; .DALC SZ = MOV# 0,0,SZR ; SKIP ZERO .DALC SNZ= MOV# 0,0,SNR ; SKIP NON-ZERO .DALC SP = MOVL# 0,0,SZC ; SKIP POSITIVE .DALC SN = MOVL# 0,0,SNC ; SKIP NEGATIVE .DALC SE = SUB# 0,0,SZR ; SKIP EQUAL .DALC SNE= SUB# 0,0,SNR ; SKIP NOT EQUAL .DALC SL = ADCZ# 0,0,SNC ; SKIP LESS .DALC SLE= SUBZ# 0,0,SNC ; SKIP LESS/EQUAL .DALC SG = SUBZ# 0,0,SZC ; SKIP GREATER .DALC SGE= ADCZ# 0,0,SZC ; SKIP GREATER/EQUAL .DALC SIE= ADC# 0,0,SZR ; SKIP INCREMENT EQUAL .DALC SIN= ADC# 0,0,SNR ; SKIP INCREMENT NOT EQUAL .DALC LZ = SUB 0,0 ; LOAD ZERO .DALC LO = SUBZL 0,0 ; LOAD ONE .DALC LOC= ADC 0,0 ; LOAD ONE COMPLEMENT .DALC LC = SUBCL 0,0 ; LOAD CARRY ; USER DESCRIPTION ;******************************************************** ;******************************************************** ; N O T E ! ; WHEN NEW ITEMS ARE INSERTED BETWEEN U.DVS AND U.LAS, ; THEY WILL BE SAVED, WHEN BASIC-PROGRAM ARE SAVED ; IN BINARY FORMAT ; ;******************************************************** ;******************************************************** .DUSR U.CH = UBASE ; .DUSR U.UCH = U.CH+1 ; USER CHANNELS (8. WORDS) .DUSR U.OBC = U.UCH+8. ; BYTE POINTER TO EDIT AREA ; IN PROGRAM SEGMENT .DUSR U.PBC = U.OBC+1 ; PROGRAM BYTE COUNTER .DUSR U.ESC = U.PBC+1 ; ESCAPE MEET (BATCH) .DUSR U.OCC = U.ESC+1 ; OUTPUT CHARACTER COUNT (USED BY PRINT) .DUSR U.PRT = U.OCC+1 ; PROTECT MASK .DUSR U.WXP = U.PRT+1 ; .DUSR U.LLN = U.WXP+1 ; LARGEST LINE NUMBER .DUSR U.STK = U.LLN+1 ; STARTADDR OF WORKSTACK .DUSR U.ST1 = U.STK+1 ; STACKPOINTER 1 .DUSR U.ST2 = U.ST1+1 ; STACKPOINTER 2 .DUSR U.T1 = U.ST2+1 ; TEMPORARY 1 .DUSR U.T2 = U.T1+1 ; TEMPORARY 2 .DUSR U.TS1 = U.T2+1 ; .DUSR U.TS2 = U.TS1+1 ; .DUSR U.TS3 = U.TS2+1 ; .DUSR U.TS4 = U.TS3+1 ; .DUSR U.TS5 = U.TS4+1 ; .DUSR U.TX = U.TS5+1 ; .DUSR U.TX2 = U.TX+1 ; .DUSR U.TX3 = U.TX2+1 ; .DUSR U.SA0 = U.TX3+1 ; .DUSR U.SA1 = U.SA0+1 ; .DUSR U.SA2 = U.SA1+1 ; .DUSR U.SA3 = U.SA2+1 ; .DUSR U.SA4 = U.SA3+1 ; .DUSR U.SA5 = U.SA4+1 ; .DUSR U.SA6 = U.SA5+1 ; .DUSR U.SA7 = U.SA6+1 ; .DUSR U.SA8 = U.SA7+1 ; .DUSR U.SA9 = U.SA8+1 ; .DUSR U.EV0 = U.SA9+1 ; .DUSR U.EV1 = U.EV0+1 ; .DUSR U.EV2 = U.EV1+1 ; .DUSR U.EV3 = U.EV2+1 ; .DUSR U.EV4 = U.EV3+1 ; .DUSR U.EV5 = U.EV4+1 ; .DUSR U.EV6 = U.EV5+1 ; .DUSR U.EV7 = U.EV6+1 ; .DUSR U.AS0 = U.EV7+1 ; .DUSR U.AS1 = U.AS0+1 ; .DUSR U.CPA = U.AS1+1 ; ADMINISTRATION OF CPASS-CALLS .DUSR U.DT0 = U.CPA+1 ; DATA-TEMP 0 .DUSR U.DT1 = U.DT0+1 ; DATA-TEMP 1 .DUSR U.DT2 = U.DT1+1 ; DATA-TEMP 2 .DUSR U.BT1 = U.DT2+1 ; TIME LIMIT ON .DUSR U.BT2 = U.BT1+1 ; BATCH JOBS .DUSR U.DET = U.BT2+1 ; DETERMINANT .DUSR U.PRV = U.DET+3 ; LAST CHARACTER READ .DUSR U.ERN = U.PRV+1 ; LAST ERROR CODE .DUSR U.NFI = U.ERN+1 ; NUMBER OF FILE I/O STATEMENTS .DUSR U.FIL = U.NFI+1 ; LAST FILE OPENED .DUSR U.AU1 = U.FIL+1 ; CURRENT LINE NUMBER .DUSR U.AU2 = U.AU1+1 ; LINEINCREMENT (IN AUTO MODE) .DUSR U.PAS = U.AU2+1 ; PROGRAM SEGMENT LENGTH .DUSR U.DAS = U.PAS+1 ; DATA SEGMENT LENGTH ; U.DVS: FIRST WORD OF SAVED-USERDESCRIP. ; *********************************** .DUSR U.DVS = U.DAS+1 ; START OF VARIABLE DATA STORAGE .DUSR U.NPS = U.DVS+1 ; ADDR OF NEXT PROGRAM STATEMENT .DUSR U.CPS = U.NPS+1 ; ADDR OF CURRENT PROGRAM STATEMENT .DUSR U.TLL = U.CPS+1 ; TERMINAL LINE LENGTH .DUSR U.TTS = U.TLL+1 ; TERMINAL TAB SIZE .DUSR U.BAS = U.TTS+1 ; LOWER BOUND OF ARRAYS .DUSR U.DIG = U.BAS+1 ; NUMBER OF DIGITS IN PRINT .DUSR U.RAN = U.DIG+1 ; RANDOM NUMBER .DUSR U.CDL = U.RAN+1 ; CURRENT DATA LINE - POINTER .DUSR U.CDB = U.CDL+1 ; CURRENT DATA BYTE - POINTER .DUSR U.ESA = U.CDB+1 ; "ON-ESC" ADDRESS .DUSR U.ERA = U.ESA+1 ; "ON-ERR" ADDRESS .DUSR U.CAS = U.ERA+1 ; CASE DEPT .DUSR U.LAS = U.CAS+3 ; LENGTH OF USER DESCRIPTION ; U.LAS: LAST WORD OF SAVED USERDESCRIPTION ; ***************************************** ; SYMBOLS THAT MAY BE USED IN CALL-ROUTINES: .DUSR U.S00 = U.ST1 ; .DUSR U.S01 = U.ST2 ; .DUSR U.S02 = U.T1 ; .DUSR U.S03 = U.T2 ; .DUSR U.S04 = U.TS1 ; .DUSR U.S05 = U.TS2 ; .DUSR U.S06 = U.TS3 ; .DUSR U.S07 = U.TS4 ; .DUSR U.S08 = U.TS5 ; .DUSR U.S09 = U.TX ; .DUSR U.S10 = U.TX2 ; .DUSR U.S11 = U.TX3 ; .DUSR U.S12 = U.SA0 ; .DUSR U.S13 = U.SA1 ; .DUSR U.S14 = U.SA2 ; .DUSR U.S15 = U.SA3 ; .DUSR U.S16 = U.SA4 ; .DUSR U.S17 = U.SA5 ; .DUSR U.S18 = U.SA6 ; .DUSR U.S19 = U.SA7 ; .DUSR U.S20 = U.SA8 ; .DUSR U.S21 = U.SA9 ; .DUSR U.S22 = U.EV0 ; .DUSR U.S23 = U.EV1 ; .DUSR U.S24 = U.EV2 ; .DUSR U.S25 = U.EV3 ; .DUSR U.S26 = U.EV4 ; .DUSR U.S27 = U.EV5 ; .DUSR U.S28 = U.EV6 ; .DUSR U.S29 = U.EV7 ; .DUSR ARRAY = 1B9 ; .DUSR REFERENCE= 1B0 ; .DUSR REAL = 0 ; .DUSR STRING = 3 ; ; PROGRAM SEGMENT DESCRIPTION .DUSR P = 0 ; START OF SEGMENT .DUSR PEL = P ; EDIT AREA (66 WORDS) .DUSR PEP = PEL+66. ; PROGRAM AREA .DUSR MPSL = PEP .DUSR VNLEN= 4 ; VARIABLE NAME LENGTH ; DATA SEGMENT DESCRIPTION .DUSR D = 0 ; START OF SEGMENT .DUSR DFD = D ; FUNCTION TABLE (29 WORDS) .DUSR DGS = DFD+29. ; GOSUB-STACK (8 WORDS) .DUSR DRU = DGS+8. ; REPEAT-UNTIL-STACK (8 WORDS) .DUSR DWH = DRU+8. ; WHILE-DO-STACK (8 WORDS) .DUSR DIF = DWH+8. ; IF-THEN-STACK (8 WORDS) .DUSR DFN = DIF+8. ; FOR-NEXT-STACK (NORMAL PREC.: 43 WORDS ; EXTENDED PREC.: 50 WORDS) .DUSR NDVN = DFN+43. ; VARIABEL NAME TABLE (NORMAL PRECISION) .DUSR EDVN = DFN+57. ; - (EXTENDED PRECISION) .DUSR PSEG=.0 .DUSR DSEG=.1 .DUSR .DSEG=1 .DUSR .PSEG=0 ; MACRO DEFINITIONS USED IN RC BASIC CALL-ROUTINES .NREL .RDX 10 ; RADIX 10 .TXTM 1 ; PACKED FROM LEFT TO RIGHT ; DEFINITION OF CALL OF BASIC-PROCEDURES FOR ; FLOATING OPERATIONS AND I/O-ERRORS ; GENEREL FORMAT: BCALL ; ::= FIX/FLOAT/FADD/FSUB/FMPY/FDIV/IMPY/IMPYA/IDIV/IOERR .MACRO BCALL ** ** .PUSH .NOCON ** .NOCON 1 ** ** FIX= -1 ** FLOAT= FIX-1 ** FADD= FLOAT-1 ** FSUB= FADD-1 ** FMPY= FSUB-1 ** FDIV= FMPY-1 ** IMPY= FDIV-1 ** IMPYA= IMPY-1 ** IDIV= IMPYA-1 ** IOERR= IDIV-1 ** ** .DO ^1==FIX LDA 3 U.S21,3 JSR@ +0,3 ** .ENDC OK ** ** .DO ^1==FLOAT LDA 3 U.S21,3 JSR@ +1,3 ** .ENDC OK ** ** .DO ^1==FADD LDA 3 U.S21,3 JSR@ +2,3 ** .ENDC OK ** ** .DO ^1==FSUB LDA 3 U.S21,3 JSR@ +3,3 ** .ENDC OK ** ** .DO ^1==FMPY LDA 3 U.S21,3 JSR@ +4,3 ** .ENDC OK ** ** ** .DO ^1==FDIV LDA 3 U.S21,3 JSR@ +5,3 ** .ENDC OK ** ** .DO ^1==IMPY LDA 3 U.S21,3 JSR@ +6,3 ** .ENDC OK ** ** .DO ^1==IMPYA LDA 3 U.S21,3 JSR@ +7,3 ** .ENDC OK ** ** .DO ^1==IDIV LDA 3 U.S21,3 JSR@ +8,3 ** .ENDC OK ** ** .DO ^1==IOERR LDA 3 U.S21,3 JSR@ +9,3 ** .ENDC OK ** ** .PUSH .NOMAC ** .NOMAC 0 ** ;*************************************** ; ; ERROR, UNKNOWN: ^1 ; ;*************************************** ** .NOMAC .POP **[OK] ** .NOCON .POP % ; DEFINITION OF PROGRAMHEAD (PRDE1) AND ; PROCESS DESCRIPTION (PRDE2) .MACRO PRDE1 .TITL UCA01 ; USER-CODED SUBROUTINES 78.05.01 .NREL .RDX 10 ; RADIX 10 .TXTM 1 ; PACKED FROM LEFT TO RIGHT .TXTN 1 ; NO NULL-BYTES IF EVEN NUMBER OF BYTES PP00: ; PROGRAM START 1B0+1B15 ; DESCRIPTOR PP05 ; START 0 ; CHAIN PP10-PP00 ; SIZE ** .PUSH .NOCON ** .NOCON 1 ** .DO '^1'=='RC' .TXT .RCALL. ; NAME ** .ENDC ELSE .TXT .UCALL. ; NAME ** [ELSE] ** .NOCON .POP PP05: ; STOPPROCESS ; JMP PP05 ; % .MACRO PRDE2 ** .PUSH .NOCON ** .NOCON 1 PP10: ; PROCESSDESCRIPTOR: 0 ; NEXT 0 ; PREV 0 ; CHAIN PP15-PP10 ; SIZE ** .DO '^1'=='RC' .TXT .RCALL. ; NAME ** .ENDC ELSE .TXT .UCALL. ; NAME ** [ELSE] .+0 ; FIRST EVENT .-1 ; LAST EVENT 0 ; BUFFE PP00 ; PROGRAM 0 ; STATE 0 ; TIMER 1 ; PRIORITY PP05 ; BREAK PP10 ; AC0 0 ; AC1 PP10 ; AC2 0 ; AC3 PP05*2 ; PSW 0 ; SAVE PP15: ; .END PP10 ** .NOCON .POP % .EOT