IDENT DSK PERIPH TITLE DISK DRIVER PPUS EJECT * * * TRACE MACRO DATA 2500B ENDM * KILLT MACRO DATA 2500B ENDM TITLE CONSTANTS * * COMMAND BITS FROM PPU TO CENTRAL * ECTOCM EQU 1B COPY ECS BUFFER TO CM BUFFER CMTOEC EQU 2B COPY CM BUFFER TO ECS BUFFER USRRDRSP EQU 4B SEND READ RESPONSE TO USER USRWRRSP EQU 10B SEND WRITE RESPONSE TO USER NEWARMPS EQU 20B GET NEW ARM POSITION AND STACK SETUPCM EQU 40B INITIALIZE * * DEFINE DISK * DISK EQU 0 DISK CHANNEL * DSKSTAT1 EQU 1700B GET 1ST STATUS WORD SEEKFCN EQU 1400B SEEK ( ADD ARM POSITION ) HDSELECT EQU 1600B SELECT HEAD GROUP ( ADD HD GP AND STK ) RDDISK EQU 1000B READ DISK ( ADD SECTOR ) WRDISK EQU 1200B WRITE DISK ( ADD SECTOR ) * SECTFLD EQU 0177B DEFINE SECTOR FIELD IN 1ST STATUS WORD NOTREADY EQU 1000B DEFINE NOT READY BIT IN 1ST STATUS WORD RWERROR EQU 7400B DEFINE ERROR BITS IN 1ST STATUS WORD * DISKROT EQU 52000*9/10 SPEED UP BY 10 PERCENT ZEROSZX EQU DISKROT*24/43024 SECTMX EQU DISKROT-ZEROSZX * SYNCTIME EQU 20/20B * * DEFINE CLOCK * CLOCKCHN EQU 14B * * DEFINE SYSTEM INTERFACE * DISKINTN EQU 3 DSKPNTS EQU 4 INTCHAN EQU 9 I.POINTS EQU 22B EJECT * * MISCELLANEOUS CONSTATNS * ALPHA EQU 1 TOBESET EQU 0 TITLE MACROS MACRO ADCX,LOC LOC ADC TOBESET RMT ORG ALPHA VFD 12/._LOC RMT ENDM * MACRO LDCX,LOC LOC LDC TOBESET RMT ORG ALPHA VFD 12/._LOC RMT ENDM * VFD24XA MACRO ARG1,ARG2 IFC NE,**_ARG1_* ._ARG2 EQU * VFD 12/ARG1,12/ARG2 ENDM * VFD24X MACRO A1,L1,A2,L2,A3,L3,A4,L4,A5,L5,A6,L6,A7,L7,A8,L8 VFD24XA A1,L1 VFD24XA A2,L2 VFD24XA A3,L3 VFD24XA A4,L4 VFD24XA A5,L5 VFD24XA A6,L6 VFD24XA A7,L7 VFD24XA A8,L8 ENDIF ENDM TITLE DIRECT CELLS * * * ORG 0 VFD 12/START1-1 * * * * ORG 20B * * SECTOR REQUEST WORD * OR FAKED BY SCAN FOR SEEKS AND SKIPS * * REQWD EQU * * HEADGP BSSZ 1 HEADGROUP ( WITH STACK BIT ) RDWRBIT BSSZ 1 0 READ 1 WRITE * ( 2 SEEK, 3 SKIP FAKED ) * REQSIZE BSSZ 1 0 NO REQUEST OR BUSY * 1 - 64, 2 - 129, 3 - 257, 4 - 513 RETRY BSSZ 1 NUMBER TRYS PERMITTED REQINDEX BSSZ 1 INDEX OF SLOT IN ECS TABLES FOR THIS * REQUEST * * XSIZE BSSZ 1 REQUEST SIZE HELD DURING A REQUEST * * SCAN TABLE STATE WORD * SCANSTWD EQU * * STACK BSSZ 1 STACK BIT FOR HEAD GROUP SELECTS ARMPOS BSSZ 1 ARM POSITION FOR SEEKS NUMBREQS BSSZ 1 NUMBER REQS LEFT THIS ARM POS + STK NEXTSECT BSSZ 1 NEXT PLAUSABLE SECTOR FOR A READ * ( = 7777B IF PPU SHOULD SKIP ) NEXTPHS BSSZ 1 EXPECTED PHASE OF DISK AT TIME OF * GETTING DISK * * CM REQUEST WORD * CMREQWD EQU * * STATUS1 BSSZ 1 STATUS WORD 1 FROM DISK CMMOVESZ BSSZ 1 STATUS3 BSSZ 1 TERMINATION INDICATION OF DISK OP * 0 OK * 1 I O FAILED * 2 TIMING FAILED * 3 WRONG RECORD * THISSECT BSSZ 1 FIRST SECTOR OF CURRENT REQUEST CMRQBITS BSSZ 1 CM ACTION REQUEST EJECT * * MISCELLANEOUS CELLS * X0 BSSZ 1 X1 BSSZ 1 X2 BSSZ 1 X3 BSSZ 1 * * * OLDCLK BSSZ 1 TIME OF LAST UPDATE/20B PHSCLK BSSZ 1 MICRO SEC/20B SINCE START OF 0 SECTOR BSSZ 3 * * N1 DATA 1 N2 DATA 2 N128 DATA 128 * * CM EQU * * CM0 BSSZ 1 CM1 BSSZ 1 CM2 BSSZ 1 CM3 BSSZ 1 CM4 BSSZ 1 * * PHASE1 BSSZ 1 DATA FOR PHASE2 BSSZ 1 PHASE TEST * * * WSECTDF BSSZ 1 USED BY SCAN TO CHECK WRITE ( 12/25/70 ) * CNTSECT BSSZ 1 CURRENT NEXT SECTOR ( DISK STATUS ) ( 12/25 ) LASTSECT BSSZ 1 DISK WAS KNOWN TO BE HERE AT ONE TIME * SKIPFLAG BSSZ 1 INTERNAL SIGNAL TO SKIP, ALLOW OTHER PPU * TO RESYNC * TITLE MAIN DRIVING LOOP * * * ORG 100B * * MASTER DRIVING LOOP * MLOOP LDN 1 RJM ENTER RJM POST MLOOP1 RJM SCAN * LDN 2 RJM ENTER LDD RDWRBIT ZJN MLOOPR SBN 1 ZJN MLOOPW SBN 1 ZJN MLOOPSK LJM MLOOPSKP * * * MLOOPR LDN 3 RJM ENTER RJM READ * LDN 4 RJM ENTER RJM RDRSP LJM MLOOP * * * MLOOPW RJM MVTOPP * LDN 3 RJM ENTER RJM WRITE * LDN 4 RJM ENTER RJM WRSP LJM MLOOP * * * MLOOPSK LDN 3 RJM ENTER RJM SEEK * LDN 4 RJM ENTER LJM MLOOP * * * MLOOPSKP LDN 3 RJM ENTER RJM SKIP * LDN 4 RJM ENTER LJM MLOOP TITLE POST AND SCAN TIME ROUTINES * * THIS ROUTINE READS IN SCAN CONTROL WORD ( UNLESS * LAST OP WAS A SEEK ) AND POSTS COMPLETION OF * LAST OPERATION IN SCAN TABLE. * * IF LAST OPERATION WAS UNSUCCESSFUL AND IS TO BE * RETRIED IT WILL FIND REQSIZE NON ZERO. * LJM 0 POST EQU *-1 LDD RDWRBIT LMN 2 ZJN POST-1 LAST OP WAS A SEEK, SO ALL DONE * SCNTBC1 LDCX FILLEDIN CRD SCANSTWD GET SCAN STATE WORD LDD RDWRBIT LMN 3 ZJN POST-1 LAST OP A SKIP, SO NO NEED TO POST * LDD REQSIZE ZJN POST1 LAST OP SUCCESSFUL * LDD THISSECT LAST OP UNSUCCESSFUL SCNTB1 ADCX FILLEDIN CWD REQWD SET REQUEST NON BUSY IN SCAN TABLE UJN POST-1 * POST1 SOD NUMBREQS LAST OP SUCCESSFUL, DECREMENT UJN POST-1 REQUEST COUNT EJECT * * ROUTINE TO EXAMINE SCAN TABLE FOR A NEXT FEASABLE * OPERTION, AND UPDATE THE TABLE TO REFLECT THE * CHOSEN ACTION. * * 2 PPU VERSION ( 12/27/70 ) * * * LASTSECT WILL CONTAIN EITHE A VALUE READ FROM DISK * STATUS WD1 OR A VALUE GIVEN BY OTHER PPU * INDICATING WHEN IT WILL RELEASE DISK * * THISSECT WILL BE SET TO SECTOR OF DESIRED IO ACTION * * NEXTSECT AT BEGIN OF SCAN MAY CONTAIN VALUE GIVEN BY * OTHER PPU. AT END WILL CONTAIN SECTOR OF * EXPECTED RELEASE TIME. * * * * LJM 0 SCAN EQU *-1 LDD NEXTSECT LMC 7777B NJN *+3 LJM SCANSKP FORCED SKIP * LDD NUMBREQS NJN *+3 LJM SCANSK NO REQUESTS LEFT, DO A SEEK * LDD SKIPFLAG ZJN *+3 LJM SCANSKP FORCED SKIP TO ALLOW OTHER PPU TO RESYNC * * * CHECK STATE OF OTHER PPU * LDD NEXTSECT LMC 7776B SEE IF OTHER PPU SKIPPING ZJN SCAN1 YES STATES4 LDCX FILLEDIN ADN 4 CRD CM LDD CM4 ZJN *+3 LJM SCAN1 OTHER PPU IN STATE 4 * * OTHER PPU IN STATE 2 OR 3 AND NOT SKIPPING * LDD NEXTSECT STD LASTSECT LJM SCAN2 * * OTHER PPW IN STATE 4, OR SKIPPING * SCAN1 RJM GETDISK1 LPC SECTFLD STD LASTSECT * * NOW FINNISH SET UP FOR SCAN * SCAN2 LDD LASTSECT ADN 1 THISSECT MUST BE AT LEAST 1 AHEAD OF STD THISSECT LASTSECT FOR PHASE CHECK SECURITY ADC -100 MJN *+3 LDN 0 STD THISSECT * LDN 0 PHASE CHECK SECURITY FOR WRITE INCLUDED STD WSECTDF HERE DUE TO THISSECT = LASTSECT+1 * * * * MAIN SCANNING LOOP ITSELF * * SCANLP LDD THISSECT SCNTB2 ADCX FILLEDIN CRD REQWD LDD REQSIZE ZJN SCANLPX NO REQUEST, OR BUSY LDD RDWRBIT ZJN *+3 LJM SCANW CHECK A WRITE REQUEST LJM SCANR CHECK A READ REQUEST * SCANLPX AOD WSECTDF INCREMENT WRITE PREPARE TIME COUNTER AOD THISSECT TRY ANOTHER SECTOR ADC -100 MJN *+3 LDN 0 STD THISSECT LDD THISSECT SBD LASTSECT SEE IF MOST TRIED NJN SCANLP NO LJM SCANSKP HAVE TRIED MOST SECTORS, SO SKIP * * * DO A SKIP * SCANSKP LDN 3 STD RDWRBIT SIGNAL A SKIP LDN 0 STD SKIPFLAG TURN OFF SKIP FLAG LDC 7776B STD NEXTSECT SIGNAL TO OTHER PPU THAT WE ARE SKIPPING LJM SCANFIN2 * * * DO A SEEK * SCANSK LDCX FILLEDIN CWD SCANSTWD WRITE 0 COUNT TO CM LDC NEWARMPS REQUEST A NEW ARM POS RJM CMRQST AND STACK FROM CENTRAL RJM CMRQSTWT SCNTBC2 LDCX FILLEDIN CRD SCANSTWD GET THE HOPEFULLY NEW STATE WORD LDD NUMBREQS ZJN SCNTBC2 WAIT FOR NEW ARM POSITION LDC 7777B STD NEXTSECT FORCE OTHER PPU TO SKIP LDN 2 STD RDWRBIT SIGNAL A SEEK LJM SCANFIN2 * * * CHECK A READ REQUEST * SCANR RJM CMRQSTWT SCANR4 LDCX FILLEDIN CRD CM LDD REQSIZE SBN 1 STD X1 SCANR1 LDM CM,X1 SEE IF A LARGE ENOUGH BUFFER AVAILABLE NJN SCANR2 YES AOD X1 SBN 4 MJN SCANR1 LJM SCANLPX NO, REJECT REQUEST * SCANR2 STD CM4 SCANR3 LDCX FILLEDIN CWD CM WRITE CHOICE OF BUFFER BACK TO CM LJM SCANFIN1 ACCEPT REQUEST * * * CHECK A WRITE REQUEST * SCANW LDD WSECTDF SECTORS AVAILABLE TO PREPARE SBM SNEEDW1,REQSIZE SECTORS NEEDED MJN *+3 LJM SCANFIN1 ENOUGH AVAILABLE LJM SCANLPX NOT ENOUGH AVAILABLE * * SECTORS NEEDED TO PREPARE FOR WRITE * * SNEEDW1 DATA 7777B ( NO REQUEST ) DATA 2 ( 64 WDS ) DATA 4 ( 129 WDS ) DATA 8 ( 257 WDS ) DATA 14 ( 513 WDS ) * * * ACCEPT A REQUEST * SCANFIN1 LDD REQSIZE SAVE REQUEST SIZE AND MARK BUSY STD XSIZE LDN 0 STD REQSIZE SCNTB3 LDCX FILLEDIN ADD THISSECT CWD REQWD * * NOW COMPUTE WHAT DISK WILL READ AT END OF * IO ACTION, PLACE IN NEXTSECT * LDD THISSECT ADM SECTCNT,XSIZE STD NEXTSECT ADC -100 MJN *+2 STD NEXTSECT * * NOW WRITE BACK SCAN TABLE CONTROL WORD * SCANFIN2 EQU * SCNTBC3 LDCX FILLEDIN CWD SCANSTWD LJM SCAN-1 * * * SECTORS REQUIRED FOR RECORD * SECTCNT DATA 7777B ( NO REQUEST ) DATA 1 ( 64 WDS ) DATA 2 ( 129 WDS ) DATA 4 ( 257 WDS ) DATA 7 ( 513 WDS ) TITLE DISK PREPARATION TIME ROUTINES * * MOVE A BUFFER LOAD FROM ECS TO THE PPU * LJM 0 MVTOPP EQU *-1 LDD XSIZE SBN 1 STD CMMOVESZ LDC ECTOCM RJM CMRQST LDN 1 RJM TOFRMCM UJN MVTOPP-1 TITLE DISK TIME MAIN ROUTINES * * PERFORM A READ FROM DISK * LJM 0 READ EQU *-1 RJM SETUPDSK ZJN READ-1 NO TIME, DO NOT DO READ IAM BUFCHK1,DISK RJM ENDDSK UJN READ-1 EJECT * * PERFORM A WRITE TO DISK * LJM 0 WRITE EQU *-1 RJM SETUPDSK ZJN WRITE-1 NO TIME, DO NOT DO WRITE STD X1 SAVE COUNT LDD ARMPOS PREPARE ID FOR SHN 5 THIS RECORD ADD HEADGP STM BUFCHK1 LDD THISSECT STM BUFCHK2 LDD X1 PICK UP COUNT OAM BUFCHK1,DISK RJM ENDDSK UJN WRITE-1 EJECT * * PERFORM SEEK * LJM 0 SEEK EQU *-1 LDC SEEKFCN SEEK FUNCTION ADD ARMPOS FAN DISK SEND SEEK REQUEST TO DISK LDC HDSELECT HEAD SELECT FUNCTION ADD STACK FAN DISK SELECT A HEAD GROUP ON NEW STACK * SEEK1 RJM GETDISK1 LPC NOTREADY WAIT FOR SEEK TO COMPLETE NJN SEEK1 * RJM GETDISK1 LPC SECTFLD STD NEXTSECT WILL LOOK AS IF CAME FROM OTHER PPU LJM SEEK-1 EJECT * * DISK CODE FOR NO ACTION * LJM 0 SKIP EQU *-1 UJN SKIP-1 TITLE DISK TIME SUBROUTINES * * PREPARE FOR A DISK READ OR WRITE * RETURNS WITH A = 0 IF NO TIME * ELSE A HAS COUNT * LJM 0 SETUPDSK EQU *-1 LDC HDSELECT ADD HEADGP FAN DISK DO HEAD GROUP SELECT * LDD LASTSECT PREPARE STD PHASE1 FOR LDD THISSECT PHASE STD PHASE2 TEST * STUPDSKA AJM STUPDSKA,DISK WAIT FOR HEAD SELECT TO COMPLETE RJM PHASETST NOW DO PHASE TEST ZJN STUPDSKF FAILED * LDM RWSELECT,RDWRBIT ADD THISSECT FAN DISK DO READ OR WRITE SELECT * * * LDM RWCOUNT,XSIZE ACN DISK LJM SETUPDSK-1 * * PHASE FAILED * STUPDSKF LDN 2 STD STATUS3 RJM DISKWAIT LDN 0 LJM SETUPDSK-1 * * * RWSELECT VFD 12/RDDISK VFD 12/WRDISK * RWCOUNT DATA 0 NO REQUEST VFD 12/64*5+2 64 WDS VFD 12/129*5+2 129 WDS VFD 12/257*5+2 257 WDS VFD 12/513*5+2 513 WDS EJECT * * START CLEAN UP AFTER A DISK READ OR WRITE * LJM 0 ENDDSK EQU *-1 IJM ENDDSKF,DISK DCN DISK LDC 1 DELAY FOR SIMULATED DISK LDC 1 DELAY FOR SIMULATED DISK LDC 1 DELAY FOR SIMULATED DISK RJM GETDISK1 STD STATUS1 LPC RWERROR NJN ENDDSK1 LDN 0 STD STATUS3 UJN ENDDSK-1 * ENDDSK1 LDN 1 SIGNAL IO ERROR STD STATUS3 SOD RETRY DECREMENT RETRY COUNT PJN ENDDSK-1 LDN 0 STD RETRY UJN ENDDSK-1 * ENDDSKF RJM GETDISK1 STD STATUS1 RJM DISKWAIT UJN ENDDSK1 * * * * NEW 2 PPU VERSION ( 12/27/70 ) * * LJM 0 DISKWAIT EQU *-1 LDD THISSECT STD PHASE1 LDD NEXTSECT STD PHASE2 RJM PHASETST SEE IF IN IO REGION ZJN DSKWAIT2 NO * DSKWAIT1 RJM GETDISK1 NOW WAIT FOR DISK TO ROTATE TO END OF IO LPC SECTFLD REGION SBD NEXTSECT NJN DSKWAIT1 UJN DISKWAIT-1 * DSKWAIT2 LDD CNTSECT SBD NEXTSECT NJN *+3 LJM DISKWAIT-1 AT END OF IO REGION, ALL DONE * LDN 1 WENT PASSED IO REGION, SO FORCE A SKIP SO STD SKIPFLAG THAT OTHER PPU CAN RESYNC LJM DISKWAIT-1 UJN DISKWAIT-1 * TITLE RESPONSE TIME ROUTINES * * PERFORM RESPONSE TIME ACTIONS FOR READ OP * LJM 0 RDRSP EQU *-1 LDD STATUS3 NJN RDRSPF IO OR TIMING FAILURE * LDD ARMPOS SHN 5 ADD HEADGP LMM BUFCHK1 NJN RDRSPW READ WRONG RECORD LDD THISSECT LMM BUFCHK2 NJN RDRSPW READ WRONG RECORD * LDN 0 RJM TOFRMCM LDD XSIZE SBN 1 STD CMMOVESZ LDC CMTOEC+USRRDRSP RJM CMRQST UJN RDRSP-1 * * IO OR TIMING FAILURE * RDRSPF LDD RETRY ZJN RDRSPX NO MORE RETRYS LDD XSIZE STD REQSIZE SIGNAL A RETRY UJN RDRSP-1 * * READ WRONG RECORD * RDRSPW EQU * CMBUF3 LDCX FILLEDIN CWM BUFCHK1-3,N2 WRITE CHECK BYTES AND 1ST WORD LDN 3 STD STATUS3 LDC CMTOEC+USRRDRSP RJM CMRQST LJM RDRSP-1 * * NO MORE RETRYS * RDRSPX LDC USRRDRSP RJM CMRQST LJM RDRSP-1 EJECT * * PERFORM RESPONSE TIME ACTIONS FOR WRITE OP * LJM 0 WRSP EQU *-1 LDD STATUS3 NJN WRSPF IO OR TIMING FAILURE * LDC USRWRRSP RJM CMRQST UJN WRSP-1 * * IO OR TIMING FAILURE * WRSPF LDD RETRY ZJN WRSPX NO MORE RETRYS LDD XSIZE STD REQSIZE SIGNAL A RETRY UJN WRSP-1 * * NO MORE RETRYS * WRSPX LDC USRWRRSP RJM CMRQST LJM WRSP-1 TITLE GENERAL SUBROUTINES * * UPDATE CLOCK INFO FROM CHANNEL CLOCK, ALSO UPDATES * THIS PPU CLOCK DATA IN CM * * DUMMY, NOT USED IN THIS VERSION * * LJM 0 UPDTCLK EQU *-1 UJN UPDTCLK-1 EJECT * * THIS CODE MOVES A BUFFER LOAD TO OR FROM CM * IT MOVES IN 128 WORD CHUNKS PLUS 1 EXTRA WORD * * NOTE THAT IT IS INEFFICIENT FOR A 64 WORD AMOUNT * * ENTER WITH A .EQ. 0 FOR PPU TO CM * .NE. 0 FOR CM TO PPU * LJM 0 TOFRMCM EQU *-1 ZJN *+2 WRITE TO CM LDN 1 READ FROM CM STD X0 LDM CXMN1,X0 SET STM TOFRMCMA UP LDM CXMN128,X0 CRM STM TOFRMCMB OR CWM S CMBUF1 LDCX FILLEDIN ADN 1 STD X0 SHN -12 STD X3 SET UP CM BUFFER ADDRESSES LDC PPUBUF+5 STM TOFRMCMB+1 SET UP PPU BUFFER ADDRESS LDM BUFBLKCN,XSIZE STD X2 SET UP BLOCK COUNT RJM CMRQSTWT WAIT FOR CM BUFFER ACTION TO FINNISH * CMBUF2 LDCX FILLEDIN TOFRMCMA VFD 12/0,12/PPUBUF CXM PPUBUF,N1 * TOFRMCML LDD X3 PICK UP CM BUFFER ADDRESS SHN 12 ADD X0 TOFRMCMB BSSZ 2 CXM TOBESET,N128 STD X0 SHN -12 STD X3 SAVE CM BUFFER ADDRESS LDC 128*5 RAM TOFRMCMB+1 STEP PPU ADDRESS RJM UPDTCLK SOD X2 NJN TOFRMCML LJM TOFRMCM-1 * * * BUFBLKCN DATA 0 ( NO ACTION ) DATA 1 64 WDS DATA 1 129 WDS DATA 2 257 WDS DATA 4 513 WDS * * * CXMN1 VFD 6/63B,6/N1 CWM TOBESET,N1 VFD 6/61B,6/N1 CRM TOBESET,N1 * CXMN128 VFD 6/63B,6/N128 CWM TOBESET,N128 VFD 6/61B,6/N128 CRM TOBESET,N128 EJECT * * ENTER A NEW STATE GIVEN IN A REGISTER * LJM 0 ENTER EQU *-1 KILLT STD X3 * ENTER1 LDC 100 STD X2 RJM UPDTCLK * ENTER2 LDD X3 STATES1 ADCX FILLEDIN CRD CM LDD CM4 ZJN ENTER3 SOD X2 NJN ENTER2 UJN ENTER1 * ENTER3 LDM PPNUM STD CM4 STATES2 LDCX FILLEDIN ADD X3 CWD CM LDN 0 STD CM4 STATES3 LDCX FILLEDIN ADM STATE CWD CM LDD X3 STM STATE TRACE LJM ENTER-1 * * STATE BSSZ 1 PPNUM BSSZ 1 EJECT * * * THIS IS THE NEW TWO PPU VERSION ( 12/27/70 ) * * THIS ROUTINE CHECKS TO SEE IF SECTOR READ FROM * DISK STATUS WD1 SATASFIES * PHASE1 .LE. SECTOR .LT. PHASE2 * * RETURNS 1 IF YES, 0 IF NO * * SAVES SECTOR NUMBER IN CNTSECT * LJM 0 PHASETST EQU *-1 RJM GETDISK1 LPC SECTFLD STD CNTSECT LDD PHASE2 SBD PHASE1 MJN PHSTSTB * * INDEX MARK NOT BETWEEN PHASE1 AND PHASE2 * PHSTSTA LDD CNTSECT SBD PHASE1 MJN PHSTSTF LDD PHASE2 SBD CNTSECT ZJN PHSTSTF MJN PHSTSTF * * PHSTSTP LDN 1 UJN PHASETST-1 * * INDEX MARK BETWEEN PHASE1 AND PHASE2 * PHSTSTB LDD CNTSECT SBD PHASE1 PJN PHSTSTP LDD PHASE2 SBD CNTSECT ZJN PHSTSTF PJN PHSTSTP * * PHSTSTF LDN 0 UJN PHASETST-1 * * EJECT * * * GET DISK STATUS WD1 IN A REG * LJM 0 GETDISK1 EQU *-1 FNC DSKSTAT1,DISK ACN DISK IAN DISK DCN DISK UJN GETDISK1-1 EJECT * * THIS CODE SENDS A REQUEST TO CM * LJM 0 CMRQST EQU *-1 STD CMRQBITS RJM CMRQSTWT CMRQ1 LDCX FILLEDIN CWD CMREQWD LDN DISKINTN OAN INTCHAN UJN CMRQST-1 * * THIS CODE WAITS FOR A CM REQUEST TO COMPLETE * LJM 0 CMRQSTWT EQU *-1 RJM UPDTCLK KILLT CMRQ2 LDCX FILLEDIN CRD CM LDD CM4 NJN CMRQSTWT+1 TRACE UJN CMRQSTWT-1 TITLE FINAL PART OF DECK * * PPU BUFFER * BUFCHK1 BSSZ 1 ID WORDS BUFCHK2 BSSZ 1 * PPUBUF BSSZ 5+512*5 * BSSZ 1 EJECT * * INITIALIZING LOOPS * ORG BUFCHK1 * * FIRST DISK PPU * START1 LDN 15 SBN 1 NJN *-1 WAIT FOR ALL PPUS TO GET STARTED * LDN 2 STM PPNUM RJM FILLIN SET UP CONSTANTS FOR 2ND DISK PPU LDN 4 STM STATE LDN 1 RJM ENTER PLACE 2ND DISK PPU IN STATE 1 KILLT ACN DISK LDC START2-1 OAN DISK SET UP START FOR 2ND PPU LDC LIMIT-1 OAM 1,DISK WRITE CODE TO 2ND DISK PPU LDN 1 SWITCH DATA FOR THIS PPU STM PPNUM RJM FILLIN SET UP CONSTANTS FOR THIS PPU LDN SETUPCM RJM CMRQST SET UP CM RJM CMRQSTWT LDN 3 STM STATE LDN 4 RJM ENTER PLACE THIS PPU IN STATE 4 DCN DISK START UP OTHER PPU LDN 1 RJM ENTER NOW WAIT FOR STATE 1 TO CLEAR SCNTBC4 LDCX FILLEDIN CRD SCANSTWD LJM MLOOP1 * * * 2ND DISK PPU * START2 EQU * FNC DSKSTAT1,DISK CONNECT TO DISK ACN DISK IAN DISK ( FOR SIMULATOR ) DCN DISK SCNTBC5 LDCX FILLEDIN CRD SCANSTWD LJM MLOOP1 * EJECT * * FILL IN CONSTANTS * LJM 0 FILLIN EQU *-1 LDC I.POINTS+DSKPNTS ADM PPNUM SBN 1 CRD CM LDD CM3 LPN 77B STD CM3 LDD CM4 STM FILLIN1+1 LDM FILLIN1 LPC 7700B ADD CM3 STM FILLIN1 LDC 7777B STD X1 LDC NPAIRS STD X2 * FILLINL LDM PAIRLIST,X2 SBD X1 ZJN FILLIN2 ALREADY HAVE THIS ADDRESS * LDM PAIRLIST,X2 STD X1 FILLIN1 ADC TOBESET CRD CM0 LDD CM3 LPN 77B STD CM3 * FILLIN2 LDM PAIRLIST+1,X2 STD X3 LDI X3 LPC 7700B ADD CM3 STI X3 LDD CM4 STM 1,X3 LCN 2 RAD X2 PJN FILLINL LJM FILLIN-1 EJECT * * CONSTANT INFO * PAIRLIST VFD24X 0,SCNTBC1,0,SCNTBC2,0,SCNTBC3 VFD24X 0,SCNTBC4,0,SCNTBC5 VFD24X 0,SCANSK VFD24X 1,SCNTB1,1,SCNTB2,1,SCNTB3 VFD24X 2,STATES1,2,STATES2,2,STATES3 VFD24X 2,STATES4 VFD24X 3,SCANR4,3,SCANR3 VFD24X 5,CMRQ1,5,CMRQ2 VFD24X 6,CMBUF1,6,CMBUF2 VFD24X 6,CMBUF3 * NPAIRS EQU *-PAIRLIST-2 * * * LIMIT EQU * EJECT * * * HERE END