File BOS.TK

Directory of image this file is from
This file as a plain text file

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 <FILENAME FPPEAE.US> IFNDEF EAE <FILENAME 27BFPP.US> 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 $-$-$



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search