.NLIST .LIST TTM .NLIST BEX,TOC,SYM .IDENT /PAS600/ .PSECT PASRUN ; ; THIS IS THE RSX-11M RUNTIME SUPPORT PACKAGE FOR PASCAL. ; CALLED SUBROUTINES ARE ALWAYS INCLUDED IN THE TASK BY THE TASKBUILDER. ; ; SEVED TORSTENDAHL 1976-10-19 ; ; ; ; PASRUN, THE RUNTIME SUPPORT PACKAGE FOR PASCAL, WILL GET THE ; CONTROL WHEN A USER TASK IS STARTED. BEFORE TRANSFERRING CONTROL ; TO THE USER PART SOME INITIALIZING IS PERFORMED. ; - SS (=R5), THE SOFTWARE STACK POINTER, IS INITIALIZED TO GIVE ; 64 BYTES TO THE HARDWARE STACK, POINTED TO BY HP (=R6) ; - GP (=R3), THE POINTER TO THE DATA OF THE MAIN PROGRAM BLOCK ; AND THE HIDDEN GLOBAL DATA, IS SET ; - MP (=R4), THE POINTER TO THE DATA OF THE CURRENT BLOCK ; IS SET = GP ; - A SST VECTOR IS DECLARED. THIS IS TO MAKE IT POSSIBLE TO ; CLOSE ALL FILES AT ABORT. A POST MORTEM DUMP IN A FORM ; WITH VARIABLE NAMES AND OTHER DETAILES TO SIMPLIFY DEBUGGING ; CAN ALSO BE PRINTED IF REQUESTED AT COMPILE TIME. ; - CONTROL IS TRANSFERRED TO THE USER PROGRAM ; ; ; ; THE USER PROGRAM CAN REQUEST SERVICES FROM PASRUN ; THROUGH THE TRAP INSTRUCTION. THIS INSTRUCTION HAS A PARAMETER, ; WHOSE VALUE LIES IN THE RANGE 0..255. EACH VALUE CORRESPONDS TO A ; SERVICE ROUTINE. TRAPS ARE DEFINED FOR REAL ARITHMATIC, ; ARITHMETIC FUNCTIONS, FILE OPERATIONS ETCETERA. ; ; ; ; .SBTTL LOCAL CONSTANTS ; LUN1=1 LUN2=2 LUN3=3 LUN4=4 LUN5=5 LUN6=6 TILUN=5 ; ; MAXFILES=5 ; MAX NUMBER OF FILES RESERVES SPACE OFFSET GP LUNTABSZ=20 ; SIZE OF NEW LUNTAB AT HEAP BOTTOM BUFLEN=132. ; MAX RECORD SIZE ; FF=14 LF=12 CR=15 HT=11 SPC=40 ; FALSE=0 TRUE=1 ; ; ; ; BIT DEFINITIONS FOR THE IOSPEC PARAMETER ; RANDOM =1 UPDATE =2 APPEND =4 TEMPORARY=10 INSERT =20 SHARED =40 SPOOL =100 BLKMODE =200 ; HIDDEN BITS TTY =20000 TEXT =40000 INPUT =100000 ; ; ; OFFSET DEFINITION FOR THE STACKS ; STACKBEG=2 HPSIZE =400 ; 256 BYTES FOR HARDWARE STACK ; LINEADDR=2 ; ADDRESS OF LINENUMBER SELECTOR=4 ; ADDRESS OF DYNAMIC OPTION SWITCH WORD ; V4-33 MARKADDR=6. ; ADDRESS OF MARKPOINTER DAPADDR =8. ; ADDRESS OF DYNAMIC AREA POINTER MARKDDT =10. ; ADDRESS OF MARKPOINTER USING DDT DAPDDT =12. ; ADDRESS OF LAST DEBUG ENTRY IN THE HEAP LUNTBP =14. ; POINTER TO LUN TABLE EXITP =16. ; POINTER TO EXIT ROUTINE TSKSIZE =18. ; ADDRESS OF HIGHEST WORD IN TASK ; ; ; ; SELECTOR BIT DEFINITIONS ; WPRINT =1 ; V4-33 WCONT =2 SERCONT =4 MPRINT =10 SKIPSP =20 ; ; ; ERROR TYPE CODES ; WARNING =0 SERIOUS =1000 FATAL =400 MESSAGE =2000 ; ; ; ; REGISTER DEFINITIONS ; AR =%0 ; GENERAL PURPOSE REGISTER R =%1 ; - '' - AD =%2 ; - '' - GP =%3 ; GLOBAL BLOCK BASE POINTER MP =%4 ; CURRENT BLOCK BASE POINTER SS =%5 ; SOFTWARE STACK HP =%6 ; HARDWARE STACK ; ; ; ; ; ; DEFINITION OF HIDDEN PART OF FILE DEKLARATION ; FILESIZECORR =104. TEXTBUFFSIZE =132. FDBSIZE =96. FDB =-104. EOLNSTATUS =-8. EOFSTATUS =-6 IORESULT =-4 FILTYP =-2 ; ; ; ; .SBTTL LOCAL MACROS ; ; ; ; MACRO FOR SUBROUTINE CALL ; .MACRO CALLSS RTR,ENDRTR JSR MP,$'RTR .ENDM ; ; ; MACRO FOR SUBROUTINE RETURN ; .MACRO RETURN RTS MP .ENDM ; ; ; ; DUMMY MACRO FOR OLD LINK COMPATIBILITY ; .MACRO LINK NEXT .ENDM ; ; ; MACRO FOR ROUTINE ENTRY ; .MACRO ROUTINE RTR,ENDRTR .SBTTL RTR $'RTR:: .ENDM ; ; ; MACRO TO RETRIEVE AND CHECK FDB ; .MACRO FINDFILE WHERE,SSCORR,TTYIN,?L1,?L2 MOV WHERE,R MOV R,AR BIT #TTY,FILTYP(R) BNE L1 SUB #FILESIZECORR,AR TSTB F.LUN(AR) BNE L2 ; V4-33 MOV #TRUE,EOFSTATUS(R) MOV #-102.,IORESULT(R) .IIF NB ADD SSCORR,SS RETURN ; V4-33 L1: .IIF NB MOV TTYIN,R ; V4-33 L2: ; V4-33 .ENDM FINDFILE ; ; ; ; ;NAMES OF THE RUNTIME ROUTINES AND THEIR FUNCTION ; ; ERRN = 0. ;DUMMY ROUTINE FOR ERROR DETECTION ;REAL COMPARISON ROUTINES ; EQUR = 1 ;EQUALITY TEST FOR REALS ; NEQR = 2 ;NOT EQUAL REAL ; LESR = 3 ;LESS THAN ; LEQR = 4 ;LESS OR EQUAL ; GRTR = 5 ;GREATER THAN ; GEQR = 6 ;GREATER OR EQUAL ; ;REAL COMPARISON ROUTINES FIRST SUBTRACT THE REALS AND ; ;THEN TEST THE VALUE OF THE RESULT ON TOP OF THE STACK ;REAL ARITHMETIC ; ADR = 7 ;ADDS TWO REALS ON TTHE STACK ; SBR = 8. ;SUBTRACTS THE REAL ON TOP FROM THE REAL NEXT TO TOP ; SQRR = 9. ;SQUARE THE REAL ON TOP OF THE STACK ; MPR = 10. ;MULTIPLY REALS ; DVR = 11. ;DIVIDE REALS ; FLO = 12. ;FLOAT THE REAL NEXT TO TOP ; FLT = 13. ;FLOAT THE REAL ON TOP ; TRC = 14. ;TRUNCATE THE REAL ON TOP OF THE STACK ; RND = 15. ;ROUND ;MULTIPLE VALUE COMPARISON ROUTINES ; GRTM = 17. ;GREATER THAN ; GRTM2 = 18. ; ; LESM = 19. ;LESS THAN ; LESM2 = 20. ; ; GEQM = 21. ;GREATER THAN OR EQUAL ; GEQM2 = 22. ; ; LEQM = 23. ;LESS THAN OR EQUAL ; LEQM2 = 24. ; ; EQUM = 25. ;EQUAL ; EQUM2 = 26. ; ; EQUS4 = 27. ;LARGE SET EQUALITY TEST (4 WORDS) ; NEQM = 28. ;NOT EQUAL ; NEQM2 = 29. ; ; NEQS4 = 30. ;LARGE SET INEQUALITY TEST ;SINGLE WORD COMPARISON ROUTINES ; EQU = 31. ;EQUAL INTEGER ; NEQ = 32. ;NOT EQUAL ; GRT = 33. ;GREATER ; GEQ = 34. ;GREATER OR EQUAL ; LES = 35. ;LESS THAN ; LEQ = 36. ;LESS OR EQUAL ;INTEGER ARITHMETIC ; DVI = 37. ;INTEGER DIVISION ; MODI = 38. ;INTEGER MODULO ; SQI = 39. ;SQUARE INTEGER ; MPI = 40. ;INTEGER MULTIPLICATION ;MULTIPLE MOVE ; MOVM = 41. ;MOVE A MULTIPLE VALUE: ADDRESSES ON THE STACK ; MOVM2 = 42. ;MOVE A MULTIPLE VALUE: ADDRESSES IN REGISTERS AR,AD ; MOVMR = 97. ;MOVE A MULTIPLE VALUE IN REVERSE DIRECTION ;SET MANIPULATION ROUTINES ; INN = 44. ;TESTS IF A SETELEMENT IS IN A SET ; SGSIN = 45. ;ADDS ONE SETELEMENT TO A SET (1 OR 4 WORD) ; INITS = 46. ;CREATES AN EMPTY FOUR WORD SET ON THE STACK ; UNI4 = 47. ;UNION OF TWO FOUR WORD SETS ON THE STACK ; INT4 = 48. ;FORMS THE INTERSECTION OF TWO FOUR WORD SETS ; DIF4 = 49. ;FORMS THE DIFFERENCE OF TWO FOUR WORD SETS ; EXPST = 50. ;EXPANDS THE 1-WORD SET ON TOP TO A 4-WORD SET ; EXPSN = 51. ;EXPANDS THE 1-WORD SET NEXT TO TOP ; REDST = 52. ;REDUCES THE 4-WORD SET ON TOP TO A 1-WORD SET ; REDSN = 53. ;REDUCES THE 4-WORD SET NEXT TO TOP IN THE STACK ; LEQS1 = 70. ;SETINCLUSION (1 WORD SET) ; LEQS4 = 71. ; ,, (4 WORD SET) ; GEQS1 = 72. ; ,, (1 WORD SET) ; GEQS4 = 73. ; ,, (4 WORD SET) ;MARK,RELEASE AND RUNTIME CHECK ROUTINES ; MARKP = 66. ;MARKS THE CURRENT VALUE OF DYNAMIC AREA POINTER ; RELEASEP = 67. ;RELEASES PART OF THE ALLOCATED HEAP ; OVFLCHK = 68. ;CHECK FOR FREE STORAGE SPACE ; SUBRCHK = 69. ;CHECK SUBRANGE OVERFLOW ;PACKED BOOLEAN ACCESS ROUTINES AND ADDITIONALS ; IXB = 54. ;INDEXING IN BOOLEAN ARRAYS ; STPB = 55. ;STORE A BOOLEAN IN A PACKED B ARRAY ; LPB = 56. ;LOAD A BOOLEAN FROM A PACKED BOOLEAN ARRAY ; CLRAREA = 57. ;CLEAR PART OF THE AREA (FOR PACKED STRUCTURE) ; CLRSTK = 58. ;CLEAR LOCAL AREA OF PROCEDURE BLOCK ;ROUTINES FOR FILE HANDLING ; EOFF = 77. ;END OF FILE ; RESETF = 78. ;RESET A FILE FOR READING ; REWRITEF = 79. ;REWRITE A FILE FOR WRITING ;READ AND WRITE ; RDC = 59. ;READ A CHARACTER FROM THE FILE INPUT ; RDI = 60. ;READ AN INTEGER FROM THE FILE INPUT ; RDR = 61. ;READ A REAL FROM THE FILE INPUT ; WRCHA = 43. ;WRITE CHARACTER IN A FIELD OF SPECIFIED LENGTH ; WRC = 62. ;WRITE A SINGLE CHARACTER ON A LINE OF 78 CHARS MAX. ; WRS = 63. ;WRITE A STRING IN A FIELD OF SPECIFIED LENGTH ; WRI = 64. ;WRITE AN INTEGER ,, ,, ,, ; WRR = 65. ;WRITE A REAL ,, ,, ; WRFIX = 92. ;WRITE A REAL IN FIXED FORMAT ; GETCH = 74. ;GET NEXT CHARACTER OF INPUTFILE ; GETLINE = 75. ;SKIPS THE INPUTSTRING UNTIL 'EOL' HAS BEEN READ ; GETBUFFER = 76. ;GETS NEW BUFFER FROM KEYBOARD(ONE LINE, 60 CHARS MAX) ; PUTCH = 80. ;APPENDS THE OUTPUT BUFFER VARIABLE TO THE OUTPUT FILE ; PUTLINE = 81. ;APPENDS THE CONTROL CHAR'S TO THE OUTPUTFILE ;ADDITIONAL ROUTINES ; EXITP = 16. ;TERMINATES A PROGRAM ; CMR = 82. ;COMPARE REALS ; EXPTOP = 83. ;EXPONENT ON TOP ; EXPNTOP = 84. ;EXPONENT NEXT TO TOP ; SIGNS = 85. ;SIGNS OF REALS ; NORM = 86. ;FOR NORMALIZATION ; SCALE = 87. ;SCALING ; RDSIGN = 88. ;READS SIGN OF NUMERICAL INPUT ; WRERROR = 89. ;WRITES ERROR MESSAGES ; DIGIT = 90. ;CHECKS CHARACTER AND CONVERTS TO DIGIT ; UNSINT = 91. ;READS AN UNSIGNED INTEGER ; NORMLZ = 93. ;REAL NORMALIZATION ; DECDIG = 94. ;PRINTS DECIMAL DIGITS OF A REAL ; PRTSGN = 95. ;PRINTS THE SIGN OF A REAL ; TRAILR = 96. ;PRINTS A NUMBER OF (EQUAL) CHARACTERS ; TWPOW = 98. ;POWERS OF TWO ; SPLTRL = 99. ;SPLITS A REAL INTO EXPONENT AND MANTISSA ;ARITHMETIC FUNCTIONS OF TYPE REAL ; RSIN = 100. ;SINUS ; RCOS = 101. ;COSINE ; RARCTAN = 102. ;ARCTANGENT ; REXP = 103. ;EXPONENT ; RLOG = 104. ;NATURAL LOGARITHM ; RSQRT = 105. ;SQUARE ROOT ; SUBSTRCHECK = 106. ;CHECKS BOUNDS OF SUBSTRING ; STRINGINDEX = 107. ;CHECKS INDEX IN STRINGPARAMETER ; DUMRTR = 108. ;DUMMY END ROUTINE ; ; .LIST