ASMB,Q,R,C HED SWTCH - SWSG2, TYPE 32 DISC DRIVER SEGMENT NAM SWSG2,5,10 92067-16515 REV.2001 791018 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ******************************************************************* * * NAME: SWSG2 * SOURCE: 92067-18515 * BINARY: 92067-16515 * WRITTEN BY: JJC * ******************************************************************* * * * ENTRY POINTS * ENT \DSK5,\BADH ENT \SETD,\RET * * * EXTERNAL ENTRY POINTS * * DRIVER LIBRARY ROUTINES EXT XSEEK,XADRC,XFMSK,XDRED,XEND EXT XRDFS,XDWRT,XINIT,XVRFY,XRCAL,XSTAT * EXT \SWTM EXT \DFTR,\DNTR,\DSHD,\DNSU,\DNSP EXT \TDLU,\TUNT,\DSUB,\DUNT,\TSUB,\D#ST,\D#WT EXT \CVAS,\CLEN,\DSPL,\BLIN,\RDIN,\DFLT EXT \LNTH,\LU2,\BUFI,\MODE EXT \SAVE EXT \TRAK,\SECT EXT \TMT EXT \FFMP,\STRK * * A EQU 0 B EQU 1 SUP SKP BEG5 JSB \SETD SEGMENT'S ENTRY POINT JMP \SWTM RETURN TO MAIN * * * * DETERMINE SUBCHANNEL SPECIFICATIONS, USING INFORMATION * RETRIEVED FROM THE \TMT ENTRY FOR \DSUB. * \SETD NOP LDA \DSUB GET DESTINATION SUBCHANNEL MPY P5 CONVERT TO 5 WORD PER ENTRY OFFSET LDB A ADB \TMT INTO THE \TMT BUFFER LDA B,I GET WORD 0 STA \D#ST AND SET THE SECTORS/TRACK RAR DIVIDE BY 2 FOR XVRFY STA S#CTR ALF,RAL RAL,RAL STA \D#WT SET # WORDS/TRACK INB LDA B,I GET WORD 1 OF ENTRY STA \DFTR AND SAVE STARTING TRACK OF SUBCH INB LDA B,I GET WORD 2 OF ENTRY AND M17 ISOLATE THE UNIT # STA \DUNT AND SAVE LDA B,I NOW GET ALF,ALF AND MASK ALF AND M77 THE STA \DSHD STARTING HEAD LDA B,I ALF,RAL NOW ISOLATE RAL AND M77 THE STA \DNSU NUMBER OF SURFACES INB LDA B,I GET WORD 3 OF ENTRY RAL,CLE,ERA SET E IF INIT WANTED STA \DNTR SET THE # OF TRACKS INB LDA B,I AND FINALLY AND M377 PICK UP ONLY 8 BITS STA \DNSP SET THE # OF SPARES RESERVED CLA SET CURRENT SPARE TO ZERO STA CRSP# JMP \SETD,I * SPC 7 HED TYPE 32 I/O DISC DRIVER * THE DISK5 SUBROUTINE IS THE MAIN DISC INPUT/OUTPUT DRIVER. * IT SETS UP THE COMPLETE TRANSFER AND READS OR WRITES * CALLING SEQUENCE * \LNTH = NEGATIVE # WORDS TO TRANSMIT * E = 1 FOR READ * E = 0 FOR WRITE * * * THE \DSK5 ROUTINE INTERCEPTS ALL DISC I.O CALLS FOR TYPE 32 * DISCS. IT HAS FOUR MODES OF OPERATION. * MODE 1 : STANDARD READS/WRITES TO THE DISC * MODE 2 : WRITE (PROTECT) SYSTEM TRACKS & SPARING AS NEEDED * MODE 3 : INITIALIZING TRACKS (WRITE ALL ZEROS-NO WRT PROT) * : ALSO WHEN WRITING 7910 SYS TRKS(NO FRMT SW ON 7910) * MODE 4 : INITIALIZING (&CLEANING UP UNUSED) SPARE TRACKS * * THE SWITCH MAIN PROGRAM CALLS \DISK5 IN MODE4 FOR EACH SUBCHANNEL * BEFORE IT BEGINS ANY WRITING OR INITIALIZING. THIS IS DONE SO * THAT ALL THE SPARES FOR A GIVEN SUBCHANNEL CAN BE CLEANED UP. * IF WE ARE CLEANING UP SPARES ON THE SYSTEM SUBCHANNEL AND SAVING * FILES, THE SPARES WHICH BELONG TO THE FMP FILES (BEING SAVED) WILL * NOT BE CLEANED; THEY WILL BE LEFT INTACT. * * \DSK5 NOP CLA ELA SHIFT E INTO LSB OF A REG. STA \R/W SAVE E IN \R/W * LDA N10 STA ERCNT INITIALIZE ERROR COUNTER * LDA \LNTH GET NEG. # OF WORDS TO XFER CMA,INA MAKE POS. FOR DRIVER LIBRARY STA LEN * CLA STA \RET CLEAR RETURN STATUS FLAG STA SPD CLEAR INIT WRITE FLAG * LDA \SECT RAR ADJUST OUT 64 WD/SECTR JAZZ STA SEC# SET SECTOR # FOR R/W ROUTINES * LDA \TRAK LOGICAL TRACK ADDRESS ON CURRENT SUBCHANNEL JSB DADTR CONVERT LOGICAL \TRAK TO PHYSICAL DISC ADDR DST SKCYL SET CYL/HEAD FOR SEEK COMMAND DST ARCYL SET CYLINDER/HEAD FOR ADDRESS RECORD COMMAND * LDA A067 PRESET \ACTN FOR RDFS FOR TRACK STATUS STA \ACTN SPC 3 ********************************************************************** * BEGIN INCASE(\MODE): * SPC 1 LDA TBL01 ADA \MODE JMP A,I * TBL01 DEF * JMP MOD01 JMP MOD02 JMP MOD02 JMP MOD04 * SPC 3 * * MODE=1: REGULAR READ OR WRITE * MOD01 LDA P4 STA FLMSK SET FILE MASK - ENABLE SPARING * LDB A017 PRESET ACTION CODE FOR READ LDA \R/W \R/W : READ/WRITE = 1/0 SZA,RSS IS THIS A WRITE? LDB A107 SET FOR REG WRT W/ SEEK STB \ACTN SET ACTION WORD JMP DSGO SPC 3 * * MODE=2,3: WRITING SYSTEM TRACKS OR INITIALIZING TRACKS * MOD02 CLA STA FLMSK SET FILE MASK FOR NO AUTO SEEK TO SPARE LDA A067 SET UP TO READ FULL SEC/W/SEEK STA \ACTN LDA P1 STA PHASE SET PHASE FOR STATUS READ TO SYS/INIT TRACK JMP DSGO SPC 3 * * MODE=4: INITIALIZE SPARES - SPARE CLEANUP MODE * MOD04 CLA STA FLMSK SET FILE MASK FOR NO AUTO SEEK LDA P3 STA PHASE SET PHASE FOR STATUS READ TO SPARE SPC 1 * END INCASE(\MODE): * ********************************************************************** SKP ********************************************************************** ********************************************************************** ** MAIN DRIVER LOOP ** SPC 1 * THE MAIN DRIVER LOOP REPEATEDLY CALLS XFER TO PERFORM DISC * COMMANDS AND THEN EXAMINES STATUS WORD 1 RETURNED BY XFER. * THE APPROPRIATE PROCESSING BLOCK IS BRANCHED TO BY THE INCASE * CONSTRUCT. ALL THE PROCESSING BLOCKS RETURN TO THE COMMON * RETURN POINT: "ENDBR". WE CONTINUE IN THIS LOOP UNTIL ONE OF THE * PROCESSING BLOCKS SETS \RET TO A +1 FOR A SUCCESSFUL COMPLETION * OF A COMMAND SEQUENCE OR -1 FOR AN UNSUCCESSFUL RETURN TO THE * CALLING PROGRAM. SPC 2 DSGO JSB XFER WE'ER LOOPING AGAIN:CALL ACTION ROUTINE * RET W/ A=STAT1 WORD; B=STAT2 SPC 3 * BEGIN INCASE(STAT1): (RETURNED IN A REG BY XFER) * SPC 1 ADA TBL02 GET (ADDRESS OF BRANCH TABLE + STAT1) JMP A,I BRANCH TO THE PROCESSING BLOCK * TBL02 DEF *+1 CODE ERROR PROCESSING JMP ENDOK 00 NO ERROR - GO ENTER NEXT PHASE JMP FAULT 01 ILLEGAL OP - PROGRAM FAULT JMP FAULT 02 UNIT AVAIL. PROGRAM FAULT JMP FAULT 03 UNIMPLEMENTED ERROR CODE - FAULT JMP FAULT 04 " " " " JMP FAULT 05 " " " " JMP FAULT 06 " " " " JMP RECAL 07 CYL COMPARE TRY TO RECAL. JMP DSKER 10 PARITY ERROR TRY AGAIN JMP EOCYL 11 HEAD/SECTOR? RESTART ERR43 JMP FAULT 12 I/O PROGRAM (WHO? ME?) PROGRAM FAULT JMP FAULT 13 UNIMPLEMENTED ERROR CODE - FAULT JMP EOCYL 14 END OF CYL. BAD # SECT/TRK ERR43,RESTART JMP FAULT 15 UNIMPLEMENTED ERROR CODE - FAULT JMP DSKER 16 OVER RUN JUST RETRY JMP DSKER 17 CORRECTABLE ERROR DON'T EVEN TRY JMP ILSPR 20 ILLEGAL SPARE JMP DEFTR 21 DEFECTIVE TRACK JMP ST2ER 22 ACCESS NOT READY - STATUS 2 ERROR JMP ST2ER 23 STATUS 2 GO CHECK JMP FAULT 24 UNIMPLEMENTED ERROR CODE - FAULT JMP FAULT 25 " " " " JMP ST2ER 26 ILLEGAL WRITE TEST ST 2 JMP UWAIT 27 UNIT UNAVAIL-RETRY 10 TIMES SPC 1 * END INCASE (STAT1); SPC 2 ENDBR LDA \RET CHECK THE DRIVER'S STATUS SZA,RSS LOOP AGAIN IF \RET=0 JMP DSGO * LDA A1000 SET ACTION WORD STA \ACTN TO SEND AN END COMMAND JSB XFER SEND IT. * JMP \DSK5,I RETURN TO MAIN SPC 2 ** END DRIVER MAIN LOOP ** ********************************************************************** ********************************************************************** SKP ********************************************************************** ********************************************************************** ** ENDOK ** SPC 1 * A SUCCESSFUL DISC OPERATION HAS JUST BEEN COMPLETED. ENDOK * DETERMINES WHAT PHASE THE DRIVER JUST FINISHED AND SETS UP * THE NEXT PHASE BY ALTERING "PHASE" AND "\ACTN" FLAGS. SPC 2 ********************************************************************** ** BEGIN INCASE(\MODE): ** ENDOK LDA TBL03 GET ADDRESS OF BRANCH TABLE ADA \MODE JMP A,I BRANCH TO APPROPRIATE BLOCK * TBL03 DEF * JMP EOK1 JMP EOK2 JMP EOK2 JMP EOK4 * SPC 3 * * MODE=1: REGULAR READ OR WRITE WAS SUCCESSFUL-RETURN TO MAIN * EOK1 CLA,INA SET FOR RETURN TO MAIN- SUCCESSFUL R/W STA \RET \RET: ABORT/LOOP AGAIN/OK-RET/NEXT SUBCH = -1/0/1/2 JMP ENDBR SPC 3 * * MODE=2,3: WRITING SYSTEM TRACKS/INITIALIZING TRACKS MODE * EOK2 LDA TBL04 ADA PHASE JMP A,I * TBL04 DEF * JMP PHA1 STATUS CHECK TO SYSTEM/INIT TRACK DONE&OK JMP PHA2 WRITE INITIALIZE TO SYS/INIT TRACK DONE&OK JMP PHA3 STATUS CHECK TO POTENTIAL SPARE DONE&OK JMP PHA4 WRITE INITIALIZE TO SPARE DONE&OK JMP PHA5 WRITE INIT ON BAD TRACK-FOR FIXUP DONE&OK **** JMP PHA6 NOT IMPLEMENTED. PHASE=6 IS ILLEGAL * SPC 3 * * PHASE=1: FINISHED STATUS READ. OK-SO NOW DO WRITE INIT TO TRACK * PHA1 LDB S010 PRESET FLAG BITS FOR MODE 2-WRT PROTECT LDA \MODE IN MODE2 OR MODE3?? CPA P3 CLB MODE3- SO DON'T WRITE PROTECT. STB SPD SAVE IN FLAG WORD - FOR WRITE INITIALIZE * ISZ PHASE ADVANCE TO PHASE2- WRITE INITIALIZE. LDA A207 SET FOR WRITE INIT,& SEEK STA \ACTN JMP ENDBR SPC 3 * * PHASE=2:JUST DID WRITE INIT.-NOW VERIFY THE TRACK * PHA2 LDA A407 SEEK,VERIFY,CHECK STATUS STA \ACTN JSB XFER GO VERIFY & RETURN WT STATUS SZA ANY TYPE OF ERROR IS BAD NEWS. JMP VFAIL VERIFY FAILED- GET FIRST SPARE * CLA,INA STA \RET SUCCESSFUL VERIFY-SIGNAL MAIN & RETURN STATUS JMP ENDBR * VFAIL DLD CYL# VERIFY FAILED- SAVE BAD TRK DST BDCYL FOR LATER. CLE JSB RPORT REPORT:"BAD TRACK... " JSB NIXSP GET NEXT POTENTIAL SPARE JMP ENDBR ERROR RETURN FOR NIXSP-IE. OUT OF SPARES!! DST SKCYL SET SEEK ADDRESS TO SPARE DST ARCYL SET ADDR RECORD CLA STA FLMSK FILE MASK - NO AUTO SEEK TO SPARE * ISZ PHASE SET PHASE3: STATUS READ TO POTENTIAL SPARE LDA A067 SET FOR RDFS FOR TRK STATUS STA \ACTN JMP ENDBR SPC 3 * * PHASE=3: STATUS WRT TO POTENTIAL SPARE WAS OK - NOW DO A WRT * INITIALIZE TO SPARE & POINT IT TO THE BAD TRACK * PHA3 DLD BDCYL GET DEFECTIVE TRACK ADDRESS & SET IT DST ARCYL IN SPARE WITH AN ADDRESS RECORD COMMAND CLB STB FLMSK NO AUTO SEEK * LDB S110 PRESET SPD BITS FOR MODE2: WRITE PROTECT LDA \MODE CPA P3 MODE2 OR MODE3?? LDB S100 MODE3: SET SPARE , NO PROTECT STB SPD SET IT. * ISZ PHASE SET PHASE4: WRITE INITIALIZE A SPARE. LDA A207 SET ACTION WORD: SEEK&WRT INIT STA \ACTN JMP ENDBR SPC 3 * * PHASE=4: WRITE INITIALIZE TO SPARE WAS SUCCESSFUL - NOW FIXUP * ORIGINAL BAD TRACK WITH SPARE'S ADDRESS. * PHA4 DLD BDCYL GET ADDRESS OF ORIGINAL BAD TRACK & SET DST SKCYL UP TO SEEK TO IT. DLD CYL# GET ADDR OF THE CHOSEN SPARE AND DST ARCYL SET IT IN THE BAD TRACK W/ AN ADDRESS REC'D COMMAND. * CLB STB FLMSK DISABLE SPARING FEATURE * LDB S011 PRESET SPD BITS FOR MODE2: WRITE PROTECT,DEFECTIVE LDA \MODE CPA P3 MODE2 OR MODE3?? LDB S001 MODE3: DEFECTIVE, NO PROTECT STB SPD SET IT. * ISZ PHASE ADVANCE TO PHASE5: WRT INIT FOR FIXUP TO DEF. TRACK LDA A207 SET ACTION WORD TO WRITE INIT.,W/ SEEK STA \ACTN JMP ENDBR SPC 3 * * PHASE5: WRITE INIT FOR FIXUP DONE-NOW VERIFY THE BAD TRACK * THAT WAS SPARED. WE'RE GOING TO DO A SEEK TO THE BAD * TRACK WITH SPARING ENABLED, AND VERIFY IT. * PHA5 DLD BDCYL GET ADDR OF THE ORIGINAL BAD TRACK DST ARCYL AND SET UP TO SEEK TO IT. LDA P4 STA FLMSK ENABLE SPARING-SO WE'LL RESEEK TO THE SPARE TRACK. * LDA A407 SEEK,SPARING ENABLED,VERIFY & RETURN STATUS STA \ACTN JSB XFER GO VERIFY THIS BAD TRACK,SEEKING TO ITS SPARE SZA JMP FAILV ANY ERROR IS BAD NEWS. * DLD CYL# GET ADDR OF SPARED USED CCE SIGNAL RPORT TO SEND "SPARED TO... JSB RPORT SEND "SPARED TO XXXX YYYY .... * CLA,INA STA \RET SIGNAL MAIN THAT WE'RE DONE & RETURN OK STATUS. JMP ENDBR * FAILV JSB NIXSP BAD NEWS- GET NEXT POTENTIAL SPARE & WRT FOR STATUS. JMP ENDBR ERROR RETURN FOR NIXSP- IE. OUT OF SPARES! DST SKCYL SET UP TO SEEK TO NEXT SPARE  DST ARCYL AND CHECK ITS STATUS. * CLB STB FLMSK DISABLE AUTO-SEEK TO SPARE * LDA P3 STA PHASE SET PHASE3: STATUS READ TO POTENTIAL SPARE. LDA A067 SET FOR RDFS FOR STATUS &SEEK STA \ACTN JMP ENDBR * * MODE=4: SPARE CLEANUP/INITIALIZATION MODE. * EOK4 LDA PHASE CPA P3 ARE WE IN PHASE3? - (STATUS READ TO SPARE)? RSS YES - STATUS WRT WAS OK - NOW DO WRT INIT TO SPARE. JMP PHB4 NOT IN PHASE3 - GO CHECK IF IN 4. * PHB3 CLB GET READY TO DO A WRITE INIT TO THE SPARE. STB FLMSK DISABLE AUTO-SEEK TO SPARE. * ISZ PHASE ADVANCE TO PHASE4- WRITE INITIALIZE TO SPARE. LDA A207 SET ACTION WORD TO SEEK & WRITE INIT STA \ACTN JMP ENDBR * PHB4 CPA P4 ARE WE IN PHASE4?- (WRT INIT TO SPARE)? RSS YES - WRT INIT WENT OK- NOW VERIFY THE SPARE. JMP PHB6 NOT IN PHASE4 - GO CHECK IF IN 6. * LDA A407 SEEK,FILE MASK,VERIFY & RET STATUS STA \ACTN SET ACTION WORD FOR XFER JSB XFER GO VERIFY THE SPARE SZA IF STATUS=0, WE'RE OK. JMP FAIL ANY ERROR IS BAD NEWS. * CLA,INA VERIFY WENT OK - SIGNAL SUCCESS & RETURN TO MAIN. STA \RET JMP ENDBR * FAIL LDA A207 SET ACTION FOR INIT AGAIN STA \ACTN * CLA,INA SET SPD BITS FOR FLAGGIN A DEFECTIVE SPARE. STA SPD SET 'EM. ISZ PHASE ADVANCE TO PHASE6: FLAG THAT DEFECTIVE SPARE. ISZ PHASE JMP ENDBR GO AROUND DRIVER LOOP AGAIN-SAME OLD PHASE4:INIT SPARE * * * MUST BE IN PHASE 6: REPORT BAD SPARE & RETURN TO MAIN PHB6 DLD SKCYL GET SET TO REPORT BAD SPARE CLE SIGNAL RPORT TO SEND: JSB RPORT "BAD TRACK ..... " * CLA,INA WE'RE ALL DONE-SPARE HAS BEEN FLAGGED DEFECTIVE. STA \RET SIGNAL THE MAIN & RETURN. JMP ENDBR SPC 1 ** END ENDOK BLOCK ** ********************************************************************** ********************************************************************** SPC 4 ********************************************************************** ********************************************************************** ** FAULT ** SPC 1 * ENTRY CONDITIONS: * STATUS ERRORS 1,2,12,27 * UNIMPLEMENTED STATUS ERRORS 3,4,5,6,13,15,24,25 * FAULT JSB DCYLR OUTPUT:"DEFECTIVE CYLINDER - TRACK XXXX YY" CCA SET RETURN STATUS FLAG TO ABORT STA \RET JMP ENDBR SPC 1 ** END FAULT BLOCK ** ********************************************************************** ********************************************************************** SPC 4 ********************************************************************** ********************************************************************** ** RECAL ** SPC 1 * RECAL RECALIBRATE THE DISC ON CYLINDER COMPARE ERRORS * RECAL ISZ ERCNT UP THE ERROR COUNT: FATAL YET?? JMP AGAIN NO: SEND RECALIBRATE COMMAND AND TRY AGAIN * JSB PARER YES: OUTPUT:"PARITY/DATA ERROR.." CCA STA \RET SET RETURN STATUS FOR ABORT JMP ENDBR * * KLUDGE FOR 7910 DISCS * AGAIN LDA \D#ST GET SEC/TRK CPA P64 JMP SEEK0 * JSB XRCAL SEND A RECAL COMMAND DIRECTLY TO DRIVER LIBRARY. DEF *+4 DEF \TDLU+0 DEF \TUNT+0 DEF IER JMP RCOUT * SEEK0 JSB XSEEK SIMULATE A RECALIBRATE FOR 7910 DEF *+9 DEF \TDLU+0 DEF \TUNT+0 DEF P0 CYLINDER DEF P0 HEAD DEF P0 SECTOR DEF STAT1 DEF STAT2 DEF IER * * RCOUT LDA \ACTN GET \ACTN WORD FOR FIXUP IOR P1 SET \ACTN(1) -FORCE A SEEK ! JMP ENDBR GO TRY AGAIN-SAME PHASE,SAME COMMAND,W/ SEEK SPC 1 ** END RECAL BLOCK ** ********************************************************************** ********************************************************************** SPC 4 ********************************************************************** ********************************************************************** ** EOCYL ** SPC 1 * * EOCYL ENTRY CONDITIONS: * STATUS ERRORS 11 AND 14 * EOCYL JSB SPECR SEND ERR MSG:"INVALID DISC SPECIFICATIONS XX" CCA STA \RET RETURN ABORT STATUS TO MAIN JMP ENDBR SPC 1 ** END EOCYL BLOCK ** ********************************************************************** ********************************************************************** SKP ********************************************************************** ********************************************************************** ** DSKER/DEFTR ** SPC 1 * DSKER ENTRY CONDITIONS: * STATUS 10,16,17 ERRORS * INVALID STATUS 2 ERROR * * DEFTR ENTRY CONDITIONS: * STATUS 21 ERROR * DSKER ISZ ERCNT STEP THE ERROR COUNTER: FATAL # ERRORS YET?? JMP ENDBR NO: GO TRY THE SAME THING AGAIN * * YES: CHECK WHICH MODE WE'RE IN AND DO SOMETHING * SPC 1 ********************************************************************** * BEGIN INCASE(\MODE): DEFTR * SPC 1 DEFTR LDA TBL05 ADA \MODE JMP A,I * TBL05 DEF * JMP DSK01 JMP DSK02 JMP DSK02 JMP DSK04 * SPC 1 * * MODE=1: REGULAR R/W DRIVER MODE-PARITY ERROR IS FATAL,SO ABORT * DSK01 JSB PARER OUTPUT:"PARITY/DATA ERROR.. " CCA STA \RET RETURN ABORT STATUS TO MAIN JMP ENDBR SPC 1 * * MODE=2,3: WRITE INIT TRACK/WRITE SYSTEM TRACK MODE: * SET UP FOR STATUS READ TO NEXT SPARE. * DSK02 LDA PHASE CHECK TO SEE WHICH PHASE WE'RE IN ADA N3 SEPARATE PHASE 1,2 FROM PHASE 3,4,5,6 SSA,RSS FOR PHASE 1,2: SAVE PHYSICAL ADDR OF BAD TRACK JMP GTSPR FOR PHASE 3,4,5,6 WE'VE ALREADY SAVED BAD TRACK * DLD CYL# SAVE ADDRESS OF BAD TRACK DST BDCYL CLE SIGNAL RPORT TO REPORT "BAD TRACK... JSB RPORT GO REPORT BAD TRACK-ALSO PRINT HEADER IF FIRST TIME * GTSPR JSB NIXSP GET THE NEXT POTENTIAL SPARE FOR THIS SUBCHANNEL JMP ENDBR ERROR RETURN FOR NIXSP - IE. OUT OF SPARES! DST SKCYL SEEK TO THE SPARE-WE'RE GOING FOR ITS STATUS DST ARCYL SET UP ADDRESS RECORD * CLB STB FLMSK TURN OFF AUTO-SEEK TO SPARE * LDA P3 STA PHASE SET PHASE3: STATUS READ TO POTENTIAL SPARE LDA A067 SET THE ACTION WORD FOR STA \ACTN READ FULL SECTOR & SEEK FOR SPARE JMP ENDBR SPC 1 * * MODE=4: SPARE INITIALIZATION/CLEANUP MODE. * DSK04 LDA PHASE WHICH PHASE ARE WE IN?? CPA P6 DID WE JUST GET DONE FLAGGIN IT DEFECTIVE?? JMP DSKRT YES: RETURN "OK" STATUS TO MAIN & CLEAN UP NEXT SPARE * ALSO REPORT BAD TRACK * CLA,INA NO: LET'S GO INIT THE SPARE & FLAG IT DEFECTIVE STA SPD SET DEFECTIVE BIT(0) LDA P6 STA PHASE SET PHASE6: WRITE INIT. A SPARE-FLAG DEFECTIVE * LDA A207 SET FOR SEEK & WRITE INIT STA \ACTN JMP ENDBR ALL SET?? OK-AROUND WE GO AGAIN. * DSKRT DLD ARCYL GET CYL/HEAD OF THIS BAD SPARE CLE SIGNAL RPORT TO SEND "BAD TRACK... JSB RPORT GO REPORT SPARE AS BAD TRACK CLA,INA STA \RET RETURN TO MAIN WITH OK STATUS- WE'RE DONE W/ THIS ONE JMP ENDBR SPC 1 * END INCASE(\MODE); * ********************************************************************** SPC 1 ** END DSKER/DEFTR BLOCK ** ********************************************************************** **********************************************************************