!************ !* BDK6S * !*21.APR.78* !************ !* N O T E: MODIFIED TO ADDRESS UNIT 4 (SOFTWARE) AS UNIT 2 (HARDWARE) CONTROL K'100001'; ! 'SYSTEM' PROGRAM+MUL+TRUSTED PERMINTEGERFNSPEC SVC(INTEGER EP, P1, P2) PERMINTEGERMAPSPEC INTEGER PERMBYTEINTEGERMAPSPEC BYTEINTEGER PERMINTEGERFNSPEC ADDR PERMINTEGERFNSPEC ACC BEGIN SYSTEMINTEGERFNSPEC GETID SYSTEMROUTINESPEC LINKIN(INTEGER SER) 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 SET UNIT 2 = 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, REPLY P2 == PX MID = GETID CYCLE P_SERVICE = 0 POFF(P) FAULT = 0 ID = P_REPLY; REPLY = P_SERVICE 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 REPLY # 3 START DAR = SET UNIT 2 IF BLOCK > DKTOP START DAR = DAR+UNIT1; BLOCK = BLOCK-DKTOP+DKBOT FINISH FINISH IF BLOCK&UNIT1 # 0 THEN DAR = DAR+UNIT1 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 PX_A2 = 0; ! 'Not ready' PONOFF(PX) DK_COMM = 1; ! ISSUE RESET FAULT = 5 AND -> FLT IF PX_A1 # 0 -> AGN FINISH FINISH FINISH FLT: PAR = MAP ABS(P_A2, 0, ID); ! RELEASE SEG FINISH P_A1 = FAULT P_SERVICE = ID; P_REPLY = REPLY PON(P) REPEAT ENDOFPROGRAM