!********** !* BDK4S * !********** CONTROL K'100001'; ! 'SYSTEM' PROGRAM+MUL+TRUSTED PERMINTEGERFNSPEC SVC(INTEGER EP, P1, P2) PERMINTEGERMAPSPEC INTEGER PERMBYTEINTEGERMAPSPEC BYTEINTEGER PERMINTEGERFNSPEC ADDR PERMINTEGERFNSPEC ACC BEGIN SYSTEMINTEGERFNSPEC GETID RECORDFORMAT PF(BYTEINTEGER SERVICE, REPLY, INTEGER A1, A2, A3) RECORDFORMAT P2F(INTEGER D) RECORDFORMAT DKF(INTEGER DST, ERR, COMM, WC, ADD, DAR) CONSTRECORD (DKF) NAME DK = K'177400' CONSTINTEGER DKTOP = 4871 OWNINTEGER DK BOT = K'77' CONSTINTEGER UNIT1 = K'020000' CONSTINTEGER UNIT2 = K'040000' CONSTINTEGERARRAY LOOK UP(0:1) = K'505', K'503' !! READ (0) AND WRITE (1) COMMANDS FOR THE RK05 RECORD (PF)P, PX RECORD (P2F) NAME P2 INTEGER PAR, ID, BLOCK, ADD, COMM, BL INTEGER DAR, SECTOR, COMM2, MID, FAULT P2 == PX MID = GETID CYCLE P_SERVICE = 0 POFF(P) FAULT = 0 ID = P_REPLY IF P_A2 = 0 START DK BOT = 0; FAULT = 9 ELSE PAR = MAP ABS(P_A2, 512, ID) IF PAR = 0 THEN FAULT = 1 ELSESTART PAR = PAR+(P_A2&K'17777') >> 6 !! ADD IN BLOCK DISP COMM2 = LOOK UP(P_A1&1) IF PAR >= K'2000' START ! NEED TO SET 17&18TH BITS COMM2 = COMM2!(PAR&K'6000') >> 6 PAR = PAR&K'1777' FINISH DAR = 0 BLOCK = P_A3 IF BLOCK&UNIT1 # 0 THEN DAR = UNIT2 AND BLOCK = C BLOCK&(UNIT1-1) IF BLOCK < DKBOT OR BLOCK > DKTOP THEN FAULT = 4 C ELSESTART COMM =- (P_A1 >> 1) IF COMM = 0 THEN COMM =- 256 AGN: DK_ADD = PAR << 6+P_A2&K'77' BL = BLOCK//12 DK_DAR = DAR!(BL << 4)!(BLOCK-BL*12) DK_WC = COMM DK_COMM = COMM2 P2_D = (-3)&X'00FF'; ! WAIT FOR DISC INTERRUPT POFF(P2) IF DK_COMM < 0 START PX_SERVICE = 7; PX_REPLY = MID PX_A1 = DK_ERR PONOFF(PX) DK_COMM = 1; ! ISSUE RESET -> AGN FINISH FINISH FINISH PAR = MAP ABS(P_A2, 0, ID); ! RELEASE SEG FINISH P_A1 = FAULT P_SERVICE = ID; P_REPLY = 3 PON(P) REPEAT ENDOFPROGRAM