X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/d693caac75dd25e668e43e85c29205bfc8dea06e..cac5183c0f5a53b1874c2685f1b2d84e990ddd7d:/src/dskint.mac diff --git a/src/dskint.mac b/src/dskint.mac index 2b3f239..841ea1a 100644 --- a/src/dskint.mac +++ b/src/dskint.mac @@ -47,8 +47,7 @@ DATERR=DPAR!CHDPAR ;DATA ERRORS. DEVERR=SRCHE!PSF!CHCPAR!OVR ;DEVICE ERRORS. SETERR=DDE!TSE!NRDY!NXMEM ;SOFTWARE-PREVENTABLE ERRORS. ALLERR=DATERR!DEVERR!SETERR!WRPE ;ALL POSSIBLE ERRORS. - -;CONO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER + ;CONO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER ;BITS 00 - 17 UNUSED ;BITS 18 - 19 SELECT DISK FOR SECTOR COUNTER READ-OUT A(SEE DATAI BITS 28-35) @@ -59,6 +58,7 @@ STPBIT=1B31 ;STOP -- IMMEDIATELY CEASE PRESENT I/O AND CLEAR THE CHANNEL. RESETB=1B32 ;RESET THE DONE FLAG (CORRESPONDING CONI BIT) TO CLEAR INTERRUPT ;BITS 33 - 35 PI CHANNEL SELECTION BITS + ;DATAI FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER -- ;BITS 00 - 17 UNUSED @@ -67,6 +67,7 @@ RESETB=1B32 ;RESET THE DONE FLAG (CORRESPONDING CONI BIT) TO CLEAR INTERRUPT ;BITS 26 - 27 DISK SELECTED BY BITS 18-19 OF LAST CONO ;BITS 28 - 35 CURRENT SECTOR POSITION OF SELECTED DISK (FOR LATENCY OPTIMIZATION!) + ;DATAO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER -- ;BITS 00 - 17 DISK ADDRESS ELECTION @@ -80,8 +81,7 @@ WRBIT=1B26 ;SET MEANS WRITE ON DISK, RESET MEANS READ FROM DISK ;BITS 27 - 34 ;CORRESPONDING BITS OF INITIAL CHANNEL CONTROL ADDRESS, HENCE, ; THIS ADDRESS MUST BE EVEN AND IN THE FIRST 1K OF CORE MEMORY! ;BIT 35 ;WRITE EVEN PARITY DATA INTO MEMORY (DIAGNOSTICS ONLY!) - -;SUBROUTINE "DFWRT" IS CALLED TO START UP A WRITE ON THE DISK. + ;SUBROUTINE "DFWRT" IS CALLED TO START UP A WRITE ON THE DISK. ;CALLING SEQUENCE -- ; PUSHJ PDP,DFWRT @@ -100,7 +100,6 @@ DFWRT: CONSZ DSK,BUSYBT ;FOR SAFETY SAKE BE SURE THE DISK IS MOVEM TAC1,WRCHNL ;SET UP CHANNEL COMMAND SEQUENCE. SETZM WRCHNL+1 ;MAKE SURE NEXT COMMAND IS 0, SO CHANNEL ; WILL NOT WRITE ALL OVER DISK - IFN FTRCHK,< EXTERN SATM2 MOVEI TAC1,1(TAC1) ;CLEAR LH AND COMPARE WITH @@ -111,8 +110,8 @@ IFN FTRCHK,< ;WILL LOOP > MOVEI TAC1,WRCHNL - MOVEM TAC1,RCXIOC ;RCX10C IS MAGIC EVEN LOCATION IN FIRST 1K OF CORE. - PUSHJ PDP,CNVBLK ;CONVERT LOGICAL BLOCK NO. INTO PHYSICAL DISK ADDRESS. + MOVEM TAC1,RCXIOC ;RCXIOC IS MAGIC EVEN LOCATION IN FIRST 1K OF CORE. + PUSHJ PDP,CNVBLK ;CONVERT LOGICAL BLOCK NO. INTO PHYSICAL DISK ADDRESS. ORI TAC,WRBIT ;REQUEST WRITE (INSTEAD OF READ) DFWRTC: ORI TAC,RCXIOC MOVEM TAC,DFORDR ;SAVE RC-10 DATAO COMMAND @@ -125,14 +124,13 @@ DSKFDG: HRRZI TAC,DSKCHN ;THIS INSTRUCTION TEMPORARILY ALTERED DURING "ONCE". HLRE TAC1,@RCXIOC ; CHANNEL CONTROL WORD SHOULD CONTAIN UPON SUB TAC,TAC1 ; SUCCESSFUL COMPLETION OF THE DISK OPERATION. MOVE TAC1,RCXIOC - HRLI TAC,1(TAC) + HRLI TAC,1(TAC1) MOVEM TAC,RCXFIN SETZM RCXCCW ;ZERO THE LOCATION WHERE THE DISK SYNCRONIZER WILL ; STORE THE CHANNEL CONTROL WORD. DATAO DSK,DFORDR ;START UP DISK AND DATA CHANNEL. POPJ PDP, ;SUBROUTINE EXIT.,......*** - -;SUBROUTINE "DFRED" IS CALLED TO START UP A READ FROM THE DISK. + ;SUBROUTINE "DFRED" IS CALLED TO START UP A READ FROM THE DISK. ;THE CALLING SEQUENCE, ENTRY CONDITIONS, AND EXIT CONDITIONS ARE EXACTLY ; SIMILAR TO THOSE FOR SUBROUTINE "DFWRT" ABOVE. @@ -147,29 +145,15 @@ IFN FTRCHK,< MOVEI TAC1,1(TAC1) ;CLEAR LH AND COMPARE WITH FIRST WORD AFFECTED CAIG TAC1,SATM2 ;COMPARE ABS CORE ADDRESS TO BEGINNING ;OF SAT TABLE-2 - HALT . ;HALT - DO NOT WRITE OUT MONITOR - CONTINUE - ;WILL LOOP + HALT . ;HALT - DO NOT WRITE OUT MONITOR,CONTINUE WILL LOOP > - MOVEI TAC,RDCHNL ; PLACE FROM WRITE CONTROL WORDS FOR - MOVEM TAC,RCXIOC ; BETTER FOOTPRINTS IN CASE OF A CRASH. + MOVEI TAC1,RDCHNL ; PLACE FROM WRITE CONTROL WORDS FOR + MOVEM TAC1,RCXIOC ; BETTER FOOTPRINTS IN CASE OF A CRASH. PUSHJ PDP,CNVBLK ;CONVERT LOGICAL BLOCK NUMBER TO PHYSICAL DISK ADDRESS. JRST DFWRTC ;REMAINDER OF THIS READ ROUTINE IS ; IDENTICAL TO WRITING. - -;A ROUTINE CALLED DURING SYSTEM INITIALIZATION TO BE SURE DISK IS READY, -; NOTE: THIS ROUTINE DESTROYS ACCUMULATOR TAC. + ;DISK INTERRUPTS COME HERE TO BE SERVICED -- -DISKUP: CONO DSK,ALLERR!RESETB ;CLEAR THE DISK SYNCHRONIZER. - CONSZ DSK,NRDY!PSF!BUSYBT!DONEFLG ;ANYTHING AMISS OR STUCK ? - JRST DISKUP ;IF SO, JUST HANGE HERE IN A LOOP. - DATAI DSK,TAC ;IS THE SECTOR COUNTER GOING ? - JUMPE TAC,.-1 ;IF NOT, JUST LOOP HERE. -;*** THIS LOOP ABOVE WILL OCCUR DURING INITIALIZATION IF THE DISK IS OFF-LINE. *** - HRRZI TAC,DSKBIT ;IF NOT, ENABLE DISK INTERRUPTS ON THE - CONO PI,2200(TAC) ; APPRORIATE PRIORITY INTERRUPT CHANNEL. - POPJ PDP, ;SUBROUTINE EXIT.....,*** - -;DISK INTERRUPTS COME HERE TO BE SERVICED -- DSKINT: CONSO DSK,@DSKCON ;*DID THE DISK SYNCHRONIZER CAUSE THE INTERRUPT ON JRST .-1 ;* THIS CHANNEL? IF NOT, GO TO THE NEXT DEVICE ON @@ -187,8 +171,9 @@ DSKINT: CONSO DSK,@DSKCON ;*DID THE DISK SYNCHRONIZER CAUSE THE INTERRUPT ON CONSZ DSK,WRPE ;* TRO IOS,IOIMPM ;* ;CLEAR OUT THE DISK SYNCHRONIZER AND LEAVE IT DETACHED FROM ITS INTERRUPT CHANNEL. + CONO DSK,ALLERR!RESETB - MOVE TAC,RCXCCW ;*PICK UP THE FINAL VALUE FO THE CHANNEL CONTROL WORD. + MOVE TAC,RCXCCW ;*PICK UP THE FINAL VALUE FO THE CHANNEL CONTROL WORD. CAMN TAC,RCXFIN ;*DOES IT AGREE WITH THE SAVED VALUE WE EXPECTED ? JRST DFINT ;*YES, EXIT TO THE DEVICE INDEPENDENT INTERRUPT ;* HANDLING ROUTINE IN "DSKSER"......... @@ -213,8 +198,24 @@ DSKNT1: SKIPE RCXCCW ;*MAYBE CHANNEL WAS TURNED OFF ? / POP PDP,ITEM ;* JRST DSKNT2 ;* - -;SUBROUTINE TO CONVERT LOGICAL BLOCK NUMBERS TO PHYSICAL DISK ADDRESSES + + + + + +;A ROUTINE CALLED DURING SYSTEM INITIALIZATION TO BE SURE DISK IS READY, +; NOTE: THIS ROUTINE DESTROYS ACCUMULATOR TAC. + +DISKUP: CONO DSK,ALLERR!RESETB ;CLEAR THE DISK SYNCHRONIZER. + CONSZ DSK,NRDY!PSF!BUSYBT!DONEFLG ;ANYTHING AMISS OR STUCK ? + JRST DISKUP ;IF SO, JUST HANGE HERE IN A LOOP. + DATAI DSK,TAC ;IS THE SECTOR COUNTER GOING ? + JUMPE TAC,.-1 ;IF NOT, JUST LOOP HERE. +;*** THIS LOOP ABOVE WILL OCCUR DURING INITIALIZATION IF THE DISK IS OFF-LINE. *** + HRRZI TAC,DSKBIT ;IF NOT, ENABLE DISK INTERRUPTS ON THE + CONO PI,2200(TAC) ; APPRORIATE PRIORITY INTERRUPT CHANNEL. + POPJ PDP, ;SUBROUTINE EXIT.....,*** + ;SUBROUTINE TO CONVERT LOGICAL BLOCK NUMBERS TO PHYSICAL DISK ADDRESSES ;CALLING SEQUENCE -- ; PUSHJ PDP,CNVBLK @@ -290,4 +291,3 @@ DFORDR: 0 ;ITS CORRESPONDING PHYSICAL DISK ADDRESS. > DSKEND: END - \ No newline at end of file