$! | |
$! BUILD_VMS.COM | |
$! Written By: Robert Alan Byer | |
$! byer@mail.ourservers.net | |
$! | |
$! | |
$! This script is used to compile and thar various simualtors in the SIMH | |
$! package for OpenVMS using DEC C v6.0-001. | |
$! | |
$! The script accepts the following parameters. | |
$! | |
$! P1 ALL Just Build "Everything". | |
$! ALTAIR Just Build The MITS Altair. | |
$! ALTAIRZ80 Just Build The MITS Altair Z80. | |
$! ECLIPSE Just Build The Data General Eclipse. | |
$! H316 Just Build The Honewell 316/516. | |
$! HP2100 Just Build The Hewlett-Packard HP-2100. | |
$! I1401 Just Build The IBM 1401. | |
$! IBM1130 Just Build The IBM 1130. | |
$! INTERDATA Just Build The Interdata 4. | |
$! NOVA Just Build The Data General Nova. | |
$! PDP1 Just Build The DEC PDP-1. | |
$! PDP8 Just Build The DEC PDP-8. | |
$! PDP10 Just Build The DEC PDP-10. | |
$! PDP11 Just Build The DEC PDP-11. | |
$! PDP18B Just Build The DEC PDP-4, PDP-7, PDP-9 And PDP-15. | |
$! S3 Just Build The IBM System 3. | |
$! SDS Just Build The SDS System. | |
$! VAX Just Build The DEC VAX. | |
$! | |
$! P2 DEBUG Link With Debugger Information. | |
$! NODEBUG Link Withoug Debugger Information. | |
$! | |
$! | |
$! The defaults are "ALL" and "NODEBUG". | |
$! | |
$! | |
$! Define The Simualtors We Have That We Can Build. | |
$! | |
$ SIMH_SIMS = "ALTAIR,ALTAIRZ80,ECLIPSE,H316,HP2100,I1401,IBM1130," + - | |
"INTERDATA,NOVA,PDP1,PDP8,PDP10,PDP11,PDP18B,S3,SDS,VAX" | |
$! | |
$! Check To Make Sure We Have Valid Command Line Parameters. | |
$! | |
$ GOSUB CHECK_OPTIONS | |
$! | |
$! Check To See If We Are On An AXP Machine. | |
$! | |
$ IF (F$GETSYI("CPU").LT.128) | |
$ THEN | |
$! | |
$! We Are On A VAX Machine So Tell The User. | |
$! | |
$ WRITE SYS$OUTPUT "Compiling On A VAX Machine." | |
$! | |
$! Define The Machine Type. | |
$! | |
$ MACHINE_TYPE = "VAX" | |
$! | |
$! Else, We Are On An AXP Machine. | |
$! | |
$ ELSE | |
$! | |
$! We Are On A AXP Machine So Tell The User. | |
$! | |
$ WRITE SYS$OUTPUT "Compiling On A AXP Machine." | |
$! | |
$! Define The Machine Type. | |
$! | |
$ MACHINE_TYPE = "AXP" | |
$! | |
$! End Of The Machine Check. | |
$! | |
$ ENDIF | |
$! | |
$! Define The Compile Command. | |
$! | |
$ CC = "CC/PREFIX=ALL/''OPTIMIZE'/''DEBUGGER'" + - | |
"/NEST=PRIMARY/NAME=(AS_IS,SHORTENED)" | |
$! | |
$! Define The SIMH Library Name. | |
$! | |
$ SIMHLIB_NAME = "SYS$DISK:[.LIB]SIMH-''MACHINE_TYPE'.OLB" | |
$! | |
$! Check To See What We Are To Do. | |
$! | |
$ IF (BUILDALL.NES."TRUE") | |
$ THEN | |
$! | |
$! Define The Name Of The Module We Are To Compile. | |
$! | |
$ SIMH_MOD_NAME = P1 | |
$! | |
$! Check To See If We Are Going To Build The PDP18B Simulators. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."PDP18B") | |
$ THEN | |
$! | |
$! Use The Special Build For PDP18B. | |
$! | |
$ GOSUB BUILD_PDP18B_MOD | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Build Just What The User Wants Us To Build. | |
$! | |
$ GOSUB BUILD_SIMHLIB_MOD | |
$! | |
$! That's All, Time To EXIT. | |
$! | |
$ EXIT | |
$! | |
$! Time To Exit The PDP18B Check. | |
$! | |
$ ENDIF | |
$! | |
$! Time To End The BUILDALL Check. | |
$! | |
$ ENDIF | |
$! | |
$! Build The SIMH Library. | |
$! | |
$ GOSUB BUILD_SIMHLIB | |
$! | |
$! Define A Counter And Set It To "0". | |
$! | |
$ SIMH_MOD_COUNTER = 0 | |
$! | |
$! Top Of The Loop. | |
$! | |
$ NEXT_SIMH_MOD_NAME: | |
$! | |
$! O.K, Extract The File Module From The File List. | |
$! | |
$ SIMH_MOD_NAME = F$ELEMENT(SIMH_MOD_COUNTER,",",SIMH_SIMS) | |
$! | |
$! Check To See If We Are At The End Of The Simulator List. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS.",") THEN GOTO SIMH_MOD_DONE | |
$! | |
$! Increment The Counter. | |
$! | |
$ SIMH_MOD_COUNTER = SIMH_MOD_COUNTER + 1 | |
$! | |
$! Check To See If We Are On VAX. | |
$! | |
$ IF (MACHINE_TYPE.EQS."VAX") | |
$ THEN | |
$! | |
$! Check To See If We Are Build The PDP10 or VAX Simulator. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."PDP10").OR.(SIMH_MOD_NAME.EQS."VAX") | |
$ THEN | |
$! | |
$! Tell The User We Can't Build PDP10 Or VAX On The VAX | |
$! Platform. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "Due to the use of INT64, the ''SIMH_MOD_NAME' simulator will not be built for the ''MACHINE_TYPE'" | |
$ WRITE SYS$OUTPUT "platform." | |
$ WRITE SYS$OUTPUT "" | |
$! | |
$! Skip And Go To The Next Simulator. | |
$! | |
$ GOTO NEXT_SIMH_MOD_NAME | |
$! | |
$! Time To End The PDP10 And VAX Check. | |
$! | |
$ ENDIF | |
$! | |
$! Time To End The VAX Check. | |
$! | |
$ ENDIF | |
$! | |
$! Check To See If We Are Going To Build The PDP18B Simulators. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."PDP18B") | |
$ THEN | |
$! | |
$! Use The Special Build For PDP18B. | |
$! | |
$ GOSUB BUILD_PDP18B_MOD | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Build The Module. | |
$! | |
$ GOSUB BUILD_SIMHLIB_MOD | |
$! | |
$! Time To End The PDP18D Check. | |
$! | |
$ ENDIF | |
$! | |
$! Go Back And Get Another Module Name. | |
$! | |
$ GOTO NEXT_SIMH_MOD_NAME | |
$! | |
$! End Of The Module List. | |
$! | |
$ SIMH_MOD_DONE: | |
$! | |
$! All Done Building Modules, Time To EXIT. | |
$! | |
$ EXIT | |
$! | |
$! Build The SYS$DISK:[.LIB]SIMH-xxx.OLB Library. | |
$! | |
$ BUILD_SIMHLIB: | |
$! | |
$! Define The C INCLUDES We Are To Use. | |
$! | |
$ SIMHLIB_INCLUDES = "INCLUDE=(SYS$DISK:[])" | |
$! | |
$! Check To See If We Have A SYS$DISK:[.LIB] Dierctory To Put The | |
$! Library In. | |
$! | |
$ IF (F$SEARCH("SYS$DISK:[]LIB.DIR").EQS."") | |
$ THEN | |
$! | |
$! A SYS$DISK:[.LIB] Directory Dosen't Exist So Tell The User We | |
$! Are Going To Create One. | |
$! | |
$ WRITE SYS$OUTPUT "Creating SYS$DISK:[.LIB]" | |
$! | |
$! Create The Directory. | |
$! | |
$ CREATE/DIRECTORY SYS$DISK:[.LIB] | |
$! | |
$! Time To End The SYS$DISK:[.LIB] Directory Check. | |
$! | |
$ ENDIF | |
$! | |
$! Check To See If We Already Have A SYS$DISK:[.LIB]SIMH-xxx.OLB Library... | |
$! | |
$ IF (F$SEARCH(SIMHLIB_NAME).EQS."") | |
$ THEN | |
$! | |
$! Guess Not, Create The Library. | |
$! | |
$ LIBRARY/CREATE/OBJECT 'SIMHLIB_NAME' | |
$! | |
$! End The Library Check. | |
$! | |
$ ENDIF | |
$! | |
$! Tell The User What We Are Doing. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "Compling The ''SIMHLIB_NAME' Library." | |
$! | |
$! Tell The User What Compile Command We Are Going To Use. | |
$! | |
$ WRITE SYS$OUTPUT "Using Compile Command: ",CC,"/",SIMHLIB_INCLUDES | |
$ WRITE SYS$OUTPUT "" | |
$! | |
$! Top Of The File Loop. | |
$! | |
$ NEXT_SIMHLIB_FILE: | |
$! | |
$! Define The List Of Files We Are Going To Compile. | |
$! | |
$ SIMHLIB_FILES = F$ELEMENT(0,";",F$ELEMENT(1,"]",F$SEARCH("SYS$DISK:[]*.C",1))) | |
$! | |
$! Extract The File Name From The File List. | |
$! | |
$ SIMHLIB_FILE_NAME = F$ELEMENT(0,".",SIMHLIB_FILES) | |
$! | |
$! Check To See If We Are At The End Of The File List. | |
$! | |
$ IF (SIMHLIB_FILE_NAME.EQS."]") THEN GOTO SIMHLIB_FILE_DONE | |
$! | |
$! Check To See If We We Are At The SCP.C File. | |
$! | |
$ IF (SIMHLIB_FILE_NAME.EQS."SCP") | |
$ THEN | |
$! | |
$! Since We Are At The SCP.C File, Go Back And | |
$! Get Another One As We Don't Want Add This To The Library. | |
$! | |
$ GOTO NEXT_SIMHLIB_FILE | |
$! | |
$! Time To End The SCP.C Check. | |
$! | |
$ ENDIF | |
$! | |
$! Create The Source File Name. | |
$! | |
$ SIMHLIB_SOURCE_FILE = "SYS$DISK:[]" + SIMHLIB_FILE_NAME + ".C" | |
$! | |
$! Create The Object File Name. | |
$! | |
$ SIMHLIB_OBJECT_FILE = "SYS$DISK:[]" + SIMHLIB_FILE_NAME + ".OBJ" | |
$! | |
$! Tell The User What We Are Compiling. | |
$! | |
$ WRITE SYS$OUTPUT " ",SIMHLIB_SOURCE_FILE | |
$! | |
$! Compile The File. | |
$! | |
$ CC/'SIMHLIB_INCLUDES'/OBJECT='SIMHLIB_OBJECT_FILE' 'SIMHLIB_SOURCE_FILE' | |
$! | |
$! Add It To The Library. | |
$! | |
$ LIBRARY/REPLACE/OBJECT 'SIMHLIB_NAME' 'SIMHLIB_OBJECT_FILE' | |
$! | |
$! Delete The Object File. | |
$! | |
$ DELETE/NOCONFIRM/NOLOG 'SIMHLIB_OBJECT_FILE';* | |
$! | |
$! Go Back And Do It Again. | |
$! | |
$ GOTO NEXT_SIMHLIB_FILE | |
$! | |
$! All Done Compiling. | |
$! | |
$ SIMHLIB_FILE_DONE: | |
$! | |
$! That's It, Time To Return From Where We Came From. | |
$! | |
$ RETURN | |
$! | |
$! Build The Libraries And Simulators.. | |
$! | |
$ BUILD_SIMHLIB_MOD: | |
$! | |
$! Check To See If We Are Going To Build The VAX Simulator. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."VAX") | |
$ THEN | |
$! | |
$! Define The C INCLUDES For The VAX Simulator. | |
$! | |
$ SIMHLIB_MOD_INCLUDES = "/INCLUDE=(SYS$DISK:[]," + - | |
"SYS$DISK:[.''SIMH_MOD_NAME']," + - | |
"SYS$DISK:[.PDP11])" | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Define The Standard C INCLUDES We Are To Use. | |
$! | |
$ SIMHLIB_MOD_INCLUDES = "/INCLUDE=(SYS$DISK:[]," + - | |
"SYS$DISK:[.''SIMH_MOD_NAME'])" | |
$! | |
$! Time To End The VAX Check. | |
$! | |
$ ENDIF | |
$! | |
$! Check To See If We Are Going To Build The Eclipse Simulator. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."ECLIPSE") | |
$ THEN | |
$! | |
$! Define The Module Directory For The Eclipse Simulator. | |
$! | |
$ SIMHLIB_MOD_DIR = "SYS$DISK:[.NOVA]" | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Define The Module Directory. | |
$! | |
$ SIMHLIB_MOD_DIR = "SYS$DISK:[.''SIMH_MOD_NAME']" | |
$! | |
$! Time To End The Ecplise Simulator Check. | |
$! | |
$ ENDIF | |
$! | |
$! Check To See If We Are Going To Build The Eclipse Simulator. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."ECLIPSE") | |
$ THEN | |
$! | |
$! Set The Compiler DEFINES For The Eclipse Simulator. | |
$! | |
$ SIMHLIB_MOD_DEFINE = "/DEFINE=(""ECLIPSE=1"")" | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Check To See If We Are Going To Build The PDP10 Or VAX Simulator. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."PDP10").OR.(SIMH_MOD_NAME.EQS."VAX") | |
$ THEN | |
$! | |
$! Set The Compiler DEFINES For The PDP10 Simulator. | |
$! | |
$ SIMHLIB_MOD_DEFINE = "/DEFINE=(""USE_INT64=1"")" | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Set The Compiler Defines For Everything Else. | |
$! | |
$ SIMHLIB_MOD_DEFINE = "" | |
$! | |
$! Time To End The PDP10 And VAX Simulator Check. | |
$! | |
$ ENDIF | |
$! | |
$! Time To End The Eclipse Simulator Check. | |
$! | |
$ ENDIF | |
$! | |
$! Check To See If There Are Any Files In The Module Directory. | |
$! | |
$ IF (F$SEARCH("''SIMHLIB_MOD_DIR'*.C").EQS."") | |
$ THEN | |
$! | |
$! There Are No Files To Compile In The Module Directory So | |
$! RETURN From Where We Came From And Get Another Module Name. | |
$! | |
$ RETURN | |
$! | |
$! Time To End The File Check. | |
$! | |
$ ENDIF | |
$! | |
$! Check To See If We Have A SYS$DISK:[.LIB] Dierctory To Put The | |
$! Library In. | |
$! | |
$ IF (F$SEARCH("SYS$DISK:[]LIB.DIR").EQS."") | |
$ THEN | |
$! | |
$! A SYS$DISK:[.LIB] Directory Dosen't Exist So Tell The User We | |
$! Are Going To Create One. | |
$! | |
$ WRITE SYS$OUTPUT "Creating SYS$DISK:[.LIB]" | |
$! | |
$! Create The Directory. | |
$! | |
$ CREATE/DIRECTORY SYS$DISK:[.LIB] | |
$! | |
$! Time To End The SYS$DISK:[.LIB] Directory Check. | |
$! | |
$ ENDIF | |
$! | |
$! Create The Module Library Name. | |
$! | |
$ SIMHLIB_MOD_LIB_NAME = "SYS$DISK:[.LIB]''SIMH_MOD_NAME'-''MACHINE_TYPE'" + - | |
".OLB" | |
$! | |
$! Check To See If We Already Have A Library... | |
$! | |
$ IF (F$SEARCH("''SIMHLIB_MOD_LIB_NAME'").EQS."") | |
$ THEN | |
$! | |
$! Guess Not, Create The Library. | |
$! | |
$ LIBRARY/CREATE/OBJECT 'SIMHLIB_MOD_LIB_NAME' | |
$! | |
$! End The Library Check. | |
$! | |
$ ENDIF | |
$! | |
$! Tell The User What We Are Doing. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "Compling The ''SIMHLIB_MOD_LIB_NAME' Library." | |
$! | |
$! Tell The User What Compile Command We Are Going To Use. | |
$! | |
$ WRITE SYS$OUTPUT "Using Compile Command: ",CC,"''SIMHLIB_MOD_INCLUDES'", - | |
SIMHLIB_MOD_DEFINE | |
$ WRITE SYS$OUTPUT "" | |
$! | |
$! Top Of The File Loop. | |
$! | |
$ NEXT_SIMHLIB_MOD_FILE: | |
$! | |
$! Check To See If We Are Going To Build Nova. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."NOVA") | |
$ THEN | |
$! | |
$! Since Nova And Eclipse Share The Same Directory We Only Want The | |
$! Nova Files When We Build Nova. | |
$! | |
$ SIMHLIB_MOD_FILES = F$ELEMENT(0,";",F$ELEMENT(1,"]", - | |
F$SEARCH("''SIMHLIB_MOD_DIR'''SIMH_MOD_NAME'*.C",1))) | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Define The List Of Files We Are Going To Compile. | |
$! | |
$ SIMHLIB_MOD_FILES = F$ELEMENT(0,";",F$ELEMENT(1,"]", - | |
F$SEARCH("''SIMHLIB_MOD_DIR'*.C",1))) | |
$! | |
$! Time To End The Nova Simulator Check. | |
$! | |
$ ENDIF | |
$! | |
$! Extract The File Name From The File List. | |
$! | |
$ SIMHLIB_MOD_FILE_NAME = F$ELEMENT(0,".",SIMHLIB_MOD_FILES) | |
$! | |
$! Check To See If We Are At The End Of The File List. | |
$! | |
$ IF (SIMHLIB_MOD_FILE_NAME.EQS."]") THEN GOTO SIMHLIB_MOD_FILE_DONE | |
$! | |
$! Check To See If We Building Eclipse. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."ECLIPSE") | |
$ THEN | |
$! | |
$! Check To See If We We Are At The NOVA_CPU.C Or NOVA_TT.C File. | |
$! | |
$ IF (SIMHLIB_MOD_FILE_NAME.EQS."NOVA_CPU").OR. - | |
(SIMHLIB_MOD_FILE_NAME.EQS."NOVA_TT") | |
$ THEN | |
$! | |
$! Since We Building The Eclipse And Are At The Either The NOVA_CPU.C Or | |
$! NOVA_TT.C File, Go Back And Get Another File As We Don't Want Add | |
$! These To The Eclipse Library. | |
$! | |
$ GOTO NEXT_SIMHLIB_MOD_FILE | |
$! | |
$! Time To End The NOVA_CPU.C Check. | |
$! | |
$ ENDIF | |
$! | |
$! Time To End The Eclipse Check. | |
$! | |
$ ENDIF | |
$! | |
$! Check To See If We Building IBM 1130 | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."IBM1130") | |
$ THEN | |
$! | |
$! Check To See If We We Are At The SYS$DISK:[.IBM1130]SCP.C File. | |
$! | |
$ IF (SIMHLIB_MOD_FILE_NAME.EQS."SCP") | |
$ THEN | |
$! | |
$! Since We Are Building The IBM 1130 Without The GUI Front Panel | |
$! Interface (For Now), Go Back And Get Another File As We Don't | |
$! Want To Add This To The IBM 1130 Library. | |
$! | |
$ GOTO NEXT_SIMHLIB_MOD_FILE | |
$! | |
$! Time To End The SYS$DISK:[.IBM1130]SCP.C Check. | |
$! | |
$ ENDIF | |
$! | |
$! Time To End The IBM 1130 Check. | |
$! | |
$ ENDIF | |
$! | |
$! Create The Source File Name. | |
$! | |
$ SIMHLIB_MOD_SOURCE_FILE = "''SIMHLIB_MOD_DIR'''SIMHLIB_MOD_FILE_NAME'.C" | |
$! | |
$! Create The Object File Name. | |
$! | |
$ SIMHLIB_MOD_OBJECT_FILE = "''SIMHLIB_MOD_DIR'''SIMHLIB_MOD_FILE_NAME'.OBJ" | |
$! | |
$! Tell The User What We Are Compiling. | |
$! | |
$ WRITE SYS$OUTPUT " ",SIMHLIB_MOD_SOURCE_FILE | |
$! | |
$! Compile The File. | |
$! | |
$ CC 'SIMHLIB_MOD_INCLUDES''SIMHLIB_MOD_DEFINE'/OBJECT='SIMHLIB_MOD_OBJECT_FILE' - | |
'SIMHLIB_MOD_SOURCE_FILE' | |
$! | |
$! Add It To The Library. | |
$! | |
$ LIBRARY/REPLACE/OBJECT 'SIMHLIB_MOD_LIB_NAME' 'SIMHLIB_MOD_OBJECT_FILE' | |
$! | |
$! Delete The Object File. | |
$! | |
$ DELETE/NOCONFIRM/NOLOG 'SIMHLIB_MOD_OBJECT_FILE';* | |
$! | |
$! Go Back And Do It Again. | |
$! | |
$ GOTO NEXT_SIMHLIB_MOD_FILE | |
$! | |
$! All Done Compiling. | |
$! | |
$ SIMHLIB_MOD_FILE_DONE: | |
$! | |
$! Check To See If We Are Building The VAX Simulator. | |
$! | |
$ IF (SIMH_MOD_NAME.EQS."VAX") | |
$ THEN | |
$! | |
$! Define The PDP11 Files We Need To Include In The SYS$DISK:[.LIB]VAX-xxx.OLB | |
$! Library. | |
$! | |
$ SIMH_PDP11_LIST = "PDP11_RL,PDP11_RQ,PDP11_TS,PDP11_DZ,PDP11_LP" | |
$! | |
$! Define A Counter And Set It To "0". | |
$! | |
$ SIMH_PDP11_COUNTER = 0 | |
$! | |
$! Top Of The Loop. | |
$! | |
$ NEXT_SIMH_PDP11_NAME: | |
$! | |
$! O.K, Extract The PDP11 File From The File List. | |
$! | |
$ SIMH_PDP11_FILE_NAME = F$ELEMENT(SIMH_PDP11_COUNTER,",",SIMH_PDP11_LIST) | |
$! | |
$! Check To See If We Are At The End Of The PDP11 List. | |
$! | |
$ IF (SIMH_PDP11_FILE_NAME.EQS.",") THEN GOTO SIMH_PDP11_FILE_DONE | |
$! | |
$! Increment The Counter. | |
$! | |
$ SIMH_PDP11_COUNTER = SIMH_PDP11_COUNTER + 1 | |
$! | |
$! Create The Source File Name. | |
$! | |
$ SIMH_PDP11_SOURCE_FILE = "SYS$DISK:[.PDP11]''SIMH_PDP11_FILE_NAME'.C" | |
$! | |
$! Create The Object File Name. | |
$! | |
$ SIMH_PDP11_OBJECT_FILE = "SYS$DISK:[.PDP11]''SIMH_PDP11_FILE_NAME'.OBJ" | |
$! | |
$! Tell The User What We Are Compiling. | |
$! | |
$ WRITE SYS$OUTPUT " ",SIMH_PDP11_SOURCE_FILE | |
$! | |
$! Compile The File. | |
$! | |
$ CC 'SIMHLIB_MOD_INCLUDES''SIMHLIB_MOD_DEFINE' - | |
/OBJECT='SIMH_PDP11_OBJECT_FILE' 'SIMH_PDP11_SOURCE_FILE' | |
$! | |
$! Add It To The Library. | |
$! | |
$ LIBRARY/REPLACE/OBJECT 'SIMHLIB_MOD_LIB_NAME' 'SIMH_PDP11_OBJECT_FILE' | |
$! | |
$! Delete The Object File. | |
$! | |
$ DELETE/NOCONFIRM/NOLOG 'SIMH_PDP11_OBJECT_FILE';* | |
$! | |
$! Go Back And Do It Again. | |
$! | |
$ GOTO NEXT_SIMH_PDP11_NAME | |
$! | |
$! All Done Compiling. | |
$! | |
$ SIMH_PDP11_FILE_DONE: | |
$! | |
$! Time To End The VAX Check. | |
$! | |
$ ENDIF | |
$! | |
$! Display A Blank Line. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$! | |
$! Check To See If We Have The SYS$DISK:[.LIB]SIMH-xxx.OLB Library. | |
$! | |
$ IF (F$SEARCH("SYS$DISK:[.LIB]SIMH-''MACHINE_TYPE'.OLB").EQS."") | |
$ THEN | |
$! | |
$! Guess Not, So Build The SYS$DISK:[.LIB]SIMH-xxx.OLB Library. | |
$! | |
$ GOSUB BUILD_SIMHLIB | |
$! | |
$! End The SYS$DISK:[.LIB]SIMH-xxx.OLB Library Check. | |
$! | |
$ ENDIF | |
$! | |
$! Check To See If We Have A SYS$DISK:[.BIN] Dierctory To Put The | |
$! Executable In. | |
$! | |
$ IF (F$SEARCH("SYS$DISK:[]BIN.DIR").EQS."") | |
$ THEN | |
$! | |
$! A SYS$DISK:[.BIN] Directory Dosen't Exist So Tell The User We | |
$! Are Going To Create One. | |
$! | |
$ WRITE SYS$OUTPUT "Creating SYS$DISK:[.BIN]" | |
$! | |
$! Create The Directory. | |
$! | |
$ CREATE/DIRECTORY SYS$DISK:[.BIN] | |
$! | |
$! Time To End The SYS$DISK:[.BIN] Directory Check. | |
$! | |
$ ENDIF | |
$! | |
$! Tell The User What We Building. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "Building SYS$DISK:[.BIN]''SIMH_MOD_NAME'-''MACHINE_TYPE'.EXE" | |
$! | |
$! Compile The SYS$DISK:[]SCP.C File. | |
$! | |
$ CC 'SIMHLIB_MOD_INCLUDES''SIMHLIB_MOD_DEFINE' - | |
/OBJECT=SYS$DISK:[]SCP-'MACHINE_TYPE'.OBJ SYS$DISK:[]SCP.C | |
$! | |
$! Link The Simulator. | |
$! | |
$ LINK/'DEBUGGER'/'TRACEBACK' - | |
/EXE=SYS$DISK:[.BIN]'SIMH_MOD_NAME'-'MACHINE_TYPE'.EXE - | |
SYS$DISK:[]SCP-'MACHINE_TYPE'.OBJ,'SIMHLIB_MOD_LIB_NAME'/LIBRARY, - | |
'SIMHLIB_NAME'/LIBRARY | |
$! | |
$! Delete The SYS$DISK:[]SCP-xxx.OBJ File. | |
$! | |
$ DELETE/NOCONFIRM/NOLOG SYS$DISK:[]SCP*.OBJ*;* | |
$! | |
$! Time To Return From Where We Came From. | |
$! | |
$ RETURN | |
$! | |
$! Build The PDP18B Systems. | |
$! | |
$ BUILD_PDP18B_MOD: | |
$! | |
$! Define The PDP18B System We Are To Build. | |
$! | |
$ SIMH_PDP18B_MODS = "PDP4,PDP7,PDP9,PDP15" | |
$! | |
$! Define The Compiler INCLUDES. | |
$! | |
$ SIMH_PDP18B_INCLUDE = "/INCLUDE=(SYS$DISK:[],SYS$DISK:[.PDP18B])" | |
$! | |
$! Define A Counter And Set It To "0". | |
$! | |
$ SIMH_PDP18B_COUNTER = 0 | |
$! | |
$! Top Of The Loop. | |
$! | |
$ NEXT_SIMH_PDP18B_NAME: | |
$! | |
$! O.K, Extract The File Module From The File List. | |
$! | |
$ SIMH_PDP18B_NAME = F$ELEMENT(SIMH_PDP18B_COUNTER,",",SIMH_PDP18B_MODS) | |
$! | |
$! Check To See If We Are At The End Of The PDP18B List. | |
$! | |
$ IF (SIMH_PDP18B_NAME.EQS.",") THEN GOTO SIMH_PDP18B_DONE | |
$! | |
$! Increment The Counter. | |
$! | |
$ SIMH_PDP18B_COUNTER = SIMH_PDP18B_COUNTER + 1 | |
$! | |
$! Define The Compiler DEFINES. | |
$! | |
$ SIMH_PDP18B_DEFINE = "/DEFINE=(""''SIMH_PDP18B_NAME'=1"")" | |
$! | |
$! Check To See If We Have A SYS$DISK:[.LIB] Dierctory To Put The | |
$! Library In. | |
$! | |
$ IF (F$SEARCH("SYS$DISK:[]LIB.DIR").EQS."") | |
$ THEN | |
$! | |
$! A SYS$DISK:[.LIB] Directory Dosen't Exist So Tell The User We | |
$! Are Going To Create One. | |
$! | |
$ WRITE SYS$OUTPUT "Creating SYS$DISK:[.LIB]" | |
$! | |
$! Create The Directory. | |
$! | |
$ CREATE/DIRECTORY SYS$DISK:[.LIB] | |
$! | |
$! Time To End The SYS$DISK:[.LIB] Directory Check. | |
$! | |
$ ENDIF | |
$! | |
$! Create The Module Library Name. | |
$! | |
$ SIMH_PDP18B_LIB_NAME = "SYS$DISK:[.LIB]''SIMH_PDP18B_NAME'-" + - | |
"''MACHINE_TYPE'.OLB" | |
$! | |
$! Check To See If We Already Have A Library... | |
$! | |
$ IF (F$SEARCH(SIMH_PDP18B_LIB_NAME).EQS."") | |
$ THEN | |
$! | |
$! Guess Not, Create The Library. | |
$! | |
$ LIBRARY/CREATE/OBJECT 'SIMH_PDP18B_LIB_NAME' | |
$! | |
$! End The Library Check. | |
$! | |
$ ENDIF | |
$! | |
$! Tell The User What We Are Doing. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "Compling The ''SIMH_PDP18B_LIB_NAME' Library." | |
$! | |
$! Tell The User What Compile Command We Are Going To Use. | |
$! | |
$ WRITE SYS$OUTPUT "Using Compile Command: ",CC,SIMH_PDP18B_DEFINE, - | |
SIMH_PDP18B_INCLUDE | |
$ WRITE SYS$OUTPUT "" | |
$! | |
$! Top Of The File Loop. | |
$! | |
$ NEXT_SIMH_PDP18B_FILE: | |
$! | |
$! Define The List Of Files We Are Going To Compile. | |
$! | |
$ SIMH_PDP18B_FILES = F$ELEMENT(0,";",F$ELEMENT(1,"]",- | |
F$SEARCH("SYS$DISK:[.PDP18B]*.C",1))) | |
$! | |
$! Extract The File Name From The File List. | |
$! | |
$ SIMH_PDP18B_FILE_NAME = F$ELEMENT(0,".",SIMH_PDP18B_FILES) | |
$! | |
$! Check To See If We Are At The End Of The File List. | |
$! | |
$ IF (SIMH_PDP18B_FILE_NAME.EQS."]") THEN GOTO SIMH_PDP18B_FILE_DONE | |
$! | |
$! Create The Source File Name. | |
$! | |
$ SIMH_PDP18B_SOURCE_FILE = "SYS$DISK:[.PDP18B]" + SIMH_PDP18B_FILE_NAME + ".C" | |
$! | |
$! Create The Object File Name. | |
$! | |
$ SIMH_PDP18B_OBJECT_FILE = "SYS$DISK:[.PDP18B]" + SIMH_PDP18B_FILE_NAME + - | |
".OBJ" | |
$! | |
$! Tell The User What We Are Compiling. | |
$! | |
$ WRITE SYS$OUTPUT " ",SIMH_PDP18B_SOURCE_FILE | |
$! | |
$! Compile The File. | |
$! | |
$ CC 'SIMH_PDP18B_DEFINE''SIMH_PDP18B_INCLUDE' - | |
/OBJECT='SIMH_PDP18B_OBJECT_FILE' 'SIMH_PDP18B_SOURCE_FILE' | |
$! | |
$! Add It To The Library. | |
$! | |
$ LIBRARY/REPLACE/OBJECT 'SIMH_PDP18B_LIB_NAME' 'SIMH_PDP18B_OBJECT_FILE' | |
$! | |
$! Delete The Object File. | |
$! | |
$ DELETE/NOCONFIRM/NOLOG 'SIMH_PDP18B_OBJECT_FILE';* | |
$! | |
$! Go Back And Do It Again. | |
$! | |
$ GOTO NEXT_SIMH_PDP18B_FILE | |
$! | |
$! All Done Compiling. | |
$! | |
$ SIMH_PDP18B_FILE_DONE: | |
$! | |
$! Display A Blank Line. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$! | |
$! Check To See If We Have The SYS$DISK:[.LIB]SIMH-xxx.OLB Library. | |
$! | |
$ IF (F$SEARCH("SYS$DISK:[.LIB]SIMH-''MACHINE_TYPE'.OLB").EQS."") | |
$ THEN | |
$! | |
$! Guess Not, So Build The SYS$DISK:[.LIB]SIMH-xxx.OLB Library. | |
$! | |
$ GOSUB BUILD_SIMHLIB | |
$! | |
$! End The SYS$DISK:[.LIB]SIMH-xxx.OLB Library Check. | |
$! | |
$ ENDIF | |
$! | |
$! Check To See If We Have A SYS$DISK:[.BIN] Dierctory To Put The | |
$! Executable In. | |
$! | |
$ IF (F$SEARCH("SYS$DISK:[]BIN.DIR").EQS."") | |
$ THEN | |
$! | |
$! A SYS$DISK:[.BIN] Directory Dosen't Exist So Tell The User We | |
$! Are Going To Create One. | |
$! | |
$ WRITE SYS$OUTPUT "Creating SYS$DISK:[.BIN]" | |
$! | |
$! Create The Directory. | |
$! | |
$ CREATE/DIRECTORY SYS$DISK:[.BIN] | |
$! | |
$! Time To End The SYS$DISK:[.BIN] Directory Check. | |
$! | |
$ ENDIF | |
$! | |
$! Tell The User What We Building. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "Building SYS$DISK:[.BIN]''SIMH_PDP18B_NAME'-''MACHINE_TYPE'.EXE" | |
$! | |
$! Compile The SYS$DISK:[]SCP.C File. | |
$! | |
$ CC 'SIMH_PDP18_MOD_INCLUDES''SIMH_PDP18B_MOD_DEFINE' - | |
/OBJECT=SYS$DISK:[]SCP-'MACHINE_TYPE'.OBJ SYS$DISK:[]SCP.C | |
$! | |
$! Link The Simulator. | |
$! | |
$ LINK/'DEBUGGER'/'TRACEBACK' - | |
/EXE=SYS$DISK:[.BIN]'SIMH_PDP18B_NAME'-'MACHINE_TYPE'.EXE - | |
SYS$DISK:[]SCP-'MACHINE_TYPE'.OBJ,'SIMH_PDP18B_LIB_NAME'/LIBRARY, - | |
'SIMHLIB_NAME'/LIBRARY | |
$! | |
$! Delete The SYS$DISK:[]SCP-xxx.OBJ File. | |
$! | |
$ DELETE/NOCONFIRM/NOLOG SYS$DISK:[]SCP*.OBJ*;* | |
$! | |
$! Go Back And Do The Next PDP18B Module. | |
$! | |
$ GOTO NEXT_SIMH_PDP18B_NAME | |
$! | |
$! End Of The PDP18B Module List. | |
$! | |
$ SIMH_PDP18B_DONE: | |
$! | |
$! All Done, Time To Return From Where We Came From. | |
$! | |
$ RETURN | |
$! | |
$! Check The User's Options. | |
$! | |
$ CHECK_OPTIONS: | |
$! | |
$! Define A Counter And Set It To "0". | |
$! | |
$ SIMH_SIMS_COUNTER = 0 | |
$! | |
$! Check To See If We Are To "Just Build Everything." | |
$! | |
$ IF (P1.EQS."").OR.(P1.EQS."ALL") | |
$ THEN | |
$! | |
$! P1 Is Blank Or "ALL", So Just Build Everything. | |
$! | |
$ BUILDALL = "TRUE" | |
$! | |
$! Else | |
$! | |
$ ELSE | |
$! | |
$! Top Of The Loop. | |
$! | |
$ NEXT_SIMH_SIMS: | |
$! | |
$! O.K, Extract The File Name From The File List. | |
$! | |
$ SIMH_SIMS_NAME = F$ELEMENT(SIMH_SIMS_COUNTER,",",SIMH_SIMS) | |
$! | |
$! Check To See If We Are At The End Of The Simulator List. | |
$! | |
$ IF (SIMH_SIMS_NAME.EQS.",") THEN GOTO SIMH_SIMS_ERROR | |
$! | |
$! Increment The Counter. | |
$! | |
$ SIMH_SIMS_COUNTER = SIMH_SIMS_COUNTER + 1 | |
$! | |
$! Check To See If P1 Has A Valid Argument. | |
$! | |
$ IF (P1.EQS.SIMH_SIMS_NAME) | |
$ THEN | |
$! | |
$! A Valid Argument. | |
$! | |
$ BUILDALL = P1 | |
$! | |
$! Exit This Routine. | |
$! | |
$ GOTO SIMH_CHECK_OPT_DONE | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Go Back And Check Agianst The Next Sim In The List. | |
$! | |
$ GOTO NEXT_SIMH_SIMS | |
$! | |
$! Time To End The Valid Argument Check. | |
$! | |
$ ENDIF | |
$! | |
$! We Don't Know What The User Entered, So Tell Them. | |
$! | |
$ SIMH_SIMS_ERROR: | |
$! | |
$! Tell The User We Don't Know What They Want. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:" | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT " ALL : Just Build "Everything". | |
$ WRITE SYS$OUTPUT " ALTAIR : Just Build The MITS Altair." | |
$ WRITE SYS$OUTPUT " ALTAIRZ80 : Just Build The MITS Altair Z80." | |
$ WRITE SYS$OUTPUT " ECLIPSE : Just Build The Data General Eclipse." | |
$ WRITE SYS$OUTPUT " H316 : Just Build The Honewell 316/516." | |
$ WRITE SYS$OUTPUT " HP2100 : Just Build The Hewlett-Packard HP-3100." | |
$ WRITE SYS$OUTPUT " I1401 : Just Build The IBM 1401." | |
$ WRITE SYS$OUTPUT " IBM1130 : Just Build The IBM 1130." | |
$ WRITE SYS$OUTPUT " INTERDATA : Just Build The Interdata 4." | |
$ WRITE SYS$OUTPUT " NOVA : Just Build The Data General Nova." | |
$ WRITE SYS$OUTPUT " PDP1 : Just Build The DEC PDP-1." | |
$ WRITE SYS$OUTPUT " PDP8 : Just Build The DEC PDP-8." | |
$ WRITE SYS$OUTPUT " PDP10 : Just Build The DEC PDP-10." | |
$ WRITE SYS$OUTPUT " PDP11 : Just Build The DEC PDP-11." | |
$ WRITE SYS$OUTPUT " PDP18B : Just Build The DEC PDP-4, PDP-7, PDP-9 And PDP-15." | |
$ WRITE SYS$OUTPUT " S3 : Just Build The IBM System 3" | |
$ WRITE SYS$OUTPUT " SDS : Just Build The SDS System" | |
$ WRITE SYS$OUTPUT " VAX : Just Build The DEC VAX." | |
$ WRITE SYS$OUTPUT "" | |
$! | |
$! Time To Exit. | |
$! | |
$ EXIT | |
$! | |
$! Time To End The BUILDALL Check. | |
$! | |
$ ENDIF | |
$ SIMH_CHECK_OPT_DONE: | |
$! | |
$! Check To See If We Are To Link Without Debugger Information. | |
$! | |
$ IF ((P2.EQS."").OR.(P2.EQS."NODEBUG")) | |
$ THEN | |
$! | |
$! P2 Is Either Blank Or "NODEBUG" So Link Without Debugger Information. | |
$! | |
$ DEBUGGER = "NODEBUG" | |
$! | |
$! Check To See If We Are On An AXP Machine. | |
$! | |
$ IF (F$GETSYI("CPU").LT.128) | |
$ THEN | |
$! | |
$! We Are On A VAX Machine So Use The VAX Optimizations. | |
$ OPTIMIZE = "OPTIMIZE" | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! We Are On A AXP Machine So Use The AXP Optimizations. | |
$! | |
$ OPTIMIZE = "OPTIMIZE=(INTRINSICS,INLINE=AUTOMATIC,LEVEL=5,UNROLL=0,TUNE=HOST)/ARCH=HOST" | |
$! | |
$! Time To End The Machine Check. | |
$! | |
$ ENDIF | |
$! | |
$! Set The Link TRACEBACK Option. | |
$! | |
$ TRACEBACK = "NOTRACEBACK" | |
$! | |
$! Tell The User What They Selected. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "Runtime Debugger Won't Be Included At Link." | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Check To See If We Are To Link With Debugger Information. | |
$! | |
$ IF (P2.EQS."DEBUG") | |
$ THEN | |
$! | |
$! Compile With Debugger Information. | |
$! | |
$ DEBUGGER = "DEBUG" | |
$ OPTIMIZE = "NOOPTIMIZE" | |
$ TRACEBACK = "TRACEBACK" | |
$! | |
$! Tell The User What They Selected. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "Runtime Debugger Will Be Included At Link." | |
$! | |
$! Else... | |
$! | |
$ ELSE | |
$! | |
$! Tell The User Entered An Invalid Option.. | |
$! | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:" | |
$ WRITE SYS$OUTPUT "" | |
$ WRITE SYS$OUTPUT " DEBUG : Link With The Debugger Information." | |
$ WRITE SYS$OUTPUT " NODEBUG : Link Without The Debugger Information." | |
$ WRITE SYS$OUTPUT "" | |
$! | |
$! Time To EXIT. | |
$! | |
$ EXIT | |
$! | |
$! Time To End The Valid P2 Check. | |
$! | |
$ ENDIF | |
$! | |
$! Time To End The P2 Check. | |
$! | |
$ ENDIF | |
$! | |
$! Time To Return To Where We Were. | |
$! | |
$ RETURN |