.MCALL FINIT$ ;RSX11D FOCAL INITIATOR. ; ;THIS ONCE-ONLY CODE IS EXECUTED IN AN OVERLAY IN THE TASK ;IN COMMON WITH SPECIAL FUNCTION CODE. IT SETS UP VARIOUS ;ADDRESSES INSIDE FOCAL PROPER AND JUMPS TO THE STARTUP CODE THERE. ;FOCAL PARAMETERS AND DEFINITIONS .GLOBL INIT2,STARTX,INIT,BOTTOM,STACKO .GLOBL SPSAVE,LIMTB,FTRP,XDELET,PC1 .GLOBL LINENO,CFRS,KIN .GLOBL KBILNK,KBOLNK .GLOBL KBIFIL,KBOFIL ;CONSOLE DATASETS .MCALL GTSK$ ;USE THIS TO SIZE STORAGE AREA .MCALL SVTK$ ;TABLE OF TRAPS USED HERE .EVEN .PSECT DATA,RW .EVEN INFDPB: GTSK$ INFINF INFINF: .BLKW 16. .GLOBL TRAPH,BEGIN .GLOBL HORD,LORD,BE ;FLOATING AC TRP=7000 .MCALL NMBLK$ DEFLTI: NMBLK$ FCLCO,FCL,0,TI ;SET TI: AS DEFAULT DEVICE SORTJ=TRAP+200 SORTC=SORTJ+2 PRINTC=SORTC+2 READC=PRINTC+2 OUTCH=READC+2 ;DEFINE INTERNAL FOCAL TRAPS INCH=OUTCH+2 GETC=INCH+2 PACKC=GETC+2 TESTC=PACKC+2 GETLN=TESTC+2 FINDLN=GETLN+2 PRNTLN=FINDLN+2 COPYLN=PRNTLN+2 .GLOBL AXIN,BUFR,STARTV,TOP START=COPYLN+2 SPNOR=START+2 ERASEV=SPNOR+2 ERASET=ERASEV+2 PRINT2=ERASET+2 DIGTST=PRINT2+2 PARTST=DIGTST+2 GROOVY=PARTST+2 SKPLPR=GROOVY+2 SKPNON=SKPLPR+2 TASK=SKPNON+2 EVAL.X=TASK+2 ERROR=TRAP ;TRAP INST+0=ERROR CODE (ADD 201+(ERR #)*2) OPEN=24646 ;CMP -(SP),-(SP) CLOSE=22626 ;CMP (SP)+,(SP)+ .MCALL FDAT$R,FDOP$R .GLOBL THISLN PRINT=104400 ;TRAP+(0,1,177) PRINT ASCII CODE POPJ=207 ;RTS PC CR=216 ;INTERNAL CODE FOR C.R. PRCNT=45 ;ASCII FOR % SIGN TEMP=%0 AC=%1 PTR=%2 R2=%2 AXOUT=%3 CHAR=%4 ;REGS FOR OUTPUT CONVERSION P=TEMP E=PTR F=AXOUT ; ;AS USED BY FLOATING POINT BH=PTR BL=AXOUT AH=CHAR AL=R5 ONE=200 ALL=1 NALPHA=20 CRLF=5015 ;CR,LF .GLOBL STACKO .GLOBL PROC ;STARTUP AREA FOR NEW COMMANDS .GLOBL GETARG,EVAL ;ENTRY POINTS .GLOBL GETVAR,WHIPV,PWREGS ; ;DEFINITIONS OF FLOATING-POINT OPERATIONS ; FGET=TRP+0 FAD$=TRP+10 FSB$=TRP+20 FDV$=TRP+30 FML$=TRP+40 FPOW=TRP+50 FPUT=TRP+60 FNOR=TRP+70 FINT=TRP+71 FSG$=TRP+72 FAB$=TRP+73 ;ODD SPELLINGS SO AS NOT TO BE FNG$=TRP+74 ;CONFUSED WITH FLOATING-POINT INSTRUCTIONS FREAD=TRP+75 FPRINT=TRP+76 FZER=TRP+77 FCODE=TRP+200 ;100 TO 177 UNUSED ;201 TO 377 UNUSED IPTR=1 ;@PTR XPTR=2 INTO=3 FROM=3 ;FOR READABILITY THROUGH=4 IMMED=5 REL=6 STACK=0 ;FOR READABILITY DIRECT=0 .GLOBL BUFBEG ; ;END OF PARAMETERS. ;LIMIT AREA IF OVERLAID VERSION BUFBEG=. ;BEGINNING OF TEXT BUFFER. ;ONCE ONLY CODE. ;INIT: BIC #277, SP ;SET TO XX7500 ; MOV SP, BOTTOM ;COPY ; MOV STACKO+2,SP ;START STACK ; MOV #64, AC ;ZERO VECTORS ; CLR (AC)+ ; CMP AC, #BEGIN ;AND STACK ; BLO .-6 ; ERASEV ;CLEAR VARIABLE AREA. ; MOV #CINT, @#100 ;SETUP CLOCK POINTER ; MOV #340, @#102 ;BR6 INIT: MOV SP,SPSAVE .IIF NDF,PGMSIZ,PGMSIZ=4000. .MCALL SVTK$S MOV #LIMTB,-(SP) EMT 377 ;DO SVTK$ .MCALL FINIT$ FINIT$ ;INIT FILE REGION .MCALL GCML$ .GLOBL INCMLB,KBOFDB,KBOLNK MOV #KBOFDB,KBOLNK ;SET UP OUTPUT POINTER FOR START ;INITIALIZE AND OPEN INPUT AND OUTPUT I/O ON CONSOLE FDAT$R #KBOFDB,#R.FIX,,#1 ;WRITE ON TI: 1 BYTE AT A TIME ;(THIS DIFFERS FROM THE DOS VERSION IN THAT HERE LUN 2 IS ALWAYS TI: ;AND WILL NEVER BECOME A FILE. FOR FILES, WE'LL PACK OTHERWISE.) FDOP$R #KBOFDB,#2,,#DEFLTI,#FO.WRT ;LUN 2 MUST BE ASSIGNED TO TI:!! ;OPEN OUTPUT TO CONSOLE HERE .MCALL OPEN$W OPEN$W #KBOFDB,#2 ;MANUALLY INSERT BUFFER ADDR AT RUNTIME ;DON'T ACTUALLY DO THE GCML$ BUSINESS UNTIL FOCAL STARTS UP. THINGS ARE ;MORE OR LESS INITIALIZED HERE. .GLOBL PGMSIZ MOV PC,R0 ADD #2*PGMSIZ,R0 ;(OVERLAY MOST OF INITIALIZER AREA BY CODE) MOV R0,BOTTOM ;SET TOP OF AREA TO USE MOV R0,BOTVEC .GLOBL BOTVEC ;SET VECTOR AREA START MOV #PC1+2,AC NEG AC SUB #2,AC MOV AC,PC1+2 MOV #THISLN,AC NEG AC MOV AC,THISLN ;SETUP NEG. ADDRESSES AT VARIOUS POINTS MOV #LINENO,AC NEG AC MOV AC,LINENO MOV #CFRS,AC ADD #2,AC NEG AC MOV AC,CFRS MOV #KIN,AC NEG AC MOV AC,KIN MOV SP,SPSAVE ;SAVE SP FOR MAIN PGM. ERASEV ;DO WHATEVER THIS DOES ;(I.E., CLEAR OUT TEXT BUFFER EARLY PART.) .IIF DF,$$$AST,PRINT+12 ;EMIT EXTRA LF .IF DF,ERRSTR JMP @#INIT2 .IFF JMP @#STARTX .ENDC ;(PICK SOME REALLY WEIRD NAME SO DEC WON'T DUPLICATE IT!) TX$T$A: .BLKW PGMSIZ ;TEXT AND VARIABLES STORAGE AREA IN RES. VERSION .END ;START IN MAIN INTERPRETER.