IDENT SYSERR ENTRY DISASTR,E.ECS ENTRY E.ECS1 ENTRY E.ECSCT,E.ECSRT * HRDWARE RJ DISASTR . UNABLE TO RECOVER E.ECS BSSZ 1 EXT I.LOCK * ECS ERROR RECOVERY ROUTINE IS ENTERED THROUGH THE RJ IN LOWER * BITS OF ECS R/W^S. E.ECS RETRYS THE INSTRUCTION WHICH FAILED. * IF SUCCESSFULL, E.ECS RESTORES REGISTERS AND RETRUNS CONTROL * TO THE POINT WHERE THE ERROR OCCURED. OTHER WISE, IT DOES AN * RJ TO DISASTR. COUNTS OF THE NUMBER OF RECOVERIES AND THE * NUMBER OF RETRYS MADE ARE KEPT IN E.ECSCT AND E.ECSRT . * NOTE** A7 IS ASSUMED TO BE CLOBBERED DURING AN ECS TRANSFER. SA7 TEMPX7 . SAVE X7 SX7 A1-B0 SA7 TEMPA1 . SAVE A1 BX7 X1 SA7 TEMPX1 . SAVE X1 SA1 I.LOCK SX7 1 SA7 A1+0 . LOCK OUT INTERUPTS SA7 E.ECS1 . SET FLAG FOR DISPLAY DRIVER BX7 X1 SA7 TEMPLOCK . SAVE ILOCK MX1 60-24 BX7 -X1*X0 SA7 4 SET ECS ERROR WORD BX7 X2 SA7 TEMPX2 . SAVE X2 SA1 E.REREAD MX2 30 BX7 -X2*X1 . SAVE EQ SA1 E.ECS AX1 30 SA1 X1-1 . GET ECS INSTRUCTION BX1 X1*X2 . MASK OFF RJ BX7 X1+X7 . NEW ECS INSRRUCTION SA7 E.REREAD . STORE INSTRUCTION SA1 E.ECSCT SX7 X1+1 . STEP ENTRY COUNT SA7 E.ECSCT SX7 -32 E.RETRY SX7 X7+1 PL X7,HOPELESS . COULDN^T RECOVER JP E.REREAD PURGE 6600 STACK E.REREAD VFD 30/0 . ECS INSTRUCTION GOES HERE EQ E.RETRY . LOOP FOR RETRY SA1 E.ECSRT . SUCCESS ^^^^ SX7 X7+33 IX7 X7+X1 SA7 A1 . INCREMENT RETRY COUNT NOCRASH1 SA1 E.ECS . GET RETURN JUMP BX7 X1 MX2 30 SA1 E.RTN . LAST INSTRUCTION WORD BX1 X1*X2 . SAVE TOP 30 BITS LX7 30 . POSITION INSTRUCTION BX7 X7+X1 . INSERT JUMP INTO LAST WORD SA7 A1 . AND STORE IT SX7 0 SA7 E.ECS1 . ZERO FLAG SA7 4 . ZERO POINTER * RESTORE REGISTERS SA1 E.RESTOR . PX0,AX0,SB6 0 MX2 60-18 SX7 B6-B0 . GET B6 BX7 -X2*X7 . GET RID OF EXTENDED SIGN BX1 X2*X1 . REMOVE OLD K FROM SB6 INSTRUCTION BX7 X1+X7 . NEW INSTRUCTION SA7 A1 . STORE IT SA1 E.RTN . GET SB7, EQ E.ECS SX7 B7-B0 . GET B7 BX7 -X2*X7 . REMOV E EXTENDED SIGN LX7 30 LX2 30 BX1 X1*X2 . REMOVE OLD K FROM SB7 INSTRUCTION BX7 X7+X1 SA7 A1 . STORE NEW INSTRICTION LX0 60-22 . SAVE A0 UX0 B6,X0 . IN B6 LX0 11 SA1 TEMPX2 UX0 B7,X0 . AND B7 BX2 X1 . RESTORE X2 SA1 TEMPX1 BX0 X1 . SAVE X1 IN X0 SA1 TEMPLOCK BX7 X1 . RESTORE I.LOCK SA7 I.LOCK . AND PRAY ^^^^ SA1 TEMPX7 BX7 X1 . RESTORE X7 SA1 TEMPA1 SA1 X1 . RESTORE A1 BX1 X0 . RESTORE X1 BX0 X0-X0 . FASTER, FASTER,FASTER, FASTER, FAST PX0 B7,X0 . HALF A0 AX0 11 E.RESTOR PX0 B6,X0 AX0 60-22 . A0 RESTORED SB6 0 . B6 RESTORE GOES HERE E.RTN SB7 0 . B7 RETTORE GOES HERE EQ E.ECS . RETURN HOPE, HOPE, HOPE, HOPE, HOP HOPELESS SA1 E.REREAD . INSTRUCTION BX2 X1 LX2 12 AX2 60-18 . K IN X2 BX7 X3 SA7 TEMPX3 . SAVE X3 MX7 9 BX3 -X7*X1 AX3 30+18 . J IN X3 ZR X3,NOBREG SA1 INC.X2 . INCREMENT INSTRUCTION MX7 60-3 BX1 X7*X1 . REMOVE J BX7 X1+X3 . SX2 X2+BJ SA7 A1 JP INC.X2 . 6600 STACK INC.X2 NO 0 NO 0 NO 0 SX2 X2+B0 . ADD B REG TO COUNT NOBREG SA1 E.REREAD MX7 9 BX1 X1*X7 . RE OR WE OP CODE SX7 1 LX7 30 BX3 X1+X7 . READ OR WRITE ONE ECS WORD SA1 ECSRD MX7 30 BX1 -X7*X1 . SAVE ERROR EXIT BX7 X3+X1 . ECS INSTR + ERROR EXIT SA7 A1 SX1 1 BX3 X2 ZR X2,NOCRASH JP ECSRD . 6600 STACK ECSRD VFD 30/0 EQ CRASH SX2 X2-1 SA0 A0+1 . BUMP CM ADDRESS IX0 X0+X1 . BUMP ECS ADDRESS NZ X2,ECSRD . LOOP SA0 A0+1 . NEXT CM ADDRESS EQ NOCRASH CRASH SA1 =XS.ECSRA . GET ECS RA AX1 6 LX1 6 . KILL UNUSED BITS OF RA IX7 X1+X0 . ABSOLUTE ADDRESS OF ERROR SA7 4 . STORE IN KARLS WORD EQ HRDWARE . GO TO DISASTER NOCRASH SX1 A0 IX1 X1-X3 SA0 X1 . RESTORE A0 IX0 X0-X3 . RESTORE X0 SA1 TEMPX3 BX3 X1 . RESTORE X3 EQ NOCRASH1 . RECOVERED E.ECSCT BSSZ 1 . ENTRY COUNT E.ECSRT BSSZ 1 . RE)TRY COUNT E.ECS1 BSSZ 1 TEMPA1 BSSZ 1 TEMPX1 BSSZ 1 TEMPX2 BSSZ 1 TEMPX3 BSSZ 1 TEMPX7 BSSZ 1 TEMPLOCK BSSZ 1 * END OF E.ECS * DISASTR BSSZ 1 RJ FINISH * ENTRY E.MOT E.MOT BSSZ 1 RJ FINISH * ENTRY S.ECSER S.ECSER BSSZ 1 RJ FINISH * ENTRY S.MOTER,S.UNERR S.MOTER BSS 0 S.UNERR BSS 0 BSSZ 1 RJ FINISH * ENTRY HE.ECSR,HE.ECSW HE.ECSR EQU E.ECS HE.ECSW EQU E.ECS BSSZ 1 RJ FINISH * * * FINISH BSSZ 1 FINISH1 PS JP FINISH1 END