mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-11 23:42:42 +00:00
Correct bad line endings in the repository files that caused problems between checking out in Windows vs Linux clients.
6545 lines
582 KiB
Plaintext
6545 lines
582 KiB
Plaintext
COMMENT 00099999
|
|
***************************** 00100000
|
|
***** B6500 SIMULATOR ***** 00101000
|
|
***************************** 00102000
|
|
********************************* 00200000
|
|
***** ERROR MESSAGE INDEX ***** 00201000
|
|
********************************* 00202000
|
|
# PROCEDURE EXPLANATION 00203000
|
|
-- --------- ----------- 00204000
|
|
0 CONTROLSECTION MORE THAN 1 OF VARF,LEEF,TEEF,SEEF ON 00205000
|
|
1 VARI TRIED TO EXECUTE VARI OPERATOR 00206000
|
|
2 (RESERVED FOR TEED) 00207000
|
|
3 (RESERVED FOR TEEU) 00208000
|
|
4 (RESERVED FOR ILED) 00209000
|
|
5 (RESERVED FOR ILEU) 00210000
|
|
6 EXSD TRIED TO EXECUTE EXSD OPERATOR 00211000
|
|
7 EXSU TRIED TO EXECUTE EXSU OPERATOR 00212000
|
|
10 ERVSFLOW INVALID CALL ON ERVSFLOW (FELL THRU SWITCH) 00213000
|
|
11 ERVSFLOW NOT(AROF AND BROF) IN SPECIALINDEX 00214000
|
|
13 ERVSFLOW STACK UNDERFLOW P22 NOTE THIS WILL BE INTERRUPT 00215000
|
|
14 ERVSFLOW PAGE 7A AROF TRUE 00216000
|
|
15 ERVSFLOW BROF FALSE IN NORMALINDEX 00217000
|
|
98 ADJ INVALID PARAMETERS TO ADJ 00218000
|
|
99 ADJ ADJ DIDNT PERFORM REQUESTED ACTION 00219000
|
|
100 RDIV QUOTIENT CANNOT BE INTEGERIZED. 00220000
|
|
101 INTERRUPTCONTROL INT HAS IMPROPER VALUE. 00221000
|
|
200 MULTIPLEXOR A NON-EXISTENT HARDWARE TYPE WAS REQUESTED. 00222000
|
|
201 MULTIPLEXOR THE BUFFER LENGTH FOR A FILE IS TO SMALL. 00223000
|
|
202 IDLE NO INTERRUPTS PENDING FOR IDLE OPERATOR 00224000
|
|
% ## TYPE OF TRACE 00225000
|
|
% -- ------------- 00226000
|
|
% 0 NO TRACE 00227000
|
|
% 1 A X B Y REGISTERS 00228000
|
|
% 2 C REGISTERS 00229000
|
|
% 3 P REGISTER 00230000
|
|
% 4 DISPLAY REGISTERS 00231000
|
|
% 5 STACK CONTENTS 00232000
|
|
% 6 A X B Y C 00233000
|
|
% 7 A X B Y P 00234000
|
|
% 6 A X B Y DISPLAY 00235000
|
|
% 9 A X B Y STACK 00236000
|
|
% 10 A X B Y C P 00237000
|
|
% 11 A X B Y C DISPLAY 00238000
|
|
% 12 A X B Y C STACK 00239000
|
|
% 13 A X B Y P DISPLAY 00240000
|
|
% 14 A X B Y P STACK 00241000
|
|
% 15 A X B Y DISPLAY STACK 00242000
|
|
% 16 A X B Y C P DISPLAY 00243000
|
|
% 17 A X B Y C P STACK 00244000
|
|
% 18 A X B Y C P DISPLAY STACK 00245000
|
|
% 19 TYPE 18 TRACE AND MEMORY DUMP % 00246000
|
|
% 00247000
|
|
% SIMULATOR DIRECTORY 00248000
|
|
% 00249000
|
|
% SEQ. NR. ITEM 00250000
|
|
% 00200000 ERROR MESSAGE INDEX 00251000
|
|
% 00400000 HARDWARE 00252000
|
|
% 00600000 MISCELLANEOUS DECLARATIONS(SEE ALSO 01000000 AND 01700000)00253000
|
|
% 00700000 B6500 REGISTER,FLIP-FLOP,FLAG,LINE AND BUSS DECLARATIONS 00254000
|
|
% 01000000 MISCELLANEOUS DECLARATIONS(SEE ALSO 00600000 AND 01700000)00255000
|
|
% 01200000 B6500 PARTIAL FIELD DEFINES 00256000
|
|
% 01400000 WORD FORMAT DESCRIPTIONS 00257000
|
|
% 01600000 FORWARD PROCEDURE DECLARATIONS 00258000
|
|
% 01700000 MISCELLANEOUS PROCEDURE,DEFINE AND OTHER DECLARATIONS 00259000
|
|
% (SEE ALSO 00600000 AND 01000000) 00260000
|
|
% 01800000 INTERRUPT CONTROLLER 00261000
|
|
% 02000000 SIMULATOR CONTROL SECTION 00262000
|
|
% 04000000 SIMULATOR UTILITY PROCEDURES(PSYLLABLES, STEPPSR, ETC.) 00263000
|
|
% 07000000 B6500 OPERATOR PROCEDURES 00264000
|
|
% 50000000 ERVSFLOW 00265000
|
|
% 51000000 STORE (STOD, STON, OVRD, OVRN) 00266000
|
|
% 60000000 B6500 MICRO-OPERATORS (ADJ, ETC.) 00267000
|
|
% 71000000 SIMULATOR INITIALIZATION 00268000
|
|
% 72000000 MULTIPLEXOR 00269000
|
|
% 73000000 SIMULATOR 00270000
|
|
% 74000000 TRACE 00271000
|
|
% 75000Q00 B6500 MEMORY DUMP 00272000
|
|
% 76000000 ERROR ROUTINE 00273000
|
|
% 77000000 HEADINGLINE 00274000
|
|
% 78000000 SIMULATOR STARTS ( I.E. DECLARATIONS AND PROCEDURES END) 00275000
|
|
; 00276000
|
|
BEGIN COMMENT SIMULATOR OUTER BLOCK; 00277000
|
|
COMMENT DO NOT CHANGE THE PRT LOCATION OF THE FOLLOWING 5 VARIABLES; 00278000
|
|
INTEGER TRACEWORD % 25 00278001
|
|
,STATUSWORD % 26 00278002
|
|
,HALTING % 27 00278003
|
|
,TRACTER % 30 00278004
|
|
,MONITORVALUE % PRT 31 THE SIMULATOR READS AND ACCEPTS THIS 00278005
|
|
% VALUE & PLACES IT IN D[31]. THE MCP MOVES IT 00278006
|
|
% FROM D[31] AND PLACES IT IN A GLOBAL 00278007
|
|
; 00278010
|
|
REAL PROCCLOCK, % PROCESSOR CLOCK RATE IN MEGACYCLES DEFAULT=10 00279000
|
|
MPXQUAN , % NUMBER OF MULTIPLEXORS DEFAULT= 1 00280000
|
|
MPXAOPS , % MAXIMUM OPERATIONS FOR MPXA DEFAULI=10 00281000
|
|
MPXBOPS , % MAXIMUM OPERATIONS FOR MPXB DEFAULT=10 00282000
|
|
MEMMODS , % NUMBER OF 16K MEMORY MODULES DEFAULT= 2 00283000
|
|
MEMTIME , % MEMORY CYCLE TIME DEFAULT=1.200284000
|
|
PROCID , % PROCESSOR IDENTIFICATION DEFAULT = 1 00284500
|
|
DISKLOAD, % ESPOL = 0; ALGOL = 1; COBOL = 2; 00285000
|
|
BUFRMAX , % MAXIMUM BUFFER SIZE 00286000
|
|
ROWLENGTH; % LENGTH OF M ARRAY ROW (6500 WORDS) 00287000
|
|
REAL ETIME, PTIME, STARTDATE; 00288000
|
|
REAL TIMEOFDAY; % WHAT IT SAYS - SEE SCNI - SCNO 00288010
|
|
SAVE ARRAY TBUF [0:16]; % FORMATTING AREA FOR TRACE AND MEMDUMP 00289000
|
|
BOOLEAN PRINTERNOTYETOPENED; 00290000
|
|
REAL STREAM PROCEDURE MKABS (A); BEGIN SI ~ A; MKABS ~ SI END; 00291000
|
|
ARRAY EBCTOBCL [0:31]; % INDEXED BY AN 8 BIT EBCDIC CHARACTER TO 00292000
|
|
% FIND A 6 BIT BCL CHARACTER-MOSTLY INV CHR00293000
|
|
ARRAY BUFFERS [0:3, 0:13]; % BUFFER LENGTHS FOR LOGICAL UNITS 00294000
|
|
% INDEXED BY HDWE TYPE AND SWITCH FILE INDX00295000
|
|
INTEGER NCR; % ABSOLUTE ADDRESS MESS [0] 00296000
|
|
DEFINE FILLBUFFERS = % DEFAULT BUFFER LENGTHS 00297000
|
|
% HDWE TYPES: DSC SPO BIDS LP CR CP TAPE 00298000
|
|
FILL BUFFERS [0,*] WITH 0, 30, 10, 0,0,0,15,0,0,10,10,0,0,1023;00299000
|
|
FILL BUFFERS [1,*] WITH 0, 30, 0, 0,0,0,15,0,0, 0, 0,0,0,1023;00300000
|
|
FILL BUFFERS [2,*] WITH 0, 30, 0, 0,0,0, 0,0,0, 0, 0,0,0,1023;00301000
|
|
FILL BUFFERS [3,*] WITH 0, 30, 0, 0,0,0, 0,0,0, 0, 0,0,0,1023;00302000
|
|
#; 00303000
|
|
ARRAY PERIPHERALT[0:69]; %TIMING CONSTANTS FOR PERIPHERAL UNITS 00304000
|
|
DEFINE FILLT=FILL PERIPHERALT[*] WITH 00305000
|
|
0,0,0,0,0, %000306000
|
|
80,2@5,0,0,0, %DISK-MPX CYCLE TIME, LATENCY TIME 100307000
|
|
0,0,0,0,0, %200308000
|
|
0,0,0,0,0, %300309000
|
|
0,0,0,0,0, %400310000
|
|
0,0,0,0,0, %500311000
|
|
2.42@4,57.6@4,24.3@4,6.6@4,10@4, %BUFFERED PRINTER 600312000
|
|
%MPX BUSY TIME,DRUM ROTATION TIME, 00313000
|
|
%FIRST SPACING TIME,EACH ADDITIONAL 00314000
|
|
%SPACING TIME 00315000
|
|
27.1@4,75@4,24.3@4,6.6@4,10@4, %UNBUFFERED PRINTER 700316000
|
|
%SAME AS BUFFERED PRINTER 00317000
|
|
0,0,0,0,0, %800318000
|
|
24.3@4,75@4,0.0,0, %CARD READER -EL.CYCLE,ME.CYCLE 900319000
|
|
24.3@4,6@6,0,0,0, %CARD PUNCH-EL.CYCLE,ME.CYCLE 1000320000
|
|
0,0,0,0,0, %1100321000
|
|
0,0,0,0,0, %1200322000
|
|
120,800,6.7@4,.6,0; %MAGNETIC TAPE- 1300323000
|
|
%SPEED,DENSITY,START TIME,RECORD GAP00324000
|
|
#; 00325000
|
|
ARRAY STATVECTOR [0:7]; % PERIPHERAL STATUS WORDS 00325100
|
|
ARRAY OLDSTATVEC [0:7]; % TO SAVE OFF CHANGED STATUS WORD 00325300
|
|
ALPHA 00326000
|
|
ARRAY MPX [0:6, 0:31]; COMMENT INDEXED BY MULTIPLEXOR 00327000
|
|
AND LOGICAL UNIT NO. CONTAINS: 00328000
|
|
RESULT DESCRIPTOR MPX [MPXUNIT+4,LOGICALUNIT] 00329000
|
|
AND MPX INFO WORD 00330000
|
|
; 00331000
|
|
BOOLEAN MULTIPLEX; % TRUE FOR SCNO (IIO) 00332000
|
|
BOOLEAN SPOED; % TRUE FOR NOTHINGTODO READ 00333000
|
|
ARRAY CUP[0:11]; 00334000
|
|
REAL TUBA, 00335000
|
|
PID; % PROCESSOR I.D. 00335500
|
|
SAVE ALPHA 00336000
|
|
ARRAY EVENTS [0:31]; COMMENT INDEXED BY LOGICAL UNIT OR SELF. 00337000
|
|
CONTAINS THE REAL TIME FOR THE COMPLETION OF THE I-O 00338000
|
|
BEING PERFORMED ON THIS UNIT AND A LINK TO THE NEXT 00339000
|
|
EVENT AND A MULTIPLEXOR INDICATOR. 00340000
|
|
; 00341000
|
|
ARRAY UNITAVAILTIME[0:31]; COMMENT-INDEXED BY LOGICAL UNIT. 00342000
|
|
CONTAINS REALTIME WHEN NEXT I/O COULD BE 00343000
|
|
INITIATED ON THIS UNIT.; 00344000
|
|
DEFINE % DEFINES FOR MPX AND EVENTS PARTIAL FIELDS 00345000
|
|
EVTIME = [12:36]#, % I-O COMPLETE TIME 00346000
|
|
EVLINK = [ 7: 5]#, % EVENT LINK 00347000
|
|
EVBUSY = [ 6: 1]#, % BUSY BIT 00348000
|
|
EVMPX = [ 1: 2]#, % MPX FOR THIS I-O 00349000
|
|
RSLTERR = [31:17]#, % ERROR FIELD 00350000
|
|
RSLTUNIT = [23: 8]#, % UNIT 00351000
|
|
TCHRS = [20: 3]#, % RESULT CHRS 00352000
|
|
RSLTADRS = [ 1:19]#, % ADDRESS 00353000
|
|
MPXINT = [38:10]#, % MPX INTERRUPT VALUE 00354000
|
|
MPXHDWE = [32: 6]#, % HARDWARE UNIT TYPE 00355000
|
|
MPXSWFI = [24: 6]#, % SWITCH FILE INDEX 00356000
|
|
MPXWLO = [ 1: 1]#, % 1 = WRITE LOCK-OUT 00357000
|
|
TUB = [ 2:9]#, % TU & BUF ADDRESS 00358000
|
|
MPXBUFF = [14:10]#; % BUFFER LENGTH 00359000
|
|
%>RETRO00360000
|
|
REAL ARRAY FIRSTEVENT [0:15], LASTEVENT [0:15]; %>RETRO00361000
|
|
INTEGER ARRAY FIRSTEVENTI[0:15], LASTEVENTI[0:15]; %>RETRO00362000
|
|
REAL CURRENTT, % THE TIME FOR THE NEXT MULTIPLEXOR INTERRUPT 00363000
|
|
CURRENTMPX; % THE MPX FOR THE NEXT MULTIPLEXOR INTERRUPT 00364000
|
|
ARRAY MPXOPS [0:2];%OPERATIONS PER MPX 00365000
|
|
DEFINE DELTAMPX = 4#; % THE INCREMENT REQUIRED TO FIND THE RESULT 00366000
|
|
% DESCRIPTOR IN MPX ARRAY. 00367000
|
|
INTEGER INTTIMER; % THE NEXT REAL TIME FOR A TIME INTERRUPT 00368000
|
|
REAL MONITORMASKOLD;% TEMPORARY MONITOR MASK 00369000
|
|
REAL MONITORMASK; 00369100
|
|
PROCEDURE HARDWARE; 00400000
|
|
BEGIN 00401000
|
|
DEFINE LUNIT= TBUF [0]#, 00402000
|
|
HTYPE= TBUF [1]#, 00403000
|
|
MPXAB= TBUF [2]#, 00404000
|
|
BUFLG= TBUF [3]#, 00405000
|
|
WLO = TBUF [4]#; 00406000
|
|
INTEGER I, J, S; 00407000
|
|
LABEL EOF; 00408000
|
|
DEFINE 00409000
|
|
TIMEADJUST = ;#; %%%%%%%%%% 00410000
|
|
TBUF [16] ~ MKABS (TBUF); 00411000
|
|
PRINTERNOTYETOPENED ~ TRUE; 00412000
|
|
FILLBUFFERS; 00413000
|
|
FILLT; 00414000
|
|
FILL EBCTOBCL [*] WITH % GRAPHIC UNDER LOW-ORDER OCTADE 00415000
|
|
OCT1414141414141414, 00416000
|
|
OCT1414141414141414, 00417000
|
|
OCT1414141414141414, 00418000
|
|
OCT1414141414141414, 00419000
|
|
OCT1414141414141414, 00420000
|
|
OCT1414141414141414, 00421000
|
|
OCT1414141414141414, 00422000
|
|
OCT1414141414141414, 00423000
|
|
OCT6014141414141414, 00424000
|
|
% BLANK 00425000
|
|
OCT1414143236352037, 00426000
|
|
% . < ( + ~ 00427000
|
|
OCT3414141414141414, 00428000
|
|
% & 00429000
|
|
OCT1414405253555657, 00430000
|
|
% | $ * ) ; { 00431000
|
|
OCT5461141414141414, 00432000
|
|
% - / 00433000
|
|
OCT1414767273741614, 00434000
|
|
% ] , % ! > QUESTION MARK 00435000
|
|
OCT3314141414141414, 00436000
|
|
% [ 00437000
|
|
OCT1414151213177577, 00438000
|
|
% : # @ } = " 00439000
|
|
OCT1414141414141414, 00440000
|
|
OCT1414141414141414, 00441000
|
|
OCT1414141414141414, 00442000
|
|
OCT1414141414141414, 00443000
|
|
OCT1414141414141414, 00444000
|
|
OCT1414141414141414, 00445000
|
|
OCT1414141414141414, 00446000
|
|
OCT1414141414141414, 00447000
|
|
OCT1421222324252627, 00448000
|
|
% A B C D E F G 00449000
|
|
OCT3031141414141414, 00450000
|
|
% H I 00451000
|
|
OCT1441424344454647, 00452000
|
|
% J K L M N O P 00453000
|
|
OCT5051141414141414, 00454000
|
|
% Q R 00455000
|
|
OCT1414626364656667, 00456000
|
|
% S T U V W X 00457000
|
|
OCT7071141414141414, 00458000
|
|
% Y Z 00459000
|
|
OCT0001020304050607, 00460000
|
|
% 0 1 2 3 4 5 6 7 00461000
|
|
OCT1011141414141414; 00462000
|
|
% 8 9 00463000
|
|
BEGIN 00464000
|
|
FILE CONFIGURATION (1, 10); 00465000
|
|
READ (CONFIGURATION, /, PROCCLOCK, MPXQUAN, MPXAOPS, 00466000
|
|
MPXBOPS, MEMMODS, MEMTIME, PROCID, DISKLOAD 00467000
|
|
,HALTING 00467010
|
|
,MONITORMASK 00467100
|
|
,MONITORVALUE 00467200
|
|
); 00468000
|
|
MONITORMASKOLD ~ MONITORVALUE; 00468900
|
|
IF PROCCLOCK = 0 THEN PROCCLOCK ~ 10; % MEGACYCLES 00469000
|
|
IF MPXQUAN = 0 THEN MPXQUAN ~ 1; % MULTIPLEXORS 00470000
|
|
MPXAOPS ~ 00471000
|
|
MPXOPS [1] ~ IF MPXAOPS = 0 THEN 10 ELSE MPXAOPS; 00472000
|
|
MPXBOPS ~ 00473000
|
|
MPXOPS [2] ~ IF MPXBOPS = 0 THEN 10 ELSE MPXBOPS; 00474000
|
|
IF MEMTIME = 0 THEN MEMTIME ~ 1.2;% MICROSECONDS 00475000
|
|
MEMTIME ~ MEMTIME | 10; 00476000
|
|
MEMMODS ~ (2*14|2|(IF MEMMODS = 0 THEN 2 ELSE MEMMODS))-1; 00477000
|
|
IF PROCID = 0 THEN PID ~ 1 ELSE PID ~ PROCID; 00477500
|
|
IF DISKLOAD > 0 THEN INTTIMER ~ 0 ; 00478000
|
|
END; 00479000
|
|
BEGIN 00480000
|
|
FILE CABLING (2, 10); 00481000
|
|
STREAM PROCEDURE STATUS(SWORD, LUNIT); VALUE LUNIT; 00481100
|
|
BEGIN DI ~ SWORD; SKIP LUNIT DB; DS ~ 1 SET END STATUS; 00481200
|
|
LABEL EOF; 00482000
|
|
STATUSWORD ~ 1; 00482100
|
|
DO BEGIN 00483000
|
|
READ (CABLING, /, LUNIT, HTYPE, MPXAB, BUFLG 00484000
|
|
, WLO , TUBA )[EOF]; 00485000
|
|
IF MPXAB = 0 THEN MPXAB ~ 1; 00486000
|
|
MPX [I ~ MPXAB, J ~ LUNIT].MPXWLO ~ WLO; 00487000
|
|
MPX [I, J].MPXHDWE ~ HTYPE; 00488000
|
|
MPX [I, J].MPXSWFI ~ S ~ MPX [0, HTYPE]; 00489000
|
|
MPX [0, HTYPE] ~ MPX [0, HTYPE] + 1; 00490000
|
|
IF BUFLG ! 0 THEN BUFFERS [S, HTYPE] ~ 00491000
|
|
BUFLG; 00492000
|
|
MPX [I, J].MPXBUFF ~ BUFLG; 00493000
|
|
I ~ 46 - LUNIT; 00493100
|
|
STATUS (STATUSWORD, I); 00493200
|
|
END UNTIL FALSE; 00494000
|
|
EOF: END; 00495000
|
|
S ~ 10; % MINIMUM BUFFER SIZE IS 10 00496000
|
|
FOR I ~ 0 STEP 1 UNTIL 3 DO 00497000
|
|
FOR J ~ 0 STEP 1 UNTIL 13 DO 00498000
|
|
IF BUFFERS [I, J] > S THEN S ~ BUFFERS [I, J]; 00499000
|
|
BUFRMAX ~ S; 00500000
|
|
LUNIT ~ 0; 00501000
|
|
ETIME ~ TIME (1); 00502000
|
|
PTIME ~ TIME (2); 00503000
|
|
STARTDATE ~ TIME (0); 00504000
|
|
TIMEADJUST; 00505000
|
|
ROWLENGTH ~ 256; 00506000
|
|
END OF HARDWARE INITIALIZE; 00507000
|
|
HARDWARE; 00508000
|
|
BEGIN 00509000
|
|
LABEL EOJ; 00600000
|
|
INTEGER T; 00601000
|
|
DEFINE STACKVECTOR = D0+2#; 00602000
|
|
%**************************************** 00700000
|
|
%***** B6500 REGISTER DECLARATIONS ***** 00701000
|
|
%**************************************** 00702000
|
|
%NAME #BITS DESCRIPTION 00703000
|
|
REAL A,AX, % 51 TOP OPERAND IN STACK 00704000
|
|
X,XX, % 51 EXTENSION OF A 00705000
|
|
B,BX, % 51 SECOND OPERAND IN STACK 00706000
|
|
Y,YX, % 51 EXTENSION OF B 00707000
|
|
C,CX, % 51 GENERAL PURPOSE REGISTER 00708000
|
|
P,PX; % 51 PROGRAM REGISTER 00709000
|
|
BOOLEAN AROF, % 1 A REGISTER OCCUPIED 00710000
|
|
BROF, % 1 B REGISTER OCCUPIED 00711000
|
|
PROF; % 1 P REGISTER OCCUPIED 00712000
|
|
DEFINE MEMCYCLE = DELTATIME ~ DELTATIME + MEMTIME;#; 00713000
|
|
LONG ARRAY M [0:MEMMODS]; 00714000
|
|
%NOTE: INDICIES ARE AUTOMATICALLY DOUBLED 00715000
|
|
% AND THE ARRAY IS PARTIONED INTO A 00716000
|
|
% TWO-DIMENSIONAL ARRAY WITH 256-WD ROWS00717000
|
|
% BY SPECIAL COMPILER PATCHES. 00718000
|
|
REAL MA, % 3 MANTISSA EXTENSION OF A 00719000
|
|
MB, % 3 MANTISSA EXTENSION OF B 00720000
|
|
EA, % 1 EXPONENT EXTENSION OF A 00721000
|
|
EB, % 1 EXPONENT EXTENSION OF B 00722000
|
|
AA, % 42 10 MC ADDER CAPTIVE REGISTER (ADDEND) 00723000
|
|
BB, % 42 10 MC ADDER CAPTIVE REGISTER (AUGEND) 00724000
|
|
CC, % 42 10 MC ADDER CAPTIVE REGISTER (IDLER) 00725000
|
|
SGNF, % 1 EXTERNAL SIGN 00726000
|
|
MM, % 20 MAIN MEMORY ADDRESSING REGISTER 00727000
|
|
LL, % 5 LEXIOGRAPHIC LEVEL (DISPLAY MEMORY POINTER) 00728000
|
|
BRS, % 7 BASE READ SELECT (I.C. MEMORY ADDRESSING REG.)00729000
|
|
BWS, % 7 BASE WRITE SELECT (I.C. MEMORY ADDRESSING REG.)00730000
|
|
IRS, % 4 INDEX READ SELECT (I.C. MEMORY ADDRESSING REG.)00731000
|
|
IWS, % 4 INDEX WRITE SELECT (I.C. MEMORY ADDRESSINS REG.)00732000
|
|
OPSR,% 3 OLD PSR 00733000
|
|
PICR,% 20 PROGRAM INDEX COUNTER FOR SINGLE INSTRUCTION 00734000
|
|
DRS; % 6 DISPLAY READ SELECT REGISTER 00735000
|
|
ARRAY D[0:31];%20 I.C. DISPLAY MEMORY 00736000
|
|
DEFINE D0 = D[ 0]#, D8 = D[ 8]#, D16 = D[16]#, D24 = D[24]#, 00737000
|
|
D1 = D[ 1]#, D9 = D[ 9]#, D17 = D[17]#, D25 = D[25]#, 00738000
|
|
D2 = D[ 2]#, D10 = D[10]#, D18 = D[18]#, D26 = D[26]#, 00739000
|
|
D3 = D[ 3]#, D11 = D[11]#, D19 = D[19]#, D27 = D[27]#, 00740000
|
|
D4 = D[ 4]#, D12 = D[12]#, D20 = D[20]#, D28 = D[28]#, 00741000
|
|
D5 = D[ 5]#, D13 = D[13J#, D21 = D[21]#, D29 = D[29]#, 00742000
|
|
D6 = D[ 6]#, D14 = D[14]#, D22 = D[22]#, D30 = D[30]#, 00743000
|
|
D7 = D[ 7]#, D15 = D[15]#, D23 = D[23]#, D31 = D[31]#, 00744000
|
|
D00 = D[ 0]#, D03 = D[03]#, D06 = D[06]#, D09 = D[09]#, 00745000
|
|
D01 = D[ 1]#, D04 = D[04]#, D07 = D[07]#, 00746000
|
|
D02 = D[02]#, D05 = D[05]#, D08 = D[08]#; 00747000
|
|
INTEGER SP, % 6 SOURCE REGISTER POINTER 00748000
|
|
DP, % 6 DESTINATION REGISTER POINTER 00749000
|
|
G, % 6 00750000
|
|
K, % 6 00751000
|
|
TP, % 4 TABLE BASE POINTER 00753000
|
|
PSR; % 3 PROGRAM SYLLABLE REGISTER 00754000
|
|
COMMENT THE FOLLOWING DECLARATION IS FOR THE 8 I.C. BASE REGISTERS00755000
|
|
AND ITS INTERNAL SEQUENCE SHOULD NOT BE DISTURBED WITHOUT 00756000
|
|
CHECKING THE ARRAY BRSR, PROCEDURES RPRR AND SPRR, ETC.; 00757000
|
|
REAL PBR, SBR, DBR, TBR, S, SNR, PDR, TEMP; %DLK00758000
|
|
DEFINE BUF2 = TBR#; % SHARED REGISTERS 00759000
|
|
REAL TSR; 00760000
|
|
COMMENT THE FOLLOWING DECLARATION IS FOR THE 8 I.C. INDEX REGISTERS00761000
|
|
AND ITS INTERNAL SEQUENCE SHOULD NOT BE DISTURBED WITHOUT 00762000
|
|
CHECKING THE ARRAY BRSR, PROCEDURES RPRR AND SPRR, ETC.; 00763000
|
|
REAL PIR, SIR, DIR, TIR, LOSR, BOSR, F, BUF1; %DLK00764000
|
|
DEFINE BUF3 = TIR#; % SHARED REGISTERS 00765000
|
|
COMMENT ***** EXPLANATORY ONLY (SEE ABOVE) ******************00766000
|
|
PBR, % 20 PROGRAM BASE REGISTER 00767000
|
|
SBR, % 20 SOURCE BASE REGISTER 00768000
|
|
DBR, % 20 DESTINATION BASE REGISTER 00769000
|
|
BUF2, % 20 UTILITY REGISTER - SHARED WITH TBR 00770000
|
|
S, % 20 TOP OF STACK POINTER 00771000
|
|
SNR, % 20 STACK NUMBER REGISTER 00772000
|
|
PDR, % 20 PROGRAM DESCRIPTOR REGISTER 00773000
|
|
TEMP, % 20 TEMPORARY G.P. REGISTER 00774000
|
|
PIR, % 20 PROGRAM INDEX REGISTER 00775000
|
|
PICR, %4 DELTA PIR FOR OPERATOR, USED TO RESTORE PIR 00776000
|
|
SIR, % 20 SOURCE INDEX REGISTER 00777000
|
|
DIR, % 20 DESTINATION INDEX REGISTER 00778000
|
|
TIR, % 20 TABLE INDEX REGISTER 00779000
|
|
BUF3, % 20 UTILITY REGISTER - SHARED WITH TIR 00780000
|
|
LOSR, % 20 LIMIT OF STACK REGISTER 00781000
|
|
BOSR, % 20 BASE OF STACK REGISTER 00782000
|
|
F, % 20 MARK STACK POINTER 00783000
|
|
BUF; % 20 BUFFER G.P. REGISTER 00784000
|
|
DEFINE BUF = BUF1#; % TO OVERCOME NOMENCLATURE DIFFICULTY 00785000
|
|
INTEGER 00786000
|
|
SIB, % 6 SOURCE BIT INDEX REGISTER 00787000
|
|
DIB, % 6 DESTINATION BIT INDEX REGISTER 00788000
|
|
RPF, % 20 REPEAT FIELD REGISTER 00789000
|
|
DIS, % 00790000
|
|
TOM, % 6 TOP OF MASK 00791000
|
|
TOA; % 6 TOP OF APERATURE 00792000
|
|
ARRAY IRSR, BRSR [0:7]; % USED TO HOLD BASE AND INDEX REGISTERS 00793000
|
|
ARRAY MONITOROUTPUT [0:13]; 00793100
|
|
FORMAT MONFMT (X1,A1,A6,X1,I1, X1, 16I1, 7(X2, I5, X1, I5)); 00793200
|
|
DEFINE NULLB=0#,% NULL STATE FOR I.C. MEMORY BASE REGISTERS 00794000
|
|
NULLI=0#;% NULL STATE FOR I.C. MEMORY INDEX REGISTERS 00795000
|
|
REAL AB, % 20 ADDRESS BASE BUSS 00796000
|
|
AI; % 20 ADDRESS INDEX BUSS 00797000
|
|
BOOLEAN NCSF; % 1 NORMAL STATE FF 00798000
|
|
REAL QP; % MISC CONTROL FLIP/FLOPS (STRING OPERATORS) 00798500
|
|
REAL Q; % 18 Q0 AND QC SETS OF G.P. LOGICAL FFS (CLEARED AT SECL) 00799000
|
|
DEFINE Q00F = Q.[47:1]#, Q03F = Q.[44:1]#, Q06F = Q.[41:1]#, 00800000
|
|
Q01F = Q.[46:1]#, Q04F = Q.[43:1]#, Q07F = Q.[40:1]#, 00801000
|
|
Q02F = Q.[45:1]#, Q05F = Q.[42:1]#, Q08F = Q.[39:1]#, 00802000
|
|
QC0F = Q.[38:1]#, QC3F = Q.[35:1]#, QC6F = Q.[32:1]#, 00803000
|
|
QC1F = Q.[37:1]#, QC4F = Q.[34:1]#, QC7F = Q.[31:1]#, 00804000
|
|
QC2F = Q.[36:1]#, QC5F = Q.[33:1]#, QC8F = Q.[30:1]#; 00805000
|
|
REAL N; % 4 G.P. COUNT REGISTER (CLEARED AT SECL) 00806000
|
|
BOOLEAN LPF, % 1 LINE PARITY--READ 00807000
|
|
IIHF, % 1 00807500
|
|
SUFL, % 1 STACK UNDER FLOW FLIP/FLOP 00807600
|
|
EXTF, % 1 ENTERNAL SIGN FLIP FLOP 00808000
|
|
TFFF, % 1 TRUE/FALSE FF 00809000
|
|
OFFF, % 1 OVERFLOW FF 00810000
|
|
FLTF , % 1 FLOAT FLIP FLOP 00811000
|
|
TEEF, % 1 TABLE EDIT ESCAPE 00812500
|
|
LEEF, % 1 LINE EDIT ESCAPE 00813000
|
|
EDITF , % 1 EDIT MODE FLIP FLOP 00814000
|
|
EXSF , % 1 EXECUTE SINGLE SHOT 00815000
|
|
ESPF , % 1 EXECUTE SINGLE POINTER 00815500
|
|
UPDF , % 1 UPDATE 00816000
|
|
SOPF , % 1 SINGLE PRECISION OPERAND 00817000
|
|
RNTF , % 1 RE-ENTER FLIP/FLOP FOR CHARACTER MODE 00818000
|
|
VARF; % 1 VARIANT ESCAPE 00819000
|
|
DEFINE SEEF = EXSF#; 00820000
|
|
REAL SSZ, % 2 SOURCE CHARACTER SIZE 00821000
|
|
DSZ, % 2 DESTINATION CHARACTER SIZE 00822000
|
|
TCS, % 2 TABLE CHARACTER SIZE 00823000
|
|
OFS, % 6 OFFSET REGISTER (SIEERING CONTROL) 00824000
|
|
J1F, % 6 FAMILY 1 SEQUENCE COUNTER 00825000
|
|
J2F; % 6 FAMILY 2 SEQUENCE COUNTER 00826000
|
|
BOOLEAN REQ, % 1 REQUEST (MEM. INTERFACE) 00827000
|
|
WRT, % 1 WRITE (MEM. INTERFACE) 00828000
|
|
PRO, % 1 PROTECT (MEM. INTERFACE) 00829000
|
|
MROF; % 1 MEM. READ OBTAINED (MEM. INTERFACE) 00830000
|
|
BOOLEAN STKOVFF; % ADJ SETS TRUE FOR STACK OVERFLOW 00830100
|
|
DEFINE % ALARM INTERRUPTS 00831000
|
|
LOOPI = 33554433 #, % 2*25+2*0 OPERATOR LOOP 00832000
|
|
MEMPARI = 33554434 #, % 2*25+2*1 MEMORY PARITY 00833000
|
|
MPXPARI = 33554436 #, % 2*25+2*2 MULTIPLEXOR PARITY 00834000
|
|
INVADRI = 33554440 #, % 2*25+2*3 INVALID ADDRESS 00835000
|
|
STKUNFI = 33554448 #, % 2*25+2*4 STACK UNDERFLOW 00836000
|
|
INVOPA = 33554464 #, % 2*25+2*5 UNKNOWN OPERATOR 00837000
|
|
% SYLLABLE DEPENDENT INTERRUPTS 00838000
|
|
MEMPROI = 16777217 #, % 2*24+2*0 MEMORY PROTECT 00839000
|
|
INVOP = 16777218 #, % 2*24+2*1 INVALID OPERATOR 00840000
|
|
DIVZROI = 16777220 #, % 2*24+2*2 DIVIDE BY ZERO 00841000
|
|
EXPOVFI = 16777224 #, % 2*24+2*3 EXPONENT OVERFLOW 00842000
|
|
EXPUNFI = 16777232 #, % 2*24+2*4 EXPONENT UNDERFLOW 00843000
|
|
INVINXI = 16777248 #, % 2*24+2*5 INVALID INDEX 00844000
|
|
INTOVFI = 16777280 #, % 2*24+2*6 INTEGER OVERFLOW 00845000
|
|
BOSINT = 16777344 #, % 2*24+2*7 BOTTOM OF STACK 00846000
|
|
PRESBIT = 16777472 #, % 2*24+2*8 PRESENCE BIT 00847000
|
|
SEQERRI = 16777728 #, % 2*24+2*9 SEQUENCE ERROR 00848000
|
|
% GENERAL CONTROL INTERRUPTS 00849000
|
|
INTTIMI = 4194305 #, % 2*22+2*0 INTERVAL TIMER 00850000
|
|
STKOVFI = 4194306 #, % 2*22+2*1 STACK OVERFLOW 00851000
|
|
% EXTERNAL INTERRUPTS 00852000
|
|
EXTINTI = 1048816#, % BITS 20, 7-4 ON EXTERNAL INTERRUPT 00853000
|
|
%I/O FINISH BEING FORCED, MLC NOT HONORD 00854000
|
|
PTOPI = 2097152 #, % 2*21 PROCESSOR TO PROCESSOR 00855000
|
|
DUMMYI = 0#; 00856000
|
|
REAL INT; % INTERRUPT FLIP/FLOPS 00857000
|
|
% FLIP/FLOP FUNCTION 00858000
|
|
DEFINE EXIA = INT.[27:1]#, % [20:1] EXIA MPXA 00859000
|
|
PTPI = INT.[26:1]#, %[21:1] PTPI PROCESSOR 00860000
|
|
GCIF = INT.[25:1]#, % [22:1] GENERAL CONTROL 00861000
|
|
SDIS = INT.[23:2]#, %[24:2] SDIS SYLLABLE DEPENDENT00862000
|
|
ALRM = INT.[22:1]#, %[25:1] ALRM ALARM INTERRUPT 00863000
|
|
% GCIF & ALRM HAVE NOONES APPROVAL 00864000
|
|
DUMMYF = 0#; 00865000
|
|
REAL E, % 4 MEM. CYCLE REQUEST (MEM. INTERFACE) 00866000
|
|
RF; % 8 REPEAT FIELD REGISTER 00867000
|
|
REAL ICR1; % INTERRUPT CONTROL REGISTER 00868000
|
|
INTEGER 01000000
|
|
NSTACK, % VALUE USED FOR TRACING STACK 01001000
|
|
NDISPLAY; % VALUE USED FOR TRACING DISPLAYS 01002000
|
|
REAL TANK; % ABSOLUTE ADDRESS OF SAVE ARRAY TBUF 01003000
|
|
SAVE 01004000
|
|
ARRAY TBUF[0:16]; % FORMATING AREA FOR TRACE AND MEMDUMP 01005000
|
|
ALPHA MULFILID, FILID; % THE SOURCE FILE FOR INITIALIZE 01005100
|
|
REAL JUNK; 01007000
|
|
INTEGER INTG; 01008000
|
|
ARRAY MNEMONIC[0:2,0:255]; 01009000
|
|
INTEGER TS1; 01010000
|
|
SAVE ARRAY DELTAMASK[0:31]; % MASKS OUT DELTA PART OF ADRCPL FIELDS 01011000
|
|
SAVE ARRAY REFLECTION[0:31];% REFLECTS LL PARTS OF ADRCPL FIELDS 01012000
|
|
FILE TRACK 14(1,5); % DATA COM FILE TO READ TRACE PARAMETERS 01013000
|
|
DEFINE BITS=(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP 1 SB)#, 01014000
|
|
DIG=(DS:=3 RESET; 3 BITS)#, 01015000
|
|
PRINT=WRITE(LP,15,TBUF[*])#; 01016000
|
|
DEFINE HEADING = IF PRINTERNOTYETOPENED THEN 01017000
|
|
IF PRINTERNOTYETOPENED.[46:1] 01017250
|
|
THEN HEADINGLINE(TAPED) 01017500
|
|
ELSE HEADINGLINE(LP)#; 01017750
|
|
REAL INTMASKA, % INTERRUPT MASKS AND REGISTERS FOR MPXA AND MPXB 01018000
|
|
INTMASKB, % 10 BITS EACH 01019000
|
|
INTREGA, 01020000
|
|
INTREGB; 01021000
|
|
REAL SCANBUSA, SCANBUSAX,% SCAN AND DATA BUSES FOR MPXS 01022000
|
|
DATABUSA, DATABUSAX;% WITH MOVE EXTENSIONS 01023000
|
|
REAL ABORTTIME,% THE REAL TIME FOR NEXT ABORT INTERRUPT 01024000
|
|
IDLETIME ;% THE REAL TIME FOR NEXT INTERRUPT 01025000
|
|
REAL REALTIME, COMMENT THE TIME IN 100 NANOSECOND UNITS SINCE THE 01026000
|
|
BEGINNING OF SIMULATION. USED WITH TIMEOFDAY AND 01027000
|
|
REALETIME FOR SCAN IN AND OUT OF TIME OF DAY CLOCK.; 01028000
|
|
TIMEOFDAY, 01029000
|
|
REALETIME, 01030000
|
|
DELTATIME;COMMENT THE TIME INCREMENT SINCE THE REAL TIME CLOCK 01031000
|
|
WAS UPDATED. USUALLY THE TIME REQUIRED FOR AN OPER- 01032000
|
|
ATOR.; 01033000
|
|
%********************************************** 01200000
|
|
%***** B6500 FIELD ABBREVIATION DEFINES ***** 01201000
|
|
%********************************************** 01202000
|
|
DEFINE % ABBR. B5500 B6500 FIELD/BIT NAME 01203000
|
|
TAG = [44: 3]#, % [50: 3] TAG FIELD 01204000
|
|
% TAG VALUES... 01205000
|
|
SINGL = 0#, % SINGLE PRECISION OPERAND 01206000
|
|
IRW = 1#, % INDIRECT REFERENCE WORD 01207000
|
|
DOUBL = 2#, % DOUBLE PRECISION OPERAND 01208000
|
|
MEMLINK= 3#, % STORAGE LINK 01209000
|
|
CODE = 3#, % CODE 01210000
|
|
SEGDESC= 3#, % SEGMENT DESCRIPTOR 01211000
|
|
MSCW = 3#, % MARK STACK CONTROL WORD 01212000
|
|
TOS = 3#, % TOP OF STACK CONTROL WORD 01213000
|
|
RCW = 3#, % RETURN CONTROL WORD 01214000
|
|
SIW = 4#, % STEP INDEX WORD 01214100
|
|
DATADESC=5#, % DATA DESCRIPTOR 01215000
|
|
UNITAL = 6#, % UNINITIALIZED OPERAND 01216000
|
|
PCW = 7#, % PROGRAM CONTROL WORD (PGM DESC) 01217000
|
|
% END TAG VALUES 01218000
|
|
ROBIT = [46:1]#, % [48:1] READ ONLY FIELD 01219000
|
|
LOBIT = [47:1]#, % [0:1] LOW ORDER BIT 01220000
|
|
PBIT = [47: 1]#, % [47: 1] PRESENCE BIT (IN DATADESC,SEGDESC01221000
|
|
DSBIT = [47: 1]#, % [47: 1] DIFFERENT STACK BIT (IN MSCW) 01222000
|
|
SGNFF = [47:1]#, % [47:1] SGNF FIELD IN TOS CONTROL WORD 01223000
|
|
EXPEXT = [ 1: 8]#, % [47: 9] EXPONENT EXTENTION (DBL PREC) 01223100
|
|
INCRF = [ 1:11]#, % [47:12] INCREMENT FIELD (IN STEP INDEX) 01223500
|
|
CBIT = [ 1: 1]#, % [46: 1] COPY BIT (IN DATADESC,SEGDESC) 01224000
|
|
EBIT = [ 1: 1]#, % [46: 1] ENVIRONMENT BIT (IN IRW,MSCW) 01225000
|
|
SOBIT = [ 1: 1]#, % [46:1] SIGN OF OPERAND BIT 01226000
|
|
OFFFF = [1:1]#, % [46:1] OFFF FIELD IN TOS CONTROL WORD 01227000
|
|
IBIT = [ 2: 1]#, % [45: 1] INDEXED BIT 01228000
|
|
SEBIT = [ 2: 1]#, % [45: 1] SIGN OF EXPONENT BIT 01229000
|
|
TFFFF = [2:1]#, % [45:1] TFFF FIELD IN TOS CONTROL WORD 01230000
|
|
STKNR = [ 2:10]#, % [45:10] STACK NR FIELD (IN IRW,MSCW) 01231000
|
|
SBIT = [ 3: 1]#, % [44: 1] SEGMENTED BIT (DATADESC) 01232000
|
|
FLTFF = [ 3: 1]#, % [44: 1] FLOAT FLIP/FLOP 01232500
|
|
EXPF = [ 3: 6]#, % [44: 6] EXPONENT FIELD 01233000
|
|
SEXPF = [2:7]#, % [45:7] SIGNED EXPONENT FIELD 01234000
|
|
RBIT = [ 4: 1]#, % [43: 1] READ-ONLY-DATA BIT 01235000
|
|
SZ = [ 5: 3]#, % [42:3] CHARACTER SIZE FIELD 01236000
|
|
CHRSZ = [ 5: 2]#, % [42:2] CHARACTER SIZE IN DATA DESC. 01237000
|
|
CHARF = [ 8: 4]#, % [39: 4] CHARACTER NUMBER FIELD 01238000
|
|
DBIT = [ 7: 1]#, % [40: 1] DOUBLE PRECISION BIT (IN DATADESC01239000
|
|
SIBF = [ 7: 6]#, % [40: 6] SIB FOR STRING DESCRIPTORS 01240000
|
|
INDEX = [ 8:20]#, % [39:20] INDEX/LENGTH FIELD 01241000
|
|
LENGTH = [ 8:20]#, % [39:20] INDEX/LENGTH FIELD 01242000
|
|
DS = [8:20]#, % [39:20] DISPLACEMENT FIELD IN TOS CW 01243000
|
|
PSRF = [12: 3]#, % [35: 3] PSR FIELD (IN PCW, RCW) 01244000
|
|
MANF = [ 9:39]#, % [38:39] MANTISSA FIELD 01245000
|
|
PIRF = [15:13]#, % [32:13] PIR FIELD (IN PCW, RCW) 01246000
|
|
DISP = [12:16]#, % [35:16] BASE-OF-STACK-RELATIVE DISPLACMNT01247000
|
|
SIRF = [12:16]#, % [35:16] INDEX FIELD FOR STRING DESCRIPTORS01248000
|
|
FVF = [12:16]#, % [35:16] FINAL VALUE FIELD (IN SIW) 01248500
|
|
VBIT = [28: 1]#, % [19: 1] ACC. ENTRY ON VALC OR EVAL 01249000
|
|
NBIT = [28: 1]#, % [19: 1] NORMAL/CONTROL STATE BIT 01250000
|
|
NCSFF = [28:1]#, % [19:1] NCSF FIELD IN TOS CONTROL WORD 01251000
|
|
ADDR = [28:20]#, % [19:20] MEMORY ADDRESS/DISK ADDRESS FIELD01252000
|
|
LLF = [29: 5]#, % [18: 5] LL FIELD 01253000
|
|
CVF = [32:16]#, % [15:16] CURRENT VALUE FIELD (IN SIW) 01253500
|
|
ADRCPL = [34:14]#, % [13:14] ADDRESS COUPLE FIELD (11,DELTA) 01254000
|
|
ADRCPLSIR = [35:13]#, % [12:13] ADDRESS COUPLE STUFFED IRW(DEL) 01255000
|
|
DF = [34:14]#, % [13:14] SELF-RELATIVE INDEX 01256000
|
|
% TO PREVIOUS MSCW (LODELTAF) 01257000
|
|
LEVELPCW = [34:1]#,%[13:1] ONE BIT LEVEL ADDRESS PCW 01258000
|
|
DELTAPCW = [35:13]#,%[12:13] DELTA ADDRESS PCW 01259000
|
|
SDIF = [34:14]#; % [13:14] SEGMENT DICTIONARY INDEX FIELD 01260000
|
|
DEFINE 01261000
|
|
SBRF = ADDR#, 01262000
|
|
DBRF = ADDR#, 01263000
|
|
DIRF = SIRF#, TIRF = SIRF#, 01264000
|
|
DIBF = SIBF#, 01265000
|
|
DSZF = SZ #; 01266000
|
|
DEFINE % FUNCTION CODE DEFINES 6.33 01267000
|
|
MPXAB = [47: 1]#, % [ 0: 1] RESPONDING MULTIPLEXOR(S) 01268000
|
|
MPXFC = [43: 4]#, % [ 4: 4] MPX DESIGNATOR 01269000
|
|
VARIF = [39: 4]#, % [ 8: 4] SCAN VARIANT 01270000
|
|
GCARF = [37: 2]#, % [10: 2] GCA REGISTER 01271000
|
|
REGIV = [39: 1]#, % [ 9: 1] READ REGISTER VARIANT 01272000
|
|
VECTF = [36: 2]#, % [11: 2] VECTOR NUMBER 01273000
|
|
LUNIT = [31: 8]#; % [16: 8] LOGICAL UNIT NUMBER 01274000
|
|
DEFINE % RESULT ERROR DEFINES 01275000
|
|
RSLTPRO= [31: 1]#, % [16: 1] PROTECT TERMINATE ON MEMORY WRITE 01276000
|
|
RSLTEXC= [47: 1]#, % [ 0: 1] EXCEPTION 01277000
|
|
RSLTATT= [46: 1]#, % [ 1: 1] ATTENTION 01278000
|
|
RSLTBSY= [45: 1]#, % [ 2: 1] BUSY 01279000
|
|
RSLTNRY= [44: 1]#, % [ 3: 1] NOT READY 01280000
|
|
RSLTDSC= [43: 1]#, % [ 4: 1] DESCRIPTOR ERROR 01281000
|
|
RSLTMAD= [42: 1]#, % [ 5: 1] MEMORY ADDRESS 01282000
|
|
RSLTPAR= [41: 1]#; % [ 6: 1] MEMORY PARITY 01283000
|
|
DEFINE % RESULT DESCRIPTOR UNIT ERRORS 01284000
|
|
RSLTTO = [32: 1]#, % [15: 1] BLANK TAPE 01285000
|
|
RSLTRW = [33: 1]#, % [14: 1] REWINDING 01286000
|
|
RSLTOP = [34: 1]#, % [13: 1] NON-PRESENT 01287000
|
|
RSLTCR = [35: 1]#, % [12: 1] CRC CORRECTION 01288000
|
|
RSLTOF = [36: 1]#, % [11: 1] OVERFLOW 01289000
|
|
RSLTCC = [37: 1]#, % [10: 1] CONTROL CARD 01290000
|
|
RSLTVY = [38: 1]#, % [ 9: 1] VALIDITY 01291000
|
|
RSLTET = [39: 1]#, % [ 8: 1] END OF TAPE 01292000
|
|
RSLTMA = [40: 1]#, % [ 7: 1] MEMORY ACCESS 01293000
|
|
RSLTUF = RSLTCC#,% UNDERFLOW 01294000
|
|
RSLTWL = RSLTVY#;% WRITE LOCK-OUT 01295000
|
|
DEFINE % I/O CONTROL WORD DEFINES 01296000
|
|
IOABIT = [ 2: 1]#, % [45: 1] ATTENTION 01297000
|
|
IOWBIT = [ 3: 1]#, % [44: 1] MEMORY WRITE 01298000
|
|
IOIBIT = [ 4: 1]#, % [43: 1] MEMORY INHIBIT 01299000
|
|
IOXBIT = [ 5: 1]#, % [42: 1] TRANSLATE 01300000
|
|
IOSBIT = [ 6: 1]#, % [41: 1] FRAME LENGTH (0 = 6 BIT;1= 8 BIT)01301000
|
|
IOPBIT = [ 7: 1]#, % [40: 1] MEMORY PROTECT 01302000
|
|
IOBBIT = [ 8: 1]#, % [39: 1] BACKWARD TRANSFER 01303000
|
|
IOTBIT = [ 9: 1]#, % [38: 1] 01304000
|
|
IOTAGS = [10: 2]#, % [37: 1] & [36:1] TAG TRANSFER 01305000
|
|
IOSKIP = [12: 4]#, % [35: 4] PRINTER SKIP 01306000
|
|
IOSPAC = [16: 2]#; % [31: 2] PRINTER SPACE 01307000
|
|
DEFINE RECS = [24:10]#; % [23:10] TAPE SPACE 01308000
|
|
SAVE ARRAY MESS [0:BUFRMAX-1];%UTILITY INPUT-OUTPUT AREA 01309000
|
|
COMMENT BUFFERS IS INDEXED BY SWITCH FILE INDEX AND HARDWARE TYPE; 01310000
|
|
FILE DISKA DISK RANDOM [20:1000] (1, BUFFERS [0, 1],SAVE 99), 01311000
|
|
DISKB DISK RANDOM [20:1000] (1, BUFFERS [1, 1],SAVE 99), 01312000
|
|
DISKC DISK RANDOM [20:1000] (1, BUFFERS [2, 1],SAVE 99), 01313000
|
|
DISKD DISK RANDOM [20:1000] (1, BUFFERS [3, 1],SAVE 99), 01314000
|
|
SPO 14 (1, BUFFERS [0, 2]), 01315000
|
|
AIDS 14 (1, BUFFERS [0, 3]), 01316000
|
|
LP 4 (1, BUFFERS [0, 6]), 01317000
|
|
SIMLP 14 (1, BUFFERS [1, 6]), 01318000
|
|
CARD (1, BUFFERS [0, 9]), 01319000
|
|
PUNCH 0 (1, BUFFERS [0,10]), 01320000
|
|
TAPEA 2 (1, BUFFERS [0,13], SAVE 1), 01321000
|
|
TAPEB 2 (1, BUFFERS [1,13], SAVE 1), 01322000
|
|
TAPEC 2 (1, BUFFERS [2,13], SAVE 1), 01323000
|
|
TAPED 2 (1, BUFFERS [3,13], SAVE 1); 01324000
|
|
SWITCH FILE TAPES ~ TAPEA, TAPEB, TAPEC, TAPED; 01325000
|
|
SWITCH FILE DISKS ~ DISKA, DISKB, DISKC, DISKD; 01326000
|
|
SWITCH FILE LINES ~ LP, SIMLP; 01327000
|
|
COMMENT 01328000
|
|
******************************* 01329000
|
|
***** B6500 WORD FORMAT ***** 01330000
|
|
******************************* 01331000
|
|
SEGMENT DESCRIPTOR 01332000
|
|
5 5 4 4 4 4 4 4 4 4 3 2 1 01333000
|
|
1 0 8 7 6 5 4 3 2 0 9 0 9 0 01334000
|
|
-------------------------------------------------------------- 01335000
|
|
:X:011:P:C: UNUSED : LENGTH : ADDR : 01336000
|
|
-------------------------------------------------------------- 01337000
|
|
INDIRECT REFERENCE WORD (NORMAL) 01338000
|
|
5 5 4 4 4 4 1 1 01339000
|
|
1 0 8 7 6 5 4 3 0 01340000
|
|
-------------------------------------------------------------- 01341000
|
|
:X:001:U:0: . . . . . .UNUSED. . . . . . . . :ADDRESSCOUPLE : 01342000
|
|
-------------------------------------------------------------- 01343000
|
|
INDIRECT REFERENCE WORD (STUFFED) 01343100
|
|
5 5 4 4 4 4 3 3 2 1 1 1 . 01343200
|
|
1 0 8 7 6 5 6 5 0 9 3 2 0 01343300
|
|
-------------------------------------------------------------- 01343400
|
|
:X:001:U:1: STKNR : DISP :UNUSED :INDEX FIELD : 01343500
|
|
-------------------------------------------------------------- 01343600
|
|
MARK STACK CONTROL WORD 01344000
|
|
5 5 4 4 4 4 3 3 2 1 1 1 1 01345000
|
|
1 0 8 7 6 5 6 5 0 9 8 4 3 0 01346000
|
|
-------------------------------------------------------------- 01347000
|
|
:X:011:DS:E: STKNR : DISP :V:LLF: DF : 01348000
|
|
-------------------------------------------------------------- 01349000
|
|
PROGRAM CONTROL WORD 01350000
|
|
5 5 4 4 4 4 3 3 3 3 2 1 1 1 1 01351000
|
|
1 0 8 7 6 5 6 5 3 2 0 9 8 4 3 0 01352000
|
|
-------------------------------------------------------------- 01353000
|
|
:X:111:UU : STKNR : PSRF : PIRF :N:LLF: SDIF : 01354000
|
|
-------------------------------------------------------------- 01355000
|
|
RETURN CONTROL WORD 01356000
|
|
5 5 4 4 4 4 4 4 3 3 3 3 2 1 1 1 1 01357000
|
|
1 0 8 7 6 5 4 3 6 5 3 2 0 9 8 4 3 0 01358000
|
|
-------------------------------------------------------------- 01359000
|
|
:X:011:X:O:T:F: UNUSED : PSRF : PIRF :N:LLF: SDIF : 01360000
|
|
-------------------------------------------------------------- 01361000
|
|
SINGLE PRECISION OPERAND 01362000
|
|
5 5 4 4 4 4 4 3 3 01363000
|
|
1 0 8 7 6 5 4 9 8 01364000
|
|
-------------------------------------------------------------- 01365000
|
|
:X:000:U:SO:SE: EXPF : MANF : 01366000
|
|
-------------------------------------------------------------- 01367000
|
|
DOUBLE PRECISION OPERAND 01368000
|
|
5 5 4 4 4 4 4 3 3 (FIRST HALF) 01369000
|
|
1 0 8 7 6 5 4 9 8 0 01370000
|
|
-------------------------------------------------------------- 01371000
|
|
:X:010:U:SO:SE: EXPX : MANF : 01372000
|
|
-------------------------------------------------------------- 01373000
|
|
5 5 4 4 3 3 (SECOND HALF) 01374000
|
|
1 0 8 7 9 8 0 01375000
|
|
-------------------------------------------------------------- 01376000
|
|
:X:010: EXPD EXT. : MANF : 01377000
|
|
-------------------------------------------------------------- 01378000
|
|
WORD DATA DESCRIPTOR 01379000
|
|
5 5 4 4 4 4 4 4 44 4 3 2 1 01380000
|
|
1 0 8 7 6 5 4 3 21 0 9 0 9 0 01381000
|
|
-------------------------------------------------------------- 01382000
|
|
:X:101:P:C:I:S:R:SZ:D: LENGTH/INDEX : ADDR : 01383000
|
|
-------------------------------------------------------------- 01384000
|
|
STRING DESCRIPTOR (NON-INDEXED) 01385000
|
|
5 5 4 4 4 4 4 4 44 4 3 2 1 01386000
|
|
1 0 8 7 6 5 4 3 21 0 9 0 9 0 01387000
|
|
-------------------------------------------------------------- 01388000
|
|
:X:101:P:C:O:S:R: SZ : LENGTH IN CHR : ADDR : 01389000
|
|
-------------------------------------------------------------- 01390000
|
|
STRING DESCRIPTOR (INDEXED) 01391000
|
|
5 5 4 4 4 4 4 4 44 4 3 3 2 1 01392000
|
|
1 0 8 7 6 5 4 3 21 0 5 4 0 9 0 01393000
|
|
-------------------------------------------------------------- 01394000
|
|
:X:101:P:C:1:S:R: SZ :BYTE INX:WORD INDEX: ADDR : 01395000
|
|
-------------------------------------------------------------- 01396000
|
|
STEP INDEX WORD 01397000
|
|
5 5 4 4 3 3 2 1 1 1 01398000
|
|
1 0 8 7 6 5 0 9 6 5 0 01399000
|
|
-------------------------------------------------------------- 01400000
|
|
:X:100: INCREMENT : FINAL VALUE : U :CURRENT VALUE : 01401000
|
|
-------------------------------------------------------------- 01402000
|
|
; 01403000
|
|
%******************************************** 01600000
|
|
%***** FORWARD PROCEDURE DECLARATIONS ***** 01601000
|
|
%******************************************** 01602000
|
|
%%%%% BEGIN OPERATOR FORWARDS %%%%%%%%%% 01603000
|
|
DEFINE V = PROCEDURE#, W = ; FORWARD;#; 01604000
|
|
V MKST W V IMKS W V NAMC W V VALC W V EVAL W V ENTR W V EXIT W V RETN W 01605000
|
|
V IRWL W V PCWL W V BRUN W V BRTR W V BRFL W V DBUN W V DBTR W V DBFL W 01606000
|
|
V NOOP W V HALT W V NVLD W V VARI W V ADD W V SUBT W V MULT W V MULX W 01607000
|
|
V DIVD W V IDIV W V RDIV W V NTIA W V NTGR W V SNGT W V SNGL W V XTND W 01608000
|
|
V JOIN W V SPLT W V LAND W V LOR W V LNOT W V SAME W V LEQV W V GRTR W 01609000
|
|
V GREQ W V EQUL W V LSEQ W V LESS W V NEQL W V INDX W V STBR W V NXLN W 01610000
|
|
V NXLV W V LOAD W V LODT W V EXCH W V RSDN W V RSUP W V DUPL W V DLET W 01611000
|
|
V MVST W V PUSH W V STOD W V STON W V OVRD W V OVRN W V FLTR W V DFTR W 01612000
|
|
V ISOL W V DISO W V INSR W V DINS W V SRCH W V LLLU W V ZERO W V ONE W 01613000
|
|
V LT8 W V LT16 W V LT48 W V MPCW W V BSET W V DBST W V BRST W V DBRS W 01614000
|
|
V CHSN W V CBON W V LOG2 W V STAG W V RTAG W V SINT W V RDLK W V STFF W 01615000
|
|
V WHOI W V EEXI W V DEXI W V IDLE W V HEYU W V RPRR W V SPRR W V SCNI W 01616000
|
|
V SCNO W V TWSD W V TWSU W V TWOD W V TWOU W V TGTD W V TGTU W V TGED W 01617000
|
|
V TGEU W V TEQD W V TEQU W V TLED W V TLEU W V TLSD W V TLSU W V TNED W 01618000
|
|
V TNEU W V TWTD W V TWTU W V TWFD W V TWFU W V TUND W V TUNU W V SGTD W 01619000
|
|
V SGTU W V SGED W V SGEU W V SEQD W V SEQU W V SLED W V SLEU W V SLSD W 01620000
|
|
V SLSU W V SNED W V SNEU W V SWTD W V SWTU W V SWFD W V SWFU W V CGTD W 01621000
|
|
V CGTU W V CGED W V CGEU W V CEQD W V CEQU W V CLED W V CLEU W V CLSD W 01622000
|
|
V CLSU W V CNED W V CNEU W V UABD W V UABU W V USND W V USNU W V PACD W 01623000
|
|
V PACU W V TRNS W V SCLF W V DSLF W V SCRS W V DSRS W V SCRT W V DSRT W 01624000
|
|
V SCRR W V DSRR W V SCRF W V DSRF W V OCRX W V SISO W V SXSN W V RTFF W 01625000
|
|
V ROFF W V ICVD W V ICVU W V TEED W V TEEU W V EXSD W V EXSU W V EXPU W 01626000
|
|
V MCHR W V MVNU W V SFSC W V SRSC W V SFDC W V SRDC W V INSU W V INSC W 01627000
|
|
V INSG W V INOP W V RSTF W V ENDF W V MINS W V MFLT W V ENDE W 01628000
|
|
%%%%% END OPERATOR FORWARDS %%%%%%%%%% 01629000
|
|
DEFINE CHECOP=( (AX.TAG=SINGL OR AX.TAG=DOUBL ) 01700000
|
|
AND(BX.TAG=SINGL OR BX.TAG=DOUBL))#, 01701000
|
|
CHECOPRNDB=IF NOT (BX.TAG=SINGL OR BX.TAG=DOUBL) 01702000
|
|
THEN BEGIN SETINTERRUPT (INVOP)#, 01703000
|
|
CHECOPRNDA=IF NOT (AX.TAG=SINGL OR AX.TAG=DOUBL) 01704000
|
|
THEN BEGIN SETINTERRUPT(INVOP)#; 01705000
|
|
DEFINE PRESENCEBITINTERRUPT= 01706000
|
|
BEGIN SETINTERRUPT(PRESBIT); GO TO OC END#, 01707000
|
|
INVALIDINDEXINTERRUPT= 01708000
|
|
BEGIN SETINTERRUPT(INVINXI); GO TO OC END#, 01709000
|
|
INVALIDOPERATORINTERRUPT= 01710000
|
|
BEGIN SETINTERRUPT(INVOP); GO TO OC END#; 01711000
|
|
PROCEDURE ADJ(NEWAROF,NEWBROF); VALUE NEWAROF,NEWBROF; 01712000
|
|
INTEGER NEWAROF,NEWBROF; FORWARD; 01713000
|
|
STREAM PROCEDURE MOVE(SOURCE,DESTINATION); 01714000
|
|
BEGIN SI~SOURCE; DI~DESTINATION; DS~2 WDS; END MOVE; 01715000
|
|
PROCEDURE ERROR(ERRNUM); VALUE ERRNUM; REAL ERRNUM; FORWARD; 01716000
|
|
BOOLEAN PROCEDURE EQUAL (A,AX,B,BX); VALUE A,AX,B,BX; REAL A,AX,B,BX; 01717000
|
|
EQUAL ~ (AX.[44:4] = BX.[44:4]) AND 01718000
|
|
(REAL(BOOLEAN(A) EQV BOOLEAN (B)) = REAL (NOT FALSE)); 01719000
|
|
STREAM PROCEDURE DYALS (P, A, N, N1, TURN); VALUE N, N1, TURN; 01720000
|
|
BEGIN 01721000
|
|
DI ~ P; SI ~ P; SI ~ SI + 15; 01722000
|
|
SKIP 5 SB; IF SB THEN DS ~ SET ELSE DS ~ RESET; 01723000
|
|
SI ~ A; SI ~ SI + 15; SKIP 5 SB; 01724000
|
|
DI ~ A; IF SB THEN DS ~ SET ELSE DS ~ RESET; 01725000
|
|
SI ~ P; DI ~ A; SKIP N SB; SKIP N1 DB; TURN BITS; 01726000
|
|
DI ~ A; DI ~ DI + 15; SKIP 5 DB; 01727000
|
|
SI ~ A; IF SB THEN DS ~ SET ELSE DS ~ RESET; 01728000
|
|
DI ~ P; DS ~ RESET; 01729000
|
|
DI ~ A; DS ~ RESET; 01730000
|
|
END OF DYAL; 01731000
|
|
PROCEDURE DYAL (P, A, N, N1, TURN); VALUE N, N1, TURN; 01732000
|
|
REAL P, A; 01733000
|
|
INTEGER N, N1, TURN; 01734000
|
|
BEGIN 01735000
|
|
INTEGER NN, NN1; 01736000
|
|
NN ~ 47-N; 01737000
|
|
NN1 ~ 47-N1; 01738000
|
|
DYALS (P, A, NN, NN1, TURN); 01739000
|
|
END; 01740000
|
|
DEFINE SYLLABLE = (IF PROF THEN SYLLABLES[PSR] ELSE PSYLLABLES)#; 01741000
|
|
INTEGER ARRAY SYLLABLES[0:5]; 01742000
|
|
INTEGER PROCEDURE PSYLLABLES; FORWARD; % RETURNS P[PSR] 01743000
|
|
PROCEDURE STEPPSR(N); VALUE N; INTEGER N; FORWARD; % STEPS PSR+PIR,PROF 01744000
|
|
PROCEDURE TRACE; FORWARD; 01745000
|
|
PROCEDURE MEMDUMP; FORWARD; 01746000
|
|
PROCEDURE SETINTERRUPT(I); VALUE I; INTEGER I; FORWARD; 01747000
|
|
INTEGER PROCEDURE LEVEL(WORD); VALUE WORD; REAL WORD; FORWARD; 01748000
|
|
INTEGER PROCEDURE DELTA(WORD); VALUE WORD; REAL WORD; FORWARD; 01749000
|
|
PROCEDURE ERVSFLOW(OP); VALUE OP; INTEGER OP; FORWARD; 01750000
|
|
BOOLEAN PROCEDURE INTEGERIZE(ROUND,REG);VALUE ROUND; 01751000
|
|
BOOLEAN ROUND; REAL REG; FORWARD; 01752000
|
|
REAL PROCEDURE GETRESULT (MPXAB); VALUE MPXAB; REAL MPXAB; FORWARD; 01753000
|
|
PROCEDURE STORE(OP); VALUE OP; REAL OP; FORWARD; 01754000
|
|
PROCEDURE WRITETIME; FORWARD; % WRITES OUT TIME SINCE INITIALIZATION 01755000
|
|
PROCEDURE HEADINGLINE (LP); FILE LP; FORWARD; 01756000
|
|
PROCEDURE INTFAMD(TYPE); VALUE TYPE; REAL TYPE; 01757000
|
|
BEGIN 01757100
|
|
LABEL INVALIDOP1 , INVALIDOP2 , INVALIDOP3 , INVALIDOP4 , 01757200
|
|
INVALIDOP5 , MEMPROT , 01757300
|
|
INVINDX2 , PRESBIT1 , PRESBIT2 01757400
|
|
,OC , LO , BACKUP , L2 01757500
|
|
; 01757600
|
|
SWITCH INTERRUPT ~ 01757700
|
|
INVALIDOP1 , INVALIDOP2 , INVALIDOP3 , INVALIDOP4 , 01757701
|
|
INVALIDOP5 , MEMPROT , 01757702
|
|
INVINDX2 , PRESBIT1 , PRESBIT2 01757703
|
|
; 01757704
|
|
GO TO INTERRUPT[TYPE]; 01757800
|
|
INVALIDOP1: ADJ(0,0); GO LO; 01757900
|
|
INVALIDOP2: ADJ(0,0); MOVE(C,A); GO LO; 01758000
|
|
INVALIDOP3: MOVE(B,A); GO LO; 01758100
|
|
INVALIDOP4: AROF ~ TRUE; MOVE(B,A); ADJ(1,0); GO LO; 01758200
|
|
INVALIDOP5: ADJ(0,0); MOVE(B,A); 01758300
|
|
LO: BX ~ 0; 01758400
|
|
AROF ~ BROF ~ TRUE; SDIS ~ 1; 01758500
|
|
B ~ INVOP ; 01758600
|
|
BACKUP: 01758700
|
|
PIR ~ PIR - PICR; PSR ~ OPSR; GO OC; 01758800
|
|
MEMPROT: 01758900
|
|
ADJ(0,0); 01759000
|
|
MOVE(C,A); 01759100
|
|
BX ~ 0; 01759200
|
|
AROF~BROF~TRUE; SDIS ~ 1; 01759300
|
|
B ~ MEMPROI; 01759400
|
|
GO BACKUP; 01759500
|
|
INVINDX2: 01759600
|
|
ADJ(0,0); 01759700
|
|
BX ~ A ~ AX ~ 0; 01759800
|
|
AROF~BROF~TRUE; SDIS ~ 1; 01759900
|
|
B ~ INVINXI; 01760000
|
|
GO BACKUP; 01760100
|
|
PRESBIT1: 01760200
|
|
AROF~FALSE; 01760250
|
|
ADJ(0,0); 01760300
|
|
MOVE(C,A); 01760500
|
|
GO L2; 01760600
|
|
PRESBIT2: 01760700
|
|
MOVE(X,A); 01760800
|
|
AROF ~ TRUE; 01760900
|
|
ADJ(0,0); 01761000
|
|
MOVE(C,A); 01761200
|
|
AROF ~ TRUE; 01761300
|
|
ADJ(0,0); 01761400
|
|
L2: 01761500
|
|
BX ~ 0; 01761600
|
|
AROF~BROF~TRUE; SDIS ~ 1; 01761700
|
|
B ~ PRESBIT; 01761800
|
|
B.SOBIT ~ 1; 01761900
|
|
GO BACKUP; 01762000
|
|
OC: 01762100
|
|
END; 01762200
|
|
01762300
|
|
PROCEDURE INTFAMA(TYPE); VALUE TYPE; REAL TYPE; 01765000
|
|
BEGIN 01765100
|
|
DEFINE CLEARAB = A~AX~B~BX ~ 0#; 01765200
|
|
IF TYPE < 0 THEN 01765300
|
|
BEGIN 01765400
|
|
ADJ(0,0); 01765500
|
|
CLEARAB; 01765600
|
|
B ~ INVOP; 01765700
|
|
01765800
|
|
END ELSE 01765900
|
|
BEGIN 01766000
|
|
CLEARAB; 01766100
|
|
B ~ ABS(TYPE); 01766200
|
|
END; 01766300
|
|
AROF ~ BROF ~ TRUE; 01766400
|
|
SDIS ~ 1; 01766500
|
|
PIR ~ PIR - PICR; PSR ~ OPSR; 01766600
|
|
END INTFAMD; 01766700
|
|
PROCEDURE INTFAMB(TYPE); VALUE TYPE; REAL TYPE; 01767000
|
|
BEGIN 01767100
|
|
01767200
|
|
IF TYPE=2 THEN 01767300
|
|
BEGIN 01767400
|
|
ADJ(0,0); MOVE(C,A); 01767500
|
|
END ELSE 01767600
|
|
MOVE(B,A); 01767700
|
|
B ~ BX ~ 0; 01767800
|
|
SDIS ~ 1; 01767900
|
|
BROF ~ AROF ~ TRUE; 01768000
|
|
B ~ INVOP; 01768100
|
|
PIR ~ PIR - PICR; PSR ~ OPSR; 01768200
|
|
END INFAMB; 01768300
|
|
PROCEDURE INTERRUPTCONTROLLER; 01800000
|
|
IF BOOLEAN (PTPI) THEN INT ~ 0 ELSE % IGNORE PROC TO PROC IN SIM01800100
|
|
BEGIN COMMENT INTERRUPT CONTROLLER IS PRIMARILY CONCERNED WITH01801000
|
|
MAKING THE STACK LOOK LIKE A PROCEDURE IS TO BE 01802000
|
|
CALLED AND THEN CALLING IT. MUCH OF THE CURRENT CODE01803000
|
|
IS CONCERNED WITH INFORMING PEOPLE AS TO WHAT IS 01804000
|
|
HAPPENING. 01805000
|
|
9/12/67; 01806000
|
|
REAL TEMPB, SWFI; 01807000
|
|
DEFINE 01808000
|
|
BASSDI = 0#, 01809000
|
|
BASEXI = 10#, 01810000
|
|
BASGCI = 12#, 01811000
|
|
BASALI = 14#; 01812000
|
|
SWITCH FORMAT INTS 01813000
|
|
~(10 ("X"), " INTERRUPT ERROR." ,X2,10("X"))01814000
|
|
,(10 ("X"), " MEMORY PROTECT INTERRUPT." ,X2,10("X"))01815000
|
|
,(10 ("X"), " INVALID OPERATOR INTERRUPT." ,X2,10("X"))01816000
|
|
,(10 ("X"), " DIVIDE BY ZERO INTERRUPT." ,X2,10("X"))01817000
|
|
,(10 ("X"), " EXPONENT OVERFLOW INTERRUPT." ,X2,10("X"))01818000
|
|
,(10 ("X"), " EXPONENT UNDERFLOW INTERRUPT." ,X2,10("X"))01819000
|
|
,(10 ("X"), " INVALID INDEX INTERRUPT." ,X2,10("X"))01820000
|
|
,(10 ("X"), " INTEGER OVERFLOW INTERRUPT." ,X2,10("X"))01821000
|
|
,(10 ("X"), " BOTTOM OF STACK INTERRUPT." ,X2,10("X"))01822000
|
|
,(10 ("X"), " PRESENCE BIT INTERRUPT." ,X2,10("X"))01823000
|
|
,(10 ("X"), " SEQUENCE ERROR INTERRUPT," ,X2,10("X"))01824000
|
|
,(10 ("X"), " MULTIPLEXOR A INTERRUPT." ,X2,10("X"))01825000
|
|
,(10 ("X"), " MULTIPLEXOR B INTERRUPT." ,X2,10("X"))01826000
|
|
,(10 ("X"), " INTERVAL TIMER INTERRURT." ,X2,10("X"))01827000
|
|
,(10 ("X"), " STACK OVERFLOW INTERRUPT." ,X2,10("X"))01828000
|
|
,(10 ("X"), " OPERATOR LOOP INTERRUPT." ,X2,10("X"))01829000
|
|
,(10 ("X"), " MEMORY PARITY INTERRUPT." ,X2,10("X"))01830000
|
|
,(10 ("X"), " MULTIPLEXOR PARITY INTERRUPT." ,X2,10("X"))01831000
|
|
,(10 ("X"), " INVALID ADDRESS INTERRUPT." ,X2,10("X"))01832000
|
|
,(10 ("X"), " STACK UNDERFLOW INTERRUPT." ,X2,10("X"))01833000
|
|
; 01834000
|
|
IF SDIS ! 0 01835000
|
|
THEN BEGIN 01836000
|
|
TEMPB ~ B; 01837000
|
|
ADJ (0, 0); 01838000
|
|
AX ~ 0; 01839000
|
|
AROF ~ TRUE; 01840000
|
|
A ~ 0 & TEMPB [33:33:15]; 01841000
|
|
LOG2; 01842000
|
|
SWFI ~ B; 01843000
|
|
BROF ~ FALSE; 01844000
|
|
ADJ (1, 1); 01845000
|
|
MOVE (M[D[0] +3], C); 01846000
|
|
IF CX.TAG ! PCW 01847000
|
|
THEN BEGIN 01848000
|
|
WRITE(LP [DBL], INTS [SWFI]); 01849000
|
|
MEMDUMP; 01850000
|
|
GO EOJ; 01851000
|
|
END; 01852000
|
|
END 01853000
|
|
ELSE IF EXIA ! 0 01854000
|
|
THEN BEGIN 01855000
|
|
SWFI ~ BASEXI + B - EXTINTI; 01856000
|
|
IF SWFI > BASGCI THEN SWFI ~ BASEXI + 1; 01856100
|
|
END 01857000
|
|
ELSE IF GCIF ! 0 01858000
|
|
THEN BEGIN 01859000
|
|
SWFI ~ B - INTTIMI + BASGCI + 1; 01860000
|
|
INTTIMER ~ 2*36 ; 01861000
|
|
END 01862000
|
|
ELSE IF INT.[43:5] ! 0 01863000
|
|
%LOOP + MPEI + MPXP + INVA + SUFL !0 01864000
|
|
THEN BEGIN 01865000
|
|
TEMPB ~ B; 01866000
|
|
ADJ (0, 0); 01866100
|
|
A ~ B - LOOPI + 1; AX ~ 0; 01866200
|
|
AROF ~ TRUE; 01866300
|
|
LOG2; 01866400
|
|
SWFI ~ B + BASALI; 01866450
|
|
BROF ~ FALSE; 01866600
|
|
ADJ (1, 1); 01866700
|
|
END 01867000
|
|
ELSE ERROR (101); 01868000
|
|
IMKS; 01869000
|
|
ADJ (0, 1); 01870000
|
|
A ~ 3; 01871000
|
|
AX.TAG ~ IRW; 01872000
|
|
AROF ~ TRUE; 01873000
|
|
RSDN; 01874000
|
|
ENTR; 01875000
|
|
INT ~ 0; 01876000
|
|
IF NOT (TRACEWORD = 0 OR (TRACEWORD } 100 AND TRACTER = 0)) 01877000
|
|
THEN BEGIN 01878000
|
|
WRITE (LP, INTS [SWFI MOD 20]); 01879000
|
|
END; 01880000
|
|
END INTERRUPT CONTROLLER; 01881000
|
|
PROCEDURE TIMING (OP); 01882000
|
|
VALUE OP; 01883000
|
|
INTEGER OP; 01884000
|
|
BEGIN 01885000
|
|
DELTATIME ~ DELTATIME + OP.[41:6]; %%%%%%%%%%% 01886000
|
|
REALTIME ~ REALTIME + DELTATIME; 01887000
|
|
TIMEOFDAY ~ TIMEOFDAY + DELTATIME; 01887100
|
|
DELTATIME ~ 0; 01888000
|
|
END; 01889000
|
|
PROCEDURE CONTROLSECTION; 02000000
|
|
BEGIN 02001000
|
|
DEFINE VARIANTESCAPE = 149#, 02002000
|
|
SINGLESHOTESCAPED = 210#, 02003000
|
|
TRACESCAPE = 202#, 02004000
|
|
SINGLESHOTESCAPEU = 218#; 02005000
|
|
DEFINE XXXX = NVLD#; 02006000
|
|
DEFINE PRIMARYMODETABLE = 02007000
|
|
BEGIN 02008000
|
|
VALC; VALC; VALC; VALC; VALC; VALC; VALC; VALC; 02009000
|
|
VALC; VALC; VALC; VALC; VALC; VALC; VALC; VALC; 02010000
|
|
VALC; VALC; VALC; VALC; VALC; VALC; VALC; VALC; 02011000
|
|
VALC; VALC; VALC; VALC; VALC; VALC; VALC; VALC; 02012000
|
|
VALC; VALC; VALC; VALC; VALC; VALC; VALC; VALC; 02013000
|
|
VALC; VALC; VALC; VALC; VALC; VALC; VALC; VALC; 02014000
|
|
VALC; VALC; VALC; VALC; VALC; VALC; VALC; VALC; 02015000
|
|
VALC; VALC; VALC; VALC; VALC; VALC; VALC; VALC; 02016000
|
|
NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; 02017000
|
|
NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; 02018000
|
|
NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; 02019000
|
|
NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; 02020000
|
|
NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; 02021000
|
|
NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; 02022000
|
|
NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; 02023000
|
|
NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; NAMC; 02024000
|
|
ADD ; SUBT; MULT; DIVD; IDIV; RDIV; NTIA; NTGR; 02025000
|
|
LESS; GREQ; GRTR; LSEQ; EQUL; NEQL; CHSN; MULX; 02026000
|
|
LAND; LOR ; LNOT; LEQV; SAME; VARI; BSET; DBST; 02027000
|
|
FLTR; DFTR; ISOL; DISO; INSR; DINS; BRST; DBRS; 02028000
|
|
BRFL; BRTR; BRUN; EXIT; STBR; NXLN; INDX; RETN; 02029000
|
|
DBFL; DBTR; DBUN; ENTR; EVAL; NXLV; MKST; STFF; 02030000
|
|
ZERO; ONE ; LT8 ; LT16; PUSH; DLET; EXCH; DUPL; 02031000
|
|
STOD; STON; OVRD; OVRN; XXXX; LOAD; LT48; MPCW; 02032000
|
|
SCLF; DSLF; SCRT; DSRT; SCRS; DSRS; SCRF; DSRF; 02033000
|
|
SCRR; DSRR; ICVD; ICVU; SNGT; SNGL; XTND; IMKS; 02034000
|
|
TEED; PACD; EXSD; TWSD; TWOD; SISO; SXSN; ROFF; 02035000
|
|
TEEU; PACU; EXSU; TWSU; TWOU; EXPU; RTFF; HALT; 02036000
|
|
TLSD; TGED; TGTD; TLED; TEQD; TNED; TUND; XXXX; 02037000
|
|
TLSU; TGEU; TGTU; TLEU; TEQU; TNEU; TUNU; XXXX; 02038000
|
|
CLSD; CGED; CGTD; CLED; CEQD; CNED; XXXX; XXXX; 02039000
|
|
CLSU; CGEU; CGTU; CLEU; CEQU; CNEU; NOOP; NVLD; 02040000
|
|
END#; % OF PRIMARYMODETABLE 02041000
|
|
DEFINE VARIANTMODETABLE = 02042000
|
|
BEGIN 02043000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02044000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02045000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02046000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02047000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02048000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02049000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02050000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02051000
|
|
XXXX; XXXX; JOIN; SPLT; IDLE; SINT; EEXI; DEXI; 02052000
|
|
XXXX; XXXX; SCNI; SCNO; XXXX; XXXX; WHOI; HEYU; 02053000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02054000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02055000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02056000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02057000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02058000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02059000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; OCRX; XXXX; XXXX; 02060000
|
|
XXXX; XXXX; XXXX; LOG2; XXXX; XXXX; XXXX; XXXX; 02061000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02062000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02063000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02064000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; IRWL; PCWL; MVST; 02065000
|
|
XXXX; XXXX; XXXX; XXXX; STAG; RTAG; RSUP; RSDN; 02066000
|
|
RPRR; SPRR; RDLK; CBON; LODT; LLLU; SRCH; XXXX; 02067000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02068000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02069000
|
|
USND; UABD; TWFD; TWTD; SWFD; SWTD; XXXX; TRNS; 02070000
|
|
USNU; UABU; TWFU; TWTU; SWFU; SWTU; XXXX; HALT; 02071000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02072000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02073000
|
|
SLSD; SGED; SGTD; SLED; SEQD; SNED; XXXX; XXXX; 02074000
|
|
SLSU; SGEU; SGTU; SLEU; SEQU; SNEU; NOOP; NVLD; 02075000
|
|
END#; % OF VARIANTMODETABLE 02076000
|
|
DEFINE EDITMODETABLE = 02077000
|
|
BEGIN 02078000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02079000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02080000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02081000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02082000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02083000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02084000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02085000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02086000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02087000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02088000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02089000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02090000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02091000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02092000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02093000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02094000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02095000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02096000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02097000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02098000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02099000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02100000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02101000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02102000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02103000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02104000
|
|
MINS; MFLT; SFSC; SRSC; RSTF; ENDF; MVNU; MCHR; 02105000
|
|
INOP; INSG; SFDC; SRDC; INSU; INSC; ENDE; HALT; 02106000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02107000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02108000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; 02109000
|
|
XXXX; XXXX; XXXX; XXXX; XXXX; XXXX; NOOP; NVLD; 02110000
|
|
END#; % OF EDITMODETABLE 02111000
|
|
LABEL PSC,ESCP; 02112000
|
|
PSC: VARF~FALSE; 02113000
|
|
Q ~ QP ~ N ~ 0; 02114000
|
|
OPSR ~ PSR; 02116000
|
|
PICR ~ 0; 02117000
|
|
ESCP:IF (TS1~REAL(VARF)+REAL(LEEF)+REAL(TEEF)+REAL(SEEF))>1 THEN 02118000
|
|
BEGIN ERROR(0); MEMDUMP; GO TO EOJ; 02119000
|
|
END; 02120000
|
|
T~SYLLABLE; 02121000
|
|
IF TS1=0 THEN 02122000
|
|
IF (VARF~(T=VARIANTESCAPE)) THEN 02123000
|
|
BEGIN 02124000
|
|
STEPPSR (1); 02125000
|
|
GO TO ESCP; 02126000
|
|
END 02127000
|
|
ELSE IF T = TRACESCAPE THEN 02128000
|
|
BEGIN STEPPSR(1); TRACTER ~ SYLLABLE; 02129000
|
|
STEPPSR(1); GO TO PSC; 02130000
|
|
END 02131000
|
|
ELSE IF NOT BOOLEAN(T.[40:1]) THEN DRS.[42:6] ~ T; 02132000
|
|
STEPPSR (1); 02133000
|
|
IF TS1=0 THEN CASE T OF PRIMARYMODETABLE 02134000
|
|
ELSE IF VARF THEN CASE T OF VARIANTMODETABLE 02135000
|
|
ELSE CASE T OF EDITMODETABLE; 02136000
|
|
IF STKOVFF THEN BEGIN SETINTERRUPT(STKOVFI); STKOVFF~FALSE END;02136100
|
|
TIMING (T); 02137000
|
|
END OF CONTROL SECTION; 02138000
|
|
INTEGER PROCEDURE PSYLLABLES; 04000000
|
|
BEGIN 04001000
|
|
IF NOT PROF THEN 04002000
|
|
BEGIN MOVE(M[PIR+PBR],P); MEMCYCLE; 04003000
|
|
IF PX.TAG!CODE THEN SETINTERRUPT(INVOP); 04004000
|
|
PROF:=TRUE; 04005000
|
|
SYLLABLES[0] ~P.[ 1:7] & PX [40:47:1]; 04006000
|
|
SYLLABLES[1] ~ P.[8:8]; 04007000
|
|
SYLLABLES[2] ~ P.[16:8]; 04008000
|
|
SYLLABLES[3] ~ P.[24:8]; 04009000
|
|
SYLLABLES[4] ~ P.[32:8]; 04010000
|
|
SYLLABLES[5] ~ P.[40:8]; 04011000
|
|
END; 04012000
|
|
PSYLLABLES ~ SYLLABLES[PSR]; 04013000
|
|
END PSYLLABLES; 04014000
|
|
PROCEDURE STEPPSR(N); VALUE N; INTEGER N; 04015000
|
|
BEGIN 04016000
|
|
LABEL L; 04017000
|
|
INTEGER PICRT; 04018000
|
|
L: IF (PSR ~ PSR + N) } 6 04019000
|
|
THEN BEGIN 04020000
|
|
PICRT ~ PSR DIV 6; 04021000
|
|
PICR ~ PICR + PICRT; 04022000
|
|
PIR ~ PIR + PICRT; 04023000
|
|
PSR ~ PSR MOD 6; 04024000
|
|
PROF ~ FALSE; 04025000
|
|
END; 04026000
|
|
IF PSR < 0 04027000
|
|
THEN BEGIN 04028000
|
|
PSR ~ PSR + ABS(N); 04029000
|
|
DO PIR ~ PIR - 1 UNTIL N ~ N + 6 } 0; 04030000
|
|
GO L; 04031000
|
|
END; 04032000
|
|
END STEPPSR; 04033000
|
|
PROCEDURE SETINTERRUPT(I); VALUE I; INTEGER I; 04034000
|
|
BEGIN 04035000
|
|
ADJ (0, 0); % TEMPORARY NO FLOWS 04036000
|
|
INT ~ B ~ I; 04037000
|
|
BX ~ 0; 04038000
|
|
BROF ~ TRUE; 04039000
|
|
AROF ~ TRUE; 04040000
|
|
END SETINTERRUPT; 04041000
|
|
PROCEDURE NOTYETCODED; 04042000
|
|
BEGIN 04043000
|
|
FORMAT F (10("X")," OPERATOR NOT YET CODED ",84("X")); 04044000
|
|
WRITETIME; 04045000
|
|
HEADING; 04046000
|
|
WRITE(LP,F); 04047000
|
|
MEMDUMP; 04048000
|
|
GO TO EOJ; 04049000
|
|
END NOTYETCODED; 04050000
|
|
PROCEDURE WRITETIME; 04051000
|
|
BEGIN 04052000
|
|
REAL E,P; 04053000
|
|
FORMAT TIMES (10("-")," B5500 TIME SINCE START OF RUN: ", 04054000
|
|
"PROCESSOR TIME =",F9.3," SECONDS, ", 04055000
|
|
"ELAPSED TIME =",F9.3," SECONDS "8("-")); 04056000
|
|
E~(TIME(1)-ETIME)/60; P~(TIME(2)-PTIME)/60; 04057000
|
|
HEADING; 04058000
|
|
WRITE(LP,TIMES,P,E); 04059000
|
|
END WRITETIME; 04060000
|
|
PROCEDURE MKST ; % MARK STACK 07000000
|
|
BEGIN 07001000
|
|
ERVSFLOW (10); 07002000
|
|
07003000
|
|
07004000
|
|
07005000
|
|
07006000
|
|
07007000
|
|
07008000
|
|
END MKST; 07009000
|
|
PROCEDURE IMKS ; % INSERT MARK STACK * 07010000
|
|
BEGIN 07011000
|
|
% REVISED PER L. HANSON FLOWS 8/8/68 BY B.M.M. 07012000
|
|
ADJ(1,1); 07013000
|
|
MOVE(B,C); 07014000
|
|
BX ~ 2|MSCW; 07015000
|
|
B ~ S + 1 - F; 07016000
|
|
F ~ S + 1; 07017000
|
|
ADJ(1,0); 07018000
|
|
MOVE(C,B); 07019000
|
|
BROF~TRUE; 07020000
|
|
END IMKS; 07021000
|
|
PROCEDURE NAMC ; % NAME CALL 07022000
|
|
BEGIN 07023000
|
|
ADJ(0,2); 07024000
|
|
C ~ SYLLABLE & DRS [34:42:6]; 07025000
|
|
CX ~ 2|IRW; 07026000
|
|
AROF:=TRUE; 07027000
|
|
MOVE (C, A); 07028000
|
|
STEPPSR(1); 07029000
|
|
END NAMC; 07030000
|
|
PROCEDURE VALC ; % VALUE CALL 07031000
|
|
BEGIN 07032000
|
|
ERVSFLOW(1); 07033000
|
|
END VALC; 07034000
|
|
PROCEDURE EVAL ; % EVALUATE DESCRIPTOR 07035000
|
|
BEGIN 07036000
|
|
ERVSFLOW(2); 07037000
|
|
END EVAL; 07038000
|
|
PROCEDURE ENTR ; % ENTER 07039000
|
|
BEGIN 07040000
|
|
ERVSFLOW(3); 07041000
|
|
END ENTR; 07042000
|
|
PROCEDURE EXIT ; % EXIT 07043000
|
|
BEGIN 07044000
|
|
ERVSFLOW(4); 07045000
|
|
END EXIT; 07046000
|
|
PROCEDURE RETN ; % RETURN 07047000
|
|
BEGIN 07048000
|
|
ERVSFLOW(5); 07049000
|
|
END RETN; 07050000
|
|
PROCEDURE IRWL ; % (HARDWARE PSEUDO-INSTRUCTION) 07051000
|
|
BEGIN 07052000
|
|
ERVSFLOW(19); 07053000
|
|
END IRWL; 07054000
|
|
PROCEDURE PCWL ; % (HARDWARE PSEUDO INSTRUCTION) 07055000
|
|
BEGIN 07056000
|
|
ERVSFLOW (20); 07057000
|
|
END PCWL; 07058000
|
|
PROCEDURE BRUN ; % BRANCH UNCONDITIONAL 07059000
|
|
BEGIN 07060000
|
|
ERVSFLOW(17); 07061000
|
|
END BRUN; 07062000
|
|
PROCEDURE BRTR ; % BRANCH TRUE 07063000
|
|
BEGIN 07064000
|
|
ERVSFLOW(15); 07065000
|
|
END BRTR; 07066000
|
|
PROCEDURE BRFL ; % BRANCH FALSE 07067000
|
|
BEGIN 07068000
|
|
ERVSFLOW(16); 07069000
|
|
END BRFL; 07070000
|
|
PROCEDURE PCWORD; % PROGRAM CONTROL WORD 07071000
|
|
BEGIN 07072000
|
|
LABEL OC; 07073000
|
|
IF LL ! C.LLF 07074000
|
|
THEN SETINTERRUPT (INVOP) 07075000
|
|
ELSE BEGIN 07076000
|
|
PDR ~ C.SDIF; 07077000
|
|
PSR ~ C.PSRF; 07078000
|
|
PIR ~ C.PIRF; 07079000
|
|
MOVE (M[D[C.[34:1]] + C.[35:13]], C); 07080000
|
|
MEMCYCLE; 07081000
|
|
IF CX.TAG ! SEGDESC 07082000
|
|
THEN BEGIN 07083000
|
|
SETINTERRUPT (INVOP); 07084000
|
|
GO OC; 07085000
|
|
END 07086000
|
|
ELSE IF CX.PBIT ! 1 07087000
|
|
THEN BEGIN 07088000
|
|
SETINTERRUPT (PRESBIT); 07089000
|
|
GO OC; 07090000
|
|
END 07091000
|
|
ELSE BEGIN 07092000
|
|
PBR ~ C.ADDR; 07093000
|
|
PROF ~ AROF ~ FALSE; 07094000
|
|
END; 07095000
|
|
END; 07096000
|
|
OC: END FETCH OF PROGRAM CONTROL WORD; 07097000
|
|
PROCEDURE DYNAMICBRANCH; % UTILITY PROCEDURE FOR DYNAMIC BRANCHES 07098000
|
|
BEGIN 07099000
|
|
INTEGER TTAG; 07100000
|
|
LABEL IRWORD; 07101000
|
|
IF (TTAG ~ AX.TAG) = SINGL OR TTAG = DOUBL 07102000
|
|
THEN BEGIN 07103000
|
|
IF A < 0 OR A } 2*21 OR INTEGERIZE(TRUE, A) 07104000
|
|
THEN SETINTERRUPT (INVOP) 07105000
|
|
ELSE BEGIN 07106000
|
|
PSR ~ IF BOOLEAN (A)THEN 3 ELSE 0; 07107000
|
|
PIR ~ A.[27:20]; 07108000
|
|
PROF ~ AROF ~ FALSE; 07109000
|
|
END 07110000
|
|
END 07111000
|
|
ELSE BEGIN 07112100
|
|
MOVE (A, C); 07113000
|
|
IRWORD: IF TTAG ~ CX. TAG = IRW 07114000
|
|
THEN BEGIN 07115000
|
|
IF C.EBIT = 0 07116000
|
|
THEN BEGIN 07117000
|
|
MOVE(M[D[LEVEL(C)]+DELTA(C)],C); 07118000
|
|
MEMCYCLE; 07119000
|
|
GO TO IRWORD; 07120000
|
|
END 07121000
|
|
ELSE SETINTERRUPT (INVOP); 07122000
|
|
END 07123000
|
|
ELSE IF TTAG ! PCW 07124000
|
|
THEN SETINTERRUPT (INVOP) 07125000
|
|
ELSE PCWORD; 07126000
|
|
END; 07127000
|
|
END OF DYNAMIC BRANCH UTILITY ROUTINE; 07128000
|
|
PROCEDURE DBUN; % DYNAMIC BRANCH UNCONDITIONAL DBUN07129000
|
|
BEGIN 07130000
|
|
ERVSFLOW(14); 07131000
|
|
END DBUN; 07132000
|
|
PROCEDURE DBTR; % DYNAMIC BRANCH ON TRUE DBTR07133000
|
|
BEGIN 07134000
|
|
ERVSFLOW(12); 07135000
|
|
END DBTR; 07136000
|
|
PROCEDURE DBFL; % DYNAMIC BRANCH ON FALSE 07137000
|
|
BEGIN 07138000
|
|
ERVSFLOW(13); 07139000
|
|
END DBFL; 07140000
|
|
PROCEDURE NOOP ; % NO OPERATION 07141000
|
|
BEGIN 07142000
|
|
END NOOP; 07143000
|
|
PROCEDURE HALT ; % CONDITIONAL HALT 07144000
|
|
BEGIN 07145000
|
|
FILE SPO 11(1,10); 07145010
|
|
FORMAT HALTER("**B6500/SIM: PDR = ",I3,":PIR = ",I4,"~"); 07145020
|
|
IF HALTING=0 THEN WRITE(SPO,HALTER,PDR,PIR); 07145030
|
|
WHILE HALTING=0 DO WHEN(10); 07145040
|
|
CASE HALTING MOD 4 OF 07145050
|
|
BEGIN 07145060
|
|
; 07145070
|
|
NOTYETCODED; 07145080
|
|
MEMDUMP; 07145090
|
|
; 07145100
|
|
END; 07146000
|
|
END HALT; 07147000
|
|
PROCEDURE NVLD ; % INVALID OPERATOR 07148000
|
|
BEGIN 07149000
|
|
SETINTERRUPT(INVOP); 07150000
|
|
END NVLD; 07151000
|
|
PROCEDURE VARI ; % ESCAPE TO 16-BIT INSTRUCTION 07156000
|
|
BEGIN 07157000
|
|
ERROR(1); MEMDUMP; GO TO EOJ; 07158000
|
|
END VARI; 07159000
|
|
PROCEDURE ADD ; % ADD 07160000
|
|
BEGIN 07161000
|
|
DEFINE FORCESEGMENTATION = #; %>RETRO07161099
|
|
ADJ(1,1); 07162000
|
|
IF NOT CHECOP THEN INTFAMA(-1) ELSE 07163000
|
|
IF AX.TAG=SINGL AND BX.TAG=SINGL THEN 07164000
|
|
BEGIN 07165000
|
|
B:= B + A; 07166000
|
|
BX.PBIT:= REAL(AROF:=FALSE); 07167000
|
|
END ELSE 07168000
|
|
BEGIN 07169000
|
|
IF AX.TAG=SINGL THEN X:=XX:= 0 ELSE 07170000
|
|
IF BX.TAG=SINGL THEN Y:=YX:= 0; 07171000
|
|
DOUBLE(A,X,B,Y,+,~,B,Y); 07172000
|
|
BX~DOUBL+DOUBL; 07173000
|
|
AROF:=FALSE; 07174000
|
|
END; 07175000
|
|
END ADD ; 07176000
|
|
PROCEDURE SUBT ; % SUBTRACT 07177000
|
|
BEGIN 07178000
|
|
DEFINE FORCESEGMENTATION = #; %>RETRO07178099
|
|
ADJ(1,1); 07179000
|
|
IF NOT CHECOP THEN INTFAMA(-1) ELSE 07180000
|
|
IF AX.TAG=SINGL AND BX.TAG=SINGL THEN 07181000
|
|
BEGIN 07182000
|
|
B:= B - A; 07183000
|
|
BX.PBIT:= REAL(AROF:=FALSE); 07184000
|
|
END ELSE 07185000
|
|
BEGIN 07186000
|
|
IF AX.TAG=SINGL THEN X:=XX:= 0 ELSE 07187000
|
|
IF BX.TAG=SINGL THEN Y:=YX:= 0; 07188000
|
|
DOUBLE(B,Y,A,X,-,~,B,Y); 07189000
|
|
BX~DOUBL+DOUBL; 07190000
|
|
AROF:=FALSE; 07191000
|
|
END; 07192000
|
|
END SUBT; 07193000
|
|
PROCEDURE MULT ; % MULTIPLY 07194000
|
|
BEGIN 07195000
|
|
DEFINE FORCESEGMENTATION = #; %>RETRO07195099
|
|
ADJ(1,1); 07196000
|
|
IF NOT CHECOP THEN INTFAMA(-1) ELSE 07197000
|
|
IF AX.TAG=SINGL AND BX.TAG=SINGL THEN 07198000
|
|
BEGIN 07199000
|
|
B:= B | A; 07200000
|
|
BX.PBIT:= REAL(AROF:=FALSE); 07201000
|
|
END ELSE 07202000
|
|
BEGIN 07203000
|
|
IF AX.TAG=SINGL THEN X:=XX:= 0 ELSE 07204000
|
|
IF BX.TAG=SINGL THEN Y:=YX:= 0; 07205000
|
|
DOUBLE(A,X,B,Y,|,~,B,Y); 07206000
|
|
BX:=YX:=DOUBL+DOUBL; 07207000
|
|
AROF:=FALSE; 07208000
|
|
END; 07209000
|
|
END MULT; 07210000
|
|
PROCEDURE MULX ; % EXTENDED MULTIPLY 07211000
|
|
BEGIN 07212000
|
|
NOTYETCODED; 07213000
|
|
END MULX; 07214000
|
|
PROCEDURE DIVD ; % DIVIDE 07215000
|
|
BEGIN 07216000
|
|
LABEL OC; 07217000
|
|
ADJ(1,1); 07218000
|
|
IF NOT CHECOP THEN INTFAMA(-1) ELSE 07219000
|
|
IF AX.TAG=SINGL AND BX.TAG=SINGL THEN 07220000
|
|
IF A=0 THEN BEGIN INTFAMA( DIVZROI); GO OC END ELSE 07221000
|
|
BEGIN 07222000
|
|
B:= B/A; 07223000
|
|
BX.PBIT:= REAL(AROF:=FALSE); 07224000
|
|
END ELSE 07225000
|
|
BEGIN 07226000
|
|
IF AX.TAG=SINGL THEN X:=XX:= 0 ELSE 07227000
|
|
IF BX.TAG=SINGL THEN Y:=YX:=0; 07228000
|
|
IF A=0 AND X=0 THEN BEGIN INTFAMA(DIVZROI); 07229000
|
|
GO TO OC; 07230000
|
|
END; 07231000
|
|
DOUBLE(B,Y,A,X,/,~,B,Y); 07232000
|
|
BX~DOUBL+DOUBL; 07233000
|
|
AROF:=FALSE; 07234000
|
|
END; 07235000
|
|
OC: 07236000
|
|
END DIVD; 07237000
|
|
PROCEDURE IDIV ; % INTEGER DIVIDE 07238000
|
|
BEGIN 07239000
|
|
DIVD; 07240000
|
|
IF INT =0 07241000
|
|
THEN IF INTEGERIZE(FALSE,B) THEN INTFAMA(INTOVFI); 07242000
|
|
END IDIV; 07243000
|
|
PROCEDURE RDIV ; % REMAINDER DIVIDE 07244000
|
|
BEGIN 07245000
|
|
LABEL OC; 07246000
|
|
INTEGER SIGNQ, SIGNQH; 07247000
|
|
REAL TA, TX, TB, TY; 07248000
|
|
ADJ (1, 1); 07249000
|
|
TA~A; TX~IF AX.TAG!SINGL THEN X ELSE 0; 07250000
|
|
TB~B; TY~IF BX.TAG!SINGL THEN Y ELSE 0; 07251000
|
|
DIVD; 07252000
|
|
IF INT !0 THEN GO TO OC; 07253000
|
|
SIGNQ ~ SIGN(B); 07254000
|
|
B.SOBIT ~ 0; 07255000
|
|
IF INTEGERIZE (FALSE, B) THEN BEGIN ERROR(100); GO OC END; 07256000
|
|
Y ~ 0; 07257000
|
|
DOUBLE (TB, TY, TA, TX, SIGNQ, SIGNQH, B, Y, |,|, -, ~, B, Y); 07258000
|
|
IF INTEGERIZE(FALSE,B) THEN INTFAMA(INTOVFI); 07259000
|
|
OC: 07260000
|
|
END RDIV; 07261000
|
|
PROCEDURE NTIA ; % INTEGER TRUNCATED 07262000
|
|
BEGIN 07263000
|
|
INTEGER EB; % EXPONENT IN B AT ENTRY,IN CODE USED 07264000
|
|
% AS 8-BASED EXPONENT,IN COMMENTS,FOR 07265000
|
|
% CONVENIENCE,REFERENCED AS 2-BASED 07266000
|
|
DEFINE I1INVALIDOPERATOR = BEGIN 07269000
|
|
INTFAMA(-1); 07270000
|
|
GO TO OC END#, 07271000
|
|
I2INTEGEROVERFLOW = BEGIN 07272000
|
|
INTFAMA(INTOVFI); 07273000
|
|
GO TO OC END#; 07274000
|
|
% INTERRUPT PROCESSING TO BE DEFINED 07275000
|
|
LABEL L1,NEGEXPLBL,OC; 07276000
|
|
INTEGER T1,T2; % WORKING LOCAL INTEGERS 07277000
|
|
ADJ(0,1); 07278000
|
|
IF BX.TAG !SINGL AND BX.TAG ! DOUBL THEN I1INVALIDOPERATOR; 07279000
|
|
IF(EB~B.EXPF)=0 THEN GO TO L1; 07280000
|
|
IF BX.TAG = SINGL THEN Y ~ 0; 07281000
|
|
IF B.SEBIT=1 THEN GO TO NEGEXPLBL; 07282000
|
|
IF (T1~B.MANF)>8*(13-EB)-1 THEN I2INTEGEROVERFLOW; % IF EB< NB 07283000
|
|
T1 ~ T1|8*EB; % T1.[36:39-EB] ~ B.[38-EB:39-EB] 07284000
|
|
B.MANF~T1+(T2~Y.MANF) DIV (8*(13-EB));%B~B.[38-EB:39-EB] 07285000
|
|
%+Y.[38-EB] 07286000
|
|
B.SEXPF ~ 0; 07287000
|
|
GO TO L1; 07288000
|
|
NEGEXPLBL: 07289000
|
|
B.MANF~(T1~B.MANF) DIV (8*EB);%B.[38-EB:39-EB]~B.[38:39-EB] 07290000
|
|
% B.[38-EB] ~ 0 IMPLIED 07291000
|
|
B.SEXPF ~ 0; 07292000
|
|
L1: BX.TAG ~ SINGL; 07293000
|
|
OC: 07294000
|
|
END NTIA; 07295000
|
|
PROCEDURE NTGR; % INTEGERISE ROUNDED 07296000
|
|
BEGIN 07297000
|
|
INTEGER EB; % EXPONENT IN B AT ENTRY,IN CODE USED 07298000
|
|
% AS 8-BASED EXPONENT,IN COMMENTS,FOR 07299000
|
|
% CONVENIENCE,REFERENCED AS 2-BASED 07300000
|
|
DEFINE I1INVALIDOPERATOR = BEGIN 07303000
|
|
INTFAMA(-1); 07304000
|
|
GO TO OC END#, 07305000
|
|
I2INTEGEROVERFLOW = BEGIN 07306000
|
|
INTFAMA(INTOVFI); 07307000
|
|
GO TO OC END#; 07308000
|
|
% INTERRUPT PROCESSING TO BE DEFINED 07309000
|
|
LABEL L1,NEGEXPLBL,L2,L3,L4,OC; 07310000
|
|
INTEGER T1,T2; % WORKING LOCAL INTEGERS 07311000
|
|
ADJ(0,1); 07312000
|
|
IF BX.TAG ! SINGL AND BX.TAG ! DOUBL THEN I1INVALIDOPERATOR; 07313000
|
|
IF BX.TAG = SINGL THEN Y ~ 0; 07314000
|
|
IF (EB~B.EXPF) = 0 THEN GO TO L1; 07315000
|
|
IF B.SEBIT =1 THEN GO TO NEGEXPLBL; 07316000
|
|
IF (T1 ~ B.MANF) > 8*(13-EB)-1 THEN I2INTEGEROVERFLOW; % EB{NB 07317000
|
|
T1 ~ T1|8*EB; % T1~ B.[38-EB:39-EB] 07318000
|
|
B.MANF~T1+(T2~Y.MANF) DIV (8*(13-EB));%B~B.[38-EB:39-EB] 07319000
|
|
%+Y.[38:EB] 07320000
|
|
Y ~ (T1 ~ Y.MANF)| 8*EB; % Y.[38:39-EB] ~ Y.[38-EB:39-EB] 07321000
|
|
% Y.[EB:EB] ~ 0 IMPLIED 07322000
|
|
B.SEXPF ~ 0; 07323000
|
|
IF BX.TAG=SINGL THEN GO TO L4; 07324000
|
|
L1: IF B.SOBIT = 0 THEN GO TO L3; 07325000
|
|
IF Y.MANF { 274877906944 THEN GO TO L4; % IF FRACTION { 0.5 07326000
|
|
L2: IF B.MANF = 549755813887 THEN I2INTEGEROVERFLOW; % IF B=2*39-1 07327000
|
|
B.MANF ~ B.MANF+1; 07328000
|
|
GO TO L4; 07329000
|
|
L3: IF Y.MANF } 274877906944 THEN GO TO L2 ELSE GO TO L4; 07330000
|
|
% LAST STATEMENT EQUIVALENT TO IF FRACTION } 0.5.... 07331000
|
|
NEGEXPLBL: 07332000
|
|
B.MANF~(T1~B.MANF) DIV (8*EB);%B.[38-EB:39-EB]~B.[38:39-EB] 07333000
|
|
% B.[38:EB] ~ 0 IMPLIED 07334000
|
|
Y~T1|8*(13-EB); % Y.[38:EB] ~ B.[EB:EB] 07335000
|
|
B.SEXPF ~ 0; 07336000
|
|
GO TO L1; 07337000
|
|
L4: BX.TAG ~ SINGL; 07338000
|
|
OC: 07339000
|
|
END NTGR; 07340000
|
|
PROCEDURE NTGD; % DOUBLE PRECISION INTEGERIZE 07340010
|
|
BEGIN 07340020
|
|
INTEGER XA, XB, KT, LZCT; 07340060
|
|
LABEL OC, L1, L2, L10; 07340070
|
|
ADJ (0,1); 07340080
|
|
CHECOPRNDB END; IF SDIS = 1 THEN GO TO OC; 07340090
|
|
BX.TAG ~ DOUBL; 07340100
|
|
A.SEXPF ~ 013; 07340110
|
|
IF B.MANF = 0 AND Y.MANF = 0 THEN GO TO L10; 07340120
|
|
XA ~ XA & XX[33:47:1] & X[34:1:8] & A[42:3:6]; 07340130
|
|
XB ~ XB & YX[33:47:1] & Y[34:1:8] & A[42:3:6]; 07340140
|
|
IF XA = XB THEN GO TO OC; 07340150
|
|
IF XA > XB THEN 07340160
|
|
BEGIN 07340170
|
|
IF B.SEXPF ! 1 THEN 07340180
|
|
BEGIN 07340190
|
|
FOR KT ~ XA - XB STEP -1 UNTIL 0 DO 07340200
|
|
BEGIN 07340210
|
|
X.[12:36] ~ X.[9:36]; 07340220
|
|
X.[9:3] ~ Y.[45:3]; 07340230
|
|
Y.[12:36] ~ Y.[9:36]; 07340240
|
|
Y.[9:3] ~ B.[45:3]; 07340250
|
|
B.[12:36] ~ B.[9:36]; 07340260
|
|
B.[9:3] ~ 0; 07340270
|
|
END; 07340280
|
|
L1: IF X.[9:3] > 4 THEN 07340290
|
|
BEGIN 07340300
|
|
AX ~ A ~ 0; XX ~ X ~ 0; 07340310
|
|
X ~ 1; AX.TAG ~ DOUBL; 07340320
|
|
AROF ~ TRUE; 07340330
|
|
ADD; 07340340
|
|
END; 07340350
|
|
GO TO L10; 07340360
|
|
END; 07340370
|
|
IF B.MANF ! 0 THEN 07340380
|
|
BEGIN 07340390
|
|
Y.[9:39] ~ B.[9:39]; 07340400
|
|
B.[9:39] ~ 0; 07340410
|
|
XB ~ XB - XA; 07340420
|
|
IF XB < XA THEN 07340430
|
|
BEGIN 07340440
|
|
FOR KT ~ XA - XB STEP -1 UNTIL 0 DO 07340450
|
|
BEGIN 07340460
|
|
X.[9:3] ~ Y.[45:3]; 07340470
|
|
Y.[12:36] ~ Y.[9:36]; 07340480
|
|
Y.[9:3] ~ 0; 07340490
|
|
END; 07340500
|
|
GO TO L1; 07340510
|
|
END; 07340520
|
|
END; 07340530
|
|
Y.[9:39] ~ 0; 07340540
|
|
GO TO L10; 07340550
|
|
END; 07340560
|
|
XB ~ XB - 13; 07340570
|
|
IF XA < XB THEN 07340580
|
|
BEGIN 07340590
|
|
IF B.MANF ! 0 THEN BEGIN 07340600
|
|
SETINTERRUPT (INTOVFI); 07340601
|
|
GO TO OC; END; 07340602
|
|
B.[9:39] ~ Y.[9:39]; 07340610
|
|
Y.[9:39] ~ 0; 07340620
|
|
XB ~ XB - 13; 07340630
|
|
IF XB > XA THEN BEGIN SETINTERRUPT (INTOVFI); 07340640
|
|
GO TO OC; 07340641
|
|
END; 07340642
|
|
END; 07340650
|
|
MOVE (B, JUNK); 07340660
|
|
LZCT ~ 0; 07340670
|
|
L2: IF JUNK.[9:3] = 0 THEN 07340680
|
|
BEGIN 07340690
|
|
LZCT ~ LZCT + 1; 07340700
|
|
JUNK.[9:36] ~ JUNK.[12:36]; 07340710
|
|
GO TO L2; 07340720
|
|
END; 07340730
|
|
IF LZCT < XB THEN BEGIN SETINTERRUPT (INTOVFI); 07340740
|
|
GO TO OC; 07340741
|
|
END; 07340742
|
|
FOR KT ~ XB STEP -1 UNTIL 0 DO 07340750
|
|
BEGIN 07340760
|
|
B.[9:36] ~ B.[12:36]; 07340770
|
|
B.[45:3] ~ Y.[9:3]; 07340780
|
|
Y.[9:36] ~ Y.[12:36]; 07340790
|
|
Y.[45:3] ~ 0; 07340800
|
|
END; 07340810
|
|
B.SEXPF ~ A.SEXPF; 07340820
|
|
GO TO OC; 07340830
|
|
L10: 07340840
|
|
Y.EXPEXT ~ 0; 07340850
|
|
B.SEXPF ~ A.SEXPF; 07340860
|
|
OC: 07340870
|
|
END OF DOUBLE PRECISION INTEGERIZE; 07340880
|
|
PROCEDURE SNGT ; % SET TO SINGLE PRECISION, TRUNCATED 07341000
|
|
BEGIN 07342000
|
|
ADJ(0,1); 07343000
|
|
CHECOPRNDB END; 07344000
|
|
BX.TAG~Y~YX~0 07345000
|
|
END SNGT; 07346000
|
|
PROCEDURE SNGL ; % SET TO SINGLE PRECISION; ROUNDED 07347000
|
|
BEGIN 07348000
|
|
ADJ(0,1); 07349000
|
|
CHECOPRNDB END 07350000
|
|
ELSE IF BX.TAG=DOUBL THEN 07351000
|
|
BEGIN IF X.[9:1]=1 THEN A~ (A+1)&A[1:1:8]; 07352000
|
|
AX.TAG ~ X ~ XX ~0; 07353000
|
|
BX.TAG~Y~YX~0; 07354000
|
|
END; 07355000
|
|
END SNGL; 07356000
|
|
PROCEDURE XTND ; % SET TO DOUBLE PRECISION 07357000
|
|
BEGIN 07358000
|
|
ADJ(0,1); 07359000
|
|
CHECOPRNDB END 07360000
|
|
ELSE IF BX.TAG=SINGL THEN 07361000
|
|
BEGIN BX.TAG~DOUBL; 07362000
|
|
Y~YX~0; 07363000
|
|
END; 07364000
|
|
END XTND; 07365000
|
|
PROCEDURE JOIN; % MAKE TWO SINGLES INTO A DOUBLE PRECISION OPERAND 07366000
|
|
BEGIN 07367000
|
|
ADJ (1,1); 07368000
|
|
IF NOT CHECOP THEN SETINTERRUPT (INVOP) ELSE 07368200
|
|
BEGIN 07368300
|
|
Y ~ A; 07368400
|
|
BX.TAG ~ DOUBL; 07368500
|
|
AROF ~ FALSE 07368600
|
|
END; 07368700
|
|
END JOIN; 07369000
|
|
PROCEDURE SPLT; % MAKE A DOUBLE PRECISION INTO TWO SINGLE OPERANDS 07370000
|
|
BEGIN 07371000
|
|
ADJ (0,1); 07371100
|
|
CHECOPRNDB END 07371200
|
|
ELSE IF BX.TAG = DOUBL THEN A ~ Y 07371300
|
|
ELSE A ~ 0; 07372000
|
|
AX.TAG ~ SINGL; 07372050
|
|
BX.TAG ~ SINGL; 07372100
|
|
AROF ~ TRUE; 07372200
|
|
END SPLT; 07373000
|
|
PROCEDURE LAND ; % LOGICAL AND 07374000
|
|
BEGIN 07375000
|
|
ADJ(1,1); 07376000
|
|
B:=REAL(BOOLEAN(A)AND BOOLEAN(B)); 07377000
|
|
BX ~ REAL(BOOLEAN(AX) AND BOOLEAN(BX)); 07378000
|
|
IF AX.TAG=DOUBL OR BX.TAG=DOUBL THEN 07379000
|
|
BEGIN 07380000
|
|
IF AX.TAG!DOUBL THEN X:=XX:=0; 07381000
|
|
IF BX.TAG!DOUBL THEN Y:=YX:=0; 07382000
|
|
Y:=REAL(BOOLEAN(Y)AND BOOLEAN(X)); 07383000
|
|
YX.PBIT:=REAL(BOOLEAN(YX.PBIT)AND BOOLEAN(XX.PBIT)); 07384000
|
|
BX.TAG~DOUBL; 07385000
|
|
END; 07386000
|
|
AROF:=FALSE; 07387000
|
|
END LAND; 07388000
|
|
PROCEDURE LOR ; % LOGICAL OR 07389000
|
|
BEGIN 07390000
|
|
ADJ(1,1); 07391000
|
|
B:=REAL(BOOLEAN(A) OR BOOLEAN(B)); 07392000
|
|
BX ~ REAL(BOOLEAN(AX) OR BOOLEAN(BX)); 07393000
|
|
IF AX.TAG=DOUBL OR BX.TAG=DOUBL THEN 07394000
|
|
BEGIN 07395000
|
|
IF AX.TAG!DOUBL THEN X:=XX:=0; 07396000
|
|
IF BX.TAG!DOUBL THEN Y:=YX:=0; 07397000
|
|
Y:=REAL(BOOLEAN(Y) OR BOOLEAN(X)); 07398000
|
|
YX.PBIT:=REAL(BOOLEAN(YX.PBIT) OR BOOLEAN(XX.PBIT)); 07399000
|
|
BX.TAG~DOUBL; 07400000
|
|
END; 07401000
|
|
AROF:=FALSE; 07402000
|
|
END LOR ; 07403000
|
|
PROCEDURE LNOT ; % LOGICAL NEGATE 07404000
|
|
BEGIN 07405000
|
|
ADJ(1,2); 07406000
|
|
A:=REAL(NOT BOOLEAN(A)); 07407000
|
|
AX ~ REAL(NOT BOOLEAN(AX)); 07408000
|
|
IF AX.TAG=DOUBL THEN 07409000
|
|
BEGIN 07410000
|
|
X:=REAL(NOT BOOLEAN(X)); 07411000
|
|
XX.PBIT:=REAL(NOT BOOLEAN(XX.PBIT)); 07412000
|
|
END; 07413000
|
|
END LNOT; 07414000
|
|
PROCEDURE SAME ; % LOGICAL EQUAL 07415000
|
|
BEGIN 07416000
|
|
REAL PROCEDURE EQUAL(A,B,C,D);VALUE A,B,C,D; REAL A,B,C,D; 07417000
|
|
EQUAL~ REAL(REAL(BOOLEAN(A)EQV BOOLEAN(B)) = REAL(NOT FALSE) 07418000
|
|
AND C=D); 07419000
|
|
ADJ(1,1); 07420000
|
|
IF AX.TAG!BX.TAG THEN B:=0 ELSE 07421000
|
|
BEGIN 07422000
|
|
B:=EQUAL(A,B,AX.PBIT,BX.PBIT); 07423000
|
|
IF AX.TAG=DOUBL THEN 07424000
|
|
B:=REAL(BOOLEAN(B)AND BOOLEAN(EQUAL(X,Y, 07425000
|
|
XX.PBIT,YX.PBIT))); 07426000
|
|
END; 07427000
|
|
AROF:=FALSE; 07428000
|
|
BX.[44:4]:=0; 07429000
|
|
END SAME; 07430000
|
|
PROCEDURE LEQV ; % LOGICAL EQUIVALENCE 07431000
|
|
BEGIN 07432000
|
|
ADJ(1,1); 07433000
|
|
B:=REAL(BOOLEAN(A)EQV BOOLEAN(B)); 07434000
|
|
BX ~ REAL(BOOLEAN(AX) EQV BOOLEAN(BX)); 07435000
|
|
IF AX.TAG=DOUBL OR BX.TAG=DOUBL THEN 07436000
|
|
BEGIN 07437000
|
|
IF AX.TAG!DOUBL THEN X:=XX:=0; 07438000
|
|
IF BX.TAG!DOUBL THEN Y:=YX:=0; 07439000
|
|
Y:=REAL(BOOLEAN(Y)EQV BOOLEAN(X)); 07440000
|
|
YX.PBIT:=REAL(BOOLEAN(YX.PBIT)EQV BOOLEAN(XX.PBIT)); 07441000
|
|
BX.TAG~DOUBL; 07442000
|
|
END; 07443000
|
|
AROF:=FALSE; 07444000
|
|
END LEQV; 07445000
|
|
DEFINE NOTOPERAND= IF NOT CHECOP THEN BEGIN SETINTERRUPT(INVOP); 07446000
|
|
GO TO OC; END#; 07447000
|
|
PROCEDURE GRTR ; % GREATER THAN 07448000
|
|
BEGIN 07449000
|
|
LABEL OC; 07450000
|
|
ADJ(1,1); 07451000
|
|
NOTOPERAND; 07452000
|
|
C:=B; 07453000
|
|
B:=REAL(B>A); 07454000
|
|
IF (AX.TAG=DOUBL OR BX.TAG=DOUBL) AND (C=A) THEN 07455000
|
|
BEGIN 07456000
|
|
IF AX.TAG!DOUBL THEN X:=XX:=0 ELSE 07457000
|
|
IF BX.TAG!DOUBL THEN Y:=YX:=0; 07458000
|
|
B:= REAL(Y>X); 07459000
|
|
END; 07460000
|
|
BX.[44:4 ]:= REAL(AROF:=FALSE); 07461000
|
|
OC: 07462000
|
|
END GRTR; 07463000
|
|
PROCEDURE GREQ ; % GREATER THAN OR EQUAL 07464000
|
|
BEGIN 07465000
|
|
LABEL OC; 07466000
|
|
ADJ(1,1); 07467000
|
|
NOTOPERAND; 07468000
|
|
C:=B; 07469000
|
|
B:=REAL(B}A); 07470000
|
|
IF (AX.TAG=DOUBL OR BX.TAG=DOUBL) AND (C=A) THEN 07471000
|
|
BEGIN 07472000
|
|
IF AX.TAG!DOUBL THEN X:=XX:=0 ELSE 07473000
|
|
IF BX.TAG!DOUBL THEN Y:=YX:=0; 07474000
|
|
B:=REAL(Y}X); 07475000
|
|
END; 07476000
|
|
BX.[44:4 ]:= REAL(AROF:=FALSE); 07477000
|
|
OC: 07478000
|
|
END GREQ; 07479000
|
|
PROCEDURE EQUL ; % EQUAL 07480000
|
|
BEGIN 07481000
|
|
LABEL OC; 07482000
|
|
ADJ(1,1); 07483000
|
|
NOTOPERAND; 07484000
|
|
B:=REAL(B=A); 07485000
|
|
IF(AX.TAG=DOUBL OR BX.TAG=DOUBL) AND BOOLEAN(B) THEN 07486000
|
|
BEGIN 07487000
|
|
IF AX.TAG!DOUBL THEN X:=XX:=0 ELSE 07488000
|
|
IF BX.TAG!DOUBL THEN Y:=YX:=0; 07489000
|
|
B:=REAL(Y=X); 07490000
|
|
END; 07491000
|
|
BX.[44:4 ]:= REAL(AROF:=FALSE); 07492000
|
|
OC: 07493000
|
|
END EQUL; 07494000
|
|
PROCEDURE LSEQ ; % LESS THAN OR EQUAL 07495000
|
|
BEGIN 07496000
|
|
LABEL OC; 07497000
|
|
ADJ(1,1); 07498000
|
|
NOTOPERAND; 07499000
|
|
C:=B; 07500000
|
|
B:=REAL(B{A); 07501000
|
|
IF (AX.TAG=DOUBL OR BX.TAG=DOUBL) AND (C=A) THEN 07502000
|
|
BEGIN 07503000
|
|
IF AX.TAG!DOUBL THEN X:=XX:=0 ELSE 07504000
|
|
IF BX.TAG!DOUBL THEN Y:=YX:=0; 07505000
|
|
B:=REAL(Y{X); 07506000
|
|
END; 07507000
|
|
BX.[44:4 ]:= REAL(AROF:=FALSE); 07508000
|
|
OC: 07509000
|
|
END LSEQ; 07510000
|
|
PROCEDURE LESS ; % LESS THAN 07511000
|
|
BEGIN 07512000
|
|
LABEL OC; 07513000
|
|
ADJ(1,1); 07514000
|
|
NOTOPERAND; 07515000
|
|
C:=B; 07516000
|
|
B:=REAL(B<A); 07517000
|
|
IF (AX.TAG=DOUBL OR BX.TAG=DOUBL) AND (C=A) THEN 07518000
|
|
BEGIN 07519000
|
|
IF AX.TAG!DOUBL THEN X:=XX:=0 ELSE 07520000
|
|
IF BX.TAG!DOUBL THEN Y:=YX:=0; 07521000
|
|
B:=REAL(Y<X); 07522000
|
|
END; 07523000
|
|
BX.[44:4 ]:= REAL(AROF:=FALSE); 07524000
|
|
OC: 07525000
|
|
END LESS; 07526000
|
|
PROCEDURE NEQL ; % NOT EQUAL 07527000
|
|
BEGIN 07528000
|
|
LABEL OC; 07529000
|
|
ADJ(1,1); 07530000
|
|
NOTOPERAND; 07531000
|
|
C:=B; 07532000
|
|
B:=REAL(B!A); 07533000
|
|
IF (AX.TAG=DOUBL OR BX.TAG=DOUBL) AND (C=A) THEN 07534000
|
|
BEGIN 07535000
|
|
IF AX.TAG!DOUBL THEN X:=XX:=0 ELSE 07536000
|
|
IF BX.TAG!DOUBL THEN Y:=YX:=0; 07537000
|
|
B:=REAL(Y!X); 07538000
|
|
END; 07539000
|
|
BX.[44:4 ]:= REAL(AROF:=FALSE); 07540000
|
|
OC: 07541000
|
|
END NEQL; 07542000
|
|
PROCEDURE INDX ; % INDEX 07543000
|
|
BEGIN 07544000
|
|
ERVSFLOW(6); 07545000
|
|
END INDX; 07546000
|
|
PROCEDURE STBR; % STEP AND BRANCH 07547000
|
|
BEGIN 07548000
|
|
ERVSFLOW (9); 07549000
|
|
END STBR; 07550000
|
|
PROCEDURE NXLN ; % INDEX AND LOAD NAME 07551000
|
|
BEGIN 07552000
|
|
ERVSFLOW(7); 07553000
|
|
END NXLN; 07554000
|
|
PROCEDURE NXLV ; % INDEX AND LOAD VALUE 07555000
|
|
BEGIN 07556000
|
|
ERVSFLOW(8); 07557000
|
|
END NXLV; 07558000
|
|
PROCEDURE LOAD ; % LOAD 07559000
|
|
BEGIN 07560000
|
|
LABEL OC; 07561000
|
|
ADJ(1,2); 07562000
|
|
MOVE(A,C); 07563000
|
|
CASE CX.TAG OF 07564000
|
|
BEGIN 07565000
|
|
INVALIDOPERATORINTERRUPT; 07566000
|
|
IF NOT BOOLEAN(C.EBIT) THEN % NORMAL IRW 07567000
|
|
MM~D[LEVEL(C)]+DELTA(C) 07568000
|
|
ELSE BEGIN %STUFFED IRW 07569000
|
|
IF(SNR=C.STKNR)THEN TEMP~BOSR 07570000
|
|
ELSE BEGIN 07571000
|
|
MOVE(M[D0+2],C); MEMCYCLE; 07572000
|
|
IF NOT BOOLEAN(CX.PBIT) THEN 07573000
|
|
PRESENCEBITINTERRUPT; 07574000
|
|
IF C.LENGTH<A.STKNR THEN 07575000
|
|
INVALIDINDEXINTERRUPT; 07576000
|
|
MOVE(M[C.ADDR+A.STKNR],C); MEMCYCLE; 07577000
|
|
IF NOT BOOLEAN(CX.PBIT) THEN 07578000
|
|
PRESENCEBITINTERRUPT; 07579000
|
|
TEMP~C.ADDR; 07580000
|
|
END; 07581000
|
|
MM~A.DISP+A.[35:13]+TEMP; 07582000
|
|
END; 07583000
|
|
INVALIDOPERATORINTERRUPT; 07584000
|
|
INVALIDOPERATORINTERRUPT; 07585000
|
|
INVALIDOPERATORINTERRUPT; 07586000
|
|
% D A T A D E S C R I P T O R 07587000
|
|
IF NOT BOOLEAN(CX.PBIT) THEN PRESENCEBITINTERRUPT 07588000
|
|
ELSE IF NOT BOOLEAN(C.IBIT) THEN 07589000
|
|
INVALIDOPERATORINTERRUPT 07590000
|
|
ELSE MM~C.ADDR+C.LENGTH; 07591000
|
|
INVALIDOPERATORINTERRUPT; 07592000
|
|
INVALIDOPERATORINTERRUPT; 07593000
|
|
END; 07594000
|
|
IF MM + MM > MEMMODS %LOAD 07594100
|
|
THEN BEGIN 07594200
|
|
SETINTERRUPT (INVADRI); 07594300
|
|
GO OC 07594400
|
|
END; 07594500
|
|
MOVE(M[MM],A); MEMCYCLE; 07595000
|
|
CASE AX.TAG OF 07596000
|
|
BEGIN 07597000
|
|
; % SINGLE PRECISION OPERAND 07598000
|
|
; % IRW 07599000
|
|
BEGIN MOVE (M[MM+1], X); MEMCYCLE END; % DOUBLE PRECISION 07600000
|
|
INVALIDOPERATORINTERRUPT; % TAG=3 S.D MSCW RCW 07601000
|
|
; %UNASSIGNED 07602000
|
|
% D A T A D E S C R I P T O R 07603000
|
|
BEGIN 07603100
|
|
IF (AX.PBIT=0 AND A.CBIT=0) THEN 07604000
|
|
A.ADDR ~ MM; A.CBIT ~ 1 END; 07605000
|
|
; %UNINITIALIZED OPERAND 07606000
|
|
INVALIDOPERATORINTERRUPT; % PROGRAM CONTROL WORD 07607000
|
|
END; 07608000
|
|
OC: 07609000
|
|
END LOAD; 07610000
|
|
PROCEDURE LODT ; % LOAD TRANSPARENT 07611000
|
|
BEGIN 07612000
|
|
LABEL OC; 07613000
|
|
ADJ(1,2); 07614000
|
|
MOVE(A,C); MM~ C.ADDR; 07615000
|
|
CASE CX.TAG OF 07616000
|
|
BEGIN 07617000
|
|
; % SINGLE PRECISION OPERAND 07618000
|
|
IF NOT BOOLEAN(C.EBIT) THEN % NORMAL IRW 07619000
|
|
MM~ D[LEVEL(C)] + DELTA(C) 07620000
|
|
ELSE BEGIN % STUFFED IRW 07621000
|
|
IF SNR=C.STKNR THEN TEMP~ BOSR 07622000
|
|
ELSE BEGIN 07623000
|
|
MOVE(M[D0+2],C); MEMCYCLE; 07624000
|
|
IF NOT BOOLEAN(CX.PBIT) THEN 07625000
|
|
PRESENCEBITINTERRUPT; 07626000
|
|
IF C.LENGTH < A.STKNR THEN 07627000
|
|
INVALIDINDEXINTERRUPT; 07628000
|
|
MOVE(M[C.ADDR+A.STKNR],C); MEMCYCLE; 07629000
|
|
IF NOT BOOLEAN(CX.PBIT) THEN 07630000
|
|
PRESENCEBITINTERRUPT; 07631000
|
|
TEMP~ C.ADDR; 07632000
|
|
END; 07633000
|
|
MM~ A.DISP + A.[35:13] + TEMP; 07634000
|
|
END; 07635000
|
|
; % DOUBLE PRESESION OPERAND 07636000
|
|
; % TAG = 3 S.D. MSCW RCW 07637000
|
|
; % UNASSIGNED 07638000
|
|
% D A T A D E S C R I P T O R 07639000
|
|
IF NOT BOOLEAN(CX.PBIT) THEN PRESENCEBITINTERRUPT 07640000
|
|
ELSE IF BOOLEAN(C.IBIT) THEN MM~ C.ADDR + C.LENGTH; 07641000
|
|
; % UNINITIALIZED OPERAND 07642000
|
|
; % PROGRAM CONTROL WORD 07643000
|
|
END; 07644000
|
|
IF MM + MM > MEMMODS THEN SETINTERRUPT (INVADRI) ELSE % LODT 07644900
|
|
MOVE(M[MM],A); MEMCYCLE; 07645000
|
|
OC: 07646000
|
|
END LODT; 07647000
|
|
PROCEDURE EXCH ; % EXCHANGE 07648000
|
|
BEGIN 07649000
|
|
REAL T1,T2; 07650000
|
|
ADJ(1,1); 07651000
|
|
MOVE(A,T1); 07652000
|
|
MOVE(B,A); 07653000
|
|
MOVE(T1,B); 07654000
|
|
MOVE(X,T1); 07655000
|
|
MOVE(Y,X); 07656000
|
|
MOVE(T1,Y); 07657000
|
|
END EXCH; 07658000
|
|
PROCEDURE RSDN ; % ROTATE STACK DOWN 07659000
|
|
BEGIN 07660000
|
|
ADJ(1,1); 07661000
|
|
MOVE(B,C); 07662000
|
|
MOVE(Y,AA); 07663000
|
|
BROF:=FALSE; 07664000
|
|
ADJ(1,1); 07665000
|
|
EXCH; 07666000
|
|
ADJ(1,0); 07667000
|
|
MOVE(C,B); 07668000
|
|
BROF~TRUE; 07669000
|
|
MOVE(C,B); 07670000
|
|
MOVE(AA,Y); 07671000
|
|
EXCH; 07672000
|
|
AROF~TRUE; 07673000
|
|
END RSDN; 07674000
|
|
PROCEDURE RSUP ; % ROTATE STACK UP 07675000
|
|
BEGIN 07676000
|
|
ADJ(1,1); 07677000
|
|
MOVE(A,C); 07678000
|
|
MOVE(X,AA); 07679000
|
|
AROF:=FALSE; 07680000
|
|
ADJ(1,1); 07681000
|
|
EXCH; 07682000
|
|
ADJ(1,0); 07683000
|
|
MOVE(C,B); 07684000
|
|
MOVE(AA,Y); 07685000
|
|
BROF:=TRUE; 07686000
|
|
END RSUP; 07687000
|
|
PROCEDURE DUPL ; % DUPLICATE TOP OF STACK 07688000
|
|
BEGIN 07689000
|
|
ADJ(0,1); 07690000
|
|
MOVE(B,A); 07691000
|
|
MOVE(Y,X); 07692000
|
|
AROF:=TRUE; 07693000
|
|
END DUPL; 07694000
|
|
PROCEDURE DLET ; % DELETE TOP OF STACK 07695000
|
|
BEGIN 07696000
|
|
ADJ(1,2); 07697000
|
|
AROF:=FALSE; 07698000
|
|
END DLET; 07699000
|
|
PROCEDURE MVST ; % MOVE STACK 07700000
|
|
BEGIN 07701000
|
|
ERVSFLOW(11); 07702000
|
|
END MVST; 07703000
|
|
PROCEDURE PUSH ; % PUSH DOWN STACK REGISTERS 07704000
|
|
BEGIN 07705000
|
|
ADJ(0,0); 07706000
|
|
END PUSH; 07707000
|
|
PROCEDURE STOD ; % STORE DESTRUCTIVE 07708000
|
|
BEGIN 07709000
|
|
STORE(0); 07710000
|
|
END STOD; 07711000
|
|
PROCEDURE STON ; % STORE NON-DESTRUCTIVE 07712000
|
|
BEGIN 07713000
|
|
STORE(1); 07714000
|
|
END STON; 07715000
|
|
PROCEDURE OVRD ; % OVERWRITE DESTRUCTIVE 07716000
|
|
BEGIN 07717000
|
|
STORE(2); 07718000
|
|
END OVRD; 07719000
|
|
PROCEDURE OVRN ; % OVERWRITE NON-DESTRUCTIVE 07720000
|
|
BEGIN 07721000
|
|
STORE(3); 07722000
|
|
END OVRN; 07723000
|
|
BOOLEAN PROCEDURE GETSYLLABLES (N);% UTILITY FOR FLTR, ISOL AND INSR. 07724000
|
|
VALUE N; INTEGER N; 07725000
|
|
BEGIN 07726000
|
|
DEFINE S = TBUF#; 07727000
|
|
INTEGER I,T,J; 07728000
|
|
BOOLEAN B; 07729000
|
|
LABEL OC; 07729100
|
|
DO BEGIN 07730000
|
|
T ~ S [I] ~ IF PROF THEN SYLLABLES [PSR] 07731000
|
|
ELSE PSYLLABLES; 07732000
|
|
J~IF I=N-1 THEN 48 ELSE 47; 07733000
|
|
IF B~T>J 07734000
|
|
THEN BEGIN INTFAMB(2); GO OC END; 07735000
|
|
STEPPSR (1); 07736000
|
|
END UNTIL I ~ I + 1 } N OR B; 07737000
|
|
GETSYLLABLES ~ B; 07738000
|
|
OC: 07738100
|
|
END GETSYLLABLES; 07739000
|
|
STREAM PROCEDURE MOVEN (S, D, N); VALUE N; 07740000
|
|
BEGIN SI ~ S; DI ~ D; DS~N WDS END MOVE OF N WORDS FROM S TO D; 07741000
|
|
BOOLEAN PROCEDURE GETGKL (N); % UTILITY FOR DFTR, DISO AND DINS. 07742000
|
|
VALUE N; INTEGER N; 07743000
|
|
BEGIN 07744000
|
|
DEFINE GKL = TBUF#; % MOMENTARY STORAGE 07745000
|
|
INTEGER I,J; 07746000
|
|
BOOLEAN BOOLE; 07747000
|
|
LABEL OC; 07747100
|
|
J~48; 07748000
|
|
DO BEGIN 07749000
|
|
ADJ (0, 1); 07750000
|
|
IF BOOLE~INTEGERIZE(TRUE,B) OR B<0 OR B>J 07751000
|
|
THEN BEGIN INTFAMB(3); GO OC END 07752000
|
|
ELSE GKL [I] ~ B; 07753000
|
|
BROF ~ FALSE; 07754000
|
|
J~47; 07755000
|
|
END UNTIL I ~ I + 1 } N OR BOOLE; 07756000
|
|
GETGKL ~ BOOLE; 07757000
|
|
OC: 07757100
|
|
END VALIDATION OF OPERANDS FOR DYNAMIC FIELD OPERATORS; 07758000
|
|
PROCEDURE FLTR ; % FIELD TRANSFER 07759000
|
|
BEGIN 07760000
|
|
DEFINE S = TBUF#; 07761000
|
|
INTEGER K, G, L; 07762000
|
|
IF NOT GETSYLLABLES (3) 07763000
|
|
THEN BEGIN 07764000
|
|
ADJ (1, 1); 07765000
|
|
MOVEN (S[0], K, 3); % SYLLABLES TO LOCALS 07766000
|
|
DYAL (A, B, G, K, L); % B.[K:L]; ~ A.[G:L] 07767000
|
|
AROF ~ FALSE; 07768000
|
|
END; 07769000
|
|
END FLTR; 07770000
|
|
PROCEDURE DFTR ; % DYNAMIC FIELD TRANSFER 07771000
|
|
BEGIN 07772000
|
|
DEFINE LGK = TBUF#; 07773000
|
|
INTEGER L, G, K; % DO NOT DISTURB G, K, OR L 07774000
|
|
IF NOT GETGKL (3) % STACK ADJUST AND VALIDITY 07775000
|
|
THEN BEGIN 07776000
|
|
ADJ (1, 1); 07777000
|
|
MOVEN (LGK [0], L, 3); % OPERANDS TO LOCALS 07778000
|
|
DYAL (A, B, G, K, L); % B.[K:L] ~ A.[G,L] 07779000
|
|
AROF ~ FALSE; 07780000
|
|
END; 07781000
|
|
END DFTR; 07782000
|
|
PROCEDURE ISOL ; % FIELD ISOLATE 07783000
|
|
BEGIN 07784000
|
|
DEFINE S = TBUF#; 07785000
|
|
INTEGER G, L, K ; % DO NOT DISTURB G AND L 07786000
|
|
IF NOT GETSYLLABLES (2) 07787000
|
|
THEN BEGIN 07788000
|
|
ADJ (1, 0); 07789000
|
|
MOVEN (S[0], G, 2); % SYLLABLES TO LOCALS 07790000
|
|
K ~ L - 1; 07791000
|
|
B ~ BX ~ 0; 07792000
|
|
DYAL (A, B, G, K, L); % B.[K:L] ~ A.[G:L] 07793000
|
|
AROF ~ FALSE; 07794000
|
|
BROF ~ TRUE; 07795000
|
|
END; 07796000
|
|
END ISOL; 07797000
|
|
PROCEDURE DISO ; % DYNAMIC FIELD ISOLATE 07798000
|
|
BEGIN 07799000
|
|
DEFINE LG = TBUF#; 07800000
|
|
INTEGER L, G, K; % DO NOT DISTURB L AND G 07801000
|
|
IF NOT GETGKL (2) % STACK ADJ & VALIDITY CHECK07802000
|
|
THEN BEGIN 07803000
|
|
AROF ~ TRUE; % GETGKL SETS FALSE; 07804000
|
|
MOVEN (LG[0], L, 2); % OPERANDS TO LOCALS 07805000
|
|
K ~ L - 1; 07806000
|
|
A ~ AX ~ 0; 07807000
|
|
ADJ(1,1); 07808000
|
|
DYAL (B, A, G, K, L); % A.[K:L] ~ B.[G:L] 07809000
|
|
BROF ~ FALSE; 07810000
|
|
END; 07811000
|
|
END DISO; 07812000
|
|
PROCEDURE INSR ; % FIELD INSERT 07813000
|
|
BEGIN 07814000
|
|
INTEGER K, L; % DO NOT DISTURB ORDER OF K AND L 07815000
|
|
DEFINE S = TBUF#; % ALSO SEE GETSYLLABLES 07816000
|
|
IF NOT GETSYLLABLES (2) 07817000
|
|
THEN BEGIN 07818000
|
|
ADJ (1, 1); 07819000
|
|
MOVEN (S[0], K, 2); % SYLLABLES TO LOCALS 07820000
|
|
G ~ L - 1; 07821000
|
|
DYAL (A, B, G, K, L); % B.[K:L] ~ A.[G:L]; 07822000
|
|
AROF ~ FALSE; 07823000
|
|
END; 07824000
|
|
END INSR; 07825000
|
|
PROCEDURE DINS ; % DYNAMIC FIELD INSERT 07826000
|
|
BEGIN 07827000
|
|
DEFINE LK = TBUF#; 07828000
|
|
INTEGER L, K, G; % DO NOT DISTURB ORDER 07829000
|
|
ADJ (1, 1); % SAVE A WHILE L & K ARE& 07830000
|
|
AROF ~ FALSE; 07831000
|
|
IF NOT GETGKL (2) 07832000
|
|
THEN BEGIN 07833000
|
|
ADJ (0, 1); 07834000
|
|
% AROF ~ TRUE; 07835000
|
|
MOVEN (LK[0], L, 2); % L AND K TO LOCALS 07836000
|
|
G ~ L - 1; 07837000
|
|
DYAL (A, B, G, K, L); % B.[K:L] ~ A.[G:L] 07838000
|
|
% AROF ~ FALSE; 07839000
|
|
END; 07840000
|
|
END DINS; 07841000
|
|
PROCEDURE SRCH ; % MASKED SEARCH FOR EQUAL 07842000
|
|
BEGIN 07843000
|
|
BOOLEAN FINIS; 07844000
|
|
LABEL OC,LOOP,JUMP; 07845000
|
|
ADJ (1, 1); % DESCRIPTOR AND MASK 07846000
|
|
IF AX.TAG ! DATADESC 07847000
|
|
THEN BEGIN 07848000
|
|
SETINTERRUPT (INVOP); 07849000
|
|
GO OC; 07850000
|
|
END; 07851000
|
|
IF AX.PBIT!1 THEN BEGIN SETINTERRUPT(PRESBIT); GO OC END; 07852000
|
|
MOVE (A, C); 07853000
|
|
AROF ~ FALSE; 07854000
|
|
ADJ (1, 1); % MASK AND VALUE 07855000
|
|
MOVE (A, X); 07856000
|
|
IF C.LENGTH=0 THEN GO JUMP; 07857000
|
|
LOOP: 07858000
|
|
C.LENGTH ~ C.LENGTH - 1; 07859000
|
|
JUMP: 07860000
|
|
MOVE (M[C.ADDR + C.LENGTH], A); 07861000
|
|
MEMCYCLE; 07862000
|
|
A ~ REAL (BOOLEAN (A) AND BOOLEAN (X)); 07863000
|
|
AX ~ REAL(BOOLEAN(AX) AND BOOLEAN (XX)); 07864000
|
|
FINIS ~ EQUAL (A, AX, B, BX); 07865000
|
|
IF C.LENGTH!0 AND (NOT FINIS) THEN GO LOOP; 07866000
|
|
IF (NOT FINIS) THEN A~1 ELSE A~0&C[28:8:20]; 07867000
|
|
AX ~ 0; 07868000
|
|
BROF~FALSE; 07869000
|
|
OC: 07870000
|
|
END SRCH; 07871000
|
|
PROCEDURE LLLU ; % LINKED LIST LOOKUP 07872000
|
|
BEGIN 07873000
|
|
LABEL OC,LOOP,NEG; 07874000
|
|
INTEGER PSEUDOA, PSEUDOC; % TO EXPEDITE FLAG BIT TESTING 07875000
|
|
ADJ (1, 1); % INDEX AND DATA DESCRIPTOR 07876000
|
|
IF INTEGERIZE (TRUE, A) 07877000
|
|
THEN BEGIN SETINTERRUPT (INTOVFI); GO OC; END; 07878000
|
|
IF BX.TAG ! DATADESC 07879000
|
|
THEN BEGIN SETINTERRUPT (INVOP); GO OC END; 07880000
|
|
BUF ~ B.ADDR; 07881000
|
|
X ~ A & B [8:8:20]; % INITIAL INDEX AND SIZE 07882000
|
|
BROF ~ FALSE; 07883000
|
|
ADJ (1, 1); % INDEX AND ARGUMENT 07884000
|
|
MOVE (A, C); 07885000
|
|
PSEUDOA ~ B.[20:28]; % ARGUMENT TO A 07886000
|
|
LOOP: IF A.ADDR > X.LENGTH 07887000
|
|
THEN BEGIN SETINTERRUPT (INVINXI);GO OC END; 07888000
|
|
MOVE (M[BUF + A.ADDR], C); % NEW LINK WORD TO C 07889000
|
|
PSEUDOC ~ 0 &C[21:1:27] 07890000
|
|
&CX[20:47:1]; 07891000
|
|
MEMCYCLE; 07892000
|
|
IF PSEUDOA > PSEUDOC 07893000
|
|
THEN BEGIN 07894000
|
|
X.ADDR ~ A.ADDR; % SAVE THIS INDEX 07895000
|
|
A.ADDR ~ C.ADDR; 07896000
|
|
IF(A.ADDR=0)THEN BEGIN A~-1; GO NEG END; 07897000
|
|
GO LOOP; 07898000
|
|
END; 07899000
|
|
A ~ X.ADDR; 07900000
|
|
NEG: 07901000
|
|
AX ~ 0; 07902000
|
|
BROF ~ FALSE; 07903000
|
|
OC: 07904000
|
|
END LLLU; 07905000
|
|
PROCEDURE ZERO ; % LIT CALL ZERO 07906000
|
|
BEGIN 07907000
|
|
ADJ(0,2); 07908000
|
|
AX.[44:4]:=A:=0; 07909000
|
|
AROF:=TRUE; 07910000
|
|
END ZERO; 07911000
|
|
PROCEDURE ONE ; % LIT CALL ONE 07912000
|
|
BEGIN 07913000
|
|
ZERO; 07914000
|
|
A:=1; 07915000
|
|
END ONE ; 07916000
|
|
PROCEDURE LT8 ; % LIT CALL 8 BITS 07917000
|
|
BEGIN 07918000
|
|
ZERO; 07919000
|
|
A:=SYLLABLE; 07920000
|
|
STEPPSR(1); 07921000
|
|
END LT8; 07922000
|
|
PROCEDURE LT16 ; % LIT CALL 16 BITS 07923000
|
|
BEGIN 07924000
|
|
ZERO; 07925000
|
|
A.[32:8]:=SYLLABLE; 07926000
|
|
STEPPSR(1); 07927000
|
|
A.[40:8]:=SYLLABLE; 07928000
|
|
STEPPSR(1); 07929000
|
|
END LT16; 07930000
|
|
PROCEDURE LT48 ; % LIT CALL 48 BITS 07931000
|
|
BEGIN 07932000
|
|
REAL T1,T2; 07933000
|
|
ZERO; 07934000
|
|
IF PSR!0 THEN STEPPSR(6-PSR); T1~SYLLABLE; 07935000
|
|
A:=P; 07936000
|
|
AX:=PX.PBIT; 07937000
|
|
STEPPSR(6); 07938000
|
|
END LT48; 07939000
|
|
PROCEDURE MPCW ; % MAKE PROGRAM CONTROL WORD 07940000
|
|
BEGIN 07941000
|
|
LT48; 07942000
|
|
AX.TAG ~ PCW; 07943000
|
|
END LPCW; 07944000
|
|
PROCEDURE BITSET; % UTILITY FOR BIT SETTING OPERATORS 07945000
|
|
BEGIN 07946000
|
|
INTEGER Z10, Z10X; % Z10X - SAFE IN DYALS 07947000
|
|
Z10 ~ T.[44:1] + 1; % NEGATE BIT 3 OF OPERATOR 07948000
|
|
DYAL (Z10, B, 0, C, 1); 07949000
|
|
END BITSET; 07950000
|
|
PROCEDURE BSET ; % BIT SET 07951000
|
|
BEGIN 07952000
|
|
BRST ; 07953000
|
|
END BSET; 07954000
|
|
PROCEDURE DBST ; % DYNAMIC BIT SET 07955000
|
|
BEGIN 07956000
|
|
DBRS; 07957000
|
|
END DBST; 07958000
|
|
PROCEDURE BRST ; % BIT RESET 07959000
|
|
BEGIN 07960000
|
|
C ~ PSYLLABLES; 07961000
|
|
STEPPSR (1); 07962000
|
|
IF C > 47 THEN INTFAMB(2) ELSE BEGIN 07962100
|
|
ADJ (0, 1); 07963000
|
|
BITSET; 07964000
|
|
END; 07964100
|
|
END BRST; 07965000
|
|
PROCEDURE DBRS ; % DYNAMIC BIT RESET 07966000
|
|
BEGIN 07967000
|
|
ADJ (0, 1); 07968000
|
|
IF INTEGERIZE (TRUE, B) OR B < 0 OR B > 47 07969000
|
|
THEN INTFAMB(3) 07970000
|
|
ELSE BEGIN 07971000
|
|
MOVE (B, C); 07972000
|
|
BROF ~ FALSE; 07973000
|
|
ADJ (0, 1); 07974000
|
|
BITSET; 07975000
|
|
END; 07976000
|
|
END DBRS; 07977000
|
|
PROCEDURE CHSN ; % CHANGE SIGN BIT 07978000
|
|
BEGIN 07979000
|
|
ADJ(1,2); 07980000
|
|
CHECOPRNDA END; 07981000
|
|
A.SOBIT~ REAL(NOT BOOLEAN(A.SOBIT)); 07982000
|
|
END CHSN; 07983000
|
|
PROCEDURE CBON ; % COUNT BINARY ONES 07984000
|
|
BEGIN 07985000
|
|
INTEGER STREAM PROCEDURE COUNT (W); 07986000
|
|
BEGIN 07987000
|
|
SI ~ W; 47 (SKIP SB; IF SB THEN TALLY ~ TALLY + 1); 07988000
|
|
COUNT ~ TALLY; 07989000
|
|
END; 07990000
|
|
CHECOPRNDA END; 07991000
|
|
AA~COUNT(A)+AX.PBIT; 07992000
|
|
IF AX.TAG=DOUBL THEN 07993000
|
|
AA~COUNT(X)+XX.PBIT+AA; 07994000
|
|
AX ~ 0; 07995000
|
|
A~AA; 07996000
|
|
END CBON; 07997000
|
|
PROCEDURE LOG2; % LEADING ONE TEST LOG207998000
|
|
BEGIN 07999000
|
|
INTEGER STREAM PROCEDURE LEADING (ONE); 08000000
|
|
BEGIN 08001000
|
|
SI ~ ONE; 08002000
|
|
47 (SKIP SB; IF SB THEN JUMP OUT ELSE TALLY ~ TALLY + 1); 08003000
|
|
LEADING ~ TALLY; 08004000
|
|
END LEADING; 08005000
|
|
ADJ(0,1); 08006000
|
|
B~IF BOOLEAN(BX) THEN 48 ELSE 47-LEADING(B); 08007000
|
|
BX~0; 08008000
|
|
END LOG2; 08009000
|
|
PROCEDURE STAG ; % SET TAG FIELD 08010000
|
|
BEGIN 08011000
|
|
ADJ(1,1); 08012000
|
|
BX.TAG:=A.[45:3]; 08013000
|
|
AROF:=FALSE; 08014000
|
|
END STAG; 08015000
|
|
PROCEDURE RTAG ; % READ TAG FIELD 08016000
|
|
BEGIN 08017000
|
|
ADJ(1,2); 08018000
|
|
A:=0&AX[45:44:3]; 08019000
|
|
AX.[44:4]:=0; 08020000
|
|
END RTAG; 08021000
|
|
PROCEDURE SINT ; % SET INTERVAL TIMER 08022000
|
|
BEGIN 08023000
|
|
ADJ (1, 2); % TEMPORARY NO FLOWS 08024000
|
|
INTTIMER ~ (INTTIMER ~ A + .5).[37:11] | 5000 + REALTIME; 08025000
|
|
AX ~ 0; 08026000
|
|
AROF ~ FALSE; 08027000
|
|
IF INTTIMER < IDLETIME OR IDLETIME = 0 THEN IDLETIME~INTTIMER; 08028000
|
|
END SINT; 08029000
|
|
PROCEDURE RDLK ; % READ WITH LOCK 08030000
|
|
BEGIN 08031000
|
|
STORE(7); 08032000
|
|
END RDLK; 08033000
|
|
PROCEDURE STFF ; % STUFF ENVIRONMENT 08034000
|
|
BEGIN 08035000
|
|
ERVSFLOW(18); 08036000
|
|
END STFF; 08037000
|
|
PROCEDURE WHOI ; % READ PROCESSOR IDENTIFICATION 08038000
|
|
BEGIN 08039000
|
|
ADJ (0,2); 08039500
|
|
A ~ AX ~ 0; 08040000
|
|
A ~ PID; AROF ~ TRUE; 08040500
|
|
END WHOI; 08041000
|
|
PROCEDURE EEXI ; % ENABLE EXTERNAL INTERRUPTS 08042000
|
|
BEGIN 08043000
|
|
IF IDLETIME } REALTIME THEN REALTIME ~ IDLETIME; 08043100
|
|
IIHF ~ FALSE; 08044000
|
|
END EEXI; 08045000
|
|
PROCEDURE DEXI ; % DISABLE EXTERNAL IMTERRUPTS 08046000
|
|
BEGIN 08047000
|
|
IIHF ~ TRUE; 08048000
|
|
END DEXI; 08049000
|
|
PROCEDURE IDLE ; % IDLE UNTIL INTERRUPT 08050000
|
|
BEGIN 08051000
|
|
IF NOT NCSF THEN SETINTERRUPT (INVOP) ELSE 08051100
|
|
IF IDLETIME } REALTIME % TEMPORARY - NO FLOWS 08052000
|
|
THEN BEGIN 08053000
|
|
IF DISKLOAD > 0 08054000
|
|
THEN BEGIN 08055000
|
|
DISKLOAD ~ -1 ; 08056000
|
|
INTTIMER ~ IDLETIME ~ CURRENTT ~ 08057000
|
|
REALTIME ~ 1 ; 08058000
|
|
END ; 08059000
|
|
REALTIME ~ IDLETIME; 08060000
|
|
IDLETIME ~ CURRENTT; 08061000
|
|
END 08062000
|
|
ELSE SETINTERRUPT (LOOPI); 08063000
|
|
END IDLE; 08064000
|
|
PROCEDURE HEYU ; % INTERRUPT OTHER PROCESSOR 08065000
|
|
BEGIN 08066000
|
|
PTPI ~ 1; 08067000
|
|
END HEYU; 08068000
|
|
PROCEDURE RPRR ; % READ PROCESSOR REGISTER 08069000
|
|
BEGIN 08070000
|
|
INTEGER I, J, FREG, CHI, PREG, PREGX; 08070050
|
|
LIST MONLIST(M[F+2].[6:6], M[F+2], CX.TAG, CHI, 08070100
|
|
C.[3:3],C.[6:3], C.[9:3], C.[12:3], C.[15:3], C.[18:3],C.[21:3]08070200
|
|
,C.[24:3],C.[27:3],C.[30:3],C.[33:3],C.[36:3],C.[39:3],C.[42:3]08070300
|
|
,C.[45:3], FOR J ~ 0 STEP 1 UNTIL I DO MONITOROUTPUT [J]); 08070400
|
|
ADJ (1, 2); 08071000
|
|
MOVE (A, C); 08072000
|
|
IF C = 64 % TO PROVIDE A MEANS OF 08073000
|
|
THEN A ~ TRACTER % PRESERVING TRACTER 08074000
|
|
ELSE IF C =63 08074050
|
|
THEN BEGIN 08074100
|
|
IF PRINTERNOTYETOPENED 08074120
|
|
THEN BEGIN PRINTERNOTYETOPENED.[46:1] ~ TRUE; HEADING END; 08074140
|
|
FREG ~ F - M[F].DF; 08074150
|
|
MOVE (M[F+3], C); 08074200
|
|
CHI ~ C.[1:2] & CX[45:47:1]; 08074250
|
|
WHILE I < 14 AND FREG > BOSR +2 DO 08074300
|
|
BEGIN 08074350
|
|
MOVE(M[FREG+1], PREG); 08074375
|
|
MONITOROUTPUT [I] ~ PREG .SDIF; 08074400
|
|
MONITOROUTPUT[I~I+1] ~ PREG .PIRF; 08074450
|
|
FREG ~ FREG - M[FREG].DF; 08074500
|
|
I ~ I + 1; 08074550
|
|
END; 08074600
|
|
I ~ I - 1; 08074650
|
|
WRITE (TAPED, MONFMT, MONLIST); 08074700
|
|
END ELSE IF C = 62 THEN A ~ IDLETIME ELSE IF C = 61 THEN A ~ REALTIME 08074750
|
|
ELSE 08075000
|
|
IF C < 32 08076000
|
|
THEN A ~ D [C.[43:5]] 08077000
|
|
ELSE IF C.[42:2] = 2 08078000
|
|
THEN BEGIN % THE MOVES ARE THE SIMULATORS 08079000
|
|
%"CORRECTING NETWORK" 08080000
|
|
MOVEN (PIR, IRSR, 8); 08081000
|
|
A ~ IRSR [C.[45:3]]; 08082000
|
|
END 08083000
|
|
ELSE BEGIN 08084000
|
|
MOVEN (PBR, BRSR, 8); 08085000
|
|
A ~ BRSR [C.[45:3]]; 08086000
|
|
END; 08087000
|
|
END RPRR; 08088000
|
|
PROCEDURE SPRR ; % SET PROCESSOR REGISTER 08089000
|
|
BEGIN 08090000
|
|
ADJ (1, 1); 08091000
|
|
MOVE (B, C); 08092000
|
|
IF C = 64 % TO PROVIDE A MEANS OF SETTING 08093000
|
|
THEN TRACTER ~ A % TRACTER 08094000
|
|
ELSE 08095000
|
|
IF C < 32 08096000
|
|
THEN D [C] ~ A. ADDR 08097000
|
|
ELSE IF C.[42:2] = 2 08098000
|
|
THEN BEGIN % THE MOVENS ARE THE SIMULATORS 08099000
|
|
% "CORRECTING NETWORK 08100000
|
|
MOVEN (PIR, IRSR, 8); 08101000
|
|
IRSR [C.[45:3]] ~ A.ADDR; 08102000
|
|
MOVEN (IRSR, PIR, 8); 08103000
|
|
END 08104000
|
|
ELSE BEGIN 08105000
|
|
MOVEN (PBR, BRSR, 8); 08106000
|
|
BRSR [C.[45:3]] ~ A.ADDR; 08107000
|
|
MOVEN (BRSR, PBR, 8); 08108000
|
|
END; 08109000
|
|
AROF ~ BROF ~ FALSE; 08110000
|
|
END SPRR; 08111000
|
|
PROCEDURE SCNI ; % SCAN IN 08112000
|
|
BEGIN 08113000
|
|
DEFINE MBIT = MPXAB#, 08114000
|
|
HTYPE= MPXHDWE#, 08114050
|
|
Z = MPXFC#; 08114100
|
|
ADJ (1, 0); 08114200
|
|
Y ~ 0; 08114300
|
|
CASE A.VARIF OF 08114400
|
|
BEGIN 08114500
|
|
BEGIN % IO PATH INTERROGATE 0 08114600
|
|
IF EVENTS [A.LUNIT].EVBUSY = 0 THEN % UNIT NOT BUSY 08114700
|
|
BEGIN 08114800
|
|
Y.LUNIT ~ A.LUNIT; 08114810
|
|
IF MPX [1, A.LUNIT].HTYPE ! 0 % U CABLED TO MPA08114900
|
|
AND MPXOPS [1] ! 0 % MPXA NOT LOADED08115000
|
|
THEN BEGIN Y.Z ~ 1; Y.MBIT ~ 1 END; 08115100
|
|
IF A.Z = 2 THEN Y ~ 0; 08115150
|
|
IF MPX [2, A.LUNIT].HTYPE ! 0 % U CABLED TO MPB08115200
|
|
AND MPXOPS [2] ! 0 % MPXB NOT LOADED08115300
|
|
THEN BEGIN Y.Z ~ Y.Z + 2; Y.MBIT ~ 1 END; 08115400
|
|
END 08115500
|
|
END PATH INTERROGATE; 08115600
|
|
BEGIN % READ STATUS WORD 1 08115700
|
|
IF A.LUNIT = 0 THEN Y ~ STATUSWORD; 08115800
|
|
% ONLY ONE VECTOR IN SIMULATOR 08115900
|
|
% STATUSWORD BUILT INITIALLY AT CABLING TIME 08116000
|
|
END STATUS; 08116100
|
|
BEGIN % READ RESULT DESCRIPTOR 2 08116200
|
|
Y ~ GETRESULT (A.Z); 08116300
|
|
END READ RESULT DESCRIPTOR; 08116500
|
|
Y ~ ENTIER (TIMEOFDAY DIV 24); % TIME OF DAY 3 08116600
|
|
BEGIN % READ INTERRUPT MASK OR REGISTER 4 08116800
|
|
Y ~ IF BOOLEAN (A.LUNIT) % READ MASK 08116900
|
|
THEN IF A.Z = 1 THEN INTMASKA ELSE INTMASKB 08117000
|
|
ELSE IF A.Z = 1 THEN INTREGA ELSE INTREGB; 08117100
|
|
END; 08117200
|
|
BEGIN % READ GCA 5 08117300
|
|
NOTYETCODED; 08117400
|
|
END; 08117500
|
|
BEGIN % INTERROGATE UNIT TYPE 6 08117600
|
|
IF BOOLEAN (A) 08117700
|
|
THEN Y ~ MPX [A.Z, A.LUNIT].HTYPE 08117800
|
|
ELSE IF Y ~ MPX [1, A.LUNIT].HTYPE = 0 08117900
|
|
THEN Y ~ MPX [2, A.LUNIT].HTYPE; 08118000
|
|
END UNIT TYPE; 08118100
|
|
; % 7 08118150
|
|
; % 8 08118200
|
|
; % 9 08118250
|
|
; % 10 08118300
|
|
; % 11 08118350
|
|
; % 12 08118400
|
|
; % 13 08118450
|
|
; % 14 08118500
|
|
BEGIN % READ INTERRUPT LITERAL 15 08118550
|
|
BOOLEAN B; 08118560
|
|
INTEGER I, MPXI; 08118600
|
|
REAL E; 08118605
|
|
MPXI ~A.Z; 08118610
|
|
IF FIRSTEVENT [MPXI] { REALTIME 08118630
|
|
AND FIRSTEVENT[MPXI] !0 08118640
|
|
THEN BEGIN 08118650
|
|
I ~ FIRSTEVENTI[MPXI]; 08118660
|
|
Y ~ MPX[MPXI, I].MPXINT; 08118670
|
|
B ~ Y !0; 08118672
|
|
MPX [MPXI, I].MPXINT ~ 0; 08118675
|
|
WHILE (E ~ EVENTS[I]).EVTIME { REALTIME 08118680
|
|
AND E ! 0 AND NOT B 08118685
|
|
DO BEGIN 08118690
|
|
IF E.EVMPX = MPXI 08118695
|
|
THEN BEGIN 08118700
|
|
Y ~ MPX[MPXI,I].MPXINT;08118705
|
|
B ~ TRUE; 08118707
|
|
MPX[MPXI, I].MPXINT ~0;08118710
|
|
END; 08118715
|
|
I ~ E.EVLINK; 08118720
|
|
END 08118725
|
|
END 08118730
|
|
ELSE Y ~ 0; 08118740
|
|
END; 08118750
|
|
END CASE; 08118800
|
|
B ~ Y; BX ~ 0; 08118850
|
|
AROF ~ FALSE; BROF ~ TRUE; 08118900
|
|
END SCNI; 08119000
|
|
PROCEDURE SCNO ; % SCAN OUT 08120000
|
|
BEGIN 08121000
|
|
DEFINE MBIT = MPXAB#, 08122000
|
|
Z = MPXFC#; 08122200
|
|
INTEGER T; 08122400
|
|
ADJ (1, 1); 08123000
|
|
IF T ~ A.VARIF = 4 OR T = 0 AND NOT NCSF 08124000
|
|
THEN SETINTERRUPT (INVOP) 08124300
|
|
ELSE CASE T OF 08124600
|
|
BEGIN 08124900
|
|
BEGIN% INITIATE I/O 0 08125000
|
|
MOVE (A, SCANBUSA); 08125300
|
|
MOVE (B, DATABUSA); 08125600
|
|
MULTIPLEX ~ TRUE; 08125900
|
|
MOVE (B, DATABUSA); 08126000
|
|
END IIO; 08126300
|
|
; % 1 08126600
|
|
; % 2 08126900
|
|
TIMEOFDAY ~ ENTIER (B | 24); % 3 08127000
|
|
IF A.Z = 1 THEN INTMASKA ~ B ELSE INTMASKB ~ B; % 4 08127300
|
|
NOTYETCODED; % SET GCA 5 08127600
|
|
END CASE; 08127900
|
|
AROF ~ BROF ~ FALSE; 08128000
|
|
END SCNO; 08129000
|
|
BOOLEAN SCANORXFER, XLATE, XFERWD, XFERW, SCANWH; 08130000
|
|
08131000
|
|
DEFINE QF01 = QP.[47:1]#, QF02 = QP.[46:1]#, QF03 = QP.[45:1]#, 08132000
|
|
QF04 = QP.[44:1]#, QH01 = QP.[43:1]#, QH02 = QP.[42:1]#, 08133000
|
|
QH03 = QP.[41:1]#, SPSF = QP.[40:1]#, SPRF = QP.[39:1]#, 08134000
|
|
DPSF = QP.[38:1]#, P2R2 = QP.[37:1]#, P2R3 = QP.[36:1]#, 08135000
|
|
P2R4 = QP.[35:1]#, FWDT = QP.[34:1]#, BKIP = QP.[33:1]#, 08136000
|
|
LHFF = QP.[32:1]#, XROF = QP.[31:1]#, SWPS = QP.[30:1]#; 08137000
|
|
DEFINE INVOPI = BEGIN SETINTERRUPT (INVOP); GO TO OC END#, 08138000
|
|
INTOFL = BEGIN SETINTERRUPT (INTOVFI); GO TO OC END#, 08139000
|
|
INVINX = BEGIN SETINTERRUPT (INVINXI); GO TO OC END#, 08140000
|
|
MEMPRO = BEGIN SETINTERRUPT (MEMPROI); GO TO OC END#, 08141000
|
|
PRESBI = BEGIN SETINTERRUPT (PRESBIT); GO TO OC END#, 08142000
|
|
JFIF = BEGIN 08143000
|
|
ADJ (0,0); BROF ~ TRUE; AROF ~ TRUE; 08144000
|
|
A ~ AX ~ 0; 08144500
|
|
B ~ BX ~ 0; SDIS ~ 1; BKIP ~ 1; 08145000
|
|
IF QF01 = 1 THEN B.[46:1] ~ 1 ELSE 08146000
|
|
IF QF02 = 1 THEN B.[39:1] ~ 1 ELSE 08147000
|
|
IF QF03 = 1 THEN B.[47:1] ~ 1 ELSE 08148000
|
|
B.[37:1] ~ 1; 08149000
|
|
IF P2R2 = 1 THEN A.[46:1] ~ 1 ELSE 08150000
|
|
IF P2R3 = 1 THEN A.[46:2] ~ 3 ELSE 08151000
|
|
A.[45:3] ~ 4; 08152000
|
|
IF QF01 = 1 THEN INVOPI ELSE 08153000
|
|
IF QF02 = 1 THEN PRESBI ELSE 08154000
|
|
IF QF03 = 1 OR QF04 = 1 THEN MEMPRO 08155000
|
|
END#, 08156000
|
|
JGIF = BEGIN 08157000
|
|
ADJ (0,0); A ~ AX + 0; B ~ BX ~ 0; 08158000
|
|
B ~ RPF; BROF ~ TRUE; 08159000
|
|
IF TEEF THEN 08160000
|
|
BEGIN 08161000
|
|
A.ADDR ~ TBR; A.INDEX ~ TIR; 08162000
|
|
A.PSRF ~ PSR; A.SBIT ~ 1; AROF ~ TRUE 08163000
|
|
END ELSE 08164000
|
|
IF FWDT = 1 THEN 08165000
|
|
BEGIN AROF ~ TRUE; MOVE (Y, A) END; 08166000
|
|
JFIF; 08167000
|
|
END#, 08168000
|
|
MEMPROTECT = BEGIN 08168100
|
|
UPDF ~ TRUE; ENDE; 08168200
|
|
QF04 ~ 1; JGIF; 08168300
|
|
GO TO OC; 08168310
|
|
END#, 08168400
|
|
FETCHSOURCE = 08169000
|
|
BEGIN 08170000
|
|
IF SOPF THEN ELSE 08171000
|
|
BEGIN 08172000
|
|
IF NOT AROF THEN 08173000
|
|
BEGIN 08174000
|
|
MM ~ SBR ~ SIR; 08175000
|
|
MOVE (M[MM], A); MEMCYCLE; 08176000
|
|
AROF ~ TRUE; 08177000
|
|
IF BOOLEAN(AX.TAG)THEN MEMPROTECT 08178000
|
|
END; 08179000
|
|
END; 08180000
|
|
END#, 08181000
|
|
FETCHDESTINATION = 08182000
|
|
BEGIN 08183000
|
|
IF NOT BROF THEN 08184000
|
|
BEGIN 08185000
|
|
MM ~ DBR ~ DIR; 08186000
|
|
MOVE (M[MM], B); MEMCYCLE; 08187000
|
|
BROF ~ TRUE; 08188000
|
|
IF BOOLEAN (BX.TAG) THEN MEMPROTECT 08189000
|
|
END; 08190000
|
|
END#, 08191000
|
|
CHARSZ = BEGIN 08192000
|
|
IF SSZ = 0 THEN 08193000
|
|
BEGIN 08194000
|
|
IF DSZ = 0 THEN SSZ ~ DSZ ~ 6 ELSE 08195000
|
|
SSZ ~ DSZ 08196000
|
|
END ELSE 08197000
|
|
IF DSZ = 0 THEN DSZ ~ SSZ 08198000
|
|
END#, 08199000
|
|
08200000
|
|
08201000
|
|
08202000
|
|
08203000
|
|
COMPARECHAR = IF ACHAR ! BCHAR THEN 08204000
|
|
IF ACHAR > BCHAR THEN 08205000
|
|
IF RELATION < 3 OR RELATION=5 THEN ELSE 08206000
|
|
TFFF ~ FALSE 08207000
|
|
ELSE 08208000
|
|
IF RELATION.[46:1]=1 THEN ELSE 08209000
|
|
TFFF ~ FALSE 08210000
|
|
ELSE 08211000
|
|
IF RELATION> 3 THEN ELSE TFFF~FALSE#, 08218000
|
|
SWITCHSOURCE = 08219000
|
|
BEGIN 08220000
|
|
IF SIB = 0 THEN 08221000
|
|
BEGIN 08222000
|
|
IF SOPF THEN 08223000
|
|
BEGIN 08224000
|
|
IF AX.TAG = DOUBL THEN 08225000
|
|
BEGIN 08226000
|
|
08227000
|
|
JUNK ~ A; 08228000
|
|
A ~ X; 08229000
|
|
X ~ JUNK; 08230000
|
|
END; 08231000
|
|
END ELSE 08232000
|
|
BEGIN 08232100
|
|
AROF ~ FALSE; 08233000
|
|
SIR ~ SIR + 1; 08234000
|
|
END; 08234100
|
|
END; 08235000
|
|
END#, 08236000
|
|
STOREB = BEGIN 08237000
|
|
MOVE (B, M[DBR + DIR]); MEMCYCLE; 08238000
|
|
BROF ~ FALSE; 08239000
|
|
END#, 08240000
|
|
STEPSP = BEGIN 08241000
|
|
SIB ~ 0; 08242000
|
|
SIR ~ SIR ~ 1; 08243000
|
|
END#, 08244000
|
|
STEPDP = BEGIN 08245000
|
|
DIB ~ 0; 08246000
|
|
DIR ~ DIR + 1; 08247000
|
|
END#, 08248000
|
|
SIBLNG = 2 | REAL (SSZ = 6) + 4 | REAL (SSZ = 8)#, 08249000
|
|
DIBLNG = 2 | REAL (DSZ = 6) + 4 | REAL (DSZ = 8)#, 08250000
|
|
TWOTO20 = 1048576#, 08251000
|
|
DYALSIB = 47 - SIB | SSZ#, 08252000
|
|
DYALDIB = 47 - DIB | SSZ#, 08253000
|
|
DYALSET = SIB| SSZ - 1#, 08253100
|
|
DYALSZ = SIB| SSZ #, 08253200
|
|
DYALSIZ = 48 - SIB | SSZ #, 08253300
|
|
BUMPSIB = SIB ~ (SIB + 1) MOD (48 DIV SSZ)#, 08254000
|
|
BUMPDIB = DIB ~ (DIB + 1) MOD (48 DIV SSZ)#, 08255000
|
|
BASE = (IF SOURCE THEN SBR ELSE DBR)#, 08256000
|
|
WORDZ = (IF SOURCE THEN SIR ELSE DIR)#, 08257000
|
|
BYTE = (IF SOURCE THEN SIB ELSE DIB)#, 08258000
|
|
SYZE = (IF SOURCE THEN SSZ ELSE DSZ)#, 08259000
|
|
SETUPEXSF = IF EXSF THEN ELSE 08260000
|
|
IF NOT RNTF THEN 08261000
|
|
BEGIN 08262000
|
|
C ~ SYLLABLE; 08263000
|
|
CX ~ 0; 08264000
|
|
END ELSE 08265000
|
|
STEPPSR (1)#; 08266000
|
|
PROCEDURE ENTEREDIT (TYPE, UPDATE); 08267000
|
|
VALUE TYPE, UPDATE; 08268000
|
|
INTEGER TYPE; 08269000
|
|
BOOLEAN UPDATE; 08270000
|
|
BEGIN 08271000
|
|
DEFINE TABLENTER = TYPE = 3#, 08272000
|
|
SINGLEPOINT = TYPE = 1#, 08273000
|
|
SINGLESHOT = TYPE = 0#; 08274000
|
|
LABEL OC, L1, L2, L3, L4, L5; 08275000
|
|
IF TABLENTER THEN 08276000
|
|
BEGIN 08277000
|
|
ADJ (0,1); 08278000
|
|
IF BX.TAG ! DATADESC THEN 08279000
|
|
BEGIN 08280000
|
|
QF01 ~ 1; 08281000
|
|
JFIF; 08282000
|
|
GO TO OC 08283000
|
|
END; 08284000
|
|
IF BX.PBIT ! 1 THEN 08285000
|
|
BEGIN 08286000
|
|
QF02 ~ 1; 08287000
|
|
JFIF; 08288000
|
|
GO TO OC 08289000
|
|
END; 08290000
|
|
BROF ~ FALSE; 08291000
|
|
TBR ~ B.ADDR; 08292000
|
|
IF B.IBIT = 1 THEN TIR ~ B.INDEX 08293000
|
|
ELSE TIR ~ 0; 08294000
|
|
IF B.SBIT = 1 THEN RNTF ~ TRUE; 08295000
|
|
MOVE (B, C); 08296000
|
|
GO TO L1; 08297000
|
|
END; 08298000
|
|
ADJ (0,1); 08299000
|
|
IF BX.TAG ! SINGL AND BX.TAG ! DOUBL THEN 08300000
|
|
BEGIN 08301000
|
|
IF NOT SCANORXFER THEN 08302000
|
|
BEGIN 08303000
|
|
QF01 ~ 1; 08304000
|
|
JFIF; 08305000
|
|
GO TO OC 08306000
|
|
END ELSE 08307000
|
|
BEGIN MOVE(C,Y); C~ 0&REAL(NOT BOOLEAN(CX~0)) 08308000
|
|
[28:28:20] END 08308100
|
|
END ELSE 08309000
|
|
BEGIN NTGR; IF SDIS = 1 THEN INTOFL; 08310000
|
|
MOVE (C,Y); MOVE (B,C); 08311000
|
|
BROF ~ FALSE; 08312000
|
|
END; 08313000
|
|
08314000
|
|
IF SINGLEPOINT THEN 08315000
|
|
BEGIN 08316000
|
|
ADJ (0,1); 08317000
|
|
AROF ~ TRUE; 08318000
|
|
MOVE (B,A) 08319000
|
|
END; 08320000
|
|
L1: 08321000
|
|
ADJ (1,1); 08322000
|
|
08322100
|
|
SPSF ~ A.SBIT; 08323000
|
|
SPRF ~ A.RBIT; 08324000
|
|
DPSF ~ B.SBIT; 08325000
|
|
IF AX.TAG = SINGL OR AX.TAG = DOUBL THEN 08326000
|
|
BEGIN 08327000
|
|
08328000
|
|
SSZ ~ 0; 08329000
|
|
SIB ~ 0; 08330000
|
|
SOPF ~ TRUE; 08330500
|
|
IF AX.TAG = SINGL THEN MOVE (A,X); 08331000
|
|
GO TO L2 08332000
|
|
END; 08333000
|
|
IF AX.PBIT ! 1 THEN 08334000
|
|
BEGIN QF02 ~ 1; GO TO L3 END; 08335000
|
|
SBR ~ A.ADDR; 08336000
|
|
SSZ ~ IF A.SZ = 0 THEN 6 ELSE 2|A.SZ; 08337000
|
|
SIB ~ 0; 08338000
|
|
IF A.IBIT ! 0 THEN 08339000
|
|
BEGIN 08340000
|
|
IF A.SZ ! 0 THEN 08341000
|
|
BEGIN 08342000
|
|
SIB ~ A.[8:4]; 08343000
|
|
SIR ~ A.[12:16]; 08344000
|
|
END 08345000
|
|
ELSE 08346000
|
|
SIR ~ A.INDEX 08347000
|
|
END ELSE 08348000
|
|
SIR ~ 0; 08349000
|
|
08350000
|
|
AROF ~ FALSE; 08351000
|
|
L2: IF SWPS = 1 THEN GO TO L5; 08352000
|
|
IF BX.TAG ! DATADESC THEN 08353000
|
|
BEGIN 08354000
|
|
L4: 08355000
|
|
QF01 ~ 1; 08356000
|
|
L3: 08357000
|
|
IF SINGLEPOINT THEN 08358000
|
|
BROF ~ FALSE; 08359000
|
|
AROF ~ TRUE; 08359500
|
|
ADJ (0,0); 08360000
|
|
MOVE (Y,A); 08360500
|
|
IF TABLENTER THEN AROF ~ TRUE ELSE 08361000
|
|
BEGIN 08361500
|
|
MOVE (C,B); 08362000
|
|
BROF ~ TRUE; 08362500
|
|
IF FWDT = 1 THEN AROF ~ TRUE; 08363000
|
|
END; 08363500
|
|
JFIF; 08364000
|
|
GO TO OC 08365000
|
|
END; 08366000
|
|
IF BX.PBIT ! 1 THEN 08367000
|
|
BEGIN QF02 ~ 1; GO TO L3 END; 08367500
|
|
DBR ~ B.ADDR; 08368000
|
|
DSZ ~ IF B.SZ=0 THEN 6 ELSE 2|B.SZ; 08368500
|
|
IF AX.TAG = DATADESC THEN 08369000
|
|
BEGIN 08369500
|
|
IF NOT XLATE THEN 08370000
|
|
BEGIN 08370500
|
|
IF SSZ ! DSZ THEN GO TO L4 08371000
|
|
END; 08371500
|
|
END; 08372000
|
|
IF NOT XFERWD THEN 08373000
|
|
BEGIN 08374000
|
|
IF B.RBIT = 1 THEN 08375000
|
|
BEGIN 08376000
|
|
QF03 ~ 1; 08377000
|
|
GO TO L3 08378000
|
|
END; 08379000
|
|
END; 08380000
|
|
L5: DBR ~ B.ADDR; 08380500
|
|
DSZ ~ IF B.SZ = 0 THEN 6 ELSE 2 | B.SZ; 08380600
|
|
DIB ~ 0; 08381000
|
|
IF B.IBIT ! 0 THEN 08382000
|
|
BEGIN 08383000
|
|
IF B.SZ ! 0 THEN 08384000
|
|
BEGIN 08385000
|
|
DIB ~ B.[8:4]; 08386000
|
|
DIR ~ B.[12:16] 08387000
|
|
END ELSE 08388000
|
|
DIR ~ B.INDEX 08389000
|
|
END ELSE 08390000
|
|
DIR ~ 0; 08391000
|
|
BROF ~ FALSE; 08392000
|
|
IF UPDATE THEN UPDF ~ TRUE; 08393000
|
|
IF NOT TABLENTER THEN EXSF ~ ESPF ~ TRUE 08394000
|
|
ELSE 08395000
|
|
BEGIN 08396000
|
|
TEEF ~ TRUE; PSR ~ C.[38:3] 08397000
|
|
END; 08398000
|
|
OC: 08399000
|
|
END ENTEREDIT; 08400000
|
|
PROCEDURE XFERWDS (UPDATE,OVERITE); 08400010
|
|
VALUE UPDATE, OVERITE; 08400020
|
|
BOOLEAN UPDATE, OVERITE; 08400030
|
|
BEGIN 08400040
|
|
LABEL OC, L1; 08400050
|
|
XFERWD ~ OVERITE; 08400055
|
|
ENTEREDIT (0,UPDATE); 08400060
|
|
IF SIB ! 0 THEN STEPSP; 08400070
|
|
IF DIB ! 0 THEN STEPDP; 08400080
|
|
IF C.ADDR > 0 THEN 08400090
|
|
BEGIN 08400100
|
|
RPF ~ C.ADDR; 08400110
|
|
WHILE (RPF ~ RPF - 1) } 0 DO 08400120
|
|
BEGIN 08400130
|
|
IF SOPF THEN ELSE 08400140
|
|
BEGIN 08400150
|
|
MM ~ SBR ~ SIR; 08400160
|
|
MOVE (M[MM], A); MEMCYCLE; 08400170
|
|
IF NOT OVERITE THEN 08400180
|
|
IF BOOLEAN (AX.TAG) THEN GO L1;08400190
|
|
END; 08400200
|
|
MM ~ DBR ~ DIR; 08400210
|
|
MOVE (M[MM], C); 08400220
|
|
IF NOT OVERITE THEN 08400230
|
|
BEGIN 08400240
|
|
IF BOOLEAN (CX.TAG) THEN GO TO L1;08400250
|
|
END; 08400260
|
|
MOVE (A, M[MM]); MEMCYCLE; 08400270
|
|
IF SOPF THEN 08400280
|
|
BEGIN 08400290
|
|
IF AX.TAG ! SINGL THEN 08400300
|
|
BEGIN 08400310
|
|
MOVE (A, JUNK); 08400320
|
|
MOVE (X, A); 08400330
|
|
MOVE (JUNK, A); 08400340
|
|
END 08400350
|
|
END ELSE 08400360
|
|
SIR ~ SIR + 1; 08400370
|
|
DIR ~ DIR + 1; 08400380
|
|
END; 08400390
|
|
END; 08400400
|
|
ENDE; GO TO OC; 08400500
|
|
L1: 08400600
|
|
UPDF ~ TRUE; 08400700
|
|
ENDE; 08400750
|
|
QF04 ~ 1; 08400800
|
|
JGIF; 08400850
|
|
08400900
|
|
OC: 08400950
|
|
END XFERWDS; 08401000
|
|
PROCEDURE XFERWHILE (UPDATE,RELATION); 08402000
|
|
VALUE UPDATE, RELATION; 08403000
|
|
BOOLEAN UPDATE; 08404000
|
|
INTEGER RELATION; 08405000
|
|
BEGIN 08406000
|
|
REAL ACHAR, BCHAR; 08407000
|
|
LABEL OC, L1, L2, L3, L4; 08408000
|
|
ADJ (1,1); 08409000
|
|
IF AX.TAG ! SINGL THEN 08410000
|
|
BEGIN 08411000
|
|
QF01 ~ 1; 08412000
|
|
JFIF; 08413000
|
|
GO TO OC 08414000
|
|
END; 08415000
|
|
MOVE (A, C); 08416000
|
|
AROF ~ FALSE; SCANORXFER ~ TRUE; XFERW ~ TRUE; 08417000
|
|
ENTEREDIT (0, UPDATE); 08418000
|
|
CHARSZ; 08419000
|
|
DYAL (Y, BCHAR, SSZ-1, SSZ-1, SSZ); 08420000
|
|
TFFF ~ TRUE; 08420500
|
|
RPF ~ C.ADDR; 08421000
|
|
IF C.ADDR = 0 THEN 08422000
|
|
BEGIN 08423000
|
|
ENDE; GO TO OC; 08424000
|
|
END; 08425000
|
|
L1: FETCHSOURCE; 08426000
|
|
FETCHDESTINATION; 08427000
|
|
08428000
|
|
DYAL (A, ACHAR, DYALSIB, SSZ-1, SSZ); 08429000
|
|
COMPARECHAR; 08430000
|
|
IF TFFF THEN 08431000
|
|
BEGIN 08432000
|
|
DYAL (A, B, DYALSIB, DYALDIB, SSZ); 08433000
|
|
RPF ~ RPF - 1; 08434000
|
|
IF RPF = 0 THEN QH03 ~ 1 ELSE 08435000
|
|
L2: BEGIN 08436000
|
|
BUMPSIB; 08437000
|
|
SWITCHSOURCE; 08438000
|
|
BUMPDIB; 08439000
|
|
IF DIB = 0 THEN 08440000
|
|
BEGIN 08440010
|
|
STOREB; DIR ~ DIR + 1 08440020
|
|
END; 08440030
|
|
IF QH03 = 0 THEN GO TO L1; 08440040
|
|
IF UPDF THEN GO TO L3 ELSE GO TO L4; 08440050
|
|
END; 08440060
|
|
END; 08440070
|
|
STOREB; 08440080
|
|
IF TFFF THEN GO TO L2; 08440090
|
|
L3: ENDE; 08440100
|
|
ADJ (0,2); 08440110
|
|
A ~ RPF; AX ~ 0; 08440120
|
|
AROF ~ TRUE; 08440130
|
|
GO TO OC; 08440140
|
|
L4: ENDE; 08440150
|
|
OC: SCANORXFER ~ FALSE; XFERW ~ FALSE; 08440160
|
|
END XFERWHILE; 08440170
|
|
PROCEDURE TWSD; % TRANSFER WORDS, DESTRUCTIVE 08440180
|
|
BEGIN P2R3 ~ 1; 08440190
|
|
XFERWDS (FALSE, FALSE); P2R3 ~ 0; 08440200
|
|
END TWSD; 08440210
|
|
PROCEDURE TWSU; % TRANSFER WORDS, UPDATE 08440220
|
|
BEGIN P2R3 ~ 1; 08440230
|
|
XFERWDS (TRUE, FALSE); P2R3 ~ 0; 08440240
|
|
END TWSU; 08440250
|
|
PROCEDURE TWOD; % TRANSFER WORDS OVERWRITE, DESTRUCTIVE 08440260
|
|
BEGIN P2R3 ~ 1; 08440270
|
|
XFERWDS (FALSE, TRUE); P2R3 ~ 0; 08440280
|
|
END TWOD; 08440290
|
|
PROCEDURE TWOU; % TRANSFER WORDS OVERWRITE, UPDATE 08440300
|
|
BEGIN P2R3 ~ 1; 08440310
|
|
XFERWDS (TRUE, TRUE); P2R3 ~ 0; 08440320
|
|
END TWOU; 08440330
|
|
PROCEDURE TGTD; % TRANSFER WHILE GREATER, DESTRUCTIVE 08440340
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08440350
|
|
XFERWHILE (FALSE, 1); P2R4 ~ 0; FWDT ~ 0; 08440360
|
|
END TGTD; 08440370
|
|
PROCEDURE TGTU; % TRANSFER WHILE GREATER, UPDATE 08440380
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08440390
|
|
XFERWHILE (TRUE, 1); P2R4 ~ 0; FWDT ~ 0; 08440400
|
|
END TGTU; 08440500
|
|
PROCEDURE TGED; % TRANSFER WHILE GREATER OR EQUAL, DESTRUCTIVE 08440600
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08440700
|
|
XFERWHILE (FALSE, 5); P2R4 ~ 0; FWDT ~ 0; 08440800
|
|
END TGED; 08440900
|
|
PROCEDURE TGEU; % TRANSFER WHILE GREATER OR EQUAL, UPDATE 08441000
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08441100
|
|
XFERWHILE (TRUE, 5); P2R4 ~ 0; FWDT ~ 0; 08441200
|
|
END TGEU; 08441300
|
|
PROCEDURE TEQD; % TRANSFER WHILE EQUAL, DESTRUCTIVE 08441400
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08441500
|
|
XFERWHILE (FALSE, 4); P2R4 ~ 0; FWDT ~ 0; 08441600
|
|
END TEQD; 08441700
|
|
PROCEDURE TEQU; % TRANSFER WHILE EQUAL, UPDATE 08441800
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08441900
|
|
XFERWHILE (TRUE, 4); P2R4 ~ 0; FWDT ~ 0; 08442000
|
|
END TEQU; 08442100
|
|
PROCEDURE TLED; % TRANSFER WHILE LESS OR EQUAL, DESTRUCTIVE 08442200
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08442300
|
|
XFERWHILE (FALSE, 6); P2R4 ~ 0; FWDT ~ 0; 08442400
|
|
END TLED; 08442500
|
|
PROCEDURE TLEU; % TRANSFER WHILE LESS OR EQUAL, UPDATE 08442600
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08442700
|
|
XFERWHILE (TRUE, 6); P2R4 ~ 0; FWDT ~ 0; 08442800
|
|
END TLEU; 08442900
|
|
PROCEDURE TLSD; % TRANSFER WHILE LESS, DESTRUCTIVE 08443000
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08444000
|
|
XFERWHILE (FALSE, 3); P2R4 ~ 0; FWDT ~ 0; 08445000
|
|
END TLSD; 08446000
|
|
PROCEDURE TLSU; % TRANSFER WHILE LESS, UPDATE 08447000
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08448000
|
|
XFERWHILE (TRUE, 3); P2R4 ~ 0; FWDT ~ 0; 08448500
|
|
END TLSU; 08449000
|
|
PROCEDURE TNED; % TRANSFER WHILE NOT EQUAL, DESTRUCTIVE 08449500
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08450000
|
|
XFERWHILE (FALSE, 2); P2R4 ~ 0; FWDT ~ 0; 08451000
|
|
END TNED; 08452000
|
|
PROCEDURE TNEU; % TRANSFER WHILE NOT EQUAL, UPDATE 08453000
|
|
BEGIN P2R4 ~ 1; FWDT ~ 1; 08454000
|
|
XFERWHILE (TRUE, 2); P2R4 ~ 0; FWDT ~ 0; 08455000
|
|
END TNEU; 08456000
|
|
DEFINE MEMPROT = MEMPRO #; 08456500
|
|
PROCEDURE XFERWHILETF(TOGLE,UPDATE); 08457000
|
|
VALUE TOGLE,UPDATE; 08458000
|
|
BOOLEAN TOGLE,UPDATE; 08459000
|
|
BEGIN 08460000
|
|
LABEL OC,L12,L13,L14,L100,L1; 08461000
|
|
BOOLEAN LHFF; 08461100
|
|
ADJ (1,2); 08462000
|
|
IF AX.TAG ! DATADESC THEN 08463000
|
|
BEGIN 08464000
|
|
QF01 ~ 1; 08465000
|
|
L1: JFIF; 08466000
|
|
GO OC; 08467000
|
|
END; 08468000
|
|
IF AX.PBIT = 0 THEN 08469000
|
|
BEGIN 08470000
|
|
QF02 ~ 1; 08471000
|
|
08472000
|
|
GO L1; 08473000
|
|
END; 08474000
|
|
IF A.IBIT ! 1 THEN TIR ~ 0 ELSE 08475000
|
|
TIR ~ IF A.SZ=0 THEN A.[12:16] ELSE A.INDEX; 08476000
|
|
TBR ~ A.ADDR + TIR; 08477000
|
|
MOVE(A,C); 08478000
|
|
AROF ~ FALSE; 08479000
|
|
IF UPDATE THEN EXSU ELSE EXSD; 08480000
|
|
CHARSZ; 08481000
|
|
IF RPF ~ C.ADDR = 0 THEN BEGIN ENDE; GO OC END; 08482000
|
|
QH03 ~ 1; 08483000
|
|
TFFF ~ TRUE; 08484000
|
|
L12: 08484100
|
|
FETCHSOURCE; 08485000
|
|
IF QH03 = 1 THEN QH03 ~ 0; 08486000
|
|
L13: FETCHDESTINATION; 08487000
|
|
L14: 08488000
|
|
MM ~ DIS ~ 0; 08489000
|
|
DYAL(A,MM,DYALSIB,2|REAL(SSZ=8),REAL(SSZ!4)+2|REAL(SSZ=8)); 08490000
|
|
MM ~ MM ~ TBR; 08491000
|
|
DYAL(A,DIS,DYALSIB+1+2|REAL(SSZ=8),4-REAL(SSZ=4), 08492000
|
|
5-REAL(SSZ=4)); 08493000
|
|
MOVE(M[MM],Y); MEMCYCLE; 08494000
|
|
IF BOOLEAN(YX.TAG) THEN MEMPROTECT; 08495000
|
|
DYAL(Y,AA,DIS,0,1); 08496000
|
|
Q03F ~ REAL(TFFF~ BOOLEAN(AA) EQV TOGLE); 08497000
|
|
IF Q03F=1 THEN DYAL(A,B,DYALSIB,DYALDIB,SSZ); 08498000
|
|
RPF ~ RPF -1; 08499000
|
|
IF RPF = 0 THEN 08500000
|
|
BEGIN 08501000
|
|
LHFF ~ TRUE; 08502000
|
|
STOREB; 08503000
|
|
IF TFFF THEN 08504000
|
|
BEGIN 08505000
|
|
L100: 08506000
|
|
ENDE; 08507000
|
|
ADJ(0,2); 08508000
|
|
A ~ RPF; AX ~ 0; 08509000
|
|
AROF ~ TRUE; 08510000
|
|
GO OC; 08511000
|
|
END; 08512000
|
|
END; 08513000
|
|
BUMPSIB; 08514000
|
|
SWITCHSOURCE; 08514100
|
|
IF BUMPDIB=0 THEN 08514200
|
|
BEGIN 08514300
|
|
STOREB; 08514400
|
|
STEPDP; 08514500
|
|
END; 08514600
|
|
IF LHFF THEN IF UPDF THEN BEGIN ENDE; GO OC END ELSE GO L100; 08514700
|
|
IF SIB=0 THEN GO L12; 08514800
|
|
GO L13; 08514900
|
|
OC: 08515000
|
|
END OF TRANSFER ; 08516000
|
|
PROCEDURE TWTD; % TRANSFER WHILE TRUE, DESTRUCTIVE 7.1.19 08517000
|
|
BEGIN 08518000
|
|
XFERWHILETF( TRUE , FALSE); % TRUE DESTRUCTIVE 08519000
|
|
END TWTD; 08520000
|
|
PROCEDURE TWTU ; % TRANSFER WHILE TRUE, UPDATE 7.1.20 08521000
|
|
BEGIN 08522000
|
|
XFERWHILETF( TRUE , TRUE ); % TRUE UPDATE 08523000
|
|
END TWTU; 08524000
|
|
PROCEDURE TWFD ; % TRANSFER WHILE FALSE, DESTRUCTIVE 7.1.21 08525000
|
|
BEGIN 08526000
|
|
XFERWHILETF( FALSE, FALSE); % FALSE DESTRUCTIVE 08527000
|
|
END TWFD; 08528000
|
|
PROCEDURE TWFU ; % TRANSFER WHILE FALSE, UPDATE 7.1.22 08529000
|
|
BEGIN 08530000
|
|
XFERWHILETF( FALSE, TRUE ); % FALSE UPDATE 08531000
|
|
END TWFU; 08532000
|
|
PROCEDURE TUND ; % TRANSFER UNCONDITIONAL , DESTRUCTIVE 7.1.23 08533000
|
|
BEGIN 08534000
|
|
ADJ(0,2); 08535000
|
|
A ~ AX ~ 0; 08536000
|
|
AROF ~ TRUE; 08537000
|
|
XFERWHILE(FALSE,5); 08538000
|
|
END TUND; 08539000
|
|
PROCEDURE TUNU ; % TRANSFER UNCONDITIONAL , UPDATE 7.1.24 08540000
|
|
BEGIN 08541000
|
|
ADJ(0,2); 08542000
|
|
A~AX~0; 08543000
|
|
AROF~TRUE; 08544000
|
|
XFERWHILE(TRUE,5); 08545000
|
|
END TUNU; 08546000
|
|
PROCEDURE SCANWHILE(UPDATE,RELATION); 08547000
|
|
VALUE UPDATE,RELATION; 08548000
|
|
BOOLEAN UPDATE; 08549000
|
|
INTEGER RELATION; 08550000
|
|
BEGIN 08551000
|
|
REAL ACHAR, BCHAR; 08552000
|
|
LABEL OC, L1, L2; 08553000
|
|
ADJ(1,1); 08553500
|
|
IF AX.TAG ! SINGL THEN 08554000
|
|
BEGIN 08554500
|
|
QF01 ~ 1; 08555000
|
|
JFIF; 08555500
|
|
GO TO OC; 08556000
|
|
END; 08556500
|
|
MOVE(A,C); 08557000
|
|
AROF ~ FALSE; SCANORXFER ~ TRUE; SCANWH ~ TRUE; 08557500
|
|
ENTEREDIT(1,UPDATE); 08558000
|
|
IF SSZ = 0 THEN SSZ ~ 6; 08558500
|
|
DYAL(Y,BCHAR, SSZ - 1, SSZ - 1, SSZ); 08559000
|
|
TFFF ~ TRUE; 08559500
|
|
IF C.ADDR = 0 THEN GO TO L2; 08560000
|
|
L1: FETCHSOURCE; 08561000
|
|
08562000
|
|
DYAL (A, ACHAR,DYALSIB, SSZ - 1, SSZ); 08563000
|
|
COMPARECHAR; 08564000
|
|
IF NOT TFFF THEN ELSE 08565000
|
|
BEGIN 08566000
|
|
RPF ~ RPF - 1; 08567000
|
|
IF RPF = 0 THEN LHFF ~ 1; 08568000
|
|
BUMPSIB; 08569000
|
|
SWITCHSOURCE; 08570000
|
|
IF LHFF ! 1 THEN GO TO L1; 08571000
|
|
L2: IF NOT UPDF THEN 08572000
|
|
BEGIN 08572100
|
|
ENDE; 08573000
|
|
GO TO OC; 08574000
|
|
END; 08574100
|
|
END; 08575000
|
|
ENDE; 08576000
|
|
ADJ(0,2); 08577000
|
|
A ~ RPF; AX ~ 0; 08578000
|
|
AROF ~ TRUE; 08579000
|
|
OC: SCANORXFER~ SCANWH ~ FALSE; 08580000
|
|
END OF SCANWHILE; 08581000
|
|
PROCEDURE SGTD ; % SCAN WHILE GREATER, DESTRUCTIVE 7.2.1 08582000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08583000
|
|
SCANWHILE ( FALSE , 1 ); 08584000
|
|
END SGTD; 08585000
|
|
PROCEDURE SGTU ; % SCAN WHILE GREATER, UPDATE 7.2.2 08586000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08587000
|
|
SCANWHILE ( TRUE , 1 ); 08588000
|
|
END SGTU; 08589000
|
|
PROCEDURE SGED ; % SCAN WHILE GREATER OR EQUAL, DESTRUCTIVE7.2.3 08590000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08591000
|
|
SCANWHILE ( FALSE , 5 ); 08592000
|
|
END SGED; 08593000
|
|
PROCEDURE SGEU ; % SCAN WHILE GREATER OR EQUAL, UPDATE 7.2.4 08594000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08595000
|
|
SCANWHILE ( TRUE , 5 ); 08596000
|
|
END SGEU; 08597000
|
|
PROCEDURE SEQD ; % SCAN WHILE EQUAL, DESTRUCTIVE 7.2.5 08598000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08599000
|
|
SCANWHILE ( FALSE , 4 ); 08600000
|
|
END SEQD; 08601000
|
|
PROCEDURE SEQU ; % SCAN WHILE EQUAL, UPDATE 7.2.6 08602000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08603000
|
|
SCANWHILE ( TRUE , 4 ); 08604000
|
|
END SEQU; 08605000
|
|
PROCEDURE SLED ; % SCAN WHILE LESS OR EQUAL, DESTRUCTIVE 7.2.7 08606000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08607000
|
|
SCANWHILE ( FALSE , 6 ); 08608000
|
|
END SLED; 08609000
|
|
PROCEDURE SLEU ; % SCAN WHILE LESS OR EQUAL, UPDATE 7.2.8 08610000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08611000
|
|
SCANWHILE ( TRUE , 6 ); 08612000
|
|
END SLEU; 08613000
|
|
PROCEDURE SLSD ; % SCAN WHILE LESS, DESTRUCTIVE 7.2.9 08614000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08615000
|
|
SCANWHILE ( FALSE , 3 ); 08616000
|
|
END SLSD; 08617000
|
|
PROCEDURE SLSU ; % SCAN WHILE LESS, UPDATE 7.2.10 08618000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08619000
|
|
SCANWHILE ( TRUE , 3 ); 08620000
|
|
END SLSU; 08621000
|
|
PROCEDURE SNED ; % SCAN WHILE NOT EQUAL, DESTRUCTIVE 7.2.11 08622000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08623000
|
|
SCANWHILE ( FALSE , 2 ); 08624000
|
|
END SNED; 08625000
|
|
PROCEDURE SNEU ; % SCAN WHILE NOT EQUAL, UPDATE 7.2.12 08626000
|
|
BEGIN P2R3 ~ 1; FWDT ~ 1; 08627000
|
|
SCANWHILE ( TRUE , 2 ); 08628000
|
|
END SNEU; 08629000
|
|
PROCEDURE SCANWHILETF(TOGLE,UPDATE); 08630000
|
|
VALUE TOGLE,UPDATE; 08631000
|
|
BOOLEAN TOGLE,UPDATE; 08632000
|
|
BEGIN 08633000
|
|
LABEL OC,L8 ,L100,L21; 08634000
|
|
BOOLEAN LHFF; 08634100
|
|
ADJ(1,2); 08635000
|
|
IF AX.TAG! DATADESC THEN 08636000
|
|
BEGIN 08637000
|
|
QF01 ~ 1; 08638000
|
|
L21: 08639000
|
|
JFIF; 08640000
|
|
GO OC; 08641000
|
|
END; 08642000
|
|
IF AX.PBIT=0 THEN 08643000
|
|
BEGIN 08644000
|
|
QF02~1; 08644100
|
|
GO L21; 08644200
|
|
END; 08644300
|
|
AROF ~ FALSE; 08645000
|
|
IF NOT(BOOLEAN(A.IBIT)) THEN TIR~0 ELSE 08646000
|
|
TIR ~ IF A.CHRSZ = 0 THEN A.INDEX ELSE A.TIRF; 08647000
|
|
TIR~A.ADDR+TIR; 08648000
|
|
ENTEREDIT(1,UPDATE); 08649000
|
|
IF SSZ = 0 THEN SSZ ~ 6; 08650000
|
|
RPF ~ C.ADDR; 08651000
|
|
IF RPF =0 THEN 08652000
|
|
BEGIN 08653000
|
|
L100: 08654000
|
|
ENDE; 08655000
|
|
ADJ(0,2); 08656000
|
|
A ~RPF; AX ~ 0; 08657000
|
|
AROF ~ TRUE; 08658000
|
|
GO OC; 08659000
|
|
END; 08660000
|
|
TFFF ~ TRUE; 08661000
|
|
L8: 08662000
|
|
FETCHSOURCE; 08663000
|
|
MM ~ DIS ~ 0; 08664000
|
|
DYAL(A,MM,DYALSIB,2|REAL(SSZ=8),REAL(SSZ!4)+2|REAL(SSZ=4)); 08665000
|
|
MOVE(M[MM],Y); MEMCYCLE; 08666000
|
|
IF BOOLEAN(YX.TAG) THEN MEMPROTECT; 08667000
|
|
DYAL(Y,AA,DIS,0,1); 08668000
|
|
Q03F ~ REAL(TFFF~BOOLEAN(AA) EQV TOGLE); 08669000
|
|
IF Q03F=0 THEN BEGIN TFFF~FALSE; GO L100 END; 08670000
|
|
RPF ~ RPF -1; 08671000
|
|
IF RPF = 0 THEN LHFF ~ TRUE; 08672000
|
|
BUMPSIB; SWITCHSOURCE; 08673000
|
|
IF LHFF THEN IF UPDF THEN GO L100 ELSE BEGIN ENDE; GO OC END; 08674000
|
|
GO TO L8; 08675000
|
|
08676000
|
|
OC: 08677000
|
|
END OF SCAN ; 08678000
|
|
PROCEDURE SWTD ; % SCAN WHILE TRUE, DESTRUCTIVE 7.2.13 08679000
|
|
BEGIN 08680000
|
|
SCANWHILETF( TRUE , FALSE); % TRUE DESTRUCTIVE 08681000
|
|
END SWTD; 08682000
|
|
PROCEDURE SWTU ; % SCAN WHILE TRUE, UPDATE 7.2.14 08683000
|
|
BEGIN 08684000
|
|
SCANWHILETF( TRUE , TRUE ); % TRUE UPDATE 08685000
|
|
END SWTU; 08686000
|
|
PROCEDURE SWFD ; % SCAN WHILE FALSE, DESTRUCTIVE 7.2.15 08687000
|
|
BEGIN 08688000
|
|
SCANWHILETF( FALSE, FALSE); % FALSE DESTRUCTIVE 08689000
|
|
END SWFD; 08690000
|
|
PROCEDURE SWFU ; % SCAN WHILE FALSE, UPDATE 7.2.16 08691000
|
|
BEGIN 08692000
|
|
SCANWHILETF( FALSE, TRUE ); % FALSE UPDATE 08693000
|
|
END SWFU; 08694000
|
|
PROCEDURE COMPARECHRS(UPDATE,RELATION); 08695000
|
|
VALUE UPDATE,RELATION; 08696000
|
|
BOOLEAN UPDATE; 08697000
|
|
INTEGER RELATION; 08698000
|
|
BEGIN 08699000
|
|
INTEGER ACHAR, BCHAR; 08700000
|
|
LABEL OC, L1; 08701000
|
|
ENTEREDIT(0,UPDATE); 08702000
|
|
CHARSZ; 08703000
|
|
RPF ~ C.ADDR; 08704000
|
|
IF RPF = 0 THEN 08705000
|
|
BEGIN 08706000
|
|
ENDE; 08707000
|
|
GO TO OC; 08708000
|
|
END; 08709000
|
|
L1: TFFF ~ TRUE; 08710000
|
|
FETCHSOURCE; 08711000
|
|
FETCHDESTINATION; 08712000
|
|
DYAL(A,BCHAR,DYALSIB, SSZ - 1, SSZ); 08713000
|
|
DYAL(B, ACHAR, DYALDIB, SSZ - 1, SSZ); 08714000
|
|
COMPARECHAR; 08715000
|
|
RPF ~ RPF - 1; 08716000
|
|
BUMPSIB; 08717000
|
|
SWITCHSOURCE; 08718000
|
|
IF BUMPDIB = 0 THEN 08719000
|
|
BEGIN 08720000
|
|
STEPDP; 08721000
|
|
BROF ~ FALSE; 08722000
|
|
END; 08723000
|
|
IF RPF = 0 THEN 08724000
|
|
BEGIN 08725000
|
|
BROF ~ FALSE; 08726000
|
|
ENDE; 08727000
|
|
GO TO OC; 08728000
|
|
END; 08729000
|
|
GO TO L1; 08730000
|
|
OC: 08730500
|
|
END OF COMPARE CHARACTERS; 08731000
|
|
PROCEDURE CGTD ; % COMPARE CHARACTERS GREATER, DESTRUCTIVE 7.3.1 08732000
|
|
BEGIN P2R3 ~ 1; 08733000
|
|
COMPARECHRS( FALSE , 1 ); % DESTRUCTIVE GREATER 08734000
|
|
END CGTD; 08735000
|
|
PROCEDURE CGTU ; % COMPARE CHARACTERS GREATER, UPDATE 7.3.2 08736000
|
|
BEGIN P2R3 ~ 1; 08737000
|
|
COMPARECHRS( TRUE , 1 ); % UPDATE GREATER 08738000
|
|
END CGTU; 08739000
|
|
PROCEDURE CGED ; % COMPARE CHARACTERS GREATER OR EQUAL, DST7.3.3 08740000
|
|
BEGIN P2R3 ~ 1; 08741000
|
|
COMPARECHRS( FALSE , 5 ); % DESTRUCTIVE GREATER EQUAL 08742000
|
|
END CGED; 08743000
|
|
PROCEDURE CGEU ; % COMPARE CHARACTERS GREATER OR EQUAL, UPD7.3.4 08744000
|
|
BEGIN P2R3 ~ 1; 08745000
|
|
COMPARECHRS( TRUE , 5 ); % UPDATE GREATER EQUAL 08746000
|
|
END CGEU; 08747000
|
|
PROCEDURE CEQD ; % COMPARE CHARACTERS EQUAL, DESTRUCTIVE 7.3.5 08748000
|
|
BEGIN P2R3 ~ 1; 08749000
|
|
COMPARECHRS( FALSE , 4 ); % DESTRUCTIVE EQUAL 08750000
|
|
END CEQD; 08751000
|
|
PROCEDURE CEQU ; % COMPARE CHARACTERS EQUAL, UPDATE 7.3.6 08752000
|
|
BEGIN P2R3 ~ 1; 08753000
|
|
COMPARECHRS( TRUE , 4 ); % UPDATE EQUAL 08754000
|
|
END CEQU; 08755000
|
|
PROCEDURE CLED ; % COMPARE CHARACTERS LESS OR EQUAL, DST 7.3.7 08756000
|
|
BEGIN P2R3 ~ 1; 08757000
|
|
COMPARECHRS( FALSE , 6 ); % DESTRUCTIVE LESS EQUAL 08758000
|
|
END CLED; 08759000
|
|
PROCEDURE CLEU ; % COMPARE CHARACTERS LESS OR EQUAL, UPD 7.3.8 08760000
|
|
BEGIN P2R3 ~ 1; 08761000
|
|
COMPARECHRS( TRUE , 6 ); % UPDATE LESS EQUAL 08762000
|
|
END CLEU; 08763000
|
|
PROCEDURE CLSD ; % COMPARE CHARACTERS LESS, DESTRUCTIVE 7.3.9 08764000
|
|
BEGIN P2R3 ~ 1; 08765000
|
|
COMPARECHRS( FALSE , 3 ); % DESTRUCTIVE LESS 08766000
|
|
END CLSD; 08767000
|
|
PROCEDURE CLSU ; % COMPARE CHARACTERS LESS, UPDATE 7.3.10 08768000
|
|
BEGIN P2R3 ~ 1; 08769000
|
|
COMPARECHRS( TRUE , 3 ); % UPDATE LESS 08770000
|
|
END CLSU; 08771000
|
|
PROCEDURE CNED ; % COMPARE CHARACTERS NOT EQUAL, DESTRUCTVE7.3.11 08772000
|
|
BEGIN P2R3 ~ 1; 08773000
|
|
COMPARECHRS( FALSE , 2 ); % DESTRUCTIVE NOT EQUAL 08774000
|
|
END CNED; 08775000
|
|
PROCEDURE CNEU ; % COMPARE CHARACTERS NOT EQUAL, UPDATE 7.3.12 08776000
|
|
BEGIN P2R3 ~ 1; 08777000
|
|
COMPARECHRS( TRUE , 2 ); % UPDATE NOT EQUAL 08778000
|
|
END CNEU; 08779000
|
|
DEFINE RPZF = BKIP#; 08779500
|
|
PROCEDURE UNPACKS(SIGNED,UPDATE); 08780000
|
|
VALUE SIGNED,UPDATE; 08781000
|
|
BOOLEAN SIGNED,UPDATE; 08782000
|
|
BEGIN 08783000
|
|
LABEL OC, L1, L2, L3, L4, L5, L6, L7, L8; 08784000
|
|
INTEGER RITEJUSTIFY; 08784500
|
|
ADJ (1,1); 08785000
|
|
IF BX.TAG = SINGL OR BX.TAG = DOUBL THEN ELSE 08785500
|
|
BEGIN 08786000
|
|
QF01 ~ 1; 08786500
|
|
JFIF; 08787000
|
|
GO TO OC; 08787500
|
|
END; 08788000
|
|
ENTEREDIT (0, UPDATE); 08788500
|
|
RPF ~ C.ADDR; 08789000
|
|
IF C.ADDR > 24 THEN 08789500
|
|
BEGIN 08790000
|
|
BROF ~ TRUE; 08790500
|
|
QF01 ~ 1; 08791000
|
|
JFIF; 08791500
|
|
GO TO OC; 08792000
|
|
END; 08792500
|
|
SSZ ~ 4; 08793000
|
|
IF DSZ = 0 THEN DSZ ~ 6; 08793500
|
|
IF RPF = 0 THEN 08794000
|
|
BEGIN 08794500
|
|
ENDE; GO TO OC; 08795000
|
|
END; 08795500
|
|
IF RPF = 1 THEN LHFF ~ 1; 08796000
|
|
IF DSZ = 4 THEN RPZF ~ 1; 08796500
|
|
L4: FETCHDESTINATION; 08797000
|
|
L7: IF DSZ = 4 THEN GO TO L1; 08797500
|
|
IF DSZ = 6 THEN GO TO L2; 08798000
|
|
IF NOT SIGNED THEN ELSE 08798500
|
|
IF LHFF ! 1 THEN ELSE 08799000
|
|
IF EXTF THEN 08799500
|
|
BEGIN 08800000
|
|
RITEJUSTIFY.[40:4] ~ 32; 08800500
|
|
GO TO L3; 08801000
|
|
END; 08801500
|
|
RITEJUSTIFY.[40:4] ~ 36; 08802000
|
|
L3: DYAL (RITEJUSTIFY, B, 40, DYALDIB, 4); 08802500
|
|
DYAL (A, B, DYALSIB, (DYALDIB - 4), 4); 08803000
|
|
GO TO L8; 08803500
|
|
L2: IF NOT SIGNED THEN ELSE 08804000
|
|
IF LHFF ! 1 THEN ELSE 08804500
|
|
IF EXTF THEN 08805000
|
|
BEGIN 08805500
|
|
RITEJUSTIFY.[42:2] ~ 2; 08806000
|
|
GO TO L6; 08806500
|
|
END; 08807000
|
|
RITEJUSTIFY.[42:2] ~ 0; 08807500
|
|
L6: DYAL (RITEJUSTIFY, B, 42, DYALDIB, 2); 08808000
|
|
DYAL (A, B, DYALSIB, (DYALDIB - 2), 4); 08808500
|
|
GO TO L8; 08809000
|
|
L1: IF SIGNED THEN 08809500
|
|
BEGIN 08810000
|
|
IF RPZF = 1 THEN 08810500
|
|
BEGIN 08811000
|
|
IF EXTF THEN RITEJUSTIFY ~ 14 ELSE 08811500
|
|
RITEJUSTIFY ~ 15; 08812000
|
|
DYAL(RITEJUSTIFY,B,3,DYALDIB,4); 08812500
|
|
GO TO L5; 08813000
|
|
END; 08813500
|
|
END; 08814000
|
|
DYAL (A, B, DYALSIB, DYALDIB, 4); 08815000
|
|
L8: BUMPSIB; 08816000
|
|
L5: IF BUMPDIB = 0 THEN 08817000
|
|
BEGIN 08818000
|
|
STOREB; 08819000
|
|
STEPDP; 08820000
|
|
END; 08821000
|
|
BEGIN 08822000
|
|
IF AX.TAG = DOUBL THEN 08822500
|
|
BEGIN 08823000
|
|
MOVE (A, JUNK); 08823500
|
|
MOVE (X, A); 08823800
|
|
MOVE (JUNK, X); 08824000
|
|
END; 08824400
|
|
END; 08824800
|
|
IF RPZF = 1 THEN RPZF ~ 0 ELSE 08825000
|
|
RPF ~ RPF - 1; 08825500
|
|
IF RPF = 0 THEN 08826000
|
|
BEGIN 08827000
|
|
IF DIB ! 0 THEN BROF ~ TRUE; 08828000
|
|
ENDE; 08828500
|
|
GO TO OC; 08829000
|
|
END; 08830000
|
|
IF RPF = 1 THEN LHFF ~ 1; 08831000
|
|
IF DIB = 0 THEN GO TO L4; 08832000
|
|
GO TO L7; 08833000
|
|
OC: 08834000
|
|
END OF UNPACKS; 08835000
|
|
PROCEDURE PACKS (UPDATE); 08835100
|
|
VALUE UPDATE; 08835200
|
|
BOOLEAN UPDATE; 08835300
|
|
BEGIN 08835400
|
|
LABEL OC, L1, L2, L3; 08835500
|
|
ENTEREDIT (1, UPDATE); 08835600
|
|
RPF ~ C.ADDR; 08835700
|
|
IF C.ADDR > 24 THEN 08835800
|
|
BEGIN 08835900
|
|
AROF ~ TRUE; 08836000
|
|
QF01 ~ 1; 08836100
|
|
JFIF; 08836200
|
|
GO TO OC; 08836300
|
|
END; 08836400
|
|
IF C.ADDR = 0 THEN 08836500
|
|
BEGIN 08836600
|
|
ENDE; 08836700
|
|
GO TO OC; 08836800
|
|
END; 08836900
|
|
TFFF~BOOLEAN(B~BX~0); 08836910
|
|
IF RPF > 12 THEN 08837000
|
|
BEGIN 08837100
|
|
BX.TAG ~ DOUBL; 08837200
|
|
QH02 ~ 1; 08837300
|
|
DIB ~ 24 -RPF; 08837400
|
|
END ELSE 08837500
|
|
DIB ~ 12 -RPF; 08837600
|
|
DSZ ~ 4; 08837700
|
|
IF SSZ = 0 THEN 08837800
|
|
BEGIN 08837900
|
|
SSZ ~ 6; 08838000
|
|
MOVE (A, Y); 08838100
|
|
END; 08838200
|
|
QH03 ~ 1; 08838300
|
|
IF NOT SOPF THEN 08838400
|
|
BEGIN 08838500
|
|
L1: MM ~ SBR + SIR; 08838600
|
|
MOVE (M[MM], A); 08838700
|
|
IF BOOLEAN (AX.TAG) THEN 08838800
|
|
BEGIN 08838900
|
|
MOVE (Y, A); 08839000
|
|
MOVE (C, B); 08839100
|
|
AROF ~ BROF ~ TRUE; 08839200
|
|
QF04 ~ 1; 08839300
|
|
JFIF; 08839400
|
|
GO TO OC; 08839500
|
|
END; 08839600
|
|
END; 08839700
|
|
L3: IF SSZ ! 4 THEN 08839800
|
|
BEGIN 08839900
|
|
IF SSZ = 6 THEN 08840000
|
|
BEGIN DYAL(A,B,DYALSIB-2,DYALDIB,4); 08840100
|
|
DYAL(A,INTG,DYALSIB,0,1); TFFF~BOOLEAN(INTG); 08840110
|
|
08840120
|
|
END ELSE 08840130
|
|
BEGIN DYAL(A,B,DYALSIB-4,DYALDIB,4); 08840200
|
|
DYAL(A,INTG,DYALSIB-2,0,1); 08840210
|
|
TFFF ~ INTG = 0; 08840220
|
|
END; 08840230
|
|
END ELSE 08840300
|
|
IF QH03 = 1 THEN 08840400
|
|
BEGIN 08840500
|
|
QH03 ~ 0; 08840600
|
|
DYAL (A, JUNK, DYALSIB, 44, 4); 08840700
|
|
IF JUNK.[44:4] > 9 THEN TFFF~JUNK.[44:4]=1308840800
|
|
ELSE DYAL(A,B,DYALSIB,DYALDIB,4); 08840900
|
|
END ELSE 08841000
|
|
GO TO L2; 08841100
|
|
BUMPDIB; 08841200
|
|
L2: IF BUMPSIB = 0 THEN 08841300
|
|
BEGIN 08841400
|
|
IF SOPF THEN 08841500
|
|
BEGIN 08841600
|
|
MOVE (A, JUNK); 08841700
|
|
MOVE (X, A); 08841800
|
|
MOVE (JUNK, X); 08841900
|
|
END ELSE 08842000
|
|
SIR ~ SIR + 1; 08842100
|
|
IF DIB ! 0 THEN GO TO L1; 08842200
|
|
IF QH02 = 1 THEN 08842300
|
|
BEGIN 08842400
|
|
QH02 ~ 0; 08842500
|
|
GO TO L1; 08842600
|
|
END ELSE 08842700
|
|
BEGIN 08842800
|
|
BROF ~ TRUE; 08842900
|
|
ADJ (2, 0); 08843000
|
|
ENDE; 08843100
|
|
GO TO OC; 08843200
|
|
END; 08843300
|
|
END ELSE 08843400
|
|
IF DIB ! 0 THEN GO TO L3; 08843500
|
|
BROF ~ TRUE; 08843600
|
|
IF AROF THEN ADJ(1,0) ELSE ADJ(0,0); 08843700
|
|
IF QH02 = 1 THEN 08844000
|
|
BEGIN 08844500
|
|
QH02 ~ 0; 08845000
|
|
GO TO L3; 08845500
|
|
END; 08846000
|
|
TFFF~DSZ=6 AND B.[42:1]=1 OR DSZ =8 AND B.[42:1]=0; 08847000
|
|
ENDE; 08847500
|
|
OC: 08848000
|
|
END OF PACKS; 08848500
|
|
08849000
|
|
PROCEDURE UABD; % UNPACK ABSOLUTE, DESTRUCTIVE 08849500
|
|
BEGIN P2R3 ~ 1; 08850000
|
|
UNPACKS (FALSE, FALSE); 08850500
|
|
END UABD; 08851000
|
|
PROCEDURE UABU; % UNPACK ABSOLUTE, UPDATE 08851500
|
|
BEGIN P2R3 ~ 1; 08852000
|
|
UNPACKS (FALSE, TRUE); 08852500
|
|
END UABU; 08853000
|
|
PROCEDURE USND; % UNPACK SIGNED, DESTRUCTIVE 08853500
|
|
BEGIN P2R3 ~ 1; 08854000
|
|
UNPACKS (TRUE, FALSE); 08854500
|
|
END USND; 08855000
|
|
PROCEDURE USNU; % UNPACK SIGNED, UPDATE 08855500
|
|
BEGIN P2R3 ~ 1; 08856000
|
|
UNPACKS (TRUE, TRUE); 08856500
|
|
END USNU; 08857000
|
|
PROCEDURE PACD; % PACK DESTRUCTIVE 08857500
|
|
BEGIN SWPS ~ 1; P2R2 ~ 1; 08858000
|
|
PACKS (FALSE); 08858500
|
|
END PACD; 08859000
|
|
PROCEDURE PACU; % PACK UPDATE 08859100
|
|
BEGIN SWPS ~ 1; P2R2 ~ 1; 08859200
|
|
PACKS (TRUE); 08859300
|
|
END PACU; 08859400
|
|
PROCEDURE TRNS ; % TRANSLATE 7.5 08860000
|
|
BEGIN 08861000
|
|
LABEL OC; 08862000
|
|
ADJ(1,2); 08863000
|
|
IF AX.TAG ! DATADESC THEN INVOPI; 08864000
|
|
IF BOOLEAN(AX) THEN ELSE 08865000
|
|
BEGIN 08866000
|
|
ADJ(0,0); 08867000
|
|
AX ~ BX ~ 0; 08868000
|
|
AROF ~ BROF ~ TRUE; 08869000
|
|
A ~ S; 08870000
|
|
SETINTERRUPT(B~PRESBIT); 08871000
|
|
END; 08872000
|
|
AROF ~ FALSE; 08873000
|
|
IF A.IBIT=0 THEN TIR ~ 0 ELSE 08874000
|
|
TIR ~ IF A.CHRSZ = 0 THEN A.INDEX ELSE A.TIRF; 08875000
|
|
TBR ~ TIR + A.ADDR; 08876000
|
|
ENTEREDIT( 0,FALSE); 08877000
|
|
CHARSZ; 08878000
|
|
DIS ~ 7; 08879000
|
|
RPF ~ C.ADDR - 1; 08880000
|
|
WHILE RPF } 0 DO 08881000
|
|
BEGIN 08882000
|
|
FETCHSOURCE; 08883000
|
|
FETCHDESTINATION; 08884000
|
|
MM ~ 0; 08885000
|
|
DYAL(A,JUNK,DYALSIB,5,SSZ-2); 08886000
|
|
IF SSZ=4 THEN MM~JUNK.[42:2] ELSE 08887000
|
|
IF SSZ=6 THEN MM~JUNK.[42:4] ELSE MM~JUNK.[42:6]; 08888000
|
|
MM ~ TBR + MM; 08889000
|
|
DYAL(A,JUNK,DYALSIB-SSZ+2,4,2); 08890000
|
|
DIS.[43:2] ~ REAL(NOT BOOLEAN(JUNK)).[43:2]; 08891000
|
|
MOVE(M[MM],C); MEMCYCLE; 08892000
|
|
DYAL(C,8,DIS,DYALDIB,DSZ); 08893000
|
|
RPF ~ RPF - 1; 08894000
|
|
BUMPSIB; 08895000
|
|
SWITCHSOURCE; 08896000
|
|
IF BUMPSIB = 0 THEN 08897000
|
|
BEGIN 08898000
|
|
STOREB; 08899000
|
|
STEPDP; 08900000
|
|
DIR ~ DIR + 1; 08901000
|
|
END; 08902000
|
|
END; 08903000
|
|
ENDE; 08904000
|
|
OC: 08905000
|
|
END TRNS; 08906000
|
|
PROCEDURE SCALE(TOG); VALUE TOG; BOOLEAN TOG; 08906010
|
|
BEGIN 08906020
|
|
DEFINE DYNAMIC = TOG #, %1 08906030
|
|
SAVER = TOG.[46:1]#, % 2 08906040
|
|
RIGHT = TOG.[45:1]#, % 4 08906050
|
|
FINAL = TOG.[44:1]#, % 6 08906060
|
|
ROUND = TOG.[43:1]#; % 16 08906070
|
|
REAL DIGR, TA, TX; 08906080
|
|
LABEL OC; 08906090
|
|
INTEGER SIGNQ,SIGNQH; 08906100
|
|
DEFINE SETINT = BEGIN 08906110
|
|
SETINTERRUPT(INVOP ); 08906120
|
|
ADJ(0,0); AROF ~ BROF ~ TRUE; 08906130
|
|
GO OC; 08906140
|
|
END#; 08906150
|
|
ADJ(0,1); 08906160
|
|
IF DYNAMIC THEN 08906170
|
|
BEGIN 08906180
|
|
NTGR; 08906190
|
|
IF SDIS=1 THEN 08906200
|
|
BEGIN 08906210
|
|
SETINTERRUPT(INTOVFI); 08906220
|
|
GO OC; 08906230
|
|
END; 08906240
|
|
END ELSE 08906250
|
|
BEGIN 08906260
|
|
C ~ SYLLABLE; CX ~ 0; 08906270
|
|
STEPPSR(1); 08906280
|
|
MOVE(C,A); 08906290
|
|
END; 08906300
|
|
DIGR ~ A.[44:4]; 08906310
|
|
AROF ~ FALSE; 08906320
|
|
IF INTEGERIZE(FALSE,B) THEN 08906330
|
|
BEGIN 08906340
|
|
SETINTERRUPT(INTOVFI); 08906350
|
|
GO OC; 08906360
|
|
END; 08906370
|
|
ADJ(1,0); 08906380
|
|
IF DIGR < 13 THEN ELSE 08906390
|
|
IF RIGHT THEN SETINT ELSE 08906400
|
|
BEGIN 08906410
|
|
OFFF ~ TRUE; 08906420
|
|
GO OC; 08906430
|
|
END; 08906440
|
|
IF RIGHT THEN 08906450
|
|
BEGIN 08906460
|
|
MOVE(A,TA); 08906470
|
|
DOUBLE(A,X,10*DIGR,0,/,~,A,X); 08906480
|
|
SIGNQ ~ SIGN(A); B.SOBIT ~ 0; 08906490
|
|
MOVE(A,SSZ); 08906500
|
|
IF INTEGERIZE(FALSE,SSZ) THEN 08906510
|
|
BEGIN 08906520
|
|
SETINTERRUPT(INTOVFI); 08906530
|
|
GO OC; 08906540
|
|
END; 08906550
|
|
DSZ ~ 0; 08906560
|
|
DOUBLE(TA,TX,10*DIGR,0,SIGNQ,SIGNQH,SSZ,DSZ, 08906570
|
|
|,|,-,~,TA,TX); 08906580
|
|
FOR JUNK~0 STEP 1 UNTIL DIGR-1 DO 08906590
|
|
DYAL(TA,B,36-6|JUNK,4|JUNK,4); 08906600
|
|
END ELSE 08906610
|
|
DOUBLE(A,X,10*DIGR,0,|,~,A,X); 08906620
|
|
IF ROUND THEN ELSE GO OC; 08906630
|
|
IF FINAL THEN 08906640
|
|
BEGIN 08906650
|
|
BROF ~ TRUE; 08906660
|
|
AROF ~ FALSE; EXTF ~ BOOLEAN(SIGN(A)); 08906670
|
|
IF A!0 THEN OFFF ~ TRUE; 08906680
|
|
END ELSE 08906690
|
|
IF SAVER THEN BROF ~ TRUE ELSE 08906700
|
|
IF ROUND THEN 08906710
|
|
IF BX.PBIT=1 OR B.[1:3]>4 THEN X ~ X + 1; 08906720
|
|
OC: 08906730
|
|
END SCALE; 08906740
|
|
PROCEDURE SCLF ; % SCALE LEFT 7.6.1 08907000
|
|
BEGIN 08908000
|
|
SCALE(BOOLEAN( 0)); 08909000
|
|
END SCLF; 08910000
|
|
PROCEDURE DSLF ; % DYNAMIC SCALE LEFT 7.6.2 08911000
|
|
BEGIN 08912000
|
|
SCALE(BOOLEAN( 1)); 08913000
|
|
END DSLF; 08914000
|
|
PROCEDURE SCRS ; % SCALE RIGHT SAVE 7.6.3 08915000
|
|
BEGIN 08916000
|
|
SCALE(BOOLEAN( 6)); 08917000
|
|
END SCRS; 08918000
|
|
PROCEDURE DSRS ; % DYNAMIC SCALE RIGHT SAVE 7.6.4 08919000
|
|
BEGIN 08920000
|
|
SCALE(BOOLEAN( 7)); 08921000
|
|
END DSRS; 08922000
|
|
PROCEDURE SCRT ; % SCALE RIGHT TRUNCATE 7.6.5 08923000
|
|
BEGIN 08924000
|
|
SCALE(BOOLEAN(20)); 08925000
|
|
END SCRT; 08926000
|
|
PROCEDURE DSRT ; % DYNAMIC SCALE RIGHT TRUNCATE 7.6.6 08927000
|
|
BEGIN 08928000
|
|
SCALE(BOOLEAN(21)); 08929000
|
|
END DSRT; 08930000
|
|
PROCEDURE SCRR ; % SCALE RIGHT ROUND 7.6.7 08931000
|
|
BEGIN 08932000
|
|
SCALE(BOOLEAN( 4)); 08933000
|
|
END SCRR; 08934000
|
|
PROCEDURE DSRR ; % DYNAMIC SCALE RIGHT ROUND 7.6.8 08935000
|
|
BEGIN 08936000
|
|
SCALE(BOOLEAN( 5)); 08937000
|
|
END DSRR; 08938000
|
|
PROCEDURE SCRF ; % SCALE RIGHT FINAL 7.6.9 08939000
|
|
BEGIN 08940000
|
|
SCALE(BOOLEAN(12)); 08941000
|
|
END SCRF; 08942000
|
|
PROCEDURE DSRF ; % DYNAMIC SCALE RIGHT FINAL 7.6.10 08943000
|
|
BEGIN 08944000
|
|
SCALE(BOOLEAN(13)); 08945000
|
|
END DSRF; 08946000
|
|
PROCEDURE OCRX ; % OCCURS INDEX 7.7 08947000
|
|
BEGIN 08948000
|
|
LABEL OC; 08949000
|
|
ADJ(1,1); 08950000
|
|
IF AX.TAG=SINGL AND BX.TAG=SINGL OR BX.TAG=DOUBL THEN ELSE 08951000
|
|
BEGIN INTFAMA(-1); GO OC END; 08952000
|
|
MOVE(A,C); A~AX ~X ~ XX ~ 0; 08953000
|
|
A.[32:1] ~ C.[16:16]; 08954000
|
|
X.[32:16] ~ 0&CX [32:47:1]&C[33:1:15]; 08955000
|
|
AROF ~ FALSE; 08956000
|
|
IF INTEGERIZE(FALSE,B) THEN BEGIN INTFAMA(INTOVFI);GO OC END; 08957000
|
|
IF B < 0 AND B > A THEN BEGIN INTFAMA(INVINXI); GO OC END; 08958000
|
|
MOVE(X,A); XX ~ 0; 08959000
|
|
X ~ C.[32:16]; 08960000
|
|
AROF ~ TRUE; 08961000
|
|
B ~ X + A | (B-1); 08962000
|
|
OC: 08966000
|
|
END OCRX; 08967000
|
|
PROCEDURE SISO; % STRING ISOLATE 08968000
|
|
BEGIN 08968100
|
|
LABEL OC, L1, L2, L3; 08968200
|
|
ENTEREDIT (1, FALSE); 08968300
|
|
IF SSZ = 0 THEN SSZ ~ 6; 08968400
|
|
IF C.ADDR > (96 DIV SSZ) THEN 08968500
|
|
BEGIN 08968600
|
|
MOVE (C, A); 08968700
|
|
AROF ~ BROF ~ TRUE; 08968800
|
|
QF01 ~ 1; 08968900
|
|
JFIF; 08969000
|
|
GO TO OC; 08969100
|
|
END; 08969200
|
|
RPF ~ C.ADDR; 08969300
|
|
BX ~ B ~ YX ~ Y ~ 0; 08969400
|
|
IF C.ADDR > (48 DIV SSZ) THEN 08969500
|
|
BEGIN 08969600
|
|
C.ADDR ~ (C.ADDR - 48 DIV SSZ); 08969700
|
|
QH02 ~ 1; 08969800
|
|
END; 08969900
|
|
DIB ~ (48 DIV SSZ - C.ADDR); 08970000
|
|
IF SOPF THEN 08970100
|
|
BEGIN 08970200
|
|
MOVE (A, X); 08970300
|
|
L3: MM ~ SBR + SIR; 08970400
|
|
MOVE (M[MM],A); 08970500
|
|
AROF ~ TRUE; 08970600
|
|
IF BOOLEAN (AX.TAG) THEN 08970700
|
|
BEGIN 08970800
|
|
IF SOPF THEN 08970900
|
|
BEGIN 08971000
|
|
MOVE (X, A); 08971100
|
|
AROF ~ TRUE; 08971200
|
|
END ELSE 08971300
|
|
BEGIN 08971400
|
|
IF QH01 = 1 THEN 08971500
|
|
BEGIN 08971600
|
|
MOVE (A, JUNK); 08971700
|
|
MOVE (X, A); 08971800
|
|
MOVE (JUNK, X); 08971900
|
|
END; 08972000
|
|
END; 08972100
|
|
QF04 ~ 1; 08972200
|
|
JGIF; 08972300
|
|
GO TO OC; 08972400
|
|
END; 08972500
|
|
END; 08972600
|
|
L1: IF LHFF = 1 THEN 08972700
|
|
BEGIN 08972800
|
|
BX.TAG ~ DOUBL; 08972900
|
|
DYAL (A, Y, DYALSIB, DYALDIB, SSZ); 08973000
|
|
END ELSE 08974000
|
|
DYAL (A, B, DYALSIB, DYALDIB, SSZ); 08975000
|
|
IF BUMPDIB = 0 THEN 08976000
|
|
BEGIN 08977000
|
|
IF LHFF ! 0 THEN GO TO L2; 08978000
|
|
IF QH02 ! 1 THEN GO TO L2; 08979000
|
|
LHFF ~ 1; 08980000
|
|
END; 08981000
|
|
IF BUMPSIB = 0 THEN 08982000
|
|
BEGIN 08983000
|
|
QH01 ~ 1; 08984000
|
|
IF NOT SOPF THEN GO TO L3 ELSE 08985000
|
|
BEGIN 08986000
|
|
MOVE (A, JUNK); 08987000
|
|
MOVE (X, A); 08988000
|
|
MOVE (JUNK, X); 08989000
|
|
END; 08990000
|
|
END; 08991000
|
|
GO TO L1; 08992000
|
|
L2: AROF ~ EXSF ~ SOPF ~ FALSE; 08993000
|
|
BROF ~ TRUE; 08994000
|
|
OC: 08995000
|
|
END OF STRING ISOLATE; 08996000
|
|
PROCEDURE SXSN ; % SET EXTERNAL SIGN 7.9 08997000
|
|
BEGIN 08998000
|
|
ADJ(1,2); 08999000
|
|
09000000
|
|
EXTF ~ BOOLEAN(A.SOBIT); 09001000
|
|
END SXSN; 09002000
|
|
PROCEDURE RTFF ; % READ TRUE/FALSE FLIP-FLOP 7.10 09003000
|
|
BEGIN 09004000
|
|
ADJ(0,2); 09005000
|
|
AX ~ A ~ 0; 09006000
|
|
AROF ~ TRUE; 09006500
|
|
A ~ REAL(TFFF); 09007000
|
|
END RTFF; 09008000
|
|
PROCEDURE ROFF ; % READ AND CLEAR OVERFLOW FLIP-FLOP 7.11 09009000
|
|
BEGIN 09010000
|
|
ADJ(0,2); 09011000
|
|
AX ~ A ~ 0; 09012000
|
|
AROF ~ TRUE; 09012500
|
|
A ~ REAL(OFFF); 09013000
|
|
OFFF ~ FALSE; 09014000
|
|
END ROFF; 09015000
|
|
PROCEDURE INPCONV( UPDATE); VALUE UPDATE; BOOLEAN UPDATE; 09015010
|
|
BEGIN 09015020
|
|
REAL DIGR ; 09015030
|
|
LABEL OC; 09015040
|
|
ADJ(0,1); 09015050
|
|
IF INTEGERIZE(FALSE,B) THEN 09015060
|
|
BEGIN 09015070
|
|
SETINTERRUPT(INTOVFI); 09015080
|
|
ADJ(0,0); AROF ~ BROF ~ TRUE; 09015090
|
|
GO OC; 09015100
|
|
END; 09015110
|
|
ADJ(1,1); 09015120
|
|
IF A.[43:5] > 23 THEN 09015130
|
|
BEGIN 09015140
|
|
SETINTERRUPT(INVOP); 09015150
|
|
ADJ(0,0); AROF ~ BROF ~ TRUE; 09015160
|
|
GO OC; 09015170
|
|
END; 09015180
|
|
IF UPDATE THEN 09015190
|
|
BEGIN 09015200
|
|
PACU; ADJ(1,1); 09015210
|
|
END ELSE 09015220
|
|
BEGIN 09015230
|
|
PACU; ADJ(0,1); 09015240
|
|
END; 09015250
|
|
MOVE(A,C); 09015260
|
|
JUNK ~ DIGR ~ 09015270
|
|
A ~ AX ~ X ~ XX ~ 0; 09015280
|
|
DO BEGIN 09015290
|
|
DOUBLE(A,X,10,0,|,~,A,X); 09015300
|
|
IF DIGR < 12 THEN 09015310
|
|
BEGIN 09015320
|
|
DYAL(B,JUNK,47-4|DIGR,3,4); 09015330
|
|
X ~ X + JUNK.[44:4]; 09015340
|
|
END ELSE 09015350
|
|
BEGIN 09015360
|
|
DYAL(Y,JUNK,48-4|DIGR,3,4); 09015370
|
|
X ~ X + JUNK.[44:4]; 09015380
|
|
END; 09015390
|
|
END UNTIL DIGR ~ DIGR + 1 = 24; 09015400
|
|
MOVE(A,B); MOVE(X,Y); MOVE(C,A); 09015410
|
|
IF B ! 0 THEN 09015420
|
|
BEGIN 09015430
|
|
B.SOBIT ~ 1; 09015440
|
|
TFFF ~ FALSE; 09015450
|
|
BX.TAG ~ DOUBL; 09015460
|
|
09015470
|
|
END ELSE 09015480
|
|
BEGIN 09015490
|
|
MOVE(Y,B); 09015500
|
|
B.SOBIT ~ REAL(TFFF); 09015510
|
|
TFFF ~ TRUE; 09015520
|
|
BX.TAG ~ SINGL; 09015530
|
|
END; 09015540
|
|
OC: 09015545
|
|
END OF INPCONV; 09015550
|
|
PROCEDURE ICVD ; % INPUT CONVERT, DESTRUCTIVE 7.12.1 09016000
|
|
BEGIN 09017000
|
|
INPCONV(FALSE); 09018000
|
|
END ICVD; 09019000
|
|
PROCEDURE ICVU ; % INPUT CONVERT, UPDATE 7.12.2 09020000
|
|
BEGIN 09021000
|
|
INPCONV(TRUE ); 09022000
|
|
END ICVU; 09023000
|
|
PROCEDURE TEED ; % TABLE ENTER EDIT, DESTRUCTIVE 7.13.1 09024000
|
|
BEGIN 09025000
|
|
ENTEREDIT(3,FALSE); 09026000
|
|
END TEED; 09027000
|
|
PROCEDURE TEEU ; % TABLE ENTER EDIT, UPDATE 7.13.2 09028000
|
|
BEGIN 09029000
|
|
ENTEREDIT(3, TRUE); 09030000
|
|
END TEEU; 09031000
|
|
PROCEDURE ILED ; % IN LINE ENTER EDIT, DESTRUCTIVE 7.13.3 09032000
|
|
BEGIN 09033000
|
|
ENTEREDIT(2,FALSE); 09034000
|
|
END ILED; 09035000
|
|
PROCEDURE ILEU ; % IN LINE ENTER EDIT, UPDATE 7.13.4 09036000
|
|
BEGIN 09037000
|
|
ENTEREDIT(2, TRUE); 09038000
|
|
END ILEU; 09039000
|
|
PROCEDURE EXPU ; % SINGLE PINTER ENTER EDIT 09040000
|
|
BEGIN 09041000
|
|
ENTEREDIT(1,TRUE); 09042000
|
|
END OF SPEE; 09043000
|
|
PROCEDURE EXSD ; % EXECUTE SINGLE MICRO, DESTRUCTIVE 7.13.5 09044000
|
|
BEGIN 09045000
|
|
ENTEREDIT(0,FALSE); 09046000
|
|
END EXSD; 09047000
|
|
PROCEDURE EXSU ; % EXECUTE SINGLE MICRO, UPDATE 7.13.6 09048000
|
|
BEGIN 09049000
|
|
ENTEREDIT(0, TRUE); 09050000
|
|
END EXSU; 09051000
|
|
PROCEDURE MOVES (NUMRIC); 09052000
|
|
VALUE NUMRIC; 09053000
|
|
BOOLEAN NUMRIC; 09054000
|
|
BEGIN 09055000
|
|
INTEGER PLUG; 09055500
|
|
LABEL OC, L1, L2, L3, L4, L5; 09056000
|
|
EDITF ~ TRUE; 09057000
|
|
SETUPEXSF; 09058000
|
|
CHARSZ; 09059000
|
|
IF C.ADDR = 0 THEN GO TO L1; 09060000
|
|
RPF ~ C.ADDR; 09061000
|
|
QH03 ~ 1; 09062000
|
|
L2: IF NOT SOPF THEN 09063000
|
|
BEGIN 09064000
|
|
MM ~ SBR + SIR; 09065000
|
|
MOVE (M[MM], A); MEMCYCLE; 09066000
|
|
IF BOOLEAN (AX.TAG) THEN 09067000
|
|
BEGIN 09068000
|
|
L4: BKIP ~ 1; 09069000
|
|
MEMPROTECT; 09070000
|
|
END; 09071000
|
|
END; 09072000
|
|
IF QH03 = 1 THEN QH03 ~ 0 ELSE 09073000
|
|
L5: IF DIB ! 0 THEN GO TO L3; 09074000
|
|
IF BROF THEN BROF ~ FALSE ELSE 09075000
|
|
BEGIN 09076000
|
|
MM ~ DBR + DIR; 09077000
|
|
MOVE (M[MM], B); MEMCYCLE; 09078000
|
|
IF BOOLEAN (BX.TAG) THEN GO TO L4; 09079000
|
|
END; 09080000
|
|
L3: IF NUMRIC THEN 09081000
|
|
BEGIN 09082000
|
|
IF SSZ = 4 THEN 09083000
|
|
BEGIN 09084000
|
|
DYAL (A, B, DYALSIB, DYALDIB, 4); 09085000
|
|
END ELSE 09086000
|
|
IF SSZ = 6 THEN 09087000
|
|
BEGIN 09088000
|
|
PLUG ~ 0; 09089000
|
|
DYAL (PLUG, B, 46, DYALDIB,2); 09089500
|
|
DYAL (A, B,(DYALSIB - 2), (DYALDIB -2),4); 09090000
|
|
END ELSE 09091000
|
|
BEGIN 09092000
|
|
PLUG ~ 17; 09093000
|
|
DYAL (PLUG, B, 44, DYALDIB, 4); 09093050
|
|
DYAL (A, B,(DYALSIB -4),(DYALDIB -4), 4); 09094000
|
|
END; 09095000
|
|
END ELSE 09096000
|
|
DYAL (A, B, DYALSIB, DYALDIB, SSZ); 09097000
|
|
BUMPSIB; 09098000
|
|
SWITCHSOURCE; 09099000
|
|
RPF ~ RPF - 1; 09100000
|
|
IF RPF = 0 THEN 09101000
|
|
BEGIN 09102000
|
|
MOVE (B, M[DBR + DIR]); MEMCYCLE; 09103000
|
|
LHFF ~ 1; 09104000
|
|
END; 09105000
|
|
IF BUMPDIB = 0 THEN 09106000
|
|
BEGIN 09107000
|
|
MOVE (B, M[DBR + DIR]); MEMCYCLE; 09108000
|
|
END; 09109000
|
|
STEPDP; 09110000
|
|
IF LHFF = 0 THEN 09111000
|
|
BEGIN 09112000
|
|
IF SIB = 0 THEN GO TO L2; 09113000
|
|
GO TO L5; 09114000
|
|
END; 09115000
|
|
L1: IF EXSF THEN ENDE ELSE BROF ~ TRUE; 09116000
|
|
OC: 09117000
|
|
END OF MOVES FOR MOVE CHARAS AND NUMERIC UNCOND; 09118000
|
|
PROCEDURE MCHR; % MOVE CHARACTERS 09119000
|
|
BEGIN 09120000
|
|
P2R3 ~ 1; 09121000
|
|
MOVES (FALSE); 09122000
|
|
END; 09123000
|
|
PROCEDURE MVNU; % MOVE NUMERIC UNCONDITIONAL 09124000
|
|
BEGIN 09125000
|
|
P2R3 ~ 1; 09126000
|
|
MOVES (TRUE); 09127000
|
|
END; 09128000
|
|
PROCEDURE SKIPS (FORWAD, SOURCE); 09130000
|
|
VALUE FORWAD, SOURCE; 09130500
|
|
BOOLEAN FORWAD, SOURCE; 09131000
|
|
BEGIN 09131500
|
|
LABEL OC, L1, L2, L3, MPERR, L4; 09132000
|
|
EDITF ~ TRUE; 09132500
|
|
SETUPEXSF; 09133000
|
|
RPF ~ BUF ~ C.ADDR; 09133500
|
|
IF C.ADDR { 0 THEN GO TO L3; 09134000
|
|
QH03 ~ 1; 09134500
|
|
IF SOURCE THEN 09135000
|
|
BEGIN 09135500
|
|
IF SSZ = 0 THEN SSZ ~ 6; 09136000
|
|
IF NOT SOPF THEN 09136500
|
|
BEGIN 09137000
|
|
L1: MM ~ SBR + SIR; 09137500
|
|
MOVE (M[MM], A); 09138000
|
|
IF BOOLEAN (AX.TAG) THEN GO TO MPERR; 09138500
|
|
IF QH03 = 0 THEN 09139000
|
|
L2: IF FORWAD THEN 09139500
|
|
BEGIN 09140000
|
|
BUF ~ RPF - 1; 09140500
|
|
RPF ~ RPF - 1; 09141000
|
|
IF RPF = 0 THEN GO TO L3; 09141500
|
|
END ELSE 09142000
|
|
BEGIN 09143000
|
|
SIB ~(48 DIV SSZ); 09144000
|
|
END ELSE 09145000
|
|
QH03 ~ 0; 09146000
|
|
END; 09147000
|
|
IF FORWAD THEN RPF ~ RPF -(48 DIV SSZ -(SIB+1)) 09148000
|
|
ELSE 09149000
|
|
BEGIN 09150000
|
|
RPF ~ RPF - SIB; 09151000
|
|
BUF ~ RPF; 09152000
|
|
END; 09153000
|
|
IF RPF < 0 THEN RPZF ~ 1; 09154000
|
|
IF RPF = 0 THEN LHFF ~ 1; 09155000
|
|
IF FORWAD THEN 09156000
|
|
BEGIN 09157000
|
|
IF LHFF = 1 OR RPZF = 1 THEN 09158000
|
|
BEGIN 09159000
|
|
SIB ~ SIB + BUF; 09160000
|
|
GO TO L3; 09161000
|
|
END; 09162000
|
|
SIB ~ 0; 09163000
|
|
IF NOT SOPF THEN 09164000
|
|
BEGIN 09165000
|
|
SIR ~ SIR + 1; 09166000
|
|
GO TO L1 09167000
|
|
END ELSE 09168000
|
|
BEGIN 09169000
|
|
MOVE (A, JUNK); 09170000
|
|
MOVE (X, A); 09171000
|
|
MOVE (JUNK, X); 09172000
|
|
GO TO L2; 09173000
|
|
END; 09174000
|
|
END ELSE 09175000
|
|
BEGIN 09176000
|
|
SIB ~ 0; 09177000
|
|
IF LHFF = 1 OR RPZF = 1 THEN 09178000
|
|
BEGIN 09179000
|
|
SIB ~ ABS (BUF + 0); 09180000
|
|
GO TO L3; 09181000
|
|
END; 09182000
|
|
IF NOT SOPF THEN 09183000
|
|
BEGIN 09184000
|
|
SIR ~ SIR - 1; 09185000
|
|
GO TO L1; 09186000
|
|
END ELSE 09187000
|
|
BEGIN 09188000
|
|
MOVE (A, JUNK); 09189000
|
|
MOVE (X, A); 09190000
|
|
MOVE (JUNK, X); 09191000
|
|
GO TO L2; 09192000
|
|
END; 09193000
|
|
END; 09194000
|
|
END ELSE 09195000
|
|
BEGIN 09196000
|
|
IF DSZ = 0 THEN DSZ ~ 6; 09197000
|
|
IF NOT BROF THEN 09198000
|
|
BEGIN 09199000
|
|
L4: MM ~ DBR + DIR; 09200000
|
|
MOVE (M[MM], B); 09201000
|
|
IF BOOLEAN (BX.TAG) THEN GO TO MPERR; 09202000
|
|
END; 09203000
|
|
IF FORWAD THEN 09204000
|
|
BEGIN 09205000
|
|
IF QH03 = 0 THEN 09206000
|
|
BEGIN 09207000
|
|
BUF ~ RPF - 1; 09208000
|
|
RPF ~ BUF; 09209000
|
|
IF RPF = 0 THEN GO TO L3; 09210000
|
|
END ELSE 09211000
|
|
QH03 ~ 0; 09212000
|
|
RPF ~ RPF - (48 DIV SSZ - (DIB + 1)); 09213000
|
|
END ELSE 09214000
|
|
BEGIN 09215000
|
|
IF QH03 = 0 THEN DIB ~ (48 DIV SSZ) ELSE 09216000
|
|
QH03 ~ 0; 09217000
|
|
RPF ~ RPF - DIB; 09218000
|
|
BUF ~ RPF; 09218500
|
|
END; 09219000
|
|
IF RPF < 0 THEN RPZF ~ 1; 09220000
|
|
IF RPF = 0 THEN LHFF ~ 1; 09221000
|
|
IF FORWAD THEN 09222000
|
|
BEGIN 09223000
|
|
IF LHFF = 1 OR RPZF = 1 THEN 09224000
|
|
BEGIN 09225000
|
|
DIB ~ DIB + BUF; 09226000
|
|
GO TO L3; 09227000
|
|
END ELSE 09228000
|
|
BEGIN 09229000
|
|
DIB ~ 0; 09230000
|
|
BROF ~ FALSE; 09231000
|
|
DIR ~ DIR + 1; 09232000
|
|
GO TO L4; 09233000
|
|
END; 09234000
|
|
END ELSE 09235000
|
|
BEGIN 09235500
|
|
DIB ~ 0; 09236000
|
|
IF LHFF = 1 OR RPZF = 1 THEN 09237000
|
|
BEGIN 09238000
|
|
DIB ~ ABS (RPF + 0); 09239000
|
|
GO TO L3; 09240000
|
|
END ELSE 09241000
|
|
BEGIN 09242000
|
|
BROF ~ FALSE; 09243000
|
|
DIR ~ DIR - 1; 09244000
|
|
GO TO L4; 09245000
|
|
END; 09245500
|
|
END; 09246000
|
|
END; 09246500
|
|
MPERR: 09247000
|
|
UPDF ~ TRUE; 09248000
|
|
ENDE; 09249000
|
|
BKIP ~ 1; QF04 ~ 1; 09250000
|
|
JGIF; 09251000
|
|
GO TO OC; 09252000
|
|
L3: IF EXSF THEN ENDE; 09253000
|
|
OC: 09254000
|
|
END OF SKIPS; 09255000
|
|
PROCEDURE SFSC; % SKIP FORWARD SOURCE CHARACTERS 09255500
|
|
BEGIN P2R3 ~ 1; 09256000
|
|
SKIPS (TRUE, TRUE); 09257000
|
|
END SFSC; 09258000
|
|
PROCEDURE SRSC; % SKIP REVERSE SOURCE CHARACTERS 09259000
|
|
BEGIN P2R3 ~ 1; 09260000
|
|
SKIPS (FALSE, TRUE); 09261000
|
|
END SRSC; 09262000
|
|
PROCEDURE SFDC; % SKIP FORWARD DESTINATION CHARACTERS 09263000
|
|
BEGIN P2R3 ~ 1; 09264000
|
|
SKIPS (TRUE, FALSE); 09265000
|
|
END SFDC; 09265500
|
|
PROCEDURE SRDC; % SKIP REVERSE DESTINATION CHARACTERS 09266000
|
|
BEGIN P2R3 ~ 1; 09267000
|
|
SKIPS (FALSE, FALSE); 09268000
|
|
END SRDC; 09269000
|
|
PROCEDURE INSERTS(CONDITIONAL); 09270000
|
|
VALUE CONDITIONAL; 09271000
|
|
BOOLEAN CONDITIONAL; 09272000
|
|
BEGIN 09273000
|
|
LABEL OC; 09274000
|
|
EDITF ~ TRUE; 09274100
|
|
SETUPEXSF; 09275000
|
|
RPF~C; 09276000
|
|
Y~SYLLABLE; 09277000
|
|
STEPPSR(1); 09278000
|
|
IF CONDITIONAL THEN 09279000
|
|
IF NOT FLTF THEN STEPPSR(1) ELSE 09280000
|
|
BEGIN 09281000
|
|
Y ~ SYLLABLE; YX ~ 0; 09282000
|
|
STEPPSR(1); 09283000
|
|
END; 09284000
|
|
WHILE RPF > 0 DO 09285000
|
|
BEGIN 09286000
|
|
FETCHDESTINATION; 09287000
|
|
DYAL(Y,B,DSZ-1,DYALDIB,DSZ); 09288000
|
|
IF BUMPDIB = 0 THEN 09289000
|
|
BEGIN 09290000
|
|
STOREB; 09291000
|
|
STEPDP; 09292000
|
|
END; 09293000
|
|
RPF ~ RPF - 1; 09294000
|
|
END; 09295000
|
|
IF EXSF THEN ENDE; 09296000
|
|
OC: 09297000
|
|
END OF INSERTS; 09298000
|
|
PROCEDURE INSU ; % INSERT UNCONDITIONAL 8.4.1 09299000
|
|
BEGIN 09300000
|
|
INSERTS(FALSE); 09301000
|
|
END INSU; 09302000
|
|
PROCEDURE INSC ; % INSERT CONDITIONAL 8.4.2 09303000
|
|
BEGIN 09304000
|
|
INSERTS(TRUE ); 09305000
|
|
END INSC; 09306000
|
|
PROCEDURE INSG ; % INSERT DISPLAY SIGN 8.4.3 09307000
|
|
BEGIN 09308000
|
|
LABEL OC; 09309000
|
|
EDITF ~ TRUE; 09309100
|
|
IF DSZ = 0 THEN DSZ ~ 6 ELSE 09310000
|
|
IF DSZ = 4 THEN 09311000
|
|
BEGIN 09311100
|
|
UPDF ~ TRUE; 09311200
|
|
ENDE; 09311300
|
|
QF01 ~ 1; 09311400
|
|
BKIP ~ 1; 09311500
|
|
JGIF; 09311600
|
|
GO OC; 09311700
|
|
END; 09311800
|
|
IF EXTF THEN ELSE STEPPSR(1); 09312000
|
|
Y~ SYLLABLE; YX~0; 09313000
|
|
IF EXTF THEN STEPPSR(2) ELSE STEPPSR(1); 09314000
|
|
FETCHDESTINATION; 09315000
|
|
DYAL(Y,B,DSZ-1,DYALDIB,DSZ); 09316000
|
|
BUMPDIB; 09317000
|
|
IF DIB = 0 THEN 09318000
|
|
BEGIN 09320000
|
|
STOREB; 09321000
|
|
STEPDP; 09322000
|
|
END; 09323000
|
|
IF EXSF THEN ENDE; 09324000
|
|
OC: 09325000
|
|
END INSG; 09326000
|
|
PROCEDURE INOP ; % INSERT OVERPUNCH 8.4.4 09327000
|
|
BEGIN 09328000
|
|
LABEL OC; 09329000
|
|
EDITF ~ TRUE; 09330000
|
|
IF DSZ=0 THEN DSZ~6 ELSE 09331000
|
|
IF DSZ=4 THEN 09332000
|
|
BEGIN 09333000
|
|
UPDF ~ TRUE; ENDE; 09334000
|
|
QF01~ 1; 09335000
|
|
BKIP ~ 1; 09336000
|
|
JGIF; 09337000
|
|
GO OC; 09338000
|
|
END; 09339000
|
|
FETCHDESTINATION; 09340000
|
|
IF EXTF THEN 09341000
|
|
IF (DIB~DIB-DSZ) < 0 THEN 09342000
|
|
IF DSZ=6 THEN DYAL(INTG~2,B,1,DYALDIB,2) 09343000
|
|
ELSE DYAL(INTG~13,B,3,DYALDIB,4); 09344000
|
|
BUMPDIB; 09345000
|
|
IF DIB=0 THEN 09346000
|
|
BEGIN 09347000
|
|
STOREB; 09347100
|
|
STEPDP; 09347200
|
|
END; 09347300
|
|
IF EXSF THEN ENDE; 09347400
|
|
OC: 09348000
|
|
END INOP; 09349000
|
|
PROCEDURE RSTF ; % RESET FLOAT 09350000
|
|
BEGIN 09351000
|
|
FLTF ~ FALSE; 09352000
|
|
END RFLT; 09353000
|
|
PROCEDURE ENDF ; % END FLOAT 8.9 09354000
|
|
BEGIN 09355000
|
|
LABEL OC; 09356000
|
|
EDITF ~ TRUE; 09356100
|
|
IF FLTF THEN 09357000
|
|
BEGIN 09358000
|
|
STEPPSR(2); 09359000
|
|
FLTF ~ FALSE; 09360000
|
|
GO OC; 09361000
|
|
END; 09362000
|
|
IF DSZ=0 THEN DSZ~6; 09363000
|
|
FETCHDESTINATION; 09364000
|
|
Y ~ SYLLABLE; YX ~ 0; 09365000
|
|
STEPPSR(1); 09366000
|
|
IF EXTF THEN Y ~ SYLLABLE; 09367000
|
|
STEPPSR(1); 09368000
|
|
DYAL(Y,B,DSZ-1,DIB,DSZ); 09369000
|
|
BUMPDIB; 09370000
|
|
IF DIB = 0 THEN 09371000
|
|
BEGIN 09372000
|
|
STOREB; 09373000
|
|
STEPDP; 09374000
|
|
END; 09375000
|
|
IF EXSF THEN ENDE; 09376000
|
|
OC: 09377000
|
|
END ENDF; 09378000
|
|
PROCEDURE MINS ; % MOVE WITH INSERT 8.10 09379000
|
|
BEGIN 09380000
|
|
BOOLEAN LHFF; 09381000
|
|
LABEL L12,L8,L10,L14,L20,L11,OC; 09382000
|
|
EDITF ~ TRUE; 09383000
|
|
SETUPEXSF; 09384000
|
|
Y ~ SYLLABLE; YX ~ 0; STEPPSR(1); 09385000
|
|
CHARSZ; 09386000
|
|
IF C = 0 THEN GO TO L11; 09387000
|
|
RPF ~ C.ADDR; 09388000
|
|
QH03 ~ 1; 09389000
|
|
L12: 09390000
|
|
FETCHSOURCE; 09391000
|
|
L8: 09392000
|
|
IF QH03 = 1 THEN QH03~0 ELSE IF DIB!0 THEN GO L14; 09393000
|
|
IF BROF THEN BROF ~ FALSE ELSE 09394000
|
|
L10: 09395000
|
|
FETCHDESTINATION; 09396000
|
|
L14: 09397000
|
|
IF FLTF THEN 09398000
|
|
BEGIN 09399000
|
|
INTG ~ 15|REAL(SSZ=8); 09400000
|
|
IF SSZ!4 THEN DYAL(INTG,B,SSZ-5,DYALDIB,SSZ-4); 09401000
|
|
DYAL(A,8,DYALSIB-SIBLNG,DYALDIB-DIBLNG,4); GO L20; 09402000
|
|
END; 09403000
|
|
09404000
|
|
DYAL(A,INTG,DYALSIB-SIBLNG,3,4); 09405000
|
|
IF INTG.[44:4] ! 0 THEN BEGIN FLTF~TRUE;GO L14 END; 09406000
|
|
09407000
|
|
DYAL(Y,B,DSZ-1,DYALDIB,DSZ); 09408000
|
|
L20: BUMPSIB; 09409000
|
|
SWITCHSOURCE; 09410000
|
|
BUMPDIB; 09411000
|
|
RPF ~ RPF - 1; 09412000
|
|
IF RPF = 0 THEN 09413000
|
|
BEGIN 09414000
|
|
STOREB; 09415000
|
|
LHFF ~ TRUE; 09416000
|
|
END; 09417000
|
|
IF DIB = 0 THEN 09418000
|
|
BEGIN 09418100
|
|
STOREB; 09418200
|
|
STEPDP; 09418300
|
|
END; 09418400
|
|
IF NOT LHFF THEN IF SIB=0 THEN GO L12 ELSE 09418500
|
|
GO L10; 09418600
|
|
L11: IF EXSF THEN ENDE ELSE BROF ~ TRUE; 09418700
|
|
OC: 09418800
|
|
END MINS; 09418900
|
|
PROCEDURE MFLT ; % MOVE WITH FLOAT 8.11 09419000
|
|
BEGIN 09420000
|
|
LABEL L11,L9,L14,L15,L22,L10,L12,OC; 09421000
|
|
BOOLEAN LHFF; 09421100
|
|
EDITF ~ TRUE; 09422000
|
|
SETUPEXSF; 09423000
|
|
Y ~ SYLLABLE; YX ~ 0; STEPPSR(1); 09424000
|
|
CHARSZ; 09425000
|
|
IF C = 0 THEN GO TO L10; 09426000
|
|
RPF ~ C.ADDR; 09427000
|
|
QH03 ~ 1; 09428000
|
|
L11: 09429000
|
|
FETCHSOURCE; 09430000
|
|
L9: 09431000
|
|
IF QH03 = 1 THEN QH03 ~ 0 ELSE IF DIB ! 0 THEN GO TO L15; 09432000
|
|
IF BROF THEN BROF ~ FALSE ELSE 09433000
|
|
L14: FETCHDESTINATION; 09434000
|
|
L15: 09435000
|
|
IF FLTF THEN 09436000
|
|
BEGIN 09437000
|
|
INTG ~ 15|REAL(SSZ=8); 09438000
|
|
IF SSZ ! 4 THEN DYAL(INTG,B,SSZ-5,DYALDIB,SSZ-4); 09439000
|
|
DYAL(A,B,DYALSIB-SIBLNG,DYALDIB-DIBLNG,4); 09440000
|
|
END ELSE 09441000
|
|
BEGIN 09442000
|
|
DYAL(A,INTG,DYALSIB-SIBLNG,3,4); 09443000
|
|
IF INTG.[44:4] = 0 THEN 09444000
|
|
DYAL(Y,B,DSZ-1,DYALDIB,DSZ) ELSE 09445000
|
|
BEGIN 09446000
|
|
FLTF ~ TRUE; 09447000
|
|
Y ~ SYLLABLE; YX ~ 0; STEPPSR(1); 09448000
|
|
IF EXTF THEN Y ~ SYLLABLE; STEPPSR(1); 09449000
|
|
DYAL(Y,B,DSZ-1,DYALDIB,DSZ); 09450000
|
|
QH01 ~ 1; 09451000
|
|
GO TO L22; 09452000
|
|
END; 09453000
|
|
END; 09454000
|
|
BUMPSIB; 09455000
|
|
IF SIB=0 AND NOT SOPF THEN SIR ~ SIR + 1; 09456000
|
|
L22: 09457000
|
|
BUMPDIB; 09458000
|
|
IF QH01 = 0 THEN 09459000
|
|
BEGIN 09460000
|
|
RPF ~ RPF - 1; 09461000
|
|
IF RPF = 0 THEN BEGIN STOREB; LHFF~TRUE END; 09462000
|
|
END ELSE QH01 ~ 0; 09463000
|
|
IF DIB = 0 THEN 09464000
|
|
BEGIN 09465000
|
|
STOREB; 09466000
|
|
STEPDP; 09467000
|
|
END; 09468000
|
|
IF LHFF THEN GO L12; 09469000
|
|
IF SIB = 0 THEN GO L11; 09470000
|
|
GO L14; 09471000
|
|
L10: 09472000
|
|
IF QH03 = 0 THEN STEPPSR(2); 09473000
|
|
L12: 09474000
|
|
IF EXSF THEN ENDE ELSE BROF ~ TRUE; 09474100
|
|
OC: 09474200
|
|
END MFLT; 09474300
|
|
PROCEDURE ENDE; % END EDIT 09475000
|
|
BEGIN 09476000
|
|
LABEL OC, L1; 09477000
|
|
IF BROF THEN 09478000
|
|
BEGIN 09479000
|
|
MM ~ DBR + DIR; 09480000
|
|
MOVE (B, M[MM]); MEMCYCLE; 09481000
|
|
BROF ~ FALSE 09482000
|
|
END; 09483000
|
|
IF NOT UPDF THEN 09484000
|
|
BEGIN 09485000
|
|
FLTF ~ FALSE; 09486000
|
|
AROF ~ FALSE; 09487000
|
|
GO TO L1 09488000
|
|
END; 09489000
|
|
BROF ~ TRUE; 09490000
|
|
B ~ BX ~ 0; 09490500
|
|
B ~ DBR; 09491000
|
|
B.DIRF ~ DIR; 09492000
|
|
B.CHARF ~ DIB; 09493000
|
|
B.SZ ~ DSZ DIV 2; 09494000
|
|
BX.TAG ~ DATADESC; 09495000
|
|
B.IBIT ~ 1; 09496000
|
|
BX.PBIT ~ 1; 09497000
|
|
B.CBIT ~ 1; 09498000
|
|
B.SBIT ~ DPSF; 09499000
|
|
09500000
|
|
IF SOPF THEN 09501000
|
|
BEGIN 09502000
|
|
IF AX.TAG = SINGL THEN 09503000
|
|
BEGIN 09504000
|
|
IF SIB ! 47 THEN 09505000
|
|
BEGIN 09506000
|
|
DYAL (A,C,DYALSIB,47,DYALSIZ); 09507000
|
|
DYAL (A,C,47,DYALSET,DYALSZ); 09508000
|
|
MOVE (C, A); 09509000
|
|
END; 09510000
|
|
AROF ~ TRUE; 09511000
|
|
XROF ~ 0; 09512000
|
|
END ELSE 09513000
|
|
IF SIB ! 47 THEN 09514000
|
|
BEGIN 09515000
|
|
DYAL (A,C,DYALSIB,47,DYALSIZ); 09516000
|
|
DYAL (X,C,47,DYALSET,DYALSZ); 09517000
|
|
DYAL (X,X,DYALSIB,47,DYALSIZ); 09518000
|
|
DYAL (A,X,47,DYALSET,DYALSZ); 09519000
|
|
MOVE (C, A); 09520000
|
|
END; 09521000
|
|
AROF ~ TRUE; 09522000
|
|
XROF ~ 1; GO TO L1; 09523000
|
|
END ELSE 09524000
|
|
AROF ~ TRUE; 09525000
|
|
A ~ AX ~ 0; 09525500
|
|
A ~ SBR; 09526000
|
|
A.SIRF ~ SIR; 09527000
|
|
A.CHARF ~ SIB; 09528000
|
|
A.SZ ~ SSZ DIV 2; 09529000
|
|
AX.TAG ~ DATADESC; 09530000
|
|
A.IBIT ~ 1; 09531000
|
|
AX.PBIT ~ 1; 09532000
|
|
A.CBIT ~ 1; 09533000
|
|
A.SBIT ~ SPSF; 09534000
|
|
A.RBIT ~ SPRF; 09535000
|
|
L1: IF NOT EDITF THEN 09536000
|
|
BEGIN 09537000
|
|
IF SWPS = 1 THEN BROF ~ FALSE 09538000
|
|
END ELSE 09539000
|
|
IF ESPF THEN AROF ~ FALSE; 09540000
|
|
ESPF ~ EXSF ~ UPDF ~ SOPF ~ EDITF ~ FALSE; 09541000
|
|
OC: 09542000
|
|
END ENDEDIT; 09543000
|
|
PROCEDURE ERVSFLOW(OP); VALUE OP; INTEGER OP; 50000000
|
|
BEGIN 50001000
|
|
LABEL STARTVALC,STARTEVAL,STARTENTR,STARTEXIT,STARTRETN, 50002000
|
|
STARTINDX,STARTNXLN,STARTNXLV,STARTSTBR,STARTMKST, 50003000
|
|
STARTMVST,STARTDBTR,STARTDBFL,STARTDBUN,STARTBRTR, 50004000
|
|
STARTBRFL,STARTBRUN,STARTSTFF,STARTIRWL,STARTPCWL; 50005000
|
|
SWITCH START ~ 50006000
|
|
STARTVALC,STARTEVAL,STARTENTR,STARTEXIT,STARTRETN, 50007000
|
|
STARTINDX,STARTNXLN,STARTNXLV,STARTSTBR, 50008000
|
|
STARTMKST,STARTMVST,STARTDBTR,STARTDBFL, 50009000
|
|
STARTDBUN,STARTBRTR,STARTBRFL,STARTBRUN, 50010000
|
|
STARTSTFF,STARTIRWL,STARTPCWL; 50011000
|
|
DEFINE VALC=OP=1#,EVAL=OP=2#,ENTR=OP=3#,EXIT=OP=4#,RETN=OP=5#, 50012000
|
|
INDX=OP=6#,NXLN=OP=7#,NXLV=OP=8#,STBR=OP=9#, 50013000
|
|
MKST=OP=10#,MVST=OP=11#,DBTR=OP=12#, 50014000
|
|
DBFL=OP=13#,DBUN=OP=14,BRTR=OP=15#,BRFL=OP=16#,50015000
|
|
BRUN=OP=17#,STFF =OP=18#,IRWL = OP=19#, 50016000
|
|
PCWL= OP=20#; 50017000
|
|
LABEL LABELA,LABELB,LABELC,LABELD,LABELE,LABELF,LABELG, 50018000
|
|
LABELH,LABELP,LABELQ,LABELS,LABELT,LABELW,LABELX, 50019000
|
|
LABELZ, L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13, 50020000
|
|
L14,L15,L16,L17,L18,DESCPAGE6,INDEXINDESC,NXLNPAGE9, 50021000
|
|
NORMALINDEX,SPECIALINDEX,OPERAND,INDEXWORD,STUFFEDIRW, 50022000
|
|
NORMALIRW,PCWPAGE22,DISPLAYUPDATE,BYPASUPDATE, 50023000
|
|
SEGMENTDESC,PCW2,INVOPLBL,INVINDLBL,STKUNFLBL,BOSLBL, 50024000
|
|
SEQERLBL,INTLBL,PRES10LBL,PRES11LBL,PRES12LBL, 50025000
|
|
PRES13LBL,OC,LABELOPND; 50026000
|
|
50027000
|
|
REAL TS,T1,T2; 50028000
|
|
DEFINE I1INVALIDOPERATOR = GO TO INVOPLBL#, % ON PAGE 44 50029000
|
|
I2INTEGERIZE = BEGIN B ~ BX ~ 0; 50030000
|
|
GO TO INTLBL END#, % ON PAGE 45 50030500
|
|
I2MULT = I2INTEGERIZE#, 50031000
|
|
I2INTEGERDIV = I2INTEGERIZE#, 50032000
|
|
I3INVALIDINDEX = BEGIN LL ~ X.LLF; 50033000
|
|
GO TO INVINDLBL END#, % PAGE 44 50033500
|
|
I4INVALIDINDEX = GO TO INVINDLBL#, % ON PAGE 44 50034000
|
|
I5BOSERROR = GO TO STKUNFLBL#, % ON PAGE 44 50035000
|
|
I6BOSNORMAL = GO TO BOSLBL#, % ON PAGE 45 50036000
|
|
I7SEQUENCEERROR = BEGIN LL ~ X.LLF; 50037000
|
|
GO TO SEQERLBL END#, % PAGE 45 50037500
|
|
I8SEQUENCEERROR = GO TO SEQERLBL#, % ON PAGE 45 50038000
|
|
I9INVALIDINDEX = BEGIN MOVE (A,C); AROF ~ FALSE; 50039000
|
|
GO TO INVINDLBL END#, % PAGE 44 50040000
|
|
I10PRESENCEBIT = GO TO PRES10LBL#, % ON PAGE 46 50041000
|
|
I11PRESENCEBIT = GO TO PRES11LBL#, % ON PAGE 46 50042000
|
|
I12PRESENCEBIT = GO TO PRES12LBL#, % ON PAGE 46 50043000
|
|
I13PRESENCEBIT = GO TO PRES13LBL#; % ON PAGE 46 50044000
|
|
%%% 50045000
|
|
DEFINE INTFL = SDIS=1#; %TO OVERCOME NOMENCLATURE DIFFICULTY 50046000
|
|
%%% 50047000
|
|
GO TO START[OP]; ERROR(10); MEMDUMP; GO TO EOJ; 50048000
|
|
% PAGE 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50049000
|
|
STARTEVAL: 50050000
|
|
STARTSTBR: 50051000
|
|
LABELE: 50052000
|
|
ADJ(1,2); 50053000
|
|
GO TO L1; 50054000
|
|
STARTNXLV: 50055000
|
|
STARTNXLN: 50056000
|
|
STARTINDX: 50057000
|
|
ADJ(1,1); 50058000
|
|
IF AX.TAG = SINGL OR AX.TAG = DOUBL THEN EXCH; 50059000
|
|
L1: MOVE(A,C); AROF ~ FALSE; 50060000
|
|
IF AX.TAG = IRW THEN GO TO LABELA ELSE GO TO DESCPAGE6; 50061000
|
|
% PAGE 3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50062000
|
|
STARTENTR: 50063000
|
|
ADJ(0,0); 50064000
|
|
MOVE(M[F + 1], C); MEMCYCLE; 50065000
|
|
IF CX.TAG ! IRW THEN I1INVALIDOPERATOR; % ON PAGE 44 50066000
|
|
STARTIRWL: 50067000
|
|
LABELA: 50068000
|
|
MOVE (C,A); 50069000
|
|
IF C.EBIT = 1 THEN GO TO STUFFEDIRW ELSE GO TO NORMALIRW; 50070000
|
|
% PAGE 4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50071000
|
|
STARTVALC: 50072000
|
|
T1 ~ T1&DRS[34:42:6] & SYLLABLE[40:40:8]; STEPPSR(1); 50073000
|
|
BUF2 ~ D[LEVEL(T1)] + DELTA(T1); 50074000
|
|
MOVE(M[D[LEVEL(T1)]+DELTA(T1)],C); MEMCYCLE; 50075000
|
|
QC1F ~ 1; 50076000
|
|
IF AROF THEN ADJ(0,2); 50077000
|
|
IF CX.TAG = SINGL OR CX.TAG = DOUBL THEN 50078000
|
|
BEGIN 50079000
|
|
IF CX.TAG = DOUBL THEN MOVE (M[BUF2 + 1],X); 50080000
|
|
MOVE (C,A); AROF ~ TRUE; 50081000
|
|
GO TO OC; 50082000
|
|
END; 50083000
|
|
IF CX.TAG = IRW THEN GO TO LABELA; % ON PAGE 3 50084000
|
|
% PAGE 6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50085000
|
|
DESCPAGE6: 50086000
|
|
IF CX.TAG ! DATADESC THEN I1INVALIDOPERATOR; 50087000
|
|
IF C.CHRSZ = 0 THEN 50088000
|
|
BEGIN 50089000
|
|
QC6F ~ 1; QC7F ~ C.DBIT 50090000
|
|
END; 50091000
|
|
IF C.IBIT = 1 THEN GO TO L2; % ON PAGE 7 50092000
|
|
IF EVAL THEN GO TO LABELZ; % ON PAGE 9 50093000
|
|
IF NOT (NXLV OR NXLN OR INDX) THEN I1INVALIDOPERATOR; 50094000
|
|
LABELT: 50095000
|
|
IF C.CHRSZ = 0 OR INDX THEN GO TO NORMALINDEX % ON PAGE 10 50096000
|
|
ELSE I1INVALIDOPERATOR; 50097000
|
|
% PAGE 7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50098000
|
|
L2: 50099000
|
|
IF INDX THEN I1INVALIDOPERATOR; 50100000
|
|
IF EVAL THEN GO TO LABELZ; % ON PAGE 9 50101000
|
|
INDEXINDESC: 50102000
|
|
IF C.SBIT ! 1 AND C.CHRSZ ! 0 THEN I1INVALIDOPERATOR; 50103000
|
|
IF CX.PBIT ! 1 THEN I11PRESENCEBIT; 50104000
|
|
T1 ~ C.SBIT; 50105000
|
|
MOVE(M[BUF2 ~ C.INDEX + C.ADDR],C); MEMCYCLE; 50106000
|
|
IF T1 = 1 THEN GO TO DESCPAGE6; 50107000
|
|
% PAGE 8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50108000
|
|
IF NXLN THEN GO TO NXLNPAGE9; 50109000
|
|
LABELC: 50110000
|
|
IF CX.TAG=SINGL OR CX.TAG=DOUBL THEN GO TO OPERAND; % ON PAGE1550111000
|
|
IF CX.TAG = SIW THEN GO TO INDEXWORD; % ON PAGE 17 50112000
|
|
IF NXLV THEN I1INVALIDOPERATOR; 50113000
|
|
GO TO DESCPAGE6; 50114000
|
|
% PAGE 9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50115000
|
|
NXLNPAGE9: 50116000
|
|
IF CX.TAG ! DATADESC THEN I1INVALIDOPERATOR; 50117000
|
|
IF C.IBIT = 1 THEN I1INVALIDOPERATOR; 50118000
|
|
LABELZ: 50118100
|
|
IF CX.PBIT ! 1 THEN BEGIN 50119000
|
|
IF C.CBIT ! 1 THEN C.ADDR ~ BUF2 50120000
|
|
END; 50121000
|
|
50122000
|
|
C.CBIT ~ 1; 50123000
|
|
MOVE(C,A); AROF ~ TRUE; 50124000
|
|
GO TO OC; 50125000
|
|
% PAGE 10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50126000
|
|
NORMALINDEX: 50127000
|
|
NTGR; IF INTFL THEN I2INTEGERIZE; 50128000
|
|
IF B.MANF < 0 OR B.MANF } C.INDEX THEN I4INVALIDINDEX; 50129000
|
|
IF C.SBIT = 1 THEN GO TO LABELP; % ON PAGE 12 50130000
|
|
IF C.CHRSZ ! 0 THEN GO TO LABELQ; % ON PAGE 14 50131000
|
|
IF C.DBIT = 1 THEN B ~ B | 2; 5013155550131000
|
|
C.INDEX ~ B.ADDR; 50132000
|
|
% PAGE 11 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50133000
|
|
SPECIALINDEX: 50134000
|
|
C.IBIT ~ 1; BROF ~ FALSE; 50135000
|
|
IF NOT INDX THEN GO TO INDEXINDESC; % ON PAGE 7 50136000
|
|
GO LABELZ; 50136600
|
|
MOVE (C,A); AROF ~ TRUE; 50137000
|
|
GO TO OC; 50138000
|
|
% PAGE 12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50139000
|
|
LABELP: 50140000
|
|
CASE C.SZ OF 50141000
|
|
BEGIN 50142000
|
|
% SZ = 000 (DATA DESCRIPTOR) SINGLE PRECISION 50143000
|
|
BEGIN A ~ 256; GO TO L4 END; 50144000
|
|
% SZ = 001 (DATA DESCRIPTOR) DOUBLE PRECISION 50145000
|
|
BEGIN A ~ 128; GO TO L4 END; 50146000
|
|
% SZ = 010 4-BIT CHARACTERS (STRING DESCRIPTOR) 50147000
|
|
BEGIN A ~ 3072; GO TO L4 END; 50148000
|
|
% SZ = 011 6-BIT CHARACTERS (STRING DESCRIPTOR) 50149000
|
|
BEGIN A ~ 2048; GO TO L4 END; 50150000
|
|
% SZ = 100 8-BIT CHARACTERS (STRING DESCRIPTOR) 50151000
|
|
BEGIN A ~ 1536; GO TO L4 END; 50152000
|
|
END; 50153000
|
|
% PAGE 13 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50154000
|
|
L4: 50155000
|
|
AROF ~ TRUE; 50156000
|
|
IDIV; IF INTFL THEN I2INTEGERDIV; 50157000
|
|
C.INDEX ~ B.ADDR; MOVE (A,B); C.IBIT ~ 1; 50158000
|
|
GO TO INDEXINDESC; % ON PAGE 7 50159000
|
|
% PAGE 14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50160000
|
|
LABELQ: 50161000
|
|
CASE C.SZ OF 50162000
|
|
BEGIN 50163000
|
|
% SZ = 000 NOT POSSIBLE AT THIS POINT 50164000
|
|
; 50165000
|
|
% SZ = 001 NOT POSSIBLE AT THIS POINT 50166000
|
|
; 50167000
|
|
% SZ = 010 4-BIT CHARACTERS 50168000
|
|
BEGIN T1 ~ 12; T2 ~ 4 END; 50169000
|
|
% SZ = 011 6-BIT CHARACTERS 50170000
|
|
BEGIN T1 ~ 8; T2 ~ 6 END; 50171000
|
|
% SZ = 100 8-BIT CHARACTERS 50172000
|
|
BEGIN T1 ~ 6; T2 ~ 8 END; 50173000
|
|
END; 50174000
|
|
MOVE (A,B); BROF ~ TRUE; A ~ T1; 50175000
|
|
IDIV; IF INTFL THEN I2INTEGERDIV; 50176000
|
|
C.[13:15] ~ B.[33:15]; AROF ~ TRUE; AX.TAG ~ SINGL; B ~ T2; 50177000
|
|
MULT; IF INTFL THEN I2MULT; 50178000
|
|
MOVE (B,A); B ~ 47; BROF ~ FALSE; 50179000
|
|
B ~ B - A; 50180000
|
|
C.[7:6] ~ B.[42:6]; 50181000
|
|
GO TO SPECIALINDEX; % ON PAGE 11 50182000
|
|
% PAGE 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50183000
|
|
OPERAND: 50184000
|
|
IF EVAL THEN GO TO L7; % ON PAGE 16 50185000
|
|
IF QC6F = 1 THEN 50186000
|
|
BEGIN 50187000
|
|
IF QC7F = 1 THEN BEGIN CX.TAG ~ DOUBL; 50188000
|
|
GO TO L5 END ELSE 50189000
|
|
BEGIN CX.TAG ~ SINGL; 50190000
|
|
GO TO L6 END; 50191000
|
|
END; 50192000
|
|
IF CX.TAG ! DOUBL THEN GO TO L6; 50193000
|
|
L5: 50194000
|
|
MOVE (M[BUF2 + 1], X); MEMCYCLE; 50195000
|
|
L6: 50196000
|
|
MOVE (C,A); 50197000
|
|
% PAGE 16 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50198000
|
|
L7: 50199000
|
|
AROF ~ TRUE; 50200000
|
|
IF NOT STBR THEN GO TO OC; 50201000
|
|
ADJ (0,1); 50202000
|
|
A ~ AX ~ 0; AROF ~ TRUE; STEPPSR (2); 50203000
|
|
GO TO OC; 50204000
|
|
% PAGE 17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50205000
|
|
INDEXWORD: 50206000
|
|
C.CVF ~ C.CVF + C.INCRF; 50207000
|
|
MOVE (C, M[BUF2]); MEMCYCLE; 50208000
|
|
IF C.CVF { C.FVF THEN 50209000
|
|
BEGIN 50210000
|
|
A ~ AX ~ 1; STEPPSR (2); AROF ~ TRUE; 50211000
|
|
GO TO OC 50212000
|
|
END; 50213000
|
|
GO TO STARTBRUN; 50214000
|
|
50215000
|
|
% PAGE 18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50216000
|
|
STUFFEDIRW: 50217000
|
|
QC6F ~ 0; Q04F ~ 1; 50218000
|
|
LABELX: 50219000
|
|
IF SNR = C.STKNR THEN 50220000
|
|
BEGIN QC7F ~ 0; TEMP ~ BOSR END 50221000
|
|
ELSE 50222000
|
|
BEGIN 50223000
|
|
MOVE(M[STACKVECTOR],C); MEMCYCLE; QC7F ~ 1; 50224000
|
|
IF CX.PBIT !1 THEN I10PRESENCEBIT; 50225000
|
|
IF C.LENGTH { A.STKNR THEN I4INVALIDINDEX; 50226000
|
|
MOVE (M[C.ADDR + A.STKNR], C); MEMCYCLE; 50227000
|
|
IF CX.PBIT !1 THEN I10PRESENCEBIT; 50228000
|
|
TEMP ~ C.ADDR; 50229000
|
|
END; 50230000
|
|
% PAGE 19 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50231000
|
|
IF Q04F ! 1 THEN 50232000
|
|
IF STFF THEN 50233000
|
|
GO TO LABELW % ON PAGE 42 50234000
|
|
ELSE GO TO LABELD; % ON PAGE 22 50235000
|
|
BUF ~ TEMP + A.DISP; 50236000
|
|
BUF2 ~ BUF + A.ADRCPLSIR; 50237000
|
|
IF IRWL THEN GO TO OC; 50238000
|
|
Q04F ~ 0; MOVE(M[BUF + A.ADRCPLSIR] ,C); MEMCYCLE; 50239000
|
|
IF CX.TAG = IRW AND C.EBIT = 0 THEN I1INVALIDOPERATOR 50240000
|
|
ELSE GO TO LABELH; % ON PAGE 20 50241000
|
|
% PAGE 20 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50242000
|
|
NORMALIRW: 50243000
|
|
BUF ~ D [LEVEL(C)]; BUF2 ~ BUF + DELTA(C); 50244000
|
|
IF IRWL THEN GO TO OC; 50245000
|
|
MOVE (M[BUF + DELTA(C)],C); MEMCYCLE; 50246000
|
|
LABELH: 50247000
|
|
IF CX.TAG = IRW THEN GO TO LABELA; % ON PAGE 3 50248000
|
|
IF CX.TAG = PCW THEN GO TO PCWPAGE22; 50249000
|
|
IF ENTR THEN I1INVALIDOPERATOR; 50250000
|
|
IF NOT (NXLN OR NXLV OR INDX) THEN 50251000
|
|
BEGIN 50252000
|
|
QC6F ~ 0; 50253000
|
|
GO TO LABELC % ON PAGE 8 50254000
|
|
END; 50255000
|
|
% PAGE 21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50256000
|
|
IF CX.TAG ! DATADESC OR C.IBIT ! 0 THEN I1INVALIDOPERATOR; 50257000
|
|
GO TO DESCPAGE6; % ON PAGE 6 50258000
|
|
% PAGE 22 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50259000
|
|
STARTPCWL: 50260000
|
|
PCWPAGE22: 50261000
|
|
IF NOT (ENTR OR BOOLEAN (QC1F)) THEN 50262000
|
|
BEGIN 50263000
|
|
PIR ~ PIR - PICR; 50264000
|
|
PSR ~ OPSR; 50265000
|
|
END; 50266000
|
|
MOVE (C,X); 50267000
|
|
IF A.EBIT ! 0 THEN GO TO L8; 50268000
|
|
50269000
|
|
A.STKNR ~ C.STKNR; 50270000
|
|
GO TO LABELX; 50271000
|
|
LABELD: 50272000
|
|
TS ~ D[LEVEL(A)]; 50273000
|
|
A.DISP ~ TS - TEMP; 50274000
|
|
L8: 50275000
|
|
C ~ CX ~ 0; 50276000
|
|
C.NBIT ~ REAL(NCSF); IIHF ~ BOOLEAN(X.NBIT); 50277000
|
|
NCSF ~ BOOLEAN(X.NBIT); 50278000
|
|
C.SDIF ~ PDR; PDR ~ X.SDIF; 50279000
|
|
% PAGE 23 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50280000
|
|
C.PSRF ~ PDR; PDR ~ X.PSRF; 50281000
|
|
C.PIRF ~ PIR; PIR ~ X.PIRF; 50282000
|
|
C.FLTFF ~ REAL (FLTF); 50283000
|
|
C.TFFFF ~ REAL (TFFF); 50284000
|
|
C.OFFFF ~ REAL (OFFF); 50285000
|
|
CX.SGNFF ~ SGNF; 50286000
|
|
C.LLF ~ LL; 50287000
|
|
TS ~ LL; LL ~ X.LLF; X.[10:5] ~ TS; 50288000
|
|
CX.TAG ~ RCW; 50289000
|
|
IF ENTR THEN 50290000
|
|
BEGIN % EXPECTED PROCEDURE ENTRY 50291000
|
|
MOVE (C,M[F + 1]); MEMCYCLE; 50292000
|
|
MOVE (M[F],C); MEMCYCLE; 50293000
|
|
C.STKNR ~ A.STKNR; 50294000
|
|
C.DISP ~ A.DISP; 50295000
|
|
CX.DSBIT ~ QC7F; 50296000
|
|
C.LLF ~ LL; 50297000
|
|
C.EBIT ~ 1; 50298000
|
|
MOVE (C,M[F]); MEMCYCLE; 50299000
|
|
GO TO DISPLAYUPDATE; % ON PAGE 25 50300000
|
|
END; 50300500
|
|
% PAGE 24 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50301000
|
|
% ACCIDENTAL PROCEDURE ENTRY 50302000
|
|
ADJ (0,0); 50303000
|
|
MOVE (A,B); 50304000
|
|
MOVE (C,A); 50305000
|
|
B.DSBIT ~ QC7F; 50306000
|
|
B.DF ~ S + 1 - F; 50307000
|
|
F ~ S + 1; 50308000
|
|
B.VBIT ~ QC1F; 50309000
|
|
BX.TAG ~ MSCW; 50310000
|
|
B.LLF ~ LL; 50311000
|
|
B.EBIT ~ 1; 50312000
|
|
AROF ~ BROF ~ TRUE; 50313000
|
|
ADJ (0,0); 50314000
|
|
% PAGE 25 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50315000
|
|
DISPLAYUPDATE: 50316000
|
|
D [LL] ~ F; 50317000
|
|
X.LLF ~ LL; 50318000
|
|
L9: 50319000
|
|
IF LL = 0 OR QC6F = 1 THEN 50320000
|
|
BEGIN 50321000
|
|
BYPASUPDATE: 50322000
|
|
LL ~ X.LLF; 50323000
|
|
IF MVST THEN GO TO OC 50324000
|
|
ELSE GO TO SEGMENTDESC; % ON PAGE 28 50325000
|
|
END; 50326000
|
|
LL ~ LL - 1; 50327000
|
|
IF D[LL] = BUF AND LL { X.[10:5] THEN GO TO BYPASUPDATE; 50328000
|
|
D[LL] ~ BUF; MOVE (M[BUF], C); MEMCYCLE; 50329000
|
|
% PAGE 26 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50330000
|
|
IF CX.TAG ! MSCW OR LL ! C.LLF THEN 50331000
|
|
BEGIN 50332000
|
|
QC2F ~ 1; I7SEQUENCEERROR; 50333000
|
|
END; 50334000
|
|
LABELF: 50335000
|
|
IF CX.DSBIT = 0 THEN 50336000
|
|
BEGIN 50337000
|
|
BUF ~ TEMP + C.DISP; 50338000
|
|
GO TO L9 50339000
|
|
END; 50340000
|
|
MOVE (C,A); 50341000
|
|
BUF2 ~ D0 + 2; 50342000
|
|
MOVE (M[STACKVECTOR], C); MEMCYCLE; 50343000
|
|
IF CX.PBIT ! 1 THEN I12PRESENCEBIT; 50344000
|
|
IF C.LENGTH { A.STKNR THEN 50345000
|
|
BEGIN 50346000
|
|
QC2F ~ 1; 50347000
|
|
I3INVALIDINDEX; 50348000
|
|
END; 50349000
|
|
% PAGE 27 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50350000
|
|
BUF2 ~ C.ADDR + A.STKNR; 50351000
|
|
MOVE (M[BUF2], C); MEMCYCLE; 50352000
|
|
IF CX.PBIT ! 1 THEN I12PRESENCEBIT; 50353000
|
|
TEMP ~ C.ADDR; 50354000
|
|
BUF ~ TEMP + A.DISP; 50355000
|
|
GO TO L9; 50356000
|
|
% PAGE 28 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50357000
|
|
SEGMENTDESC: 50358000
|
|
C.SDIF ~ PDR; 50359000
|
|
BUF2 ~ D[C.LEVELPCW] + C.DELTAPCW; 50360000
|
|
MOVE (M[D[C.LEVELPCW] + C.DELTAPCW], C); MEMCYCLE; 50361000
|
|
IF CX.TAG ! SEGDESC THEN 50362000
|
|
BEGIN 50363000
|
|
QC2F ~ 1; 50364000
|
|
I8SEQUENCEERROR; 50365000
|
|
END; 50366000
|
|
IF CX.PBIT ! 1 THEN I12PRESENCEBIT; 50367000
|
|
PBR ~ C.ADDR; PROF ~ FALSE; 50368000
|
|
IF NOT RETN THEN GO TO OC; 50369000
|
|
% PAGE 29 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50370000
|
|
IF QC1F ! 1 THEN GO TO OC; 50371000
|
|
OP ~ 1; % FORCE A VALC INTO THE T REGISTER AND CONTINUE THE 50372000
|
|
% PROCESSING AS A VALUE CALL OPERATOR 50373000
|
|
GO TO LABELE; % ON PAGE 2 50374000
|
|
% PAGE 30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50375000
|
|
STARTRETN: 50376000
|
|
ADJ (0,1); 50377000
|
|
L10: 50378000
|
|
F ~ D[LL]; 50379000
|
|
MOVE (M[F + 1], C); MEMCYCLE; 50380000
|
|
IIHF ~BOOLEAN(C.NBIT); PDR ~ C.SDIF; PIR ~ C.PIRF; 50381000
|
|
PSR ~ C.PSRF; NCSF ~BOOLEAN(C.NBIT); X.[10:5] ~ LL; 50382000
|
|
FLTF ~BOOLEAN(C.FLTFF); TFFF ~BOOLEAN(C.TFFFF); OFFF ~ BOOLEAN 50383000
|
|
(C.OFFFF); SGNF ~ CX.SGNFF; LL ~ C.LLF; 50384000
|
|
S ~ F - 1; 50385000
|
|
TEMP ~ BOSR; X.LLF ~ LL; 50386000
|
|
IF F = BOSR + 1 THEN 50387000
|
|
BEGIN 50388000
|
|
QC2F ~ 1; 50389000
|
|
I6BOSNORMAL; 50390000
|
|
END; 50391000
|
|
GO TO LABELG; % ON PAGE 31 50392000
|
|
% PAGE 31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50393000
|
|
STARTEXIT: 50394000
|
|
ADJ (0,0); 50395000
|
|
GO TO L10; % ON PAGE 30 50396000
|
|
LABELG: 50397000
|
|
MOVE (M[F], C); MEMCYCLE; 50398000
|
|
IF CX.TAG ! MSCW THEN 50399000
|
|
BEGIN 50400000
|
|
QC2F ~ 1; 50401000
|
|
I8SEQUENCEERROR; 50402000
|
|
END; 50403000
|
|
F ~ F - C.DF; 50404000
|
|
BUF ~ F; QC1F ~ C.VBIT; 50405000
|
|
LABELS: 50406000
|
|
IF BOSR > BUF THEN 50407000
|
|
BEGIN 50408000
|
|
SUFL ~ TRUE; 50409000
|
|
I5BOSERROR; 50410000
|
|
END; 50411000
|
|
D[LL] ~ BUF; MOVE (M[BUF], C); MEMCYCLE; 50412000
|
|
% PAGE 32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50413000
|
|
IF CX.TAG ! MSCW THEN 50414000
|
|
BEGIN 50415000
|
|
QC2F ~ 1; I8SEQUENCEERROR; 50416000
|
|
END; 50417000
|
|
IF LL = C.LLF AND C.EBIT = 1 THEN GO TO LABELF; % ON PAGE 26 50418000
|
|
BUF ~ D[LL] - C.DF; 50419000
|
|
GO TO LABELS; % ON PAGE 31 50420000
|
|
% PAGE 33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50421000
|
|
STARTMVST: 50422000
|
|
ADJ (0,1); 50423000
|
|
C.DF ~ S - F; C.LLF ~ LL; C.NBIT ~ REAL (NCSF); 50424000
|
|
C.DS ~ S - BOSR; 50425000
|
|
C.FLTFF ~REAL(FLTF); C.TFFFF ~REAL(TFFF); C.OFFFF ~REAL(OFFF); 50426000
|
|
CX.SGNFF ~ SGNF; CX.TAG ~ TOS; 50427000
|
|
MOVE (M[BOSR], T1); 50428000
|
|
IF T2.ROBIT ! 1 THEN 50429000
|
|
BEGIN MOVE (C,M[BOSR]); MEMCYCLE END; 50430000
|
|
COMMENT THE LAST TWO STATEMENTS USE PSEUDO REGISTER T1,T2 TO 50431000
|
|
SIMULATE PROTECT LOGIC IN MEMORY MODULES; 50432000
|
|
BUF2 ~ D0 + 2; 50433000
|
|
MOVE (M[STACKVECTOR], C); MEMCYCLE; 50434000
|
|
IF CX.PBIT ! 1 THEN I13PRESENCEBIT; 50435000
|
|
NTGR; IF INTFL THEN I2INTEGERIZE; 50436000
|
|
IF B.MANF < 0 OR B.MANF } C.LENGTH THEN I4INVALIDINDEX; 50437000
|
|
BUF2 ~ C.ADDR + B.ADDR; 50438000
|
|
MOVE (M[C.ADDR + B.ADDR], A); MEMCYCLE; 50439000
|
|
% PAGE 34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50440000
|
|
IF AX.PBIT ! 1 THEN 50441000
|
|
BEGIN MOVE (A,C); I13PRESENCEBIT; END; 50442000
|
|
SNR ~ B.ADDR;BROF ~ FALSE; 50443000
|
|
BOSR ~ A.ADDR; TEMP ~ A.ADDR; LOSR ~ A.ADDR + A.LENGTH; 50444000
|
|
C ~ PID; CX.TAG ~ SINGL; 50445000
|
|
MOVE (M[BOSR], T1); MOVE (C, M[BOSR]); MOVE (T1, C); MEMCYCLE; 50446000
|
|
S ~ C.DS + BOSR; F ~ S - C.DF; BUF ~ S - C.DF; LL ~ C.LLF; 50447000
|
|
X.[10:5] ~ LL; NCSF ~ BOOLEAN (C.NBIT); IIHF ~ BOOLEAN(C.NBIT);50448000
|
|
FLTF ~ BOOLEAN (C.FLTFF); TFFF ~ BOOLEAN (C.TFFFF); 50449000
|
|
OFFF ~ BOOLEAN (C.OFFFF); SGNF ~ C.SGNFF; 50450000
|
|
X.LLF ~ LL; 50451000
|
|
GO TO LABELS; % ON PAGE 31 50452000
|
|
% PAGE 35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50453000
|
|
STARTDBTR: 50454000
|
|
ADJ (1,1); 50455000
|
|
IF B.LOBIT ! 1 THEN GO TO L11 50456000
|
|
ELSE GO TO L12; 50457000
|
|
STARTDBFL: 50458000
|
|
ADJ (1,1); 50459000
|
|
IF B.LOBIT = 1 THEN 50460000
|
|
L11: BEGIN AROF ~ FALSE; BROF ~ FALSE; GO TO OC END; 50461000
|
|
L12: BROF ~ FALSE; 50462000
|
|
GO TO LABELB; % ON PA6E 36 50463000
|
|
% PAGE 36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50464000
|
|
STARTDBUN: 50465000
|
|
ADJ (1,2); 50466000
|
|
LABELB: 50467000
|
|
IF AX.TAG = SINGL OR AX.TAG = DOUBL THEN 50468000
|
|
GO TO LABELOPND; % ON PAGE 36 50469000
|
|
MOVE (A,C); 50470000
|
|
L13: IF CX.TAG = IRW THEN 50471000
|
|
BEGIN 50472000
|
|
IF C.EBIT ! 0 THEN 50473000
|
|
BEGIN AROF ~ FALSE; I8SEQUENCEERROR END; 50474000
|
|
MOVE (M[D[LEVEL(C) ] + DELTA(C) ], C);MEMCYCLE; 50475000
|
|
GO TO L13; 50476000
|
|
END; 50477000
|
|
% PAGE 37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50478000
|
|
IF CX.TAG = PCW THEN GO TO PCW2; % ON PAGE 39 50479000
|
|
AROF ~ FALSE; 50480000
|
|
I1INVALIDOPERATOR; 50481000
|
|
% PAGE 38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50482000
|
|
LABELOPND: 50483000
|
|
NTGR; IF INTFL THEN I2INTEGERIZE; 50484000
|
|
IF B.MANF < 0 THEN I9INVALIDINDEX; 50485000
|
|
IF B.MANF } 2097152 THEN I9INVALIDINDEX; 50486000
|
|
IF B.LOBIT = 0 THEN PSR ~ 0 50487000
|
|
ELSE PSR ~ 3; 50488000
|
|
PIR ~ B.[27:20]; PROF ~ FALSE; BROF ~ FALSE; 50489000
|
|
GO TO OC; 50490000
|
|
% PAGE 39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50491000
|
|
PCW2: 50492000
|
|
IF LL ! C.LLF THEN 50493000
|
|
BEGIN AROF ~ FALSE; I8SEQUENCEERROR END; 50494000
|
|
PDR ~ C.SDIF; PSR ~ C.PSRF; PIR ~ C.PIRF; 50495000
|
|
BUF2 ~ D[C.LEVELPCW] + C.DELTAPCW; 50496000
|
|
MOVE (M[D[C.LEVELPCW] + C.DELTAPCW], C); 50497000
|
|
AROF ~ FALSE; 50498000
|
|
IF CX.TAG ! SEGDESC THEN 50499000
|
|
BEGIN QC2F ~ 1; I8SEQUENCEERROR END; 50500000
|
|
IF CX.PBIT ! 1 THEN I12PRESENCEBIT; 50501000
|
|
PBR ~ C.ADDR; PROF ~ FALSE; 50502000
|
|
GO TO OC; 50503000
|
|
% PAGE 40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50504000
|
|
STARTBRTR: 50505000
|
|
ADJ (1,2); 50506000
|
|
IF A.LOBIT ! 1 THEN 50507000
|
|
L14: BEGIN STEPPSR (2); AROF ~ FALSE; GO TO OC END; 50508000
|
|
L15: 50509000
|
|
AROF ~ FALSE; 50510000
|
|
STARTBRUN: 50511000
|
|
C.[32:8] ~ SYLLABLE; STEPPSR(1); C.[40:8] ~ SYLLABLE; 50512000
|
|
PSR ~ C.[32:3]; PIR ~ C.[35:13]; PROF ~ FALSE; 50513000
|
|
GO TO OC; 50514000
|
|
STARTBRFL: 50515000
|
|
ADJ (1,2); 50516000
|
|
IF A.LOBIT = 0 THEN GO TO L15 ELSE GO TO L14; 50517000
|
|
% PAGE 41 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50518000
|
|
STARTSTFF: 50519000
|
|
ADJ (1,2); 50520000
|
|
IF AX.TAG ! IRW THEN 50521000
|
|
BEGIN MOVE (A, C); I1INVALIDOPERATOR END; 50522000
|
|
BUF ~ BUF2 ~ D[LEVEL(A)]; 50523000
|
|
L16: 50524000
|
|
MOVE (M[BUF2], C); 50525000
|
|
IF CX.TAG ! MSCW THEN I8SEQUENCEERROR; 50526000
|
|
IF CX.DSBIT ! 0 THEN 50527000
|
|
BEGIN BUF2 ~ BUF2 - C.DF; GO TO L16 END; 50528000
|
|
A.STKNR ~ C.STKNR; 50529000
|
|
GO TO LABELX; % ON PAGE 18 50530000
|
|
% PAGE 42 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50531000
|
|
LABELW: 50532000
|
|
A.DISP ~ BUF - TEMP; A.ADRCPL ~ DELTA(A); A.EBIT ~ 1; 50533000
|
|
GO TO OC; 50534000
|
|
% PAGE 43 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50535000
|
|
STARTMKST: 50536000
|
|
ADJ (0,0); 50537000
|
|
B ~ BX ~ 0; 50538000
|
|
B.DF ~ S + 1 - F; F ~ S + 1; BX.TAG ~ MSCW; BROF ~ TRUE; 50539000
|
|
ADJ (0,0); 50540000
|
|
GO TO OC; 50541000
|
|
% PAGE 44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SET INTERRUPTS FOR ALL ERVSFLOW50542000
|
|
% SYLLABLE DEPENDENT INTERRUPTS 50543000
|
|
% (NON-PRESENCE BIT) 50544000
|
|
INVOPLBL: 50545000
|
|
ADJ (0,0); 50546000
|
|
B ~ BX ~ 0; 50547000
|
|
B ~ INVOP; 50548000
|
|
GO TO L17; 50549000
|
|
INVINDLBL: 50550000
|
|
ADJ (0,0); 50551000
|
|
B ~ BX ~ 0; 50552000
|
|
B ~ INVINXI; 50553000
|
|
GO TO L17; 50554000
|
|
STKUNFLBL: 50555000
|
|
ADJ (0,0); 50556000
|
|
B ~ BX ~ 0; 50557000
|
|
B ~ STKUNFI; 50558000
|
|
BROF ~ TRUE; 50559000
|
|
GO TO OC; 50560000
|
|
% PAGE 45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50561000
|
|
BOSLBL: 50562000
|
|
ADJ (0,0); 50563000
|
|
B ~ BX ~ 0; 50564000
|
|
B ~ BOSINT; 50565000
|
|
GO TO L17; 50566000
|
|
SEQERLBL: 50567000
|
|
ADJ (0,0); 50568000
|
|
B ~ BX ~ 0; 50569000
|
|
B ~ SEQERRI; 50570000
|
|
L17: PIR ~ PIR - PICR; PSR ~ OPSR; 50571000
|
|
INTLBL: % SET INTERRUPT FOR INTERRUPT CONDITION RECOGNISED WHEN 50572000
|
|
% INTEGERIZE USED AS SUB-OPERATOR IN ERVSFLOW. NOTE THAT 50573000
|
|
% SETTING OF B WITH INTERRUPT ID AND OTHER NECESSARY OPER-50574000
|
|
% ATIONS TOOK PLACE AT TIME INTERRUPT WAS RECOGNISED IN 50575000
|
|
% INTEGERIZE. 50576000
|
|
BROF ~ TRUE; 50577000
|
|
SDIS ~ 1; MOVE (C,A); AROF ~ TRUE; 50578000
|
|
GO TO OC; 50579000
|
|
% PAGE 46 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50580000
|
|
PRES13LBL: 50581000
|
|
ADJ (0,0); 50582000
|
|
PRES11LBL: 50583000
|
|
IF C.CBIT ! 1 THEN 50584000
|
|
BEGIN C.CBIT ~ 1; C.ADDR ~ BUF2 END; 50585000
|
|
MOVE (C,A); 50586000
|
|
PRES10LBL: 50587000
|
|
ADJ (0,0); 50588000
|
|
IF NOT (VALC OR ENTR OR MVST) THEN T1 ~ 1; % CHECK ** 50589000
|
|
PIR ~ PIR - PICR; PSR ~ OPSR; 50590000
|
|
L18: 50591000
|
|
B ~ BX ~ 0; 50592000
|
|
SDIS ~ 1; AROF ~ BROF ~ TRUE; B.SOBIT ~ T1; 50593000
|
|
B.[18:30] ~ PRESBIT; 50594000
|
|
GO TO OC; 50595000
|
|
PRES12LBL: 50596000
|
|
% PAGE 47 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50597000
|
|
IF C.CBIT ! 1 THEN 50598000
|
|
BEGIN C.CBIT ~ 1; C.ADDR ~ BUF2 END; 50599000
|
|
MOVE (C,A); 50600000
|
|
ADJ (0,0); 50601000
|
|
GO TO L18; % ON PAGE 46 50602000
|
|
OC: 50603000
|
|
END ERVSFLOW; 50604000
|
|
PROCEDURE STORE(OP); VALUE OP; REAL OP; 51000000
|
|
COMMENT OP=0: STORE DESTRUCTIVE 51001000
|
|
OP=1: STORE NON-DESTRUCTIVE 51002000
|
|
OP=2: OVERWRITE DESTRUCTIVE 51003000
|
|
OP=3: OVERWRITE NON-DESTRUCTIVE 51004000
|
|
OP=7: READ-WITH-LOCK; 51005000
|
|
BEGIN 51006000
|
|
LABEL EVALDESC,EVALIRW,TRYWRITE,MIXEDTYPECHECK,FIXROFS, 51007000
|
|
LABELF,ACCIDENTALENTRY, 51008000
|
|
OC; 51009000
|
|
DEFINE INVALIDOP = BEGIN INTFAMD(2); GO OC; END#, 51010000
|
|
PRESENCEBIT = BEGIN INTFAMD(8); GO OC END#, 51011000
|
|
INVALIDINDEX= BEGIN INTFAMD(7); GO OC END#, 51012000
|
|
MEMORYPROTECT=BEGIN INTFAMD(6); GO OC END#; 51013000
|
|
DEFINE OVERWRITE = (OP=2 OR OP=3)#, 51014000
|
|
NONDESTRUCTIVE = BOOLEAN(OP)#, 51015000
|
|
DESTRUCTIVE = NOT NONDESTRUCTIVE#, 51016000
|
|
READWITHLOCK = (OP=7)#; 51017000
|
|
%%%%% PAGE 1 %%%%%%%%%%%%%%% 51018000
|
|
ADJ(1,1); 51026000
|
|
IF AX.TAG=SINGL OR AX.TAG=DOUBL THEN EXCH; 51027000
|
|
MOVE(A,C); 51029000
|
|
IF CX.TAG=IRW THEN GO TO EVALIRW; 51030000
|
|
IF CX.TAG!DATADESC OR C.IBIT!1 THEN INVALIDOP; 51031000
|
|
EVALDESC: 51032000
|
|
IF C.RBIT!0 THEN MEMORYPROTECT; 51033000
|
|
IF CX.PBIT!1 THEN PRESENCEBIT; 51034000
|
|
MM~C.INDEX+C.ADDR; 51035000
|
|
TRYWRITE: 51036000
|
|
IF MM + MM > MEMMODS % INVALID ADDRESS CHECK FOR STORES 51036100
|
|
THEN BEGIN 51036200
|
|
SETINTERRUPT (INVADRI); 51036300
|
|
GO OC 51036400
|
|
END; 51036500
|
|
MOVE(M[MM],C); MEMCYCLE; 51037000
|
|
IF OVERWRITE OR READWITHLOCK OR NOT BOOLEAN(CX.TAG) 51038000
|
|
THEN MOVE(B,M[MM]); 51039000
|
|
IF OVERWRITE OR READWITHLOCK THEN GO TO LABELF; 51040000
|
|
%%%%% PAGE 2 %%%%%%%%%%%%%%% 51041000
|
|
CASE CX.TAG OF 51042000
|
|
BEGIN % CASE TYPE 51043000
|
|
; % 0 SINGL 51044000
|
|
GO TO EVALIRW; % 1 IRW 51045000
|
|
; % 2 DOUBL 51046000
|
|
MEMORYPROTECT; % 3 LINKS,CODE,MSCW,RCW,L 51047000
|
|
; % 4 STEP INDEX WORD 51048000
|
|
IF C.IBIT=1 THEN GO EVALDESC ELSE MEMORYPROTECT; % 5 51049000
|
|
; % 6 UNINITIALIZED 51050000
|
|
GO TO ACCIDENTALENTRY; % 7 PCW 51051000
|
|
END; 51052000
|
|
MIXEDTYPECHECK: 51053000
|
|
CASE REAL(CX.TAG=DOUBL)|2 + REAL(BX.TAG=DOUBL) OF 51054000
|
|
BEGIN % C B 51055000
|
|
; % S S 51056000
|
|
BEGIN IF Y.[9:1]=1 THEN B~(B+1)&B[1:1:8]; % S D 51057000
|
|
BX.TAG~0; MOVE(B,M[MM]); MEMCYCLE; % 51058000
|
|
END; % 51059000
|
|
BEGIN BX.TAG~DOUBL; Y~YX~0; YX.TAG~DOUBL; % D S 51060000
|
|
MOVE(B,M[MM ]); MEMCYCLE; % 51061000
|
|
MOVE(Y,M[MM+1]); MEMCYCLE; % 51062000
|
|
END; % 51063000
|
|
BEGIN MOVE(Y,M[MM+1]); MEMCYCLE; % D D 51064000
|
|
END; % 51065000
|
|
END; 51066000
|
|
FIXROFS: 51067000
|
|
AROF~FALSE; 51068000
|
|
BROF~NONDESTRUCTIVE; 51069000
|
|
GO TO OC; 51070000
|
|
LABELF: 51071000
|
|
IF NOT READWITHLOCK THEN GO TO FIXROFS; 51072000
|
|
MOVE(C,A); 51073000
|
|
BROF ~ FALSE; 51073100
|
|
GO TO OC; 51074000
|
|
%%%%% PAGE 3 %%%%%%%%%%%%%%% 51075000
|
|
EVALIRW: 51076000
|
|
IF C.EBIT=0 THEN 51077000
|
|
BEGIN %%%%% NORMAL IRW %%%%% 51078000
|
|
Q02F~1; 51079000
|
|
A.DISP~D[LEVEL(C)] - BOSR; 51080000
|
|
A.STKNR~SNR; 51081000
|
|
TEMP~BOSR; 51082000
|
|
BUF~D[LEVEL(C)]; 51083000
|
|
MM~BUF+DELTA(C); 51084000
|
|
END 51085000
|
|
ELSE 51086000
|
|
BEGIN %%%%% STUFFED IRW %%%%% 51087000
|
|
Q02F~0; 51088000
|
|
MOVE(C,A); 51089000
|
|
IF SNR = C.STKNR THEN TEMP~BOSR 51090000
|
|
ELSE BEGIN 51091000
|
|
MOVE(M[STACKVECTOR],C); MEMCYCLE; 51092000
|
|
IF CX.PBIT=0 THEN PRESENCEBIT; 51093000
|
|
IF C.LENGTH{A.STKNR THEN INVALIDINDEX; 51094000
|
|
MOVE(M[C.ADDR+A.STKNR],C); MEMCYCLE; 51095000
|
|
IF CX.PBIT=0 THEN PRESENCEBIT; 51096000
|
|
TEMP~C.ADDR; 51097000
|
|
END; 51098000
|
|
BUF~TEMP+A.DISP; 51099000
|
|
MM~BUF+A.[35:13]; 51100000
|
|
END; 51101000
|
|
GO TO TRYWRITE; 51102000
|
|
ACCIDENTALENTRY: 51103000
|
|
Q01F~1; 51104000
|
|
NOTYETCODED; 51105000
|
|
OC: 51106000
|
|
END STORE; 51107000
|
|
PROCEDURE ADJ(NEWAROF,NEWBROF); VALUE NEWAROF,NEWBROF; 60000000
|
|
INTEGER NEWAROF,NEWBROF; 60001000
|
|
BEGIN DEFINE 60002000
|
|
PUSHA = 60003000
|
|
BEGIN 60003150
|
|
STKOVFF ~ S ~ S + 1 =LOSR; 60003300
|
|
MOVE(A, M[S]); MEMCYCLE; AROF ~ FALSE; 60004000
|
|
IF AX.TAG = DOUBL 60004300
|
|
THEN BEGIN 60004600
|
|
STKOVFF ~ S ~ S + 1 = LOSR; 60005000
|
|
XX.TAG ~ DOUBL; MOVE(X, M[S]); MEMCYCLE; 60006000
|
|
END 60006300
|
|
END#, 60006600
|
|
PUSHB = 60007000
|
|
BEGIN 60007150
|
|
STKOVFF ~ S ~ S + 1 =LOSR; 60007300
|
|
MOVE(B, M[S]); MEMCYCLE; BROF ~ FALSE; 60008000
|
|
IF BX.TAG = DOUBL 60008300
|
|
THEN BEGIN 60008600
|
|
STKOVFF ~ S ~ S + 1 = LOSR; 60009000
|
|
YX.TAG ~ DOUBL; MOVE(Y, M[S]); MEMCYCLE; 60010000
|
|
END 60010300
|
|
END#, 60010600
|
|
POPA = BEGIN MOVE(M[S],A); S~S-1; MEMCYCLE; AROF~TRUE; 60011000
|
|
IF AX.TAG=DOUBL THEN 60012000
|
|
BEGIN X~A; XX~AX; 60013000
|
|
MOVE(M[S],A); S~S-1; MEMCYCLE; 60014000
|
|
END; 60015000
|
|
END#, 60016000
|
|
POPB = BEGIN MOVE(M[S],B); S~S-1; MEMCYCLE; BROF~TRUE; 60017000
|
|
IF BX.TAG=DOUBL THEN 60018000
|
|
BEGIN Y~B; YX~BX; 60019000
|
|
MOVE(M[S],B); S~S-1; MEMCYCLE; 60020000
|
|
END; 60021000
|
|
END#, 60022000
|
|
ATOB = BEGIN B~A; BX~AX; AROF~FALSE; BROF~TRUE; 60023000
|
|
IF AX.TAG=DOUBL THEN BEGIN Y~x; YX~XX; END; 60024000
|
|
END#, 60025000
|
|
BTOA = BEGIN A~B; AX~BX; AROF~TRUE; BROF~FALSE; 60026000
|
|
IF BX.TAG=DOUBL THEN BEGIN X~Y; XX~YX; END; 60027000
|
|
END#; 60028000
|
|
IF NEWAROF<0 OR NEWAROF>1 OR NEWBROF<0 OR NEWBROF>2 60029000
|
|
THEN BEGIN ERROR(98); GO TO EOJ; END; 60030000
|
|
AROF~AROF AND TRUE; BROF~BROF AND TRUE; 60031000
|
|
CASE (0&NEWAROF[45:47:1]&NEWBROF[43:46:2] 60032000
|
|
&REAL(AROF)[46:47:1]&REAL(BROF)[47:47:1]) OF 60033000
|
|
BEGIN % NEWA NEWB AROF BROF CASE 60034000
|
|
; % 0 0 0 0 0 60035000
|
|
PUSHB; % 0 0 0 1 1 60036000
|
|
PUSHA; % 0 0 1 0 2 60037000
|
|
BEGIN PUSHB; PUSHA; END; % 0 0 1 1 3 60038000
|
|
POPA; % 1 0 0 0 4 60039000
|
|
BTOA; % 1 0 0 1 5 60040000
|
|
; % 1 0 1 0 6 60041000
|
|
PUSHB; % 1 0 1 1 7 60042000
|
|
POPB; % 0 1 0 0 8 60043000
|
|
; % 0 1 0 1 9 60044000
|
|
ATOB; % 0 1 1 0 10 60045000
|
|
BEGIN PUSHB; ATOB; END; % 0 1 1 1 11 60046000
|
|
BEGIN POPA; POPB; END; % 1 1 0 0 12 60047000
|
|
BEGIN BTOA; POPB; END; % 1 1 0 1 13 60048000
|
|
POPB; % 1 1 1 0 14 60049000
|
|
; % 1 1 1 1 15 60050000
|
|
; % 0 2 0 0 16 60051000
|
|
; % 0 2 0 1 17 60052000
|
|
ATOB; % 0 2 1 0 18 60053000
|
|
BEGIN PUSHB; ATOB; END; % 0 2 1 1 19 60054000
|
|
POPA; % 1 2 0 0 20 60055000
|
|
BTOA; % 1 2 0 1 21 60056000
|
|
; % 1 2 1 0 22 60057000
|
|
; % 1 2 1 1 23 60058000
|
|
END; 60059000
|
|
IF NOT (NEWAROF=REAL(AROF) AND (NEWBROF=2 OR 60060000
|
|
NEWBROF=REAL(BROF))) 60061000
|
|
THEN BEGIN ERROR(99); MEMDUMP; GO EOJ END; 60062000
|
|
END ADJ; 60063000
|
|
INTEGER PROCEDURE LEVEL(WORD); VALUE WORD; REAL WORD; 60064000
|
|
BEGIN 60065000
|
|
LEVEL ~ REFLECTION[REAL( 60066000
|
|
BOOLEAN(WORD) AND NOT BOOLEAN(DELTAMASK[LL])60067000
|
|
).[34:5]]; 60068000
|
|
END LEVEL; 60069000
|
|
INTEGER PROCEDURE DELTA(WORD); VALUE WORD; REAL WORD; 60070000
|
|
BEGIN 60071000
|
|
DELTA ~ REAL(BOOLEAN(WORD) AND BOOLEAN(DELTAMASK[LL])); 60072000
|
|
END DELTA; 60073000
|
|
BOOLEAN PROCEDURE INTEGERIZE(ROUND,REG); VALUE ROUND; 60074000
|
|
BOOLEAN ROUND; REAL REG; 60075000
|
|
BEGIN 60076000
|
|
STREAM PROCEDURE M0VE4(S,D); 60077000
|
|
BEGIN SI~S; DI~D; DS~4 WDS; 60078000
|
|
END M0VE4; 60079000
|
|
REAL OWNA,OWNAX,OWNX,OWNXX; 60080000
|
|
INTEGER I; 60081000
|
|
LABEL FINIS; 60082000
|
|
DEFINE MAXNTGR = 549755813887#; 60083000
|
|
M0VE4(REG,OWNA); 60084000
|
|
IF OWNAX.TAG!SINGL AND OWNAX.TAG!DOUBL THEN 60085000
|
|
INTEGERIZE ~ TRUE; 60086000
|
|
IF (INTEGERIZE~ABS(OWNA)>MAXNTGR) THEN GO TO FINIS; 60087000
|
|
IF NOT ROUND THEN 60088000
|
|
I ~ OWNA DIV 1 60089000
|
|
ELSE IF OWNAX.TAG =SINGL THEN 60090000
|
|
I ~ OWNA 60091000
|
|
ELSE % DOUBLE PRECISION ROUNDED CASE 60092000
|
|
BEGIN 60093000
|
|
DOUBLE(OWNA,OWNX,(I~OWNA DIV 1),0,-, 60094000
|
|
~,OWNAX,OWNXX); 60095000
|
|
IF I}0 AND OWNAX}(0.5) THEN 60096000
|
|
BEGIN 60097000
|
|
IF (INTEGERIZE~(I+1)>+(MAXNTGR)) THEN 60098000
|
|
GO TO FINIS; 60099000
|
|
I~I+1; 60100000
|
|
END 60101000
|
|
ELSE IF I<0 AND OWNAX<-(0.5) THEN 60102000
|
|
BEGIN 60103000
|
|
IF (INTEGERIZE~(I-1)<-(MAXNTGR)) THEN 60104000
|
|
GO TO FINIS; 60105000
|
|
I~I-1; 60106000
|
|
END; 60107000
|
|
END; 60108000
|
|
OWNA~1; OWNAX~SINGL+SINGL; MOVE(OWNA,REG); 60109000
|
|
FINIS: 60110000
|
|
END INTEGERIZE; 60111000
|
|
PROCEDURE INITIALIZE; 71000000
|
|
BEGIN 71001000
|
|
FILE CODE DISK SERIAL (2,30); 71002000
|
|
FORMAT ERROR ("EQUATED FILE IS NOT ON DISK. ", 32("X"), //); 71003000
|
|
LABEL EOF; 71004000
|
|
ARRAY JUNK[0:59],JUNK1[0:29]; 71005000
|
|
ARRAY MEMS[0:89]; 71005100
|
|
LABEL EOF1; 71006000
|
|
INTEGER MSTART; 71007000
|
|
STREAM PROCEDURE MOVEN(S,D,N); VALUE N; 71008000
|
|
BEGIN SI~S; DI~D; DS~N WDS END; 71009000
|
|
STREAM PROCEDURE STRIP(J,M); 71010000
|
|
BEGIN LOCAL S,SS; 71011000
|
|
SI~J; DI~M; 71012000
|
|
45(48 BITS; SKIP 31 DB; 16 BITS; SKIP 1 DB); 71013000
|
|
END; 71014000
|
|
STREAM PROCEDURE NFLAG(M); 71015000
|
|
BEGIN SI~M; DI~M; DI~DI+8; DI~DI+7; SKIP 5 DB; 71016000
|
|
1 BITS; DI~DI+4; DI~M; DS~1 RESET; END; 71017000
|
|
SEARCH(CODE,TBUF[*]); 71018000
|
|
IF TBUF[0] > 0 THEN 71019000
|
|
BEGIN 71020000
|
|
MULFILID ~ TBUF[1]; 71020100
|
|
FILID ~ TBUF [2]; 71020200
|
|
MSTART~0; 71021000
|
|
DO BEGIN 71022000
|
|
READ(CODE,30,JUNK[*])[EOF]; 71023000
|
|
READ(CODE,30,JUNK1[*])[EOF1]; 71024000
|
|
MOVEN(JUNK1,JUNK[30],30); 71025000
|
|
EOF1: 71026000
|
|
STRIP(JUNK,MEMS); 71027000
|
|
FOR INTG~0 STEP 2 UNTIL 89 DO 71028000
|
|
BEGIN 71028100
|
|
IF MSTART+INTG/2 > 8191 THEN GO EOF; 71028110
|
|
NFLAG(MEMS[INTG]); 71028200
|
|
MOVE(MEMS[INTG],M[MSTART+INTG/2]); 71028300
|
|
END; 71029000
|
|
MSTART~MSTART+45; 71030000
|
|
END UNTIL FALSE; 71031000
|
|
EOF: 71032000
|
|
END ELSE BEGIN WRITE (LP, ERROR); GO EOF END; 71033000
|
|
71034000
|
|
71035000
|
|
71036000
|
|
71037000
|
|
71038000
|
|
S~8192; PDR~2; SNR~2; 71039000
|
|
SNR ~0; 71040000
|
|
SETINTERRUPT (EXTINTI + 15); 71045000
|
|
P~0&32768[8:28:20]; 71046000
|
|
PX~11; 71047000
|
|
MOVE(P,M[4]); 71048000
|
|
END OF INITIALIZE; 71049000
|
|
PROCEDURE COBOLSIM; % SPECIAL INITIALIZATION FOR COBOL SIMULATION; 71050000
|
|
BEGIN 71051000
|
|
FILE DK DISK SERIAL "SIM" "INPUT" (2,30,150); 71052000
|
|
ARRAY J[0:29]; 71053000
|
|
REAL SZ; 71054000
|
|
INTEGER I,K; 71055000
|
|
STREAM PROCEDURE MV(F,T); 71056000
|
|
BEGIN 71057000
|
|
SI ~ F; DI ~ T; DS ~2 WDS; 71058000
|
|
END MV; 71059000
|
|
READ(DK,30,J[*]); 71060000
|
|
D0 ~ J[0]; 71061000
|
|
D1 ~ J[2]; 71062000
|
|
D2 ~ J[4]; 71063000
|
|
S ~ (D3 ~F ~ J[6]) + 2; 71064000
|
|
LOSR ~ J[8]; 71065000
|
|
BOSR ~ 0; 71066000
|
|
PBR ~ J[10].[28:20]; 71067000
|
|
LL ~ 3; 71068000
|
|
SZ ~ J[10].[8:20]; 71069000
|
|
I ~ -1; WHILE I ~1 +1 { SZ DO 71070000
|
|
BEGIN 71071000
|
|
K ~-2; WHILE K <30 DO 71072000
|
|
MV(J[K ~ K + 2],M[I]); 71073000
|
|
READ(DK,30,J[*]); 71074000
|
|
END; 71075000
|
|
END COBOLSIM; 71076000
|
|
INTEGER PROCEDURE PROTECT (IOAREA, IOCW, RESULT); 71077000
|
|
VALUE IOAREA, IOCW; 71078000
|
|
REAL IOAREA, IOCW, RESULT; 71079000
|
|
BEGIN COMMENT CHECK AN INPUT AREA FOR THE PRESENCE 0F PROTECTED 71080000
|
|
WORDS AND RETURN THE MAXIMUM NUMBER OF WORDS THAT CAN BE 71081000
|
|
WRITTEN T0 MEMORY. PLACE THE ENDING ADDRESS IN THE RESULT71082000
|
|
DESCRIPTOR.; 71083000
|
|
INTEGER WORDS; 71084000
|
|
REAL R, S; 71085000
|
|
LABEL FINISH; 71086000
|
|
IF BOOLEAN (IOCW.IOPBIT) AND BOOLEAN (IOCW.IOWBIT) 71087000
|
|
THEN BEGIN 71088000
|
|
S ~ IOAREA.ADDR +IOAREA.LENGTH; 71089000
|
|
FOR R ~ IOAREA.ADDR + 1.5 STEP 1 UNTIL S DO 71090000
|
|
IF BOOLEAN (M [R].TAG) 71091000
|
|
THEN BEGIN 71092000
|
|
WORDS ~ R - 1.5 -IOAREA.ADDR; 71093000
|
|
RESULT.RSLTPRO ~ 1; 71094000
|
|
GO FINISH; 71095000
|
|
END; 71096000
|
|
END 71097000
|
|
ELSE WORDS ~ IOAREA.LENGTH - 1; 71098000
|
|
FINISH: 71099000
|
|
RESULT.RSLTADRS ~ IOAREA.ADDR + WORDS + 1; 71100000
|
|
PROTECT ~ WORDS; 71101000
|
|
END PROTECT AND ENDING ADDRESS PROCESSING; 71102000
|
|
REAL PROCEDURE GETRESULT (MPXAB); 71103000
|
|
VALUE MPXAB; 71104000
|
|
REAL MPXAB; 71105000
|
|
BEGIN COMMENT GET THE NEXT RESULT DESCRIPTOR FOR MPXAB AND UPDATE 71106000
|
|
FIRSTEVENT, FIRSTEVENTI, CURRENT TIME AND MPX. THE 71107000
|
|
RESULT DESCRIPTOR THAT IS GOTTEN, IS FORGOTTEN.; 71108000
|
|
REAL R; 71109000
|
|
REAL E, L; 71109100
|
|
INTEGER I, J, F; 71110000
|
|
R ~ MPX [I ~ MPXAB + DELTAMPX, J ~ FIRSTEVENTI [MPXAB]]; 71111000
|
|
IF R.RSLTERR ! 0 THEN R.RSLTEXC ~ 1; 71112000
|
|
F ~ FIRSTEVENTI [MPXAB] ~ EVENTS [J].EVLINK; 71113000
|
|
L ~ J; 71113100
|
|
DO L ~ (E ~ EVENTS[L]).EVLINK UNTIL E =0 OR E.EVMPX =MPXAB; 71113200
|
|
IF E !0 AND MPX[MPXAB, L].MPXINT =0 71113300
|
|
THEN MPX[MPXAB, L].MPXINT ~ MPX[MPXAB, J].MPXINT; 71113400
|
|
MPX [I, J] ~ EVENTS [J] ~ 0; 71114000
|
|
FIRSTEVENT [MPXAB] ~ EVENTS [F].EVTIME; 71115000
|
|
CURRENTT ~ FIRSTEVENT [CURRENTMPX ~ IF J ~ FIRSTEVENT [2] = 0 71116000
|
|
OR (I ~ FIRSTEVENT [1] { J AND I ! 0) THEN 1 ELSE 2];71117000
|
|
IF CURRENTT ! 0 AND(CURRENTT < IDLETIME OR IDLETIME = 0) 71118000
|
|
THEN IDLETIME ~ CURRENTT ELSE IDLETIME ~ INTTIMER; 71119000
|
|
MPXOPS [MPXAB] ~ MPXOPS [MPXAB] + 1; 71120000
|
|
IF CURRENTT = 0 THEN LASTEVENT [MPXAB] ~ 0; 71121000
|
|
GETRESULT ~ R; 71122000
|
|
END GETTING RESULT DESCRIPTOR; 71123000
|
|
PROCEDURE PUTRESULT (LUNIT, MPXAB, IOTIME, RESULT); 71124000
|
|
VALUE LUNIT, MPXAB, IOTIME; 71125000
|
|
REAL RESULT; 71126000
|
|
INTEGER LUNIT, MPXAB, IOTIME; 71127000
|
|
BEGIN COMMENT DO THE LINKED LIST UPDATING BASED ON IOTIME (THE TIME71128000
|
|
INCREMENT FOR AN I/O) AND UPDATE CURRENTT AND 71129000
|
|
CURRENTMPX AS REQUIRED. PUT THE RESULT DESCRIPTOR IN71130000
|
|
MPX BASED ON LUNIT AND MPXAB.; 71131000
|
|
INTEGER T, I, J, K; 71132000
|
|
DEFINE EVERYTHING =MPXAB [1:46:2] 71133000
|
|
&1 [6:47:1] % BUSY 71134000
|
|
&I [7:43:5] % EVENT LINK 71135000
|
|
#; 71136000
|
|
IF T~IOTIME}LASTEVENT [MPXAB] % COMMON CASE 71137000
|
|
THEN BEGIN 71138000
|
|
EVENTS [LASTEVENTI[MPXAB]].EVLINK ~ LUNIT; 71139000
|
|
LASTEVENT [MPXAB] ~ T; 71140000
|
|
LASTEVENTI[MPXAB] ~ LUNIT; 71141000
|
|
IF FIRSTEVENT [MPXAB] = 0 71142000
|
|
THEN BEGIN 71143000
|
|
FIRSTEVENT [MPXAB] ~ T; 71144000
|
|
FIRSTEVENTI[MPXAB] ~ LUNIT; 71145000
|
|
END; 71146000
|
|
END 71147000
|
|
ELSE BEGIN 71148000
|
|
I ~ K ~ FIRSTEVENTI [MPXAB]; 71149000
|
|
WHILE EVENTS [I].EVTIME { T 71150000
|
|
DO I ~ EVENTS [J ~ I].EVLINK; 71151000
|
|
IF I = K % T IS EARLIER THAN EARLIEST 71152000
|
|
THEN BEGIN 71153000
|
|
FIRSTEVENTI [MPXAB] ~ LUNIT; 71154000
|
|
FIRSTEVENT [MPXAB] ~ T; 71155000
|
|
J ~ I; 71156000
|
|
END; 71157000
|
|
EVENTS [J].EVLINK ~ LUNIT 71158000
|
|
END; 71159000
|
|
EVENTS [LUNIT] ~ T & EVERYTHING; 71160000
|
|
RESULT.RSLTUNIT ~ LUNIT; 71161000
|
|
MPX [MPXAB + DELTAMPX, LUNIT] ~ RESULT; 71162000
|
|
MPX[MPXAB, LUNIT].MPXINT ~ MPXAB ~ 240; % INTERRUPT LITERAL 71163000
|
|
IF T < CURRENTT OR CURRENTT = 0 71164000
|
|
THEN BEGIN CURRENTT ~ T; CURRENTMPX ~ MPXAB END; 71165000
|
|
IF T < IDLETIME OR IDLETIME =0 THEN IDLETIME ~ T; 71166000
|
|
MPXOPS [MPXAB] ~ MPXOPS [MPXAB] - 1; 71167000
|
|
END SORTING TIME AND RESULT DESCRIPTOR FOR AN IO; 71168000
|
|
PROCEDURE FLAGHANDLE (MESS, MINDEX, WORDS, IOCW); 71169000
|
|
VALUE MINDEX, WORDS, IOCW; 71170000
|
|
INTEGER MINDEX, WORDS; 71171000
|
|
ARRAY MESS [0]; 71172000
|
|
REAL IOCW; 71173000
|
|
BEGIN COMMENT MOVE INPUT FROM WORK AREA (MESS) TO M ARRAY START-71174000
|
|
ING AT MINDEX + 1 AND MOVE THE FLAG BIT TO THE EXTENSION 71175000
|
|
WORD.; 71176000
|
|
INTEGER I, J, K, MI, R, W; 71177000
|
|
INTEGER JDIV, JMOD, TAG, BCD; 71178000
|
|
DEFINE FLAGGER = 71179000
|
|
DI ~ B; DI ~ DI + 15; SKIP 2 DB; 71180000
|
|
SI ~ LOC TAG; SKIP 45 SB; 71181000
|
|
3 BITS; SI ~ A; 71182000
|
|
IF SB THEN DS ~ 1 SET ELSE DS ~ 1 RESET; 71183000
|
|
DI ~ A; DS ~ 1 RESET; SI ~ A; DI ~ B; 71184000
|
|
DS ~ WDS; A ~ SI; DI ~ DI + 8; B ~ DI; #; 71185000
|
|
STREAM PROCEDURE FLAGIN (S, D, JDIV, JMOD, TAG); 71186000
|
|
VALUE JDIV, JMOD, TAG; 71187000
|
|
BEGIN 71188000
|
|
LOCAL A, B; 71189000
|
|
SI ~ S; A ~ SI; DI ~ D; B ~ DI; 71190000
|
|
JMOD (FLAGGER); 71191000
|
|
JDIV (32(FLAGGER)); 71192000
|
|
END; 71193000
|
|
DEFINE TAGGERIN = 71194000
|
|
SKIP BCD SB; 71195000
|
|
DI ~ B; DI ~ DI + 15; SKIP 2 DB; 71196000
|
|
4 BITS; DI ~ B; SKIP DB; 47 BITS; %>RETRO71197000
|
|
DI ~ DI + 8; B ~ DI; #; %>RETRO71198000
|
|
STREAM PROCEDURE TAGIN (M, MESS, JDIV, JMOD, BCD); %>RETRO71199000
|
|
VALUE JDIV, JMOD, BCD; %>RETRO71200000
|
|
BEGIN 71201000
|
|
LOCAL B; 71202000
|
|
SI ~ MESS; DI ~ M; B ~ DI; 71203000
|
|
JMOD (TAGGERIN); 71204000
|
|
JDIV (32(TAGGERIN)); 71205000
|
|
END; 71206000
|
|
DEFINE FLAGGEROUT = 71207000
|
|
SI ~ A; SI ~ SI + 15; SKIP 5 SB; 71208000
|
|
DI ~ A; IF SB THEN DS ~ 1 SET ELSE DS ~ 1 RESET; 71209000
|
|
DI ~ B; SI ~ A; DS ~ WDS; B ~ DI; 71210000
|
|
DI ~ A; DS ~ 1 RESET; 71211000
|
|
SI ~ A; SI ~ SI + 16; A ~ SI;#; 71212000
|
|
STREAM PROCEDURE FLAGOUT (S, D, JDIV, JMOD); 71213000
|
|
VALUE JDIV, JMOD; 71214000
|
|
BEGIN 71215000
|
|
LOCAL A, B; 71216000
|
|
SI ~ S; A ~ SI; DI ~ D; B ~ DI; 71217000
|
|
JMOD (FLAGGEROUT); 71218000
|
|
JDIV (32(FLAGGEROUT)); 71219000
|
|
END; 71220000
|
|
DEFINE TAGGER = 71221000
|
|
SI ~ A; SI ~ SI + 15; SKIP 2 SB; 71222000
|
|
DI ~ B; DS ~ 3 LIT "0"; DI ~ B; SKIP BCD DB;4 BITS;71223000
|
|
SI ~ A; SKIP SB; 47 BITS; SI ~ SI + 8; 71224000
|
|
A ~ SI; B ~ DI;#; 71225000
|
|
STREAM PROCEDURE TAGOUT (M, MESS, JDIV, JMOD, BCD); 71226000
|
|
VALUE JDIV, JMOD, BCD; 71227000
|
|
BEGIN 71228000
|
|
LOCAL A, B; 71229000
|
|
SI ~ M; A ~ SI; DI ~ MESS; B ~ DI; 71230000
|
|
JMOD (TAGGER); 71231000
|
|
JDIV (32(TAGGER)); 71232000
|
|
END; 71233000
|
|
MI ~ MINDEX + 1; 71234000
|
|
W ~ WORDS; 71235000
|
|
TAG ~ IF I ~ IOCW.IOTAGS = 0 THEN SINGL ELSE 71236000
|
|
IF I = 1 THEN CODE ELSE IF I = 3 THEN DOUBL ELSE 4; 71237000
|
|
BCD ~ IF IOCW.IOSBIT = 1 THEN 13 ELSE 9; 71238000
|
|
DO BEGIN 71239000
|
|
I ~ MI MOD ROWLENGTH; 71240000
|
|
J ~ IF (R ~ ROWLENGTH- I) > W THEN W ELSE R; 71241000
|
|
JDIV ~ J DIV 32; 71242000
|
|
JMOD ~ J MOD 32; 71243000
|
|
IF IOCW.IOWBIT = 1 71244000
|
|
THEN BEGIN 71245000
|
|
IF TAG < 4 71246000
|
|
THEN FLAGIN (MESS[K],M[MI],JDIV,JMOD,TAG) 71247000
|
|
ELSE TAGIN (MESS[K],M[MI],JDIV,JMOD,BCD); 71248000
|
|
END 71249000
|
|
ELSE BEGIN 71250000
|
|
IF TAG < 4 71251000
|
|
THEN FLAGOUT (M[MI], MESS[K], JDIV, JMOD) 71252000
|
|
ELSE TAGOUT (M[MI],MESS[K],JDIV,JMOD, BCD);71253000
|
|
END; 71254000
|
|
K ~ K + J; 71255000
|
|
MI ~ MI + J; 71256000
|
|
END UNTIL W ~ W - J { 0; 71257000
|
|
END INPUT FLAG BIT MANIPULATI0NS; 71258000
|
|
INTEGER PROCEDURE MPXTIME(ELTIME,METIME,LUNIT); 71259000
|
|
VALUE ELTIME,METIME,LUNIT; 71260000
|
|
INTEGER ELTIME,METIME,LUNIT; 71261000
|
|
BEGIN 71262000
|
|
IF(EVENTS[LUNIT].EVTIME)<UNITAVAILTIME[LUNIT] 71263000
|
|
AND UNITAVAILTIME[LUNIT]>REALTIME 71264000
|
|
THEN MPXTIME~UNITAVAILTIME[LUNIT]+ELTIME 71265000
|
|
ELSE MPXTIME~REALTIME+ELTIME; 71266000
|
|
IF (EVENTS[LUNIT].EVTIME)=0 71267000
|
|
THEN UNITAVAILTIME[LUNIT]~REALTIME+METIME 71268000
|
|
ELSE UNITAVAILTIME[LUNIT]~EVENTS[LUNIT].EVTIME+METIME; 71269000
|
|
END EVALUATION OF MPXTIME FOR AN IO; 71270000
|
|
PROCEDURE CARDLOAD; 71271000
|
|
BEGIN 71272000
|
|
FILE EDOC DISK SERIAL (2,3,30); 71273000
|
|
DEFINE CODE = EDOC#; 71273100
|
|
FORMAT ERROR ("EQUATED FILE IS NOT ON DISK. ", 32("X"),//); 71274000
|
|
LABEL EOF; 71275000
|
|
SEARCH (CODE, TBUF[*]); 71276000
|
|
IF TBUF[0] > 0 THEN 71277000
|
|
BEGIN 71278000
|
|
READ (CODE, *, PBR, S, D[0]); 71279000
|
|
DO BEGIN 71280000
|
|
READ (CODE, *, MM, A, AX) [EOF]; 71281000
|
|
MOVE (A, M[MM]); 71282000
|
|
END 71283000
|
|
UNTIL FALSE; 71284000
|
|
EOF: 71285000
|
|
END 71286000
|
|
ELSE 71287000
|
|
BEGIN 71288000
|
|
WRITE (LP, ERROR); GO EOF END 71289000
|
|
END; 71290000
|
|
PROCEDURE MULTIPLEXOR; 72000000
|
|
BEGIN COMMENT MULTIPLEXOR IS CALLED WHEN THE PROCESSOR HAS INITIATED72001000
|
|
AN I/O. A SWITCH BASED ON HARDWARE UNIT TYPE IS INVOKED 72002000
|
|
AND THE SIMULATED I/O IS PERFORMED. TIMING CALCULATIONS 72003000
|
|
ARE COMPLETED AND EXCEPTION CONDITIONS ARE NOTED AND THE 72004000
|
|
RESULT DESCRIPTOR IS LINKED INTO THE EVENTS AND MPX ARRAYS72005000
|
|
BASED ON MPX AND TIME. THE A & B REGISTERS ARE ASSUMED T072006000
|
|
BE FULL.; 72007000
|
|
REAL MPXINFO, RESULT, WORDS, EVENTIME; 72008000
|
|
INTEGER LDIV,LMOD,DESC,SKIP,SWFI, ELTIME,METIME; 72009000
|
|
BOOLEAN SPACLP; 72010000
|
|
REAL FUNCD, FUNCDX, IOAD , IOAREAX, IOCW, IOCWX; 72011000
|
|
LABEL AROUND, PUT, CEOF, OC; 72012000
|
|
DEFINE EBCDIC = 6(DI ~ LOC J; SKIP 43 DB; 5 BITS ; 72013000
|
|
DI ~ LOC K; SKIP 45 DB; 3 BITS ; 72014000
|
|
A ~ SI; 72015000
|
|
SI ~ TABLE; 72016000
|
|
J (SI ~ SI + 8); SI ~ SI + K; 72017000
|
|
DI ~ B; DS ~ CHR; B ~ DI; 72018000
|
|
SI ~ A;)#, 72019000
|
|
WORDIV = WORDS.[38:5], WORDS.[43:5]#; 72020000
|
|
STREAM PROCEDURE EBCOUT (MESS, TABLE, WMOD, WDIV); 72021000
|
|
VALUE WMOD, WDIV; 72022000
|
|
BEGIN 72023000
|
|
LOCAL A, B, J, K; 72024000
|
|
SI ~ MESS; A ~ SI; 72025000
|
|
WMOD (EBCDIC); 72026000
|
|
WDIV (32(EBCDIC)); 72027000
|
|
END CONVERSION OF EBCDIC INTERNAL TO BCL GRAPHIC; 72028000
|
|
DEFINE ERROR201 = 72029000
|
|
IF IOAD.LENGTH - 1 > MPXINFO.MPXBUFF 72030000
|
|
THEN BEGIN ERROR (201); GO EOJ END;#, 72031000
|
|
BADUNIT = 72032000
|
|
BEGIN ERROR (200); MEMDUMP; GO EOJ END#; 72033000
|
|
STREAM PROCEDURE BLANK (M, LMOD, LDIV); VALUE LMOD, LDIV; 72034000
|
|
BEGIN DI ~ M; DS ~ 8 LIT " "; SI ~ M; DS~LMOD WDS; 72035000
|
|
LDIV (DS ~ 32 WDS) END; 72036000
|
|
REAL STREAM PROCEDURE NFLAG(WORD); 72037000
|
|
BEGIN SI ~ WORD; DI~ LOC NFLAG; DS ~ 1 WDS; 72038000
|
|
DI ~ DI - 8; DS ~ 1 RESET; 72039000
|
|
END; 72040000
|
|
DEFINE 72041000
|
|
T=PERIPHERALT#, 72042000
|
|
TSKIP=5|MPXINFO.MPXHDWE#; 72043000
|
|
LABEL EOF,PAR; 72044000
|
|
DEFINE READS = IF BOOLEAN(IOCW.IOBBIT) THEN 72045000
|
|
BEGIN 72046000
|
|
READ REVERSE(TAPES[SWFI], 72047000
|
|
MPXINFO.MPXBUFF,MESS[*]) 72048000
|
|
[EOF:PAR]; 72049000
|
|
IF NFLAG(MESS)=TMK THEN GO EOF; 72050000
|
|
MPX[0,FUNCD.LUNIT] ~ 72051000
|
|
MPX[0,FUNCD.LUNIT] - 1; 72052000
|
|
END ELSE 72053000
|
|
BEGIN 72054000
|
|
READ(TAPES[SWFI],MPXINFO. 72055000
|
|
MPXBUFF,MESS[*])[EOF:PAR]; 72056000
|
|
IF NFLAG(MESS)=TMK THEN GO EOF; 72057000
|
|
BUMPIT; 72058000
|
|
END#, 72059000
|
|
TRANSLATE = IF BOOLEAN(IOCW.IOXBIT) THEN 72060000
|
|
BEGIN 72061000
|
|
FLAGHANDLE(MESS,IOAD.ADDR, 72062000
|
|
WORDS,IOCW); 72063000
|
|
IF BOOLEAN(IOCW.IOSBIT)THEN 72064000
|
|
BEGIN 72065000
|
|
EBCOUT(MESS, 72066000
|
|
EBCTOBCL,WORDIV); 72067000
|
|
WORDS ~ ENTIER 72068000
|
|
(WORDS/.75); 72069000
|
|
END; 72070000
|
|
END #, 72071000
|
|
TIMEIT = ELTIME ~ ELTIME + T[TSKIP]; 72072000
|
|
METIME ~ METIME + T[TSKIP + 1] #, 72073000
|
|
BUMPIT = MPX[0,FUNCD.LUNIT] ~ 72074000
|
|
MPX[0,FUNCD.LUNIT] + 1 #, 72075000
|
|
TMK = "}}}}}}}"&"}"[1:43:5] # , 72076000
|
|
TM = [13:1] #; 72077000
|
|
ALPHA STREAM PROCEDURE EXAMIN (NCR); VALUE NCR; 72078000
|
|
BEGIN SI~NCR; DI~LOC EXAMIN; DI~DI+7; DS~CHR; END EXAMIN; 72079000
|
|
INTEGER STREAM PROCEDURE OUTPCVT(ADDR); VALUE ADDR; 72080000
|
|
BEGIN 72081000
|
|
SI ~ LOC ADDR; DI ~ LOC OUTPCVT; DS ~ 8 OCT; 72082000
|
|
END; 72083000
|
|
REAL SAVIOAD, RECNT; 72084000
|
|
LABEL PRINTERS; 72084100
|
|
MOVE (SCANBUSA, FUNCD); 72085000
|
|
MOVE (DATABUSA, IOAD); 72086000
|
|
MOVE (M[IOAD .ADDR ], IOCW); 72087000
|
|
MEMCYCLE; 72087100
|
|
RESULT.RSLTATT ~ IOCW.IOABIT; 72088000
|
|
MPXINFO ~ MPX [FUNCD.MPXFC, FUNCD.LUNIT]; 72089000
|
|
MULTIPLEX ~ FALSE; 72090000
|
|
IF BOOLEAN (IOCW.IOTBIT) % TEST 72091000
|
|
THEN BEGIN 72092000
|
|
A ~ MPX [FUNCD.MPXFC + DELTAMPX, FUNCD.LUNIT]; 72093000
|
|
A.RSLTBSY ~ EVENTS [FUNCD.LUNIT].EVBUSY; 72094000
|
|
AX ~ 0; 72095000
|
|
AROF ~ TRUE; 72096000
|
|
GO OC; 72097000
|
|
END; 72098000
|
|
CASE MPXINFO.MPXHDWE OF 72099000
|
|
BEGIN % INTERNAL NAME CASE72100000
|
|
BADUNIT;% NONE 0 72101000
|
|
BEGIN% DISK 1 72102000
|
|
IF(JUNK~OUTPCVT(IOCW.[20:28])) < 9999 AND JUNK } 0 THEN 72103000
|
|
BEGIN 72104000
|
|
SAVIOAD ~ IOAD; 72105000
|
|
IOAD.LENGTH ~ 60; 72106000
|
|
RECNT ~ 0 ; 72107000
|
|
ERROR201; 72108000
|
|
IF BOOLEAN (IOCW.IOWBIT) 72109000
|
|
THEN DO BEGIN 72110000
|
|
READ (DISKA[JUNK], 60, MESS[*]); 72111000
|
|
WORDS ~ PROTECT (IOAD, IOCW, RESULT); 72112000
|
|
FLAGHANDLE (MESS, IOAD.ADDR, WORDS, 72113000
|
|
IOCW); 72114000
|
|
RECNT ~ RECNT + 1; 72115000
|
|
JUNK ~ JUNK + WORDS; 72116000
|
|
TIMEIT; 72117000
|
|
END UNTIL SAVIOAD.LENGTH { RECNT 72118000
|
|
OR RESULT.[31:17] ! 0 72119000
|
|
ELSE DO BEGIN 72120000
|
|
FLAGHANDLE (MESS, IOAD.ADDR, 60, 72121000
|
|
IOCW); 72122000
|
|
WRITE (DISKA[JUNK], 60, MESS[*]); 72123000
|
|
RECNT ~ RECNT + 1; 72124000
|
|
JUNK ~ JUNK + WORDS; 72125000
|
|
TIMEIT; 72126000
|
|
END UNTIL SAVIOAD.LENGTH { RECNT 72127000
|
|
OR RESULT.[31:17] ! 0 72128000
|
|
END ELSE 72129000
|
|
BEGIN 72130000
|
|
RESULT.RSLTNRY ~ 1; 72131000
|
|
TIMEIT; 72132000
|
|
END; 72133000
|
|
EVENTIME ~ MPXTIME (ELTIME, METIME, FUNCD.LUNIT); 72134000
|
|
END; 72135000
|
|
BEGIN% SPO 2 72136000
|
|
IF TUBA.[9:9]= 0 THEN RESULT.RSLTNRY ~ 1 ELSE 72137000
|
|
BEGIN 72138000
|
|
ERROR201; 72139000
|
|
WORDS ~ PROTECT(IOAD,IOCW,RESULT); 72140000
|
|
IF BOOLEAN(IOCW.IOWBIT) THEN 72141000
|
|
BEGIN % READ 72142000
|
|
IF SPOED THEN 72143000
|
|
BEGIN 72144000
|
|
FLAGHANDLE(CUP,IOAD. 72145000
|
|
ADDR,WORDS,IOCW); 72146000
|
|
SPOED ~ FALSE; 72147000
|
|
END ELSE 72148000
|
|
BEGIN 72149000
|
|
READ(SPO(TUBA) 72150000
|
|
,10,MESS[*]); 72151000
|
|
FLAGHANDLE(MESS,IOAD. 72152000
|
|
ADDR,WORDS,IOCW); 72153000
|
|
END 72154000
|
|
END ELSE 72155000
|
|
BEGIN % WRITE 72156000
|
|
FLAGHANDLE(MESS,IOAD.ADDR, 72157000
|
|
WORDS,IOCW); 72158000
|
|
EBCOUT(MESS,EBCTOBCL,WORDIV); 72159000
|
|
WORDS ~ ENTIER(WORDS / .75); 72160000
|
|
WRITE(SPO(TUBA), 72161000
|
|
10,MESS[*]); 72162000
|
|
END; 72163000
|
|
ELTIME ~ T[TSKIP]; 72164000
|
|
METIME ~ T[TSKIP + 1]; 72165000
|
|
END; 72166000
|
|
END; 72167000
|
|
BEGIN% BIDS 3 72168000
|
|
END; 72169000
|
|
BADUNIT;% 4 72170000
|
|
BADUNIT;% 5 72171000
|
|
BEGIN% LP OR PRINT 6 72172000
|
|
PRINTERS: 72172100
|
|
ERROR201; 72173000
|
|
WORDS ~ PROTECT (IOAD , IOCW, RESULT); 72174000
|
|
IF BOOLEAN (IOCW.IOXBIT) % TRANSLATE 72175000
|
|
THEN BEGIN 72176000
|
|
FLAGHANDLE (MESS, IOAD.ADDR, WORDS, 72177000
|
|
IOCW); 72178000
|
|
IF BOOLEAN (IOCW.IOSBIT) % 8 BIT 72179000
|
|
THEN BEGIN 72180000
|
|
EBCOUT (MESS, EBCTOBCL, WORDIV); 72181000
|
|
WORDS ~ ENTIER (WORDS/.75); 72182000
|
|
END; 72183000
|
|
END 72184000
|
|
ELSE IF NOT BOOLEAN (IOCW.IOIBIT) %MEMORY INHIBIT 72185000
|
|
THEN BEGIN 72186000
|
|
RESULT.RSLTDSC ~ DESC ~ 1; 72187000
|
|
ELTIME~200; METIME~0; GO AROUND; 72188000
|
|
END 72189000
|
|
ELSE BEGIN 72190000
|
|
LDIV ~ (LMOD ~ WORDS ) DIV 32; 72191000
|
|
LMOD ~ LMOD MOD 32 - 1; 72192000
|
|
BLANK (MESS, LMOD, LDIV); 72193000
|
|
END; 72194000
|
|
SWFI ~ MPXINFO.MPXSWFI; 72195000
|
|
IF SKIP ~ IOCW.IOSKIP = 0 72196000
|
|
THEN BEGIN 72197000
|
|
WRITE (LINES[SWFI][NO], WORDS 72198000
|
|
, MESS [*]); 72199000
|
|
SKIP ~ IOCW.IOSPAC; SPACLP ~ TRUE; 72200000
|
|
METIME~METIME+(T[TSKIP+2]+T[TSKIP+3]| 72201000
|
|
(SKIP-1)); 72202000
|
|
WHILE SKIP > 0 72203000
|
|
DO BEGIN 72204000
|
|
WRITE (LINES [SWFI]); 72205000
|
|
SKIP ~ SKIP - 1; 72206000
|
|
END; 72207000
|
|
END 72208000
|
|
ELSE BEGIN 72209000
|
|
WRITE (LINES[SWFI][SKIP], WORDS, 72210000
|
|
MESS [*]); 72211000
|
|
METIME~METIME+T[TSKIP+4]; 72212000
|
|
END; 72213000
|
|
ELTIME~T[TSKIP]; 72214000
|
|
METIME~METIME+T[TSKIP+1]; 72215000
|
|
AROUND: EVENTIME~MPXTIME(ELTIME,METIME,FUNCD.LUNIT); 72216000
|
|
END; 72217000
|
|
BEGIN% LP 7 72218000
|
|
GO PRINTERS; 72218100
|
|
END; 72219000
|
|
BADUNIT;% 8 72220000
|
|
BEGIN% CR 9 72221000
|
|
ERROR201; 72222000
|
|
IF IOCW.IOWBIT = 1 AND (IOCW.IOXBIT = 1 OR 72223000
|
|
IOCW.IOSBIT = 1) 72224000
|
|
THEN BEGIN 72225000
|
|
READ (CARD, MPXINFO.MPXBUFF,MESS[*])[CEOF];72226000
|
|
RESULT.RSLTVY ~ REAL (EXAMIN(NCR)= "~"); 72227000
|
|
RESULT.RSLTCC ~ RESULT.RSLTVY; 72228000
|
|
WORDS ~ PROTECT (IOAD , IOCW, RESULT); 72229000
|
|
FLAGHANDLE (MESS, IOAD.ADDR, WORDS, IOCW); 72230000
|
|
ELTIME~T[TSKIP]; 72231000
|
|
METIME~T[TSKIP+1]; 72232000
|
|
GO PUT; 72233000
|
|
END 72234000
|
|
ELSE BEGIN 72235000
|
|
RESULT.RSLTDSC ~ 1; 72236000
|
|
ELTIME~200; METIME~0; 72237000
|
|
GO PUT; 72238000
|
|
END; 72239000
|
|
CEOF:RESULT.RSLTNRY ~ 1; 72240000
|
|
ELTIME~200; METIME~0; 72241000
|
|
PUT: EVENTIME~MPXTIME(ELTIME,METIME,FUNCD.LUNIT); 72242000
|
|
END; 72243000
|
|
BEGIN% CP 1072244000
|
|
END; 72245000
|
|
BADUNIT;% 1172246000
|
|
BADUNIT;% 1272247000
|
|
BEGIN% MT 1372248000
|
|
ELTIME ~ METIME ~ 0; 72249000
|
|
SWFI ~ MPXINFO.MPXSWFI; 72250000
|
|
CASE 0&IOCW[46:3:2] OF 72251000
|
|
BEGIN 72252000
|
|
% % % % WRITES % % % % 72253000
|
|
IF BOOLEAN(IOCW.TM) THEN 72254000
|
|
BEGIN 72255000
|
|
WRITE(TAPES[SWFI],*,TMK); 72256000
|
|
TIMEIT; 72257000
|
|
BUMPIT; 72258000
|
|
END ELSE 72259000
|
|
BEGIN 72260000
|
|
ERROR201; 72261000
|
|
WORDS ~ PROTECT(IOAD,IOCW,RESULT)72262000
|
|
;TRANSLATE; 72263000
|
|
WRITE(TAPES[SWFI],WORDS,MESS[*]);72264000
|
|
TIMEIT; 72265000
|
|
BUMPIT; 72266000
|
|
END; 72267000
|
|
% % REWIND OR ERASE % % 72268000
|
|
IF BOOLEAN(IOCW.IOBBIT) THEN 72269000
|
|
BEGIN 72270000
|
|
INTG ~ MPX[0,FUNCD.LUNIT]; 72271000
|
|
ELTIME ~ T[TSKIP]; 72272000
|
|
FOR JUNK~1 STEP 1 UNTIL INTG DO 72273000
|
|
BEGIN 72274000
|
|
READ REVERSE(TAPES 72275000
|
|
[SWFI],1,MESS[*]) 72276000
|
|
[EOF:PAR]; 72277000
|
|
IF NFLAG(MESS)=TMK THEN GO EOF; 72278000
|
|
GO TO EOF; 72279000
|
|
MPX[0,FUNCD.LUNIT] ~ 72280000
|
|
MPX[0,FUNCD.LUNIT] -1; 72281000
|
|
METIME ~ METIME + 72282000
|
|
T[TSKIP + 1]; 72283000
|
|
END; 72284000
|
|
RESULT.RSLTRW ~ 1; 72285000
|
|
END ELSE 72286000
|
|
BEGIN TIMEIT END; 72287000
|
|
% % % % READS % % % % 72288000
|
|
BEGIN 72289000
|
|
ERROR201; 72290000
|
|
READS; 72291000
|
|
IF FALSE THEN 72292000
|
|
PAR: 72293000
|
|
BEGIN 72294000
|
|
RESULT.RSLTMA ~ 1; 72295000
|
|
RESULT.RSLTCC ~ 1; 72296000
|
|
RESULT.RSLTOF ~ 1; 72297000
|
|
END; 72298000
|
|
WORDS ~ PROTECT(IOAD,IOCW,RESULT); 72299000
|
|
FLAGHANDLE(MESS,IOAD.ADDR,WORDS,IOCW);72300000
|
|
TIMEIT; 72301000
|
|
END; 72302000
|
|
% % % % SPACE % % % % 72303000
|
|
BEGIN 72304000
|
|
IF (INTG~IOCW.RECS) =0 THEN INTG~100; 72305000
|
|
FOR JUNK~1 STEP 1 UNTIL INTG DO 72306000
|
|
BEGIN 72307000
|
|
READS; 72308000
|
|
TIMEIT; 72309000
|
|
END; 72310000
|
|
END; 72311000
|
|
END; 72312000
|
|
IF FALSE THEN 72313000
|
|
EOF: BEGIN 72314000
|
|
RESULT.RSLTVY ~ 1; 72315000
|
|
RESULT.RSLTNRY~ 1; 72316000
|
|
TIMEIT; 72317000
|
|
END; 72318000
|
|
EVENTIME ~ MPXTIME(ELTIME,METIME,FUNCD.LUNIT); 72319000
|
|
END; 72320000
|
|
END; 72321000
|
|
PUTRESULT (FUNCD.LUNIT, FUNCD.MPXFC, EVENTIME , RESULT); 72322000
|
|
OC: 72323000
|
|
END MULTIPLEXOR; 72324000
|
|
PROCEDURE NEXTEVENT; 72325000
|
|
BEGIN COMMENT NEXTEVENT WORRIES ABOUT INTERRUPT PRIORITIES AND SETS72326000
|
|
APPROPRIATE INTERRUPTS. PRIORITY (HIGH TO LOW) IS 72327000
|
|
ALARM, SYLLABLE-DEPENDENT, CONTROL AND EXTERNAL. 72328000
|
|
SOME FUNCTIONS OF INTERRUPT CONTROL ARE HANDLED. 72329000
|
|
; 72330000
|
|
IF ABORTTIME { REALTIME 72331000
|
|
THEN BEGIN 72332000
|
|
END 72333000
|
|
ELSE IF IDLETIME { REALTIME AND SDIS + GCIF = 0 72334000
|
|
72335000
|
|
THEN BEGIN 72336000
|
|
IF INTTIMER { REALTIME 72337000
|
|
THEN BEGIN 72338000
|
|
SETINTERRUPT (INTTIMI); 72338500
|
|
INTTIMER ~ 2*36; 72339000
|
|
IDLETIME ~ CURRENTT; 72339050
|
|
END 72339500
|
|
ELSE IF NOT IIHF 72340000
|
|
AND CURRENTT { REALTIME 72340100
|
|
AND CURRENTT ! 0 72340200
|
|
THEN BEGIN 72341000
|
|
SETINTERRUPT (EXTINTI + CURRENTMPX); 72342000
|
|
CURRENTT ~ 0; 72342500
|
|
IDLETIME ~ INTTIMER; 72342600
|
|
END; 72343000
|
|
END; 72344000
|
|
END OF NEXT EVENT; 72345000
|
|
PROCEDURE SIMULATOR; 73000000
|
|
BEGIN COMMENT THIS IS THE PRINCIPAL DRIVER FOR THE SIMULATOR. ;73001000
|
|
LABEL NDIN; 73002000
|
|
CASE DISKLOAD OF 73003000
|
|
BEGIN 73004000
|
|
INITIALIZE; % ESPOL 73005000
|
|
CARDLOAD; % ALGOL 73006000
|
|
COBOLSIM; % COBOL 73007000
|
|
END; 73008000
|
|
73009000
|
|
73010000
|
|
TBUF[16]:=MKABS(TBUF); 73010100
|
|
ABORTTIME ~ INTTIMER ~ 2*36; 73010200
|
|
IF DISKLOAD = 0 THEN INTTIMER ~ 2*36 73010300
|
|
ELSE IDLETIME ~ 2*36; 73010400
|
|
NCR ~ MKABS (MESS); 73010500
|
|
D31 ~ MONITORVALUE & MONITORMASK[28:38:10]; 73010600
|
|
DO BEGIN 73011000
|
|
IF INT ! 0 73012000
|
|
THEN INTERRUPTCONTROLLER 73013000
|
|
ELSE BEGIN 73014000
|
|
CONTROLSECTION; 73015000
|
|
TRACE; 73016000
|
|
END; 73017000
|
|
IF MONITORVALUE! MONITORMASKOLD 73017100
|
|
THEN D31 ~ MONITORMASKOLD ~ MONITORVALUE; 73017200
|
|
IF MULTIPLEX THEN MULTIPLEXOR; 73018000
|
|
NEXTEVENT; 73019000
|
|
IF TUBA.[9:9]=0 THEN ELSE 73020000
|
|
IF SPOED THEN ELSE 73021000
|
|
BEGIN 73022000
|
|
READ(SPO(TUBA,1),10,CUP[*])[NDIN]; 73023000
|
|
SPOED ~ TRUE; 73024000
|
|
NDIN: 73025000
|
|
END; 73026000
|
|
END UNTIL FALSE; 73027000
|
|
END SIMULATOR CONTROL; 73028000
|
|
PROCEDURE TRACE; 74000000
|
|
BEGIN 74001000
|
|
LABEL EXIT; 74002000
|
|
STREAM PROCEDURE PBIS(SYLL,PBR,PIR,PSR,TANK); 74003000
|
|
VALUE SYLL,PBR,PIR,PSR,TANK; 74004000
|
|
BEGIN 74005000
|
|
DI:=TANK; SI:=LOC SYLL;SI:=SI+4; DS:=4 CHR; DS:=4 LIT" "; 74006000
|
|
DS:=12 LIT ""PBR:PIR:PSR"; DS:=3 LIT ""= "; 74007000
|
|
2(SI:=SI+4; 8(DS:=3 RESET; 3 BITS); DS:= LIT ":"); 74008000
|
|
SI:=SI+7; DS:=CHR; 2(DS:=39 LIT " "); 74009000
|
|
END OF PBIS; 74010000
|
|
REAL STREAM PROCEDURE OCTIZE(TAG1,WD1,TAG2,WD2,DBLE,TANK); 74011000
|
|
VALUE TAG1,WD1,TAG2,WD2,DBLE,TANK; 74012000
|
|
BEGIN 74013000
|
|
DI:=TANK; SI:=LOC TAG1; 74014000
|
|
DBLE(SKIP 44 SB; DS:=3 RESET; 3 BITS; DS:=LIT " "; 74015000
|
|
DS:=3 RESET; 1 BITS; SKIP SB; 2 BITS; 74016000
|
|
7(DS:=3 RESET; 3 BITS); DS:=LIT " "; 74017000
|
|
8(DS:=3 RESET; 3 BITS); DS:=2 LIT " "); 74018000
|
|
OCTIZE:= DI; 74019000
|
|
END OF OCTIZE; 74020000
|
|
STREAM PROCEDURE BLANK(TANK); 74021000
|
|
VALUE TANK; 74022000
|
|
BEGIN LOCAL T; 74023000
|
|
DI:=TANK; T:=DI; DS:=8 LIT " "; SI:=T; DS:=14 WDS; 74024000
|
|
END OF BLANK; 74025000
|
|
PROCEDURE TOS; 74026000
|
|
BEGIN 74027000
|
|
FORMAT TOSREG(X8,"AREG",X17,"XREG",X17,"BREG",X17,"YRE6"); 74028000
|
|
BLANK(TANK); 74029000
|
|
WRITE(LP,TOSREG); 74030000
|
|
IF AROF THEN 74031000
|
|
TANK:=OCTIZE(AX,A,XX,X,2,TANK); 74032000
|
|
IF BROF THEN 74033000
|
|
TANK:=OCTIZE(BX,B,YX,Y,2,TANK+65541|(REAL(NOT AROF)).[47:1]); 74034000
|
|
PRINT; 74035000
|
|
END OF TOS; 74036000
|
|
PROCEDURE REGISTER(TAGE,WORDE,FMTE); 74037000
|
|
VALUE TAGE,WORDE,FMTE; 74038000
|
|
REAL TAGE,WORDE,FMTE; 74039000
|
|
BEGIN 74040000
|
|
SWITCH FORMAT REGS:= 74041000
|
|
("C = "), 74042000
|
|
("P = "); 74043000
|
|
REAL STREAM PROCEDURE SYLLABLIZE(PX,P,TANK); VALUE PX,P,TANK; 74044000
|
|
BEGIN 74045000
|
|
DI~ TANK; SI~ LOC PX; 74046000
|
|
SKIP 44 SB; DS~ 3 RESET; 3 BITS; DS~ LIT " "; 74047000
|
|
DS~ 4 RESET; 1 BITS; SKIP SB; 1 BITS; 74048000
|
|
2(DS~ 3 RESET; 3 BITS); DS~ LIT " "; 74049000
|
|
5(DS~4 RESET; 2 BITS; 2(DS~3RESET; 3 BITS);DS~LIT" "); 74050000
|
|
END; 74051000
|
|
TANK:=TBUF[16]; 74052000
|
|
WRITE(LP[NO],REGS[FMTE]); 74053000
|
|
BLANK(TANK); 74054000
|
|
IF FMTE=0 THEN TANK~OCTIZE(TAGE,WORDE,0,0,1,TANK+1) ELSE 74055000
|
|
IF FMTE=1 AND PROF THEN TANK~SYLLABLIZE(TAGE,WORDE,TANK+1); 74056000
|
|
PRINT; 74057000
|
|
END OF REGISTER; 74058000
|
|
STREAM PROCEDURE OCTAL(TANK,DPLAY,WRDS); 74059000
|
|
VALUE TANK,WRDS; 74060000
|
|
BEGIN 74061000
|
|
DI~TANK; SI~DPLAY; 74062000
|
|
WRDS(SI:=SI+5; 6(DS:= 3 RESET; 3 BITS); DS:=2 LIT " "; ); 74063000
|
|
END OF OCTAL; 74064000
|
|
PROCEDURE DISPLAY; 74065000
|
|
BEGIN 74066000
|
|
FORMAT DREGS("DISPLAY REGISTERS 0 THROUGH ",I2," LL= ",I2); 74067000
|
|
DEFINE N=NDISPLAY#; 74068000
|
|
INTEGER I,LINES,NMOD15; 74069000
|
|
INTEGER DPLAID; 74070000
|
|
TANK:=TBUF[16]; 74071000
|
|
IF N=0 THEN N:=DPLAID:=31; 74072000
|
|
WRITE(LP,DREGS,N-1,LL); 74073000
|
|
LINES:= N DIV 15; 74074000
|
|
FOR I:=1 STEP 1 UNTIL LINES DO 74075000
|
|
BEGIN 74076000
|
|
BLANK(TANK); 74077000
|
|
OCTAL(TANK,D[(I-1)|15],15); 74078000
|
|
PRINT; 74079000
|
|
END; 74080000
|
|
IF (NMOD15:=N MOD 15)!0 THEN 74081000
|
|
BEGIN 74082000
|
|
BLANK(TANK); 74083000
|
|
OCTAL(TANK,D[LINES|15], NMOD15 ); 74084000
|
|
PRINT; 74085000
|
|
END; 74086000
|
|
IF DPLAID!0 THEN N:=0; 74087000
|
|
END OF DISPLAY; 74088000
|
|
OWN BOOLEAN ASTERICKS; 74089000
|
|
PROCEDURE STACK; 74090000
|
|
BEGIN 74091000
|
|
BOOLEAN STREAM PROCEDURE NOTZERO(ADDR); VALUE ADDR; 74092000
|
|
BEGIN LOCAL L1,L2,L3; 74093000
|
|
DI:=LOC L3; DS:=21 LIT"0 OOOOOOOO 00000000 "; SI:=ADDR; 74094000
|
|
4(DI:=LOC L3;SI:=SI+1; DI:=DI+1; 74095000
|
|
IF 20 SC!DC THEN BEGIN TALLY:=1; JUMP OUT END); 74095100
|
|
NOTZERO:=TALLY; 74096000
|
|
END OF NOTZERO; 74097000
|
|
STREAM PROCEDURE STARS(ADDR); VALUE ADDR; 74098000
|
|
BEGIN LOCAL T; 74099000
|
|
DI:=ADDR; DS:=21 LIT "* ******** ******** "; 74100000
|
|
SI:=ADDR; 3(DS:=21 CHR); 74101000
|
|
END OF STARS; 74102000
|
|
FORMAT STACKS("STACK CONTENTS WORD F TO F+",I6,X4,"S= ",O, 74103000
|
|
" F= ",O," BOSR= ",O," LOSR= ",O); 74104000
|
|
DEFINE N=NSTACK#; 74105000
|
|
REAL T,T1; INTEGER I,LINES,J; 74106000
|
|
INTEGER ISTACK; 74107000
|
|
STREAM PROCEDURE OCTL(A,B,C,D,E); VALUE A,B,C,D,E; 74108000
|
|
BEGIN DI~A; SI~LOC B; 4(SI~SI+4; 8(DS~3RESET; 3 BITS))END; 74109000
|
|
TANK:=TBUF[16]; 74110000
|
|
IF N=0 THEN N:=ISTACK:= S-F+1; 74111000
|
|
OCTL(TANK,S,F,BOSR,LOSR); 74112000
|
|
WRITE(LP,STACKS,N-1,TBUF[0],TBUF[1],TBUF[2],TBUF[3]); 74113000
|
|
LINES:=N DIV 4; 74114000
|
|
FOR I:=1 STEP 1 UNTIL LINES DO 74115000
|
|
BEGIN 74116000
|
|
TANK:= TBUF[16]; 74117000
|
|
BLANK(TANK); 74118000
|
|
FOR J:=0 STEP 1 UNTIL 3 DO 74119000
|
|
BEGIN 74120000
|
|
MOVE(M[(F+J)+(I-1)|4],T); 74121000
|
|
TANK:=OCTIZE(T1,T,0,0,1,TANK); 74122000
|
|
END; 74123000
|
|
IF NOTZERO(TBUF[16]) THEN 74124000
|
|
BEGIN ASTERICKS:=FALSE; PRINT END ELSE 74125000
|
|
IF NOT ASTERICKS THEN 74126000
|
|
BEGIN STARS(TBUF[16]); PRINT; 74127000
|
|
ASTERICKS:=TRUE; WRITE(LP); 74128000
|
|
END; 74129000
|
|
END; 74130000
|
|
IF (I:=N MOD 4)!0 THEN 74131000
|
|
BEGIN 74132000
|
|
TANK:= TBUF[16]; 74133000
|
|
BLANK(TANK); 74134000
|
|
FOR J:=1 STEP 1 UNTIL I DO 74135000
|
|
BEGIN 74136000
|
|
MOVE(M[(F+(J-1))+ LINES|4],T); 74137000
|
|
TANK:=OCTIZE(T1,T,0,0,1,TANK); 74138000
|
|
END; 74139000
|
|
PRINT; 74140000
|
|
END; 74141000
|
|
IF ISTACK!0 THEN N:=0; 74142000
|
|
END OF STACK; 74143000
|
|
LABEL NONE; 74144000
|
|
FORMAT TOGS ( X43,"VARF = ",I1," , LEEF = ",I1," , TEEF = ",I1, 74145000
|
|
" , SEEE = ",I1," , NCSE = ",I1," UPDF s ",I1 74146000
|
|
); 74147000
|
|
INTEGER REALTI; 74148000
|
|
MONITOR LP (REALTI); 74149000
|
|
NONE: 74150000
|
|
ASTERICKS:=FALSE; 74151000
|
|
TANK:=TBUF[16]; 74152000
|
|
IF TRACEWORD = 0 OR ( TRACEWORD > 100 AND TRACTER=0) THEN 74153000
|
|
GO TO EXIT; 74154000
|
|
HEADING; 74155000
|
|
IF TS1=0 THEN JUNK:=MNEMONIC[0,T] 74156000
|
|
ELSE IF VARF THEN JUNK:=MNEMONIC[1,T] 74157000
|
|
ELSE JUNK~ MNEMONIC[2,T]; 74158000
|
|
WRITE(LP[NO],TOGS,REAL(VARF),REAL(LEEF),REAL(TEEF),REAL(SEEF), 74159000
|
|
REAL(NCSF),REAL(UPDF)); 74160000
|
|
PBIS(JUNK,PBR,PIR,PSR,TANK); 74161000
|
|
PRINT; 74162000
|
|
REALTI ~ REALTIME; 74163000
|
|
TANK:= TBUF[16]; 74164000
|
|
IF (JUNK~TRACEWORD) } 100 THEN 74165000
|
|
JUNK ~ TRACTER; 74166000
|
|
CASE JUNK OF 74167000
|
|
BEGIN 74168000
|
|
; 74169000
|
|
TOS; % TRACE OF A,X,B,Y REGISTERS 74170000
|
|
REGISTER(CX,C,0); % TRACE OF C REGISTER 74171000
|
|
REGISTER(PX,P,1); % TRACE OF P REGISTER 74172000
|
|
DISPLAY; % TRACE 0F N DISPLAY REGISTERS 74173000
|
|
STACK; % TRACE 0F N WORDS IN THE STACK 74174000
|
|
BEGIN TOS; REGISTER(CX,C,0) END; % 6 74175000
|
|
BEGIN TOS; REGISTER(PX,P,1) END; % 7 74176000
|
|
BEGIN TOS; DISPLAY END; % 8 74177000
|
|
BEGIN TOS; STACK END; % 9 74178000
|
|
BEGIN TOS; REGISTER(CX,C,0); REGISTER(PX,P,1) END; % 10 74179000
|
|
BEGIN TOS; REGISTER(CX,C,0); DISPLAY END; % 11 74180000
|
|
BEGIN TOS; REGISTER(CX,C,0); STACK END; % 12 74181000
|
|
BEGIN TOS; REGISTER(PX,P,1); DISPLAY END; % 13 74182000
|
|
BEGIN TOS; REGISTER(PX,P,1); STACK END; % 14 74183000
|
|
BEGIN TOS; DISPLAY; STACK END; % 15 74184000
|
|
BEGIN TOS; REGISTER(CX,C,0); REGISTER(PX,P,1); DISPLAY END;%16 74185000
|
|
BEGIN TOS; REGISTER(CX,C,0); REGISTER(PX,P,1); STACK END; % 17 74186000
|
|
BEGIN TOS; REGISTER(CX,C,0); REGISTER(PX,P,1); 74187000
|
|
DISPLAY;STACK; 74188000
|
|
END; % 18 74189000
|
|
MEMDUMP; % 19 74190000
|
|
BEGIN LABEL DUMPER; %%%%%%%%%%%%%%% 74191000
|
|
DUMP LP (MPX, FIRSTEVENT, LASTEVENT, FIRSTEVENTI, LASTEVENTI, 74192000
|
|
CURRENTT,UNITAVAILTIME,EVENTS,CURRENTMPX,MPXOPS, 74193000
|
|
BUFRMAX)DUMPER:1; 74194000
|
|
DUMPER: END; 74195000
|
|
END; 74196000
|
|
WRITE(LP); 74197000
|
|
EXIT: 74198000
|
|
END OF TRACE; 74199000
|
|
PROCEDURE MEMDUMP; 75000000
|
|
BEGIN 75001000
|
|
INTEGER ADDRESS,I,ROW,J,WRDS,TANK; 75002000
|
|
INTEGER SAVETRACEWORD,SAVEN,SAVENN; 75003000
|
|
BOOLEAN ASTERICKS; 75004000
|
|
ARRAY MD[0:9]; 75005000
|
|
ARRAY XMD[0:9]; 75005100
|
|
DEFINE N= NDISPLAY#, NN=NSTACK#; 75006000
|
|
STREAM PROCEDURE OCTIZE(LOCM,ADDR,WRDS,BLK,TANK); 75007000
|
|
VALUE LOCM,WRDS,BLK,TANK; 75008000
|
|
BEGIN 75009000
|
|
DI:=TANK; DS:=4 LIT " "; SI:=LOC LOCM; SI:=SI+4; 75010000
|
|
8(DS:=3 RESET; 3 BITS); DS:=3 LIT " "; 75011000
|
|
SI:=ADDR; 75012000
|
|
WRDS(SKIP 44 SB; DS:=3 RESET; 3 BITS; DS:=LIT " "; 75013000
|
|
DS:=3 RESET; 1 BITS; SKIP SB; 2 BITS; 75014000
|
|
7(DS:=3 RESET; 3 BITS); DS:=LIT " "; 75015000
|
|
8(DS:=3 RESET; 3 BITS); DS:=2 LIT " "); 75016000
|
|
BLK(2(DS:=42 LIT " " )); 75017000
|
|
END OF OCTIZE; 75018000
|
|
BOOLEAN STREAM PROCEDURE NOTSAME(XMD,MD,WRDS); 75019000
|
|
VALUE WRDS; 75020000
|
|
BEGIN LOCAL RPF; 75021000
|
|
SI ~ XMD; DI ~ MD; 75022000
|
|
WRDS(IF 8 SC!DC THEN BEGIN TALLY~1; JUMP OUT END); 75022100
|
|
NOTSAME~ TALLY; RPF ~ TALLY; 75023000
|
|
RPF(SI~MD; DI~XMD; DS~WRDS WDS); 75024000
|
|
END; 75027000
|
|
STREAM PROCEDURE STARS(LOCM,TANK); 75028000
|
|
VALUE LOCM,TANK; 75029000
|
|
BEGIN 75030000
|
|
LOCAL T; 75031000
|
|
DI:=TANK; DS:=4 LIT " "; SI:=LOC LOCM; SI:=SI+4; 75032000
|
|
8(DS:=3 RESET; 3 BITS); DS:=3 LIT " "; 75033000
|
|
T:=DI; DS:=21 LIT "* ******** ******** "; 75034000
|
|
SI:=T; 4(DS:=21 CHR); 75035000
|
|
END OF STARS; 75036000
|
|
STREAM PROCEDURE MOVIT(HERE,THERE,WORDS); 75037000
|
|
VALUE WORDS; 75038000
|
|
BEGIN 75039000
|
|
SI:=HERE; DI:=THERE; SI:=SI+8; 75040000
|
|
WORDS(DS:=WDS; SI:=SI+8; DI:=DI+8); 75041000
|
|
SI:=HERE; DI:=THERE; DI:=DI+8; 75042000
|
|
WORDS(DS:=WDS; SI:=SI+8; DI:=DI+8;); 75043000
|
|
END OF MOVIT; 75044000
|
|
SAVETRACEWORD:=TRACEWORD; SAVEN:=N; SAVENN:=NN; 75045000
|
|
TRACEWORD:=18; N:=32; NN:=99; 75046000
|
|
TRACE; 75047000
|
|
ADDRESS:=0; ASTERICKS:=FALSE; 75048000
|
|
TANK:=TBUF[16]; 75049000
|
|
FOR I ~ 0 STEP 256 UNTIL (MEMMODS + 1) DIV 2 - 1 DO 75050000
|
|
BEGIN 75051000
|
|
FOR J:=0 STEP 5 UNTIL 255 DO 75052000
|
|
BEGIN 75053000
|
|
WRDS:= IF J=255 THEN 1 ELSE 5; 75054000
|
|
MOVIT(M[I+J],MD, WRDS); 75055000
|
|
IF NOTSAME(XMD,MD,2|WRDS)THEN 75056000
|
|
BEGIN 75057000
|
|
OCTIZE(ADDRESS, MD ,WRDS,WRDS!5,TANK); 75058000
|
|
PRINT; 75059000
|
|
ASTERICKS:=FALSE; 75060000
|
|
END ELSE 75061000
|
|
IF NOT ASTERICKS THEN 75062000
|
|
BEGIN 75063000
|
|
STARS(ADDRESS,TANK); 75064000
|
|
PRINT; 75065000
|
|
ASTERICKS:=TRUE; 75066000
|
|
WRITE(LP); 75067000
|
|
END; 75068000
|
|
ADDRESS:=ADDRESS+WRDS; 75069000
|
|
END; 75070000
|
|
IF NOT ASTERICKS THEN 75071000
|
|
WRITE(LP); 75072000
|
|
END; 75073000
|
|
TRACEWORD:=SAVETRACEWORD; N:=SAVEN; NN:=SAVENN; 75074000
|
|
END OF MEMDUMP; 75075000
|
|
PROCEDURE ERROR(ERRNUM); VALUE ERRNUM; REAL ERRNUM; 76000000
|
|
BEGIN 76001000
|
|
FORMAT ERR("ERROR # ",I3,X2,107("X")); 76002000
|
|
TRACE; 76003000
|
|
WRITE(LP,ERR,ERRNUM); 76004000
|
|
END ERROR; 76005000
|
|
PROCEDURE HEADINGLINE (LP); FILE LP; 77000000
|
|
BEGIN 77001000
|
|
ARRAY DAYS[0:6], MONTHS[0:23]; 77002000
|
|
INTEGER I,Q,P,DAY,MONTH,DATE,YEAR,HOURS,MINUTES; 77003000
|
|
FORMAT CONF (X14, 77004000
|
|
" CLOCK RATE NUMBER OF OPERATIONS/MPX ", 77005000
|
|
" MEMORY SPEED MEMORY SIZE",/, X14, 77006000
|
|
" (MEGACYCLES) MULTIPLEXORS A B ", 77007000
|
|
"(MICROSECONDS) (16K MODULES)", 77008000
|
|
/, X14, I9, X3, I10, I11, I7, X11, 77009000
|
|
F3.1, X9 , I3,/), 77010000
|
|
CABH (X14, 77011000
|
|
" LOGICAL UNIT HARDWARE TYPE MULTIPLEXOR", 77012000
|
|
" BUFFER LENGTH WRITE LOCK-OUT INTERNAL NAME", /), 77013000
|
|
CABF (X14, I9, I11," = ", A4, X7, A6, X3, 77014000
|
|
I10, X10, A5, X12, A6), 77015000
|
|
FILF (/, X14, "SOURCE FILE IS: ", A1, A6, "/", A1, A6, "."), 77015100
|
|
CABT (//////); 77016000
|
|
LIST CONL 77017000
|
|
(PROCCLOCK, MPXQUAN, MPXAOPS, IF MPXQUAN=1 THEN 0 ELSE MPXBOPS,77018000
|
|
MEMTIME/10,(MEMMODS+1)DIV 2*15 ); 77019000
|
|
LIST FILEL (MULFILID.[6:6], MULFILID.[12:36], FILID.[6:6], 77019100
|
|
FILID.[12:36]); 77019200
|
|
ARRAY HT [0:133], NAMES [0:3, 0:13]; 77020000
|
|
ALPHA ALF; 77021000
|
|
REAL MPXI; 77022000
|
|
LABEL OWT; 77023000
|
|
FORMAT HEADFMT(X25,"BURROUGHS B-6500 SIMULATOR " 77024000
|
|
X05,A6,"DAY, ",A3,A6,I3,", ",I4, 77025000
|
|
", ",I2,":",I2,X1,"M."//); 77026000
|
|
PRINTERNOTYETOPENED~FALSE; 77027000
|
|
FILL DAYS[*] WITH 77028000
|
|
" SUN"," MON"," TUES","WEDNES"," THURS"," FRI", 77029000
|
|
" SATUR"; 77030000
|
|
FILL MONTHS[*] WITH 77031000
|
|
" J","ANUARY"," FE","BRUARY"," "," MARCH", 77032000
|
|
" "," APRIL"," "," MAY"," "," JUNE", 77033000
|
|
" "," JULY"," ","AUGUST"," SEP","TEMBER", 77034000
|
|
" O","CTOBER"," NO","VEMBER"," DE","CEMBER"; 77035000
|
|
I~STARTDATE; 77036000
|
|
DATE~I.[30:6]|100+I.[36:6]|10+I.[42:6]; 77037000
|
|
YEAR~1900+I.[18:6]|10+I.[24:6]; 77038000
|
|
FOR I~31,IF YEAR MOD 4 = 0 THEN 29 ELSE 28,31,30,31,30, 77039000
|
|
31,31,30,31,30 DO 77040000
|
|
IF DATE{I THEN GO OWT 77041000
|
|
ELSE BEGIN DATE~DATE-I; MONTH~MONTH+1; END; 77042000
|
|
OWT: I~ETIME; 77043000
|
|
HOURS~I DIV (60|60|60); 77044000
|
|
MINUTES~(I DIV (60|60)) MOD 60; 77045000
|
|
IF MONTH<2 THEN BEGIN Q~MONTH+11; P~YEAR-1900-1; END 77046000
|
|
ELSE BEGIN Q~MONTH- 1; P~YEAR-1900 ; END; 77047000
|
|
DAY~((Q|26-2) DIV 10+DATE+P+P.[36:10]+1) MOD 7; 77048000
|
|
WRITE(LP,HEADFMT,DAYS[DAY], 77049000
|
|
MONTHS[MONTH|2],MONTHS[MONTH|2+1],DATE,YEAR, 77050000
|
|
I~HOURS MOD 12, MINUTES, 77051000
|
|
IF HOURS>12 THEN "P" ELSE "A"); 77052000
|
|
FILL HT [*] WITH "NONE", "DISK", "SPO ", "AIDS", "NONE","NONE",77053000
|
|
"LP ","LP ", "NONE", "CR ", "CP ", 0,0,"TAPE"; 77054000
|
|
WRITE (LP, CONF, CONL); 77055000
|
|
WRITE (LP, CABH); 77056000
|
|
FILL NAMES [0, *] WITH 77057000
|
|
"NONE ","DISKA ","SPO ","AIDS ","NONE ","NONE " , 77058000
|
|
"LP ","LP ","NONE ","CARD ","PUNCH ",0,0,"TAPEA ";77059000
|
|
FILL NAMES [1, *] WITH 77060000
|
|
0,"DISKB ",0,0,0,0,"SIMLP ","SIMLP ",0,0,0,0,0,"TAPEB "; 77061000
|
|
FILL NAMES [2, *] WITH 0,"DISKC ",0,0,0,0,0,0,0,0,0, 77062000
|
|
0,0,"TAPEC "; 77063000
|
|
FILL NAMES [3, *] WITH 0,"DISKD ",0,0,0,0,0,0,0,0,0, 77064000
|
|
0,0,"TAPED "; 77065000
|
|
FOR I ~ 1, 2 77066000
|
|
DO BEGIN 77067000
|
|
ALF ~ IF I = 1 THEN "1 = A" ELSE "2 = B"; 77068000
|
|
FOR Q ~ 0 STEP 1 UNTIL 31 77069000
|
|
DO IF MPXI ~ MPX [I, Q] ! 0 77070000
|
|
THEN BEGIN 77071000
|
|
P ~ MPXI.MPXHDWE; 77072000
|
|
WRITE (LP, CABF, Q, P, HT [P], ALF, 77073000
|
|
MPXI.MPXBUFF, 77074000
|
|
IF P ! 13 THEN " N/A " 77075000
|
|
ELSE IF MPXI.MPXWLO = 1 77076000
|
|
THEN "TRUE " ELSE "FALSE", 77077000
|
|
NAMES [MPXI.MPXSWFI, P]); 77078000
|
|
END; 77079000
|
|
END; 77080000
|
|
WRITE (LP, FILF, FILEL); 77080100
|
|
WRITE (LP, CABT); 77081000
|
|
END HEADINGLINE; 77082000
|
|
FILL MNEMONIC[0,*] WITH 78000000
|
|
"VALC","VALC","VALC","VALC","VALC","VALC","VALC","VALC", 78001000
|
|
"VALC","VALC","VALC","VALC","VALC","VALC","VALC","VALC", 78002000
|
|
"VALC","VALC","VALC","VALC","VALC","VALC","VALC","VALC", 78003000
|
|
"VALC","VALC","VALC","VALC","VALC","VALC","VALC","VALC", 78004000
|
|
"VALC","VALC","VALC","VALC","VALC","VALC","VALC","VALC", 78005000
|
|
"VALC","VALC","VALC","VALC","VALC","VALC","VALC","VALC", 78006000
|
|
"VALC","VALC","VALC","VALC","VALC","VALC","VALC","VALC", 78007000
|
|
"VALC","VALC","VALC","VALC","VALC","VALC","VALC","VALC", 78008000
|
|
"NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC", 78009000
|
|
"NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC", 78010000
|
|
"NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC", 78011000
|
|
"NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC", 78012000
|
|
"NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC", 78013000
|
|
"NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC", 78014000
|
|
"NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC", 78015000
|
|
"NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC","NAMC", 78016000
|
|
"ADD ","SUBT","MULT","DIVD","IDIV","RDIV","NTIA","NTGR", 78017000
|
|
"LESS","GREQ","GRTR","LSEQ","EQUL","NEQL","CHSN","MULX", 78018000
|
|
"LAND","LOR ","LNOT","LEQV","SAME","VARI","BSET","DBST", 78019000
|
|
"FLTR","DFTR","ISOL","DISO","INSR","DINS","BRST","DBRS", 78020000
|
|
"BRFL","BRTR","BRUN","EXIT","STBR","NXLN","INDX","RETN", 78021000
|
|
"DBFL","DBTR","DBUN","ENTR","EVAL","NXLV","MKST","STFF", 78022000
|
|
"ZERO","ONE ","LT8 ","LT16","PUSH","DLET","EXCH","DUPL", 78023000
|
|
"STOD","STON","OVRD","OVRN","XXXX","LOAD","LT48","MPCW", 78024000
|
|
"SCLF","DSLF","SCRT","DSRT","SCRS","DSRS","SCRF","DSRF", 78025000
|
|
"SCRR","DSRR","ICVD","ICVU","SNGT","SNGL","XTND","IMKS", 78026000
|
|
"TEED","PACD","EXSD","TWSD","TWOD","SISO","SXSN","ROFF", 78027000
|
|
"TEEU","PACU","EXSU","TWSU","TWOU","EXPU","RTFF","HALT", 78028000
|
|
"TLSD","TGED","TGTD","TLED","TEQD","TNED","TUND","XXXX", 78029000
|
|
"TLSU","TGEU","TGTU","TLEU","TEQU","TNEU","TUNU","XXXX", 78030000
|
|
"CLSD","CGED","CGTD","CLED","CEQD","CNED","XXXX","XXXX", 78031000
|
|
"CLSU","CGEU","CGTU","CLEU","CEQU","CNEU","NOOP","NVLD"; 78032000
|
|
FILL MNEMONIC[1,*] WITH 78033000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78034000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78035000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78036000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78037000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78038000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78039000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78040000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78041000
|
|
"XXXX","XXXX","JOIN","SPLT","IDLE","SINT","EEXI","DEXI", 78042000
|
|
"XXXX","XXXX","SCNI","SCNO","XXXX","XXXX","WHOI","HEYU", 78043000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78044000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78045000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78046000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78047000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78048000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78049000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","OCRX","XXXX","XXXX", 78050000
|
|
"XXXX","XXXX","XXXX","LOG2","XXXX","XXXX","XXXX","XXXX", 78051000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78052000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78053000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78054000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","IRWL","PCWL","MVST", 78055000
|
|
"XXXX","XXXX","XXXX","XXXX","STAG","RTAG","RSUP","RSON", 78056000
|
|
"RPRR","SPRR","RDLK","CBON","LODT","LLLU","SRCH","XXXX", 78057000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78058000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78059000
|
|
"USND","UABD","TWFD","TWTD","SWFD","SWTD","XXXX","TRNS", 78060000
|
|
"USNU","UABU","TWFU","TWTU","SWFU","SWTU","XXXX","HALT", 78061000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78062000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78063000
|
|
"SLSD","SGED","SGTD","SLED","SEQD","SNED","XXXX","XXXX", 78064000
|
|
"SLSU","SGEU","SGTU","SLEU","SEQU","SNEU","NOOP","NVLD"; 78065000
|
|
FILL MNEMONIC[2,*] WITH 78066000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78067000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78068000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78069000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78070000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78071000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78072000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78073000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78074000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78075000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78076000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78077000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78078000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78079000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78080000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78081000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78082000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78083000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78084000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78085000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78086000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78087000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78088000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78089000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78090000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78091000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78092000
|
|
"MINS","MFLT","SFSC","SRSC","RSTF","ENDF","MVNU","MCHR", 78093000
|
|
"INOP","INSG","SFDC","SRDC","INSU","INSC","ENDE","HALT", 78094000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78095000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78096000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX", 78097000
|
|
"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","NOOP","NVLD"; 78098000
|
|
FILL DELTAMASK[*] WITH 78099000
|
|
8191,8191, % 0 AND 178100000
|
|
4095,4095, % 2 AND 378101000
|
|
2047,2047,2047,2047, % 4 THRU 778102000
|
|
1023,1023,1023,1023,1023,1023,1023,1023, % 8 THRU 1578103000
|
|
511, 511, 511, 511, 511, 511, 511, 511, % 16 THRU 3178104000
|
|
511, 511, 511, 511, 511, 511, 511, 511; 78105000
|
|
FILL REFLECTION[*] WITH 78106000
|
|
0, 16, 8, 24, 4, 20, 12, 28, 78107000
|
|
2, 18, 10, 26, 6, 22, 14, 30, 78108000
|
|
1, 17, 9, 25, 5, 21, 13, 29, 78109000
|
|
3, 19, 11, 27, 7, 23, 15, 31; 78110000
|
|
F:=D[2];%%%%%%%%%%%%%%%%%%%%% 78111000
|
|
PDR ~ 8; 78112000
|
|
SIMULATOR; 78113000
|
|
EOJ:END; 78114000
|
|
END. 78115000
|