RealControl.bcd, version "65124ead2ac1" (31-Oct-59  3:42:37, 145#22#)
  source  27-Aug-82 13:16:56
  creator "6363000c0007" (11-Feb-37  5:54:20, 143#143#)

Global frame size:  4

-- PilotRealControl.mesa
-- Last Modified, Stewart, August 27, 1982 1:15 pm
-- Microcode to Mesa floating point translater

DIRECTORY
  Frame USING [MyLocalFrame],
  Ieee USING [InitIeee],
  MiscAlpha,
  PrincOps USING [StateVector, UnboundLink],
  Real,
  RealOps,
  SDDefs USING [SD, sFADD, sFSUB, sFMUL, sFDIV, sFCOMP, sFIX, sFLOAT],
  TrapSupport USING [BumpPC, opTrapTable];

   Entry point: 0,   Frame size:  7

RealControl: PROGRAM IMPORTS Frame, Ieee, RealOps, TrapSupport EXPORTS Real, RealOps
  =
  BEGIN
  

  microSticky: CARDINAL ← 0;

  
	  116:	LI0
	  117:	SG0

  InitReals[];

  END.
L. Stewart, December 11, 1980  11:37 AM, modify for Pilot from RealControl.mesa
L. Stewart, 4-Feb-81 18:31:04, change to new trap handling
L. Stewart, 6-Feb-81 10:40:32, update trap procedure style
R. Atkinson, 23-Mar-81 16:10:36,
   replaced Frame.MyLocalFrame[] with [frame[Frame.MyLocalFrame[]]]
L. Stewart, June 3, 1982 11:11 am, added FScale and SqRt, removed SETS
L. Stewart, August 27, 1982 1:15 pm, SAFE

	  120:	LFC2
	  121:	RET


Instructions: 4, Bytes: 4

  InitReals: PUBLIC SAFE PROC = TRUSTED {
    OPEN SDDefs, TrapSupport;
    
   Entry point: 2,   Frame size:  7

    SD[sFADD] ← SD[sFSUB] ← SD[sFMUL] ← SD[sFDIV] ← SD[sFCOMP] ← SD[sFIX] ← SD[sFLOAT] ← PrincOps.UnboundLink;
    
	  122:	LI1
	  123:	LIW	  1100
	  126:	NILCK
	  127:	WB	   136
	  131:	PUSH
	  132:	LIW	  1100
	  135:	NILCK
	  136:	WB	   135
	  140:	PUSH
	  141:	LIW	  1100
	  144:	NILCK
	  145:	WB	   134
	  147:	PUSH
	  150:	LIW	  1100
	  153:	NILCK
	  154:	WB	   133
	  156:	PUSH
	  157:	LIW	  1100
	  162:	NILCK
	  163:	WB	   132
	  165:	PUSH
	  166:	LIW	  1100
	  171:	NILCK
	  172:	WB	   131
	  174:	PUSH
	  175:	LIW	  1100
	  200:	NILCK
	  201:	WB	   130

    opTrapTable.misc[MiscAlpha.aFADD] ← LOOPHOLE[TFAdd];
    
	  203:	DESCB	     6
	  205:	LIW	  1237
	  210:	R0
	  211:	NILCK
	  212:	LIW	   420
	  215:	ADD
	  216:	W0

    opTrapTable.misc[MiscAlpha.aFSUB] ← LOOPHOLE[TFSub];
    
	  217:	DESCB	    10
	  221:	LIW	  1237
	  224:	R0
	  225:	NILCK
	  226:	LIW	   421
	  231:	ADD
	  232:	W0

    opTrapTable.misc[MiscAlpha.aFMUL] ← LOOPHOLE[TFMul];
    
	  233:	DESCB	    12
	  235:	LIW	  1237
	  240:	R0
	  241:	NILCK
	  242:	LIW	   422
	  245:	ADD
	  246:	W0

    opTrapTable.misc[MiscAlpha.aFDIV] ← LOOPHOLE[TFDiv];
    
	  247:	DESCB	    14
	  251:	LIW	  1237
	  254:	R0
	  255:	NILCK
	  256:	LIW	   423
	  261:	ADD
	  262:	W0

    opTrapTable.misc[MiscAlpha.aFCOMP] ← LOOPHOLE[TFComp];
    
	  263:	DESCB	    16
	  265:	LIW	  1237
	  270:	R0
	  271:	NILCK
	  272:	LIW	   424
	  275:	ADD
	  276:	W0

    opTrapTable.misc[MiscAlpha.aFIX] ← LOOPHOLE[TFix];
    
	  277:	DESCB	    20
	  301:	LIW	  1237
	  304:	R0
	  305:	NILCK
	  306:	LIW	   425
	  311:	ADD
	  312:	W0

    opTrapTable.misc[MiscAlpha.aFLOAT] ← LOOPHOLE[TFloat];
    
	  313:	DESCB	    22
	  315:	LIW	  1237
	  320:	R0
	  321:	NILCK
	  322:	LIW	   426
	  325:	ADD
	  326:	W0

    opTrapTable.misc[MiscAlpha.aFIXI] ← LOOPHOLE[TFixI];
    
	  327:	DESCB	     2
	  331:	LIW	  1237
	  334:	R0
	  335:	NILCK
	  336:	LIW	   427
	  341:	ADD
	  342:	W0

    opTrapTable.misc[MiscAlpha.aFIXC] ← LOOPHOLE[TFixC];
    
	  343:	DESCB	    26
	  345:	LIW	  1237
	  350:	R0
	  351:	NILCK
	  352:	LIW	   430
	  355:	ADD
	  356:	W0

    opTrapTable.misc[MiscAlpha.aFSTICKY] ← LOOPHOLE[TFSticky];
    
	  357:	DESCB	    30
	  361:	LIW	  1237
	  364:	R0
	  365:	NILCK
	  366:	LIW	   431
	  371:	ADD
	  372:	W0

    opTrapTable.misc[MiscAlpha.aFREM] ← LOOPHOLE[TFRem];
    
	  373:	DESCB	    32
	  375:	LIW	  1237
	  400:	R0
	  401:	NILCK
	  402:	LIW	   432
	  405:	ADD
	  406:	W0

    opTrapTable.misc[MiscAlpha.aROUND] ← LOOPHOLE[TRound];
    
	  407:	DESCB	    24
	  411:	LIW	  1237
	  414:	R0
	  415:	NILCK
	  416:	LIW	   433
	  421:	ADD
	  422:	W0

    opTrapTable.misc[MiscAlpha.aROUNDI] ← LOOPHOLE[TRoundI];
    
	  423:	DESCB	    36
	  425:	LIW	  1237
	  430:	R0
	  431:	NILCK
	  432:	LIW	   434
	  435:	ADD
	  436:	W0

    opTrapTable.misc[MiscAlpha.aROUNDC] ← LOOPHOLE[TRoundC];
    
	  437:	DESCB	    40
	  441:	LIW	  1237
	  444:	R0
	  445:	NILCK
	  446:	LIW	   435
	  451:	ADD
	  452:	W0

    opTrapTable.misc[MiscAlpha.aFSQRT] ← LOOPHOLE[TSqRt];
    
	  453:	DESCB	    42
	  455:	LIW	  1237
	  460:	R0
	  461:	NILCK
	  462:	LIW	   436
	  465:	ADD
	  466:	W0

    opTrapTable.misc[MiscAlpha.aFSC] ← LOOPHOLE[TFSc];
    
	  467:	DESCB	    34
	  471:	LIW	  1237
	  474:	R0
	  475:	NILCK
	  476:	LIW	   437
	  501:	ADD
	  502:	W0

    Ieee.InitIeee[];
    };

  
	  503:	EFC3
	  504:	RET


Instructions: 142, Bytes: 244

  TFAdd: PROC [a, b: REAL] RETURNS [c: REAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 3,   Frame size:  31
	  506:	SLDB	    10
	  510:	SLDB	     4

    state ← STATE;
    
	  512:	DST	    12

    c ← RealOps.FAdd[a, b];
    
	  514:	LLDB	     4
	  516:	LLDB	    10
	  520:	LIB	    56
	  522:	EFC12
	  523:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	  525:	LLB	     2
	  527:	SLB	    34
	  531:	PUSH


	  532:	R1
	  533:	LI2
	  534:	ADD
	  535:	LLB	    34
	  537:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	  540:	LADRB	     0
	  542:	SLB	    31

    TRANSFER WITH state;
    };

  
	  544:	LST	    12
	  546:	LLDB	     6
	  550:	RET


Instructions: 21, Bytes: 36

  TFSub: PROC [a, b: REAL] RETURNS [c: REAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 4,   Frame size:  31
	  552:	SLDB	    10
	  554:	SLDB	     4

    state ← STATE;
    
	  556:	DST	    12

    c ← RealOps.FSub[a, b];
    
	  560:	LLDB	     4
	  562:	LLDB	    10
	  564:	LIB	    56
	  566:	EFC11
	  567:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	  571:	LLB	     2
	  573:	SLB	    34
	  575:	PUSH


	  576:	R1
	  577:	LI2
	  600:	ADD
	  601:	LLB	    34
	  603:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	  604:	LADRB	     0
	  606:	SLB	    31

    TRANSFER WITH state;
    };

  
	  610:	LST	    12
	  612:	LLDB	     6
	  614:	RET


Instructions: 21, Bytes: 36

  TFMul: PROC [a, b: REAL] RETURNS [c: REAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 5,   Frame size:  31
	  616:	SLDB	    10
	  620:	SLDB	     4

    state ← STATE;
    
	  622:	DST	    12

    c ← RealOps.FMul[a, b];
    
	  624:	LLDB	     4
	  626:	LLDB	    10
	  630:	LIB	    56
	  632:	EFC10
	  633:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	  635:	LLB	     2
	  637:	SLB	    34
	  641:	PUSH


	  642:	R1
	  643:	LI2
	  644:	ADD
	  645:	LLB	    34
	  647:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	  650:	LADRB	     0
	  652:	SLB	    31

    TRANSFER WITH state;
    };

  
	  654:	LST	    12
	  656:	LLDB	     6
	  660:	RET


Instructions: 21, Bytes: 36

  TFDiv: PROC [a, b: REAL] RETURNS [c: REAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 6,   Frame size:  31
	  662:	SLDB	    10
	  664:	SLDB	     4

    state ← STATE;
    
	  666:	DST	    12

    c ← RealOps.FDiv[a, b];
    
	  670:	LLDB	     4
	  672:	LLDB	    10
	  674:	LIB	    56
	  676:	EFC9
	  677:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	  701:	LLB	     2
	  703:	SLB	    34
	  705:	PUSH


	  706:	R1
	  707:	LI2
	  710:	ADD
	  711:	LLB	    34
	  713:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	  714:	LADRB	     0
	  716:	SLB	    31

    TRANSFER WITH state;
    };

  
	  720:	LST	    12
	  722:	LLDB	     6
	  724:	RET


Instructions: 21, Bytes: 36

  TFComp: PROC [a, b: REAL] RETURNS [i: INTEGER] = {
    state: PrincOps.StateVector;
    
   Entry point: 7,   Frame size:  31
	  726:	SLDB	     7
	  730:	SLDB	     4

    state ← STATE;
    
	  732:	DST	    11

    i ← RealOps.FComp[a, b];
    
	  734:	LLDB	     4
	  736:	LLDB	     7
	  740:	LIB	    56
	  742:	EFC8
	  743:	SL2

    TrapSupport.BumpPC[2];
    
	  744:	LLB	     2
	  746:	SLB	    33
	  750:	PUSH


	  751:	R1
	  752:	LI2
	  753:	ADD
	  754:	LLB	    33
	  756:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	  757:	LADRB	     0
	  761:	SLB	    30

    TRANSFER WITH state;
    };

  
	  763:	LST	    11
	  765:	LL2
	  766:	RET


Instructions: 21, Bytes: 34

  TFix: PROC [a: REAL] RETURNS [li: LONG INTEGER] = {
    state: PrincOps.StateVector;
    
   Entry point: 8,   Frame size:  27
	  770:	SLDB	     4

    state ← STATE;
    
	  772:	DST	    10

    li ← RealOps.RoundLI[a, RealOps.FixMode];
    
	  774:	LLDB	     4
	  776:	LIB	   156
	 1000:	EFC0
	 1001:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	 1003:	LLB	     2
	 1005:	SLB	    32
	 1007:	PUSH


	 1010:	R1
	 1011:	LI2
	 1012:	ADD
	 1013:	LLB	    32
	 1015:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1016:	LADRB	     0
	 1020:	SLB	    27

    TRANSFER WITH state;
    };

  
	 1022:	LST	    10
	 1024:	LLDB	     6
	 1026:	RET


Instructions: 19, Bytes: 32

  TFloat: PROC [a: LONG INTEGER] RETURNS [c: REAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 9,   Frame size:  27
	 1030:	SLDB	     4

    state ← STATE;
    
	 1032:	DST	    10

    c ← RealOps.Float[a];
    
	 1034:	LLDB	     4
	 1036:	LIB	    56
	 1040:	EFC6
	 1041:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	 1043:	LLB	     2
	 1045:	SLB	    32
	 1047:	PUSH


	 1050:	R1
	 1051:	LI2
	 1052:	ADD
	 1053:	LLB	    32
	 1055:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1056:	LADRB	     0
	 1060:	SLB	    27

    TRANSFER WITH state;
    };

  
	 1062:	LST	    10
	 1064:	LLDB	     6
	 1066:	RET


Instructions: 19, Bytes: 32

  TFixI: PROC [a: REAL] RETURNS [i: INTEGER] = {
    state: PrincOps.StateVector;
    
   Entry point: 1,   Frame size:  27
	 1070:	SLDB	     4

    state← STATE;
    
	 1072:	DST	     7

    i ← RealOps.RoundI[a, RealOps.FixMode];
    
	 1074:	LLDB	     4
	 1076:	LIB	   156
	 1100:	EFC1
	 1101:	SL2

    TrapSupport.BumpPC[2];
    
	 1102:	LLB	     2
	 1104:	SLB	    31
	 1106:	PUSH


	 1107:	R1
	 1110:	LI2
	 1111:	ADD
	 1112:	LLB	    31
	 1114:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1115:	LADRB	     0
	 1117:	SLB	    26

    TRANSFER WITH state;
    };

  
	 1121:	LST	     7
	 1123:	LL2
	 1124:	RET


Instructions: 19, Bytes: 30

  TFixC: PROC [a: REAL] RETURNS [c: CARDINAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 11,   Frame size:  27
	 1126:	SLDB	     4

    state ← STATE;
    
	 1130:	DST	     7

    c ← RealOps.RoundC[a, RealOps.FixMode];
    
	 1132:	LLDB	     4
	 1134:	LIB	   156
	 1136:	EFC2
	 1137:	SL2

    TrapSupport.BumpPC[2];
    
	 1140:	LLB	     2
	 1142:	SLB	    31
	 1144:	PUSH


	 1145:	R1
	 1146:	LI2
	 1147:	ADD
	 1150:	LLB	    31
	 1152:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1153:	LADRB	     0
	 1155:	SLB	    26

    TRANSFER WITH state;
    };

  
	 1157:	LST	     7
	 1161:	LL2
	 1162:	RET


Instructions: 19, Bytes: 30

  TFSticky: PROC [c: CARDINAL] RETURNS [cr: CARDINAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 12,   Frame size:  27
	 1164:	SL0

    state ← STATE;
    
	 1165:	DST	     6

    cr ← microSticky;
    
	 1167:	LG0
	 1170:	SL1

    microSticky ← c;
    
	 1171:	LL0
	 1172:	SG0

    TrapSupport.BumpPC[2];
    
	 1173:	LLB	     2
	 1175:	SLB	    30
	 1177:	PUSH


	 1200:	R1
	 1201:	LI2
	 1202:	ADD
	 1203:	LLB	    30
	 1205:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1206:	LADRB	     0
	 1210:	SLB	    25

    TRANSFER WITH state;
    };

  
	 1212:	LST	     6
	 1214:	LL1
	 1215:	RET


Instructions: 19, Bytes: 26

  TFRem: PROC [a, b: REAL] RETURNS [c: REAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 13,   Frame size:  31
	 1216:	SLDB	    10
	 1220:	SLDB	     4

    state ← STATE;
    
	 1222:	DST	    12

    c ← RealOps.FRem[a, b];
    
	 1224:	LLDB	     4
	 1226:	LLDB	    10
	 1230:	LIB	    56
	 1232:	EFC4
	 1233:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	 1235:	LLB	     2
	 1237:	SLB	    34
	 1241:	PUSH


	 1242:	R1
	 1243:	LI2
	 1244:	ADD
	 1245:	LLB	    34
	 1247:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1250:	LADRB	     0
	 1252:	SLB	    31

    TRANSFER WITH state;
    };

  
	 1254:	LST	    12
	 1256:	LLDB	     6
	 1260:	RET


Instructions: 21, Bytes: 36

  TRound: PROC [a: REAL] RETURNS [li: LONG INTEGER] = {
    state: PrincOps.StateVector;
    
   Entry point: 10,   Frame size:  27
	 1262:	SLDB	     4

    state ← STATE;
    
	 1264:	DST	    10

    li ← RealOps.RoundLI[a];
    
	 1266:	LLDB	     4
	 1270:	LIB	    56
	 1272:	EFC0
	 1273:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	 1275:	LLB	     2
	 1277:	SLB	    32
	 1301:	PUSH


	 1302:	R1
	 1303:	LI2
	 1304:	ADD
	 1305:	LLB	    32
	 1307:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1310:	LADRB	     0
	 1312:	SLB	    27

    TRANSFER WITH state;
    };

  
	 1314:	LST	    10
	 1316:	LLDB	     6
	 1320:	RET


Instructions: 19, Bytes: 32

  TRoundI: PROC [a: REAL] RETURNS [i: INTEGER] = {
    state: PrincOps.StateVector;
    
   Entry point: 15,   Frame size:  27
	 1322:	SLDB	     4

    state ← STATE;
    
	 1324:	DST	     7

    i ← RealOps.RoundI[a];
    
	 1326:	LLDB	     4
	 1330:	LIB	    56
	 1332:	EFC1
	 1333:	SL2

    TrapSupport.BumpPC[2];
    
	 1334:	LLB	     2
	 1336:	SLB	    31
	 1340:	PUSH


	 1341:	R1
	 1342:	LI2
	 1343:	ADD
	 1344:	LLB	    31
	 1346:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1347:	LADRB	     0
	 1351:	SLB	    26

    TRANSFER WITH state;
    };

  
	 1353:	LST	     7
	 1355:	LL2
	 1356:	RET


Instructions: 19, Bytes: 30

  TRoundC: PROC [a: REAL] RETURNS [c: CARDINAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 16,   Frame size:  27
	 1360:	SLDB	     4

    state ← STATE;
    
	 1362:	DST	     7

    c ← RealOps.RoundC[a];
    
	 1364:	LLDB	     4
	 1366:	LIB	    56
	 1370:	EFC2
	 1371:	SL2

    TrapSupport.BumpPC[2];
    
	 1372:	LLB	     2
	 1374:	SLB	    31
	 1376:	PUSH


	 1377:	R1
	 1400:	LI2
	 1401:	ADD
	 1402:	LLB	    31
	 1404:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1405:	LADRB	     0
	 1407:	SLB	    26

    TRANSFER WITH state;
    };

  
	 1411:	LST	     7
	 1413:	LL2
	 1414:	RET


Instructions: 19, Bytes: 30

  TSqRt: PROC [a: REAL] RETURNS [b: REAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 17,   Frame size:  27
	 1416:	SLDB	     4

    state ← STATE;
    
	 1420:	DST	    10

    b ← RealOps.SqRt[a];
    
	 1422:	LLDB	     4
	 1424:	LIB	    56
	 1426:	EFC5
	 1427:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	 1431:	LLB	     2
	 1433:	SLB	    32
	 1435:	PUSH


	 1436:	R1
	 1437:	LI2
	 1440:	ADD
	 1441:	LLB	    32
	 1443:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1444:	LADRB	     0
	 1446:	SLB	    27

    TRANSFER WITH state;
    };

  
	 1450:	LST	    10
	 1452:	LLDB	     6
	 1454:	RET


Instructions: 19, Bytes: 32

  TFSc: PROC [a: REAL, scale: INTEGER] RETURNS [b: REAL] = {
    state: PrincOps.StateVector;
    
   Entry point: 14,   Frame size:  31
	 1456:	SL4
	 1457:	SLDB	     4

    state ← STATE;
    
	 1461:	DST	    11

    b ← RealOps.FScale[a, scale];
    
	 1463:	LLDB	     4
	 1465:	LL4
	 1466:	LIB	    56
	 1470:	EFC7
	 1471:	SLDB	     6

    TrapSupport.BumpPC[2];
    
	 1473:	LLB	     2
	 1475:	SLB	    33
	 1477:	PUSH


	 1500:	R1
	 1501:	LI2
	 1502:	ADD
	 1503:	LLB	    33
	 1505:	W1

    state.dest ← [frame[Frame.MyLocalFrame[]]];
    
	 1506:	LADRB	     0
	 1510:	SLB	    30

    TRANSFER WITH state;
    };

  -- Mainline code

  
	 1512:	LST	    11
	 1514:	LLDB	     6
	 1516:	RET


Instructions: 21, Bytes: 34


Total instructions: 464, Bytes: 770