XLIST /LAST EDIT: 3-NOV-75, JV /******* MULTI8 BOOTSTRAP MODULE ******* /LAST EDIT: 29-AUG-75, JMS (APPEND SOME CODE) /LAST EDIT: 15-JULY-75, JV /LAST EDIT: 4-JULY-75, ELC /LAST EDIT: 9-MAY-75, JV /LAST EDIT: 10-DECEMBER-74, ELC /NAME: BO /LENGTH:ONE PAGE /FUNCTION:TO BOOTSTRAP OS8 FROM THE SYSTEM DEVICE / RESIDENT MODULE. THIS ENABLES ONE TO RE-WRITE IT / FOR SOME SPECIAL PURPOSE. THE MODULE IS CALLED BY / THE CTRL/B MODULE UPON TYPING BOOT. / THE OS8 BOOTSTRAP IS A TRICKY PIECE OF PROGRAM WHICH / ULTIMATELY RESULTS IN LOADING PAGE 0 OF THE SYSTEM- / DEVICE INTO THE LAST PAGE OF FIELD 1, AND PAGE 1 / INTO THE LAST PAGE OF FIELD 0. BO ALSO LOADS THE LAST / PAGE OF BG FIELD 3 WITH UPSCAL (USED BY EMG DEPT. / DYKZIGT HOSPITAL, ROTTERDAM). SINCE THE FOREGROUND / IS ONLY ABLE TO DO TRANSFERS OF ONE BLOCK OR ONLY / THE FIRST PAGE OF THAT BLOCK, A SPECIAL PROVISION / HAD TO BE MADE. / THE MODULE WORKS FOR THE BG TO WHICH BJOB BELONGS, / WHEN ENTERED. IT FIRST WAITS TILL THE EMULATOR HAS / FINISHED. THE BG COULD RESIDE ON DISK, HOWEVER. / SO IT SETS THE INCORE AND EMULATE BIT, REQUESTING / THEBG IN CORE AND KEEPING IT THERE. IT THEN WAITS / UNTIL IT HAS ARRIVED. UPON COMPLETION OF THE TRANS- / FERS IT SETS THE BG STATUSBITS SO THAT IT WILL RUN. /USE: TAD (BJOB / JMS MONITOR / CALL / "B^100+"O&3777 / BUSY RETURN /AC UNCHANGED / NORMAL RETURN /AC=0 *200 "B^100+"O&3777 400 /ONE PAGE + ONE PAGE CODE BOXDT1, BODTV1 BOXDT2, BODTV2 /RELOCATED POINTERS BOUPS, 400 /POINTS TO THE NEXT PAGE 0 BO, CDF MONFLD DCA BOUSTAT TAD I (BOTBLK DCA BODTV1+2 TAD BODTV1+2 DCA BODTV2+2 TAD I BOUSTAT //LOOK IF WE CAN DO IT AND (EMULATE+NOBOOT+BGBLOK SZA CLA JMP BOERR //NO, BG IS UNSAFE IFNZRO BGMAX-1 < TAD I BOUSTAT AND (ONDISK //LOOK IF HE IS IN CORE SNA CLA JMP BOINCORE //HE IS IN CORE ALREADY TAD (INCORE+EMULATE //REQUEST IN CORE;KEEP IT THERE > IFZERO BGMAX-1 < TAD (EMULATE //SET STATUS TO EMULATE > TAD I BOUSTAT /SET INCORE+EMULATE AND (-INACTIVE-BGSTOP-1 //RESET INACTIVE AND BGSTOP DCA I BOUSTAT // IFNZRO BGMAX-1 < TAD BOUSTAT //FIND SLOT TO WAIT TAD (USLOT // JMS DEFER // DCA BOSLOT // JMS MONITOR //GO AND TELL THE BG SCHEDULER SIGNAL BSSLOT JMS MONITOR //WAIT FOR BG IN CORE WAIT BOSLOT, 0 //OVERLAID WITH CORRECT SLOT# BOINCORE,CLA > TAD BOXDT1 /FIRST TRANSFER; FIELD 1 JMS BOXFER TAD BOXDT2 /2ND TRANSFER; FIELD 0 JMS BOXFER IFNZRO BGMAX-1 < CDF MONFLD TAD BOUSTAT TAD (UDISK JMS DEFER /GET UNIT # CLL RAL /MULTIPLY BY 10 RTL TAD (4500 /FILE STRUCT., DEV NR 51,52,.. CDF BGFLD+10 DCA I (7760 /PUT IN DEV. CONTROL WORD TABLE TAD I (7760 DCA I (7761 /MAKE DSK: EQUAL TO SYS: > IFZERO BGFLDS-2 < CDF MONFLD /> IFZERO BGFLDS-4 < TAD (7600-1 DCA BGPNTR TAD MYCDF DCA BOLOOP BOLOOP, HLT TAD I BOUPS /COPY THE NEXT PAGE IN THE LAST ISZ BOUPS /PAGE OF BGFLD 3. CDF 30+BGFLD DCA I BGPNTR ISZ UPSCNT JMP BOLOOP > TAD C7600 JMS BOPUT UPC TAD (BGFLD%10+BGFLD+100 JMS BOPUT UFLDS IFDEF KM8E < CDTOIF CIF MONFLD JMS I (BGCDIF /THE NEWER STRATEGY ! > IFNZRO BGMAX-1 < TAD (-EMULATE-INCORE-BGSTOP-1 //CLEAR EMULATE BIT > IFZERO BGMAX-1 < TAD (-EMULATE-BGSTOP-1 //CLEAR EMULATE BIT > AND I BOUSTAT // TAD (BGSTOP //RE-SET BGSTOP DCA I BOUSTAT // SKP CLA BOERR, ACM1 /SIGNAL ERROR JMS MONITOR // EXIT SWPOUT BOUSTAT,0 /PNTR TO STATUSWORD. BOPUT, 0 /ROUTINE TO STORE IN BGDATA AREA DCA ZTEM1 CDTOIF TAD I BOPUT ISZ BOPUT TAD BOUSTAT DCA X CDF MONFLD TAD ZTEM1 DCA I X JMP I BOPUT /THE ACTUAL TRANSFER-AND-WAIT BOXFER, .-. /ENTER WITH PNTR IN AC CDTOIF JMS MONITOR CALL "S^100+"Y&3777 JMP .-3 /BUSY? REPEAT DCA .+3 /SAVE SLOT TO WAIT FOR JMS MONITOR WAIT 0 CLA JMP I BOXFER /TRANSFERVECTOR: PAGE ZERO BOOT-BLOCK TO LAST PAGE FIELD 1 BODTV1, BGFLD+110 7600 0000 /BOOT BLOCK /TRANSFERVECTOR: PAGE ONE BOOT-BLOCK TO LAST PAGE FIELD 0 /IN FACT IT MOVES PAGE 0 AND 1 TO LAST 2 PAGES FIELD 0 BODTV2, BGFLD+200 7400 0000 /BOOT BLOCK BGPNTR=AUTO10 UPSCNT, -UPSEND+UPSCAL /-# OF CODE PAGE XLIST /NAME : UPSCAL /J.M.SCHIPPER , E.M.G. /DIJKZIGT , ROTTERDAM /DATE 19/6/75 /THIS ROUTINE HANDLES UPSINT,FPPEAE LOOKUP=2 SYSHLR=7607 UPSFLD=30 USRFLD=10 WRITE=4000 READ=0000 /CALL TO UPSCAL: / CDF N N=PROGRAM FIELD / CIF 30 / JMS I (7600 / FUNCTION / ERROR RETURN AC=0 IF UPSINT.US OR FPPEAE.US / NOT ON SYS DEVICE. / NORMAL RETURN AC=0 /FUNCTION: 0=LOAD UPSINT IN CORE / 4000=SAVE UPSINT ARREA AND LOAD UPSINT / 1=LOAD UPSINT SAVE AREA / 2=LOAD FPPEAE IF AN FPPOUT IS DONE BEFORE / 4002=SAVE FPPEAE ARREA AND LOAD FPPEAE / 3=LOAD FPPEAE SAVE ARREA AND ALLOW TO PERFORM / A FPPIN. /DEFINE EAE EAE=1 RELOC 7600 UPSCAL, 0 /ENTRY, MUST BE 0 CLA CLL TAD I UPSCAL ISZ UPSCAL DCA MODE RDF TAD DFIF DCA RETFLD /SETUP RETURN FIELD CLL CLA CMA RAL /-2 /NO NEED TO PERFORM A LOOKUP TAD MODE /IF FPPEAE CALL IS ILLEGAL SZA CLA /CALL FPPEAE ? JMP .+4 /NO - GO ON. TAD FPPSW /YES - FPP IN CORE SZA CLA JMP LEAVE /FPPEAE ALREADY IN CORE TAD UPSINT /LOCATE UPSINT ON SYS DCA FILE JMS LOOK /LOOKUP UPSINT.US ON SYS TAD MODE AND K3 TAD TABP DCA FUNC TAD I FUNC DCA FUNC DCA CORE /SET CORE ADDRESS TO ZERO JMP I FUNC /PERFORM THE DESIRED TASK ERROUT, SKP CLA LEAVE, ISZ UPSCAL /SET NORMAL RETURN RETFLD, HLT /OVERLAYED BY CALLING BG FIELD JMP I UPSCAL TABP, .+1 UPSIN UPSOUT FPPIN FPPOUT FPPSW, 0 UPSIN, TAD MODE /SAVE UPSINT ARREA ? SMA CLA JMP LOUPS /NO - LOAD UPSINT TAD WR4BF3 /SAVE UPSINT ARREA DCA FUNC CLL CLA IAC RAL /SKIP 2 BLOCKS UPSINT JMS SYS LOUPS, TAD RD2BF3 /READ UPSINT DCA FUNC JMS SYS JMP LEAVE UPSOUT, TAD RD4BF3 /READ UPSINTAREA DCA FUNC CLL CLA IAC RAL /SKIP 2 BLOCK JMS SYS JMP LEAVE FPPOUT, TAD RD6BF3 /READ FPPEAE ARREA DCA FUNC TAD K4600 DCA CORE TAD K6 JMS SYS DCA FPPSW /CLEAR SW : FPP NOT IN CORE JMP LEAVE FPPIN, TAD K4600 DCA CORE /CORE ADDRESS TO 4600 TAD MODE /SAVE AND LOAD ? SMA CLA JMP LDFPP /LOAD FPPEAE SALDFP, TAD WR6BF3 /SAVE FPP AREA DCA FUNC TAD K6 JMS SYS LDFPP, TAD FPP /LOOKUP FOR FPPEAE.US DCA FILE JMS LOOK /LOOKUP FPP TAD RD6BF3 /LOAD FPPEAE DCA FUNC CLA CMA /FPPEAE DOES'T HAS A CCB !! JMS SYS CLA IAC DCA FPPSW /SET SW: FPP IN CORE TAD DF0 DCA 43 /INIT. LOAD FIELD FOR FPP TAD K7413 DCA 61 /SET INTERN.POINTER JMP LEAVE MODE, SYS, 0 TAD FILE /STARTING BLOCK OF UPSINT.US (SV) IAC /SKIP CORE CONTROL BLOCK FILE .SV DCA SYSBLK CIF 0 JMS I LSYSHLR FUNC, 0 CORE, 0 SYSBLK, 0 JMP ERROUT JMP I SYS LOOK, .-. CLA IAC /SYS CDF UPSFLD CIF USRFLD JMS I L7700 LOOKUP FILE, 0 0 JMP ERROUT JMP I LOOK UPSINT, .+1 FILENAME UPSINT.US FPP, .+1 IFDEF EAE IFNDEF EAE WR4BF3, 4^200+WRITE+UPSFLD RD4BF3, 4^200+READ+UPSFLD RD2BF3, 2^200+READ+UPSFLD WR6BF3, 6^200+WRITE+UPSFLD RD6BF3, 6^200+READ+UPSFLD L7700, 7700 K4600, 4600 K7413, 7413 K3, 3 K6, 6 DF0, CDF DFIF, CDF CIF LSYSHLR,SYSHLR UPSEND=. RELOC $-$-$ EJECT **** FRIDO **** / / DBDI=6500 DBEI=6501 DBSK=6502 DBCI=6503 DBRI=6504 DBCO=6505 DBSO=6506 DBRO=6507 / / /DEVICE FUNCTION WORD: / /------------------------------------------------- / I 0 I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11 I /-------------------------------------------------- / ---UNUSED---I-1-I-UNIT--I-0=AMPL-MODES--I-H/CIPULS / 1=FILTR-MODES / 0=HDFILTR / 1=LDFILTR / / /PROGRAM FUNCTION WORD (CALLING WORD IN ACC) / /------------------------------------------------------- / I 0 I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11 I /------------------------------------------------------- / W/R UNIT DEV STATE / / /BIT 6-8: /0=AMPLIFIER /1=HP FILTER /2=LP FILTER / / /BIT 9-11: / /STATE AMPL HPF LPF /--------------------------- /000 10 2 500 UV,HZ,HZ /001 40 20 2000 /010 100 50 5000 /011 200 100 10000 /100 500 --- --- /101 2000 --- --- /110 5000 --- --- /111 20000 --- --- /------------------------------- EJECT /CALL: / TAD (FUNCTION WORD / CDF N / CIF 20 / JMS I (7600 / RETURN / /FUNCTION WORD: / /0=HANDLE INTERRUPT RETURNS WITH AC=0 /BIT0=0: READ STATE AC=STATE /BIT1=1: WRITE STATE AC=0 / EJECT FIELD 2 *7600 FRIDO, 1 /ENTRY AND VERSION NUMBER DCA DFUNC RDF TAD CDIF0 DCA LEAVE CDF 20 TAD DFUNC SNA /HANDLE INTERRUPT ? JMP DBINT /YES SMA CLA /NO - SET ? JMP GET /NO SET, TAD DFUNC /CONVERTS A PROGR WORD TO A DEV WORD AND K300 /MASK UNIT NR TAD K400 /SET BIT 3 DCA DEV TAD DFUNC AND K30 /DEV=0 SNA JMP AMPPD /YES - AMPLIFIER AND K20 /MASK BIT 7 TAD K40 /ITS A FILTER:SET BIT 6 TAD DEV DCA DEV TAD DFUNC AND K3 JMP .+3 AMPPD, TAD DFUNC AND K7 CLL RTL TAD DEV ST, DBSO /SET SOME OUTPUT BITS CMA DBCO /CLEAR OTHER BITS CLA IAC /GIVE A WRITE PULS ON BIT 11 DBSO K3, 3 /MAKES THE PULS A LITTLE BIT LONGER K7, 7 K20, 20 K30, 30 CLA IAC DBCO CLA JMS LOCATE TAD DFUNC /SET FUNC IN TABLE AND K7 /STATE DCA I UNIT JMP LEAVE GET, JMS LOCATE TAD I UNIT /GET STATE JMP LEAVE DBINT, DBRI /READ INPUT DCA DEV TAD DEV CLL RTR /COMPUTER CONTROL ? SZL CLA JMP LEAVE /NO BIT 10=0 -EXIT- IAC /GIVE READ PULS ON BIT 11 DBSO K40, 40 /MAKE THE PULS A LITTLE LONGER K300, 300 K400, 400 CLA IAC DBCO CLA TAD DEV /CONVERT A DEV WORD TO A PROGR.WORD AND K300 /MASK UNIT NR DCA DFUNC TAD DEV BSW /BIT 6=0? SMA JMP AMPDP /N0- AMPLIFIER RAL /YES - BIT 7=0? SPA CLA IAC /NO LPF=2 IAC /YES HPF=1 CLL RTL RAL /SET ON BIT 6-8 TAD DFUNC DCA DFUNC /COLLECT UNIT DEV TAD DEV RTR AND K3 /ADD STATE JMP .+4 AMPDP, BSW /AMPL=0 RTR /ADD STATE AND K7 TAD DFUNC DCA DFUNC TAD DEV JMP ST DFUNC, 0 DEV, 0 LOCATE, 0 TAD DFUNC BSW AND K3 /MAX=4 UNITS DCA UNIT /UNIT NUMBER TAD UNIT /MULTIPLY CLL RAL /BY TAD UNIT /3 TAD UNITP /ADD BEGIN ADDRESS TABLE DCA UNIT /GIVES UNIT PLACE IN TABLE TAD DFUNC RTR RAR AND K3 /DEV NUMBER TAD UNIT /ADD DEV DCA UNIT /UNIT DEV PLACE JMP I LOCATED UNIT, 0 LEAVE, CDF CIF JMP I FRIDO CDIF0, CDF CIF 0 UNITP, .+1 UNIT0, AMP0, 0 HP0, 0 LP0, 0 UNIT1, AMP1, 0 HP1, 0 LP1, 0 UNIT2, AMP2, 0 HP2, 0 LP2, 0 UNIT3, AMP3, 0 HP3, 0 LP3, 0 $-$-$