/RK8 FORMATTER FOR COS / /COPYRIGHT 1972, 1973 /DIGITAL EQUIPMENT CORPORATION /MAYNARD, MASS. 01754 / / /THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE /ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION /OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT /AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL /EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. / /THIS LOADER ALLOWS 4K PDP-8 PROGRAMS TO BE LOADED UNDER COS. /(PRIMARILY, FOR THE DECTAPE AND DISK FORMATTERS). / /REQUIREMENTS AND METHOD: / /ASSEMBLE PDP-8 PROGRAM INTO FIELD 1 /PUT ITS STARTING ADDRESS AT LOCATION 10000 /PUT THIS CODE AT *200, FIELD 0 /ABSLOAD THE WHOLE THING PRECEEDED BY BINARY OF COS 300 MONITOR /SAVE 0-377,10000-17577;200 UNDER OS/8 /TO REBOOT COS AFTER EXECUTION OF PROGRAM, JUMP TO 7600. / KMOVE=23 *200 IOF /ONCE-ONLY CODE! TAD (-200 JMS I KMOVE /MOVE PAGE 7600 TO FIELD 1 CDF 10 7600-1 7600-1 TAD (-200 JMS I KMOVE /NOW MOVE THIS CODE TO 7600 CDF 0 200-1 7600-1 JMP I .+1 MOVLUP&177+7600 /CONTINUE EXECUTION THERE MOVLUP, CDF 10 /NOW SWAP 0-7577, FIELDS 0 AND 1 TAD I XX1 DCA MOVTMP CDF 0 TAD I XX2 CDF 10 DCA I XX1 CDF 0 TAD MOVTMP DCA I XX2 ISZ XX1 ISZ XX2 ISZ MOVCNT JMP MOVLUP TAD (JMP RESTOR DCA I XX2 /XX2 = 7600 JMP I 0 /GO TO STARTING ADDR OF PROGRAM /NOW SWAP FIELDS BACK AGAIN RESTOR, IOF /JUST IN CASE! RESLUP, CDF 10 TAD I X3 CDF 0 /WE DON'T NEED TO PRESERVE FIELD 0 NOW DCA I X4 ISZ X3 ISZ X4 ISZ RESCNT JMP RESLUP JMP I .+1 RES200 RES200, TAD (-200 /NOW MOVE PG 7600 BACK CDF 10 /THIS CODE GETS EXECUTED AT PG 200 JMS I KMOVE CDF 0 7600-1 7600-1 ION JMP I L7600 MOVTMP, 0 RESCNT, -7600 MOVCNT, -7600 XX1, 0 XX2, 0 X3, 0 X4, 0 L7600, 7600 FIELD 1 / /RK08 IOT'S / DCLA=JMS LAIOT DLDC=JMS DCIOT DLDR=JMS DRIOT DLDW=JMS DWIOT DRDS=JMS DSIOT DCLS=JMS LSIOT DSKC=JMS KCIOT DSKE=JMS KEIOT DLWC=JMS WCIOT DLCA=JMS CAIOT DRWC=JMS RWCIOT *0 START *20 / /RK08 DISK FORMATTER /ROUTINE LINKS AND WORK REGISTERS / LSTAMT, STAMT /LINK TO FORMAT MESSAGE LTEXHAND, TEXHAND /LINK TO CONVERSATION HANDLER LSECTOR, SECTOR /LINK TO SECTOR NUMBERS MIBDL, MIBD /LINK TO MAIN BODY L2HEADER, EXEC /LINK TO SECOND HEADER WORK LFIBUF, FIBUF /LINK TO FILL BUFFER LDATA, DATA-1 /LINK TO SECTOR DATA AREA LMESSAGE, MESSAGE /LINK TO MESSAGE HANDLER LSIXTY, SIXTY /LINK TO OCTAL TO ASCII FORMAT LHEADER, HEADER /LINK TO HEADER WORD LADER, ADER /LINK TO ADDRESS MESSAGE LQUESMK, QUESMK /LINK TO QUESTION MARK REPORT STXFER, HEADER-1 /LINK TO DATA FOR TRANSFERS LINT, INT /LINK DO INTERRUPT HANDLER LYMES, YMES /LINK TO MESSAGE FOR CONVERSATION LALPHC, ALPHC /LINK TO ALPHA TEXT HANDLER LWRISECT, WRISECT /LINK TO WRITE SECTOR LRDCHK, RDCHK /LINK TO TEST HEADER DATA LSTART, ASTART /LINK TO START LHEATR, HEATR /LINK TO HEADER ERROR MESSAGE LEXER, EXER /LINK TO EXEC WORD ERROR MESSAGE LEND, END /LINK TO END OF PROGRAM MESSAGE LREWT, REWT /LINK TO RE-WRITE CONVERSATION LSURF0, SURF0 /LINK TO SURFACE 0 REPORT LSURF1, SURF1 /LINK TO SURFACE 1 REPORT LDVCODE, DVCODE /LINK TO DEVICE CODE TTY ROUTINE / / / / / AC, 0 LINK, 0 DISK, 0 TRACK, 0 ERFLAG, 0 WORD, 0 TIME, 0 TIME1, 0 WASTE, 0 DMA, 0 STATUS, 0 TEMP, 0 TEMP1, 0 WORK, 0 WORK1, 0 TEXBUF, 0 /CONVERSATION WORD RUBOUT, 0 /RUB-OUT FLAG MASKA, 0 MASKB, 0 MASKC, 0 MASKD, 0 *100 / /SECTOR NUMBERS IN FORMAT SEQUENCE / SECTOR, 0 /PHYSICAL SECTOR 0 0 /PHYSICAL SECTOR 1 0 /PHYSICAL SECTOR 2 0 /PHYSICAL SECTOR 3 0 /PHYSICAL SECTOR 4 0 /PHYSICAL SECTOR 5 0 /PHYSICAL SECTOR 6 0 /PHYSICAL SECTOR 7 0 /PHYSICAL SECTOR 10 0 /PHYSICAL SECTOR 11 0 /PHYSICAL SECTOR 12 0 /PHYSICAL SECTOR 13 0 /PHYSICAL SECTOR 14 0 /PHYSICAL SECTOR 15 0 /PHYSICAL SECTOR 16 0 /PHYSICAL SECTOR 17 / /ROUTINE TO GENERATE THE IOT THAT CLEARS THE WORLD / / LAIOT, 0 IOTLA, 6751 /IOT JMP I LAIOT /EXIT / /IOT TO LOAD COMMAND REGISTER / / DCIOT, 0 IOTDC, 6732 /IOT JMP I DCIOT /EXIT / /GENERATE IOT THAT LOADS ADDRESS AN WRITES / / DWIOT, 0 IOTDW, 6735 /IOT JMP I DWIOT /EXIT / / /IOT TO LOAD ADDRESS AND READ / DRIOT, 0 IOTDR, 6733 /IOT JMP I DRIOT /ET /EXIT / / /IOT TO LOAD ADDRESS AND READ / DRIOT, 0 IOTDR, 6733 /IOT JMP I DRIOT /EO LOAD WORD COUNT / / WCIOT, 0 IOTWC, 6753 /IOT JMP I WCIOT /EXIT / /IOT TO LOAD CURRENT ADDRESS / / CAIOT, 0 IOTCA, 6755 /IOT JMP I CAIOT /EXIT / /IOT TO READ STATUS / / DSIOT, 0 IOTDS, 6741 /IOT JMP I DSIOT /EXIT / / / /IOT TO SKIP ON CONTROL DONE / KCIOT, 0 IOTKC, 6745 /IOT JMP I KCIOT /NO FLAG LOOK AGAIN ISZ KCIOT JMP I KCIOT /EXIT / /IOT SKIP ON ERROR FLAG / / KEIOT, 0 IOTKE, 6747 /IOT JMP I KEIOT /NO FLAG ISZ KEIOT JMP I KEIOT /EXIT / / /IOT READ WORD COUNT REGISTER / RWCIOT, 0 IOTRW, 6752 /IOT JMP I RWCIOT /EXIT *200 START, SKP JMP I LDVCODE TYPMES, CLA JMS I LMESSA TEXT "%#DRIVE NO.? " JMS I LALPHC CLA TAD WORK TAD (-264 CLL TAD (4 SNL JMP TYPMES CLL RAL DCA DISK ASTART, JMS I LSTAMT TAD (JMP I LINT DCA 1 DCA TRACK JMS I LALPHC SZA CLA JMP ODBALL /SET UP NON STANDARD FORMAT DCA TEMP /SETUP STANDARD FORMAT TAD (SECTOR-1 /FETCH STARTING PT. DCA 10 STAFTH, TAD TEMP /FETCH SECTOR # DCA I 10 /STORE IN BUFFER TAD TEMP /TEST FOR LAST SECTOR CIA TAD (17 /EQUAL TO LAST SECTOR SNA CLA JMP I MIBDL /BUFFER FULL: ENTER MAIN BODY ISZ TEMP JMP STAFTH / / / /SET UP FOR SECTOR NON-STANDARD FORMAT / ODBALL, TAD (SECTOR-1 /SET UP SECTOR BUFFER DCA 10 DCA WORK1 TAD WORK1 AND (10 SNA CLA JMP .+3 JMS I LSURF1 SKP JMS I LSURF0 JMS I LYMES JMS I LTEXHAND /GO TO CONVERSATION CLA TAD RUBOUT /TEST FOR RUB-OUT SNA CLA JMP .+3 JMS I LQUESMK JMP .-6 TAD WORK1 AND (10 /TEST FOR SURFACE 1 SZA CLA JMP SURFACE1 TAD TEXBUF /FETCH CHARACTER AND (7770 SNA CLA JMP .+3 JMS I LQUESMK JMP ODBALL+3 TAD TEXBUF /FETCH # DCA I 10 /STORE SECTOR # ISZ WORK1 JMP ODBALL+3 /FETCH NEXT SECTOR # SURFACE1, TAD TEXBUF /FETCH # AND (7770 SZA CLA JMP .+3 JMS I LQUESMK JMP ODBALL+3 AND (7760 SNA CLA JMP .+3 JMS I LQUESMK JMP ODBALL+3 TAD TEXBUF /FETCH SECTOR # DCA I 10 /STORE SECTOR # ISZ WORK1 /INC. CNT. TAD (-20 TAD WORK1 SZA CLA JMP ODBALL+3 /FETCH NEXT CHARACTER JMP I MIBDL /ENTER MAIN BODY PAGE / /MAIN BODY RK08 DISK FORMAT PROGRAM / / MIBD, CLA TAD DISK DLDC /LOAD DISK NO. DCA I L2HEADER /CLEAR EXEC WORD (WRITE LOCKOUT) JMS I LFIBUF /FILL DATA AREA OF SECOTR DCLA /CLEAR THE DISK WORLD DSKC /SKIP ON CONTROL DONE JMP .-1 TAD (7100 /DISK COMMAND BITS TAD DISK DLDC /LOAD COMMAND REG CLA TAD LWRISECT DCA 2 TAD (SECTOR-1 /SECTOR # POINTER DCA 17 WRISECT,TAD (SECTOR+17 /LAST SECTOR # CIA TAD 17 /FETCH POINTER SNA CLA JMP RETKS /LAST SECTOR OF TRACK TAD I 17 /FETCH NEXT SECTOR # TAD TRACK /FETCH TRACK # DCA I LHEADER /SETUP HEADER WORD DCA TIME /SET UP TIMERS JMS XFERST /SET UP FOR XFER DLDW /WRITE JMP . /WAIT FOR FLAG / / / / / /ROUTINE TO CHECK PARITY IN SECTOR / RETKS, CLL CLA TAD ERFLAG /FETCH ERROR FLAG SNA CLA JMP .+6 /NO ERRORS JMS I LREWT /ASK IF HE WANTS TO RE-WRITE JMS I LALPHC SZA CLA SKP /DO NOT RE-WRITE TRACK JMP WRISECT-4 /RE-WRITE TRACK TAD LRDCHK /SET UP POINTER DCA 2 TAD (SECTOR-1 /SECTOR # POINTER DCA 17 RDSECT, TAD (SECTOR+17 /LAST SECTOR # CIA TAD 17 SNA CLA JMP INDXTK TAD I 17 /FETCH SECTOR # TAD TRACK /FETCH TRACK # DCA I LHEADER /SET UP HEADER WORD DCA TIME /SET UP TIMERS JMS XFERST /SET UP FOR X-FER DLDR /READ JMP . /WAIT FOR FLAG / / / /ROUTINE TO CHECK HEADER AND EXEC. WORD /REPORT EACH ERROR / RDCHK, CLA TAD I LHEADER /FETCH HEADER WORD CIA TAD DMA /CORRECT HEADER WORD SNA CLA JMP .+5 /NO HEADER ERROR JMS I LADER /REPORT ADDRESS JMS I LHEATR /REPORT HEADER ERROR CLA CMA DCA ERFLAG /SET ERROR FLAG TAD I L2HEADER /FETCH EXEC. WORD SNA CLA /TEST FOR ZERO EXEC WORD JMP .+5 /EXEC OK JMS I LADER /ERROR IN EXEC. WORD JMS I LEXER /REPORT EXEC ERROR CLA CMA DCA ERFLAG /SET ERROR FLAG JMP RDSECT / / / INDXTK, CLL CLA TAD ERFLAG /FETCH ERROR FLAG SNA CLA JMP .+6 /NO ERROR JMS I LREWT /ASK IF OPERATOR WANTS TO RE-WRITE TRACK JMS I LALPHC /FETCH TYPED CHARACTER SZA CLA SKP /DO NOT REWRITE JMP WRISECT-4 /RE-WRITE SECTOR TAD (-6240 /TEST FOR LAST TRACK # TAD TRACK SNA CLA JMP .+5 /DISK FORMATED TAD TRACK /FETCH TRACK # TAD (20 /INCREMENT TRACK # DCA TRACK JMP WRISECT-4 /FORMAT NEXT TRACK DCLA /CLEAR THE DISK JMS I LEND /THE DISK IS FORMATTED / /ROUTINE TO SET UP FOR DISK TRANSFERS / /EXIT WITH TRACK, SURFACE AND SECTOR IN AC / XFERST, HLT DCLS /CLEAR STATUS CLA TAD (7376 /NUMBER OF WORDS TRANSFERRED DLWC /LOAD WORD COUNT TAD STXFER /CURRENT ADDRESS POINTER DLCA /LOAD CURRENT ADDRESS ION /TURN INTERRUPT ON TAD I LHEADER /FETCH DISK ADDRESS DCA DMA TAD DMA JMP I XFERST /EXIT PAGE /RK08 SECTOR FORMAT /FIRST WORD CONTAINS TRACK-SURFACE-SECTOR /SECOND WORD CONTAIN ZEROS (EXEC WORD CONTAINS WRITE-PROTECT WORD) /400 WORDS OF DATA CONTAINING 5252 PATTERN. HEADER, 0 EXEC, 0 DATA, 0 PAGE 0 PAGE *.+10 / / /FILL DATA PORTION OF SECTOR WITH DATA /DATA PATTERN=5252 / / FIBUF, HLT TAD (7400 /#OF DATA WORDS DCA WORK TAD LDATA /LINK TO DATA AREA DCA 10 TAD (5252 DCA I 10 /STORE DATA WORK ISZ WORK /+1 CNT. JMP .-3 /STORE NEXT WORD JMP I FIBUF /BUFFER FULL. /TAPE 2 / /ROUTINE TO HANDLE PROGRAM INTERRUPTS / / / INT, DCA AC /STORE AC RAR DCA LINK /STORE LINK DSKE /TEST FOR DISK ERROR SKP JMP DSKERR /REPORT DISK ERROR DSKC /IS TRANSFER DONE SET SKP /NOT A DISK FLAG JMP I 2 /YES! EXIT KSF /SKIP ON READER FLAG JMP .+3 /NOT READER KCC /READER FLAG SET JMP EXINT /EXIT HANDLER TSF /SKIP ON PUNCH FLAG JMP .+3 TCF /CLEAR PUNCH FLAG JMP EXINT /EXIT HANDLER RSF /SKIP ON HIGH SPEED READER JMP .+3 /NOT READER RFC /YES! CLEAR FLAG JMP EXINT /EXIT HANDLER PSF /SKIP ON HIGH SPEED PUNCH JMP .+3 PCF /CLEAR PUNCH FLAG SKP JMS I LUNDEF /REPORT UNDEFINED INTERRUPT EXINT, CLA CLL TAD LINK /RESTORE LINK RAL TAD AC /RESTORE AC ION /TURN INTERRUPT ON JMP I 0 /EXIT / /ROUTINE TO HANDLE DISK ERRORS / DSKERR, JMS I LADER /REPORT ADDRESS DRDS /READ DISK STATUS DCA STATUS TAD STATUS AND (1000 /TEST FOR CONTROL BUSY SZA JMS I LCONST /REPORT CONTROL BUSY TAD STATUS /FETCH STATUS AND (0400 /TEST FOR CONTROL BUSY SZA JMS I LTIMOUT /REPORT CONTROL TIME OUT TAD STATUS AND (0200 /TEST FOR PARITY ERROR SNA JMP EXETER /NO PARITY ERROR DRWC /READ WORD COUNT REG SNA CLA JMP .+4 /DATA PARITY ERROR JMS I LAPE /REPORT FORMAT PARITY ERROR SKP JMS I LPARER /REPORT DATA PARITY ERROR EXETER, TAD STATUS AND (0100 /TEST FOR DATA RATE ERROR SZA JMS I LDARAT /REPORT DATA RATE ERROR TAD STATUS AND (0040 /TEST FOR TRACK ADDRESS ERROR SZA JMS I LTRADER /REPORT ERROR TAD STATUS AND (0020 /TEST FOR SECTOR NO GOOD SZA JMS I LSECNOG /REPORT SECTOR NO GOOD TAD STATUS AND (0010 /TEST FOR WRITE LOCK OUT SZA JMS I LWRLOK /REPORT WRITE LOCK OUT TAD STATUS AND (0004 /TEST FOR TRACK CAPACITY EXCEEDED SZA JMS I LTRACPE /REPORT TRACK EXCEEDED TAD STATUS AND (0002 /TEST FOR NON EXISTENT DISK JMP .+3 JMS I LNED /REPORT SELECT ERROR HLT /OPERATOR MUST RESTART PROGRAM CLA CMA DCA ERFLAG /SET ERROR FLAG JMP I 2 /EXIT / / / / LUNDEF, UNDEF /LINK TO UNDEFINED INTERRUPT MESSAGE LCONST, CONST /LINK TO CONTROL BUSY MESSAGE LTIMOUT, TIMOUT /LINK TO TIME OUT MESSAGE LAPE, APE /LINK TO ADDRESS PARITY MESSAGE LPARER, PARER /LINK TO DATA PARITY ERROR MESSAGE LDARAT, DARAT /LINK TO DATA RATE MESSAGE LTRADER, TRADER /LINK TO TRACK ADDRESS ERROR MESSAGE LSECNOG, SECNOG /LINK TO SECTOR NO GOOD MESSAGE LWRLOK, WRLOK /LINK TO WRITE LOCKOUT MESSAGE LTRACPE, TRACPE /LINK TO CAPACITY EXCEEDED MESSAGE LNED, NED /LINK TO NON EXISTENT DISK MESSAGE PAGE /THIS PAGE CONTAINS TELETYPE CONVERSATION ROUTINE / /AND TEXT HANDLER, ALSO A ROUTINE TO CONVERT / /OCTAL NUMBERS TO ASCII CODE. / / /PDP-8 TELETYPE CONVERSATION ROUTINE / / TEXHAND, 0 CLA CLL DCA TEXBUF /ZERO TEXT WORD DCA RUBOUT KCC /CLEAR KEYBOARD KSF /SKIP ON KEYBOARD FLAG JMP .-1 /NO FLAG KRB /READ BUFFER TAD (-203 SNA JMP I (7600 TAD (203 TLS /ECHO CHARACTER TSF /SKIP ON FLAG JMP .-1 TCF DCA TEMP1 /STORE CHARACTER TAD TEMP1 CIA TAD (377 SZA CLA JMP .+3 ISZ RUBOUT JMP I TEXHAND TAD TEMP1 CLL CIA /COMPARE FOR DELIMTER TAD (215 /CARRIAGE RETURN SNA CLA /NO DELIMTER JMP I TEXHAND /EXIT! LAST CHARACTER TYPED TAD (-260 TAD TEMP1 SMA CLA JMP .+3 JMS I LQUESMK JMP TEXHAND+1 TAD (-270 TAD TEMP1 SPA CLA JMP .+3 JMS I LQUESMK JMP TEXHANH+1 TAD TEMP1 AND (7 DCA TEMP1 TAD TEXBUF /FETCH WORD CLL RTL RAL TAD TEMP1 DCA TEXBUF /STORE WORD TAD TEXBUF AND (7700 SNA CLA JMP .+3 JMS I LQUESMK JMP TEXHAND+1 JMP TEXHAND+4 /FETCH NEXT CHARACTER /MOD. DIGITAL 8=18-U /MESSAGE TYPE-OUT /ENTER FROM JMS MESSAGE, 0 CLA CMA /SET C(AC)=-1 TAD MESSAGE /ADD LOCATION DCA 12 /AUTO INDEX REG TAD I 12 /FETCH FIRST WORD DCA MSRGHT /SAVE IT TAD MSRGHT RTR RTR /ROTATE SIX BITS RTR JMS TYPECH /TYPE IT TAD MSRGHT /GET DATA AGIN JMS TYPECH /TYPE RIGHT HALH JMP MESSAGE+4 /CONTINUE MSRGHT, 0 TYPECH, 0 /TYPE CHARACTER AND (77 SZA /IS IT THE END OF MESSAGE JMP .+3 TCF JMP I 12 /YES:EXIT TAD (7740 /SUBTRACT 40 SMA /<40? JMP .+3 /NO TAD (340 /YES:ADD 300 JMP MTP /TO CODES<40 TAD (7775 /SUBTRACT 3 SZA /IS IT ZERO JMP .+3 /NO TAD (212 /YES: CODE 45 JMP MTP /LINE FEED TAD (7776 /SUBTRACT 2 SZA /IS IS ZERO JMP .+3 /NO TAD (215 /IT IS A CARRIAGE RETURN JMP MTP TAD (245 / / / MTP, TLS /TRANSMIT CHARACTER TSF /WAIT FOR FLAG JMP .-1 /NOT SET YET CLA /SET JMP I TYPECH /RETURN / PAGE /ROUTINE USED FOR PACKING /ONE 12BIT WORD INTO TWO WORDS /FOR TELEPRINTER OUTPUT SIXTY, HLT NOP NOP /STORE INIT NEXT TIME CLA TAD I .-4 /ADDRESS OF OPERAND DCA .+2 JMP I .+2 0 /ADDRESS OFOPERAND SIXTY+12 /CHANGING REFERENCE POINT JMP SIXTY+3 TAD I SIXTY+7 /AC(OPERAND) AND (7 DCA MASKA /000X TAD I SIXTY+7 /AC (OPERAND) AND (70 DCA MASKB /O0X0 TAD I SIXTY+7 /AC (OPERAND) AND (700 DCA MASKC /0X00 TAD I SIXTY+7 /AC (OPERAND) AND (7000 DCA MASKD /X000 TAD MASKC /0X00 RTR CLL RAR /0X00 RS3 00X0 TAD MASKD /X0X0 RTR RAR TAD (6060 /X0X0 RS3 0X0X DCA MASKC /TEMP STORAGE ISZ SIXTY /INCREMENT FOR STORAGE JMS SIXTY+10 /FIND STORAGE ADDRESS TAD MASKC /6X6X DCA I SIXTY+7 /STORE OPERAND AS SPECIFIED TAD MASKB /00X0 RAL RTL /00X0 SL3 0X00 TAD MASKA /0X00+000X=0X0X TAD (6060 /0X0X+6060=6X6X DCA MASKD /TEMP STORAGE ISZ SIXTY /INCREMENT FOR STORAGE JMS SIXTY+10 /FIND STORAGE ADORES TAD MASKD /6X6X DCA I SIXTY+7 /STORAGE OPERAND AS SPECIFIED TAD (SIXTY+12 /HOUSE KEEPING DCA SIXTY+10 ISZ SIXTY /INCREMENT FOR RETURN JMP I SIXTY /RETURN / / /ROUTINE TO FETCH ALPHA CHARACTERS / / ALPHC, 0 KCC KSF /SKIP ON KEYBOARD FLAG JMP .-1 KRB /READ BUFFER TAD (-203 SNA JMP I (7600 TAD (203 TLS /LOAD TELEPRINTEER FLAG TSF /SKIP ON TELEPRINTER FLAG JMP .-1 DCA WORK DCA ERFLAG KCC TAD (-331 /ASCII CODE FOR Y TAD WORK JMP I ALPHC /EXIT / /REPORT? / QUESMK, 0 JMS I LMESSAGE TEXT '%#?' JMP I QUESMK /ASK FOR DIFFERENT SECTOR # / /REPORT SURFACE0 /REPORT SURFACE1 SURF0, 0 JMS I LMESSAGE TEXT '%#SURFACE0 ' JMP I SURF0 SURF1, 0 JMS I LMESSAGE TEXT '%#SURFACE1 ' JMP I SURF1 PAGE YMES, HLT JMS I LMESSAGE TEXT ' SECTOR NO.' JMP I YMES /EXIT / STAMT, HLT JMS I LMESSAGE TEXT '%# WRITE STANDARD FORMAT?(TYPE "Y" FOR YES)' JMP I STAMT / / REWT, HLT JMS I LMESSAGE TEXT '%# RE-WRITE TRACK?(TYPE "Y" FOR YES)' JMP I REWT /EXIT / / END, HLT JMS I LMESSAGE TEXT '%# DISK FORMATTED ' JMP I (START / / / / UNDEF, HLT JMS I LMESSAGE TEXT '%# UNDEFINED INTERRUPT ' JMP I (7600 / /REPORT ADDRESS OF DISK / / ADER, HLT CLA CLL TAD DMA AND (17 DCA WORK JMS I LSIXTY WORK WASTE ADER1 CLA CLL TAD DMA AND (7760 RTR RTR DCA WORK JMS I LSIXTY WORK ADER2 ADER3 JMS I LMESSAGE TEXT '%# TRACK ' JMS I LMESSAGE ADER2, 6060 ADER3, 6060 TEXT ' SECTOR ' JMS I LMESSAGE ADER1, 6060 0 JMP I ADER /EXIT PAGE / / /**** ERROR MESSAGES **** / / CONST, HLT JMS I LMESSAGE TEXT '%# CONTROL BUSY' JMP I CONST /EXIT / / TIMOUT, HLT JMS I LMESSAGE TEXT '%# CONTROL TIME OUT' JMP I TIMOUT /EXIT / / PARER, HLT JMS I LMESSAGE TEXT '%# DATA PARITY ERROR' JMP I PARER /EXIT / / DARAT, HLT JMS I LMESSAGE TEXT '%# DATA RATE ERROR' JMP I DARAT /EXIT / / TRADER, HLT JMS I LMESSAGE TEXT '%# TRACK ADDRESS ERROR' JMP I TRADER /EXIT / / SECNOG, HLT JMS I LMESSAGE TEXT '%# SECTOR NO GOOD' JMP I SECNOG /EXIT / / WRLOK, HLT JMS I LMESSAGE TEXT '%# WRITE LOCK OUT' JMP I WRLOK /EXIT PAGE / / TRACPE, HLT JMS I LMESSAGE TEXT '%# TRACK CAPACITY EXCEEDED ERROR' JMP I TRACPE /EXIT / / NED, HLT JMS I LMESSAGE TEXT '%# SELECT ERROR' JMP I NED /EXIT / / / APE, HLT JMS I LMESSAGE TEXT '%# FORMAT PARITY ERROR' JMP I APE /EXIT / / PAGE / / / CODE1, HLT JMS I LMESSAGE TEXT '%# CHANGE DEVICE CODE 73 TO?' JMP I CODE1 / / / CODE2, HLT JMS I LMESSAGE TEXT '%# CHANGE DEVICE CODE 74 TO?' JMP I CODE2 / / / CODE3, HLT JMS I LMESSAGE TEXT '%# CHANGE DEVICE CODE 75 TO?' JMP I CODE3 / / / / / / /REPORT PROGRAM TIME OUT / / / /REPORT FORMAT ERROR /FIRST HEADER WORD / HEATR, HLT JMS I LMESSAGE TEXT '%# FORMAT ERROR' JMP I HEATR /EXIT / / /REPORT EXEC. WORD ERROR /SECOND HEADER WORD / EXER, HLT JMS I LMESSAGE TEXT '%# EXEC. WORD ERROR' JMP I EXER /EXIT / PAGE /ROUTINE TO CHANGE RKO8 DEVICE CODES / / / DVCODE, CLA CLL JMS I LCODE1 /ASK FOR CHANGE IN CODE 73 JMS I LTEXHAND /WAIT FOR CHANGE TAD TEXBUF AND (7700 SNA JMP .+3 /CODE OK JMS I LQUESMK /# TOO LARGE JMP DVCODE+1 TAD TEXBUF CLL RAL RTL DCA CODE73 TAD IOTDC /CHANGE LOAD COMMAND REGISTER AND (7007 TAD CODE73 DCA IOTDC TAD IOTDW /CHANGE WRITE COMMAND AND (7007 TAD CODE73 DCA IOTDW TAD IOTDR /CHANGE READ COMMAND AND (7007 TAD CODE73 DCA IOTDR DVCOD1, JMS I LCODE2 /ASK FOR CHANGE IN CODE 74 JMS I LTEXHAND TAD TEXBUF AND (7700 SNA JMP .+3 JMS I LQUESMK /# TOO LARGE JMP DVCOD1 TAD TEXBUF CLL RAL RTL DCA CODE74 TAD CODE73 /TEST FOR 74 NOT = TO 73 CIA TAD CODE74 SZA CLA JMP .+3 /THE TWO CODES ARE NOT EQUAL JMS I LQUESMK JMP DVCOD1 TAD IOTLS /CHANGE TO CLEAR STATUS AND (7007 TAD CODE74 DCA IOTLS TAD IOTDS /CHANGE READ STATUS AND (7007 TAD CODE74 DCA IOTDS TAD IOTKC /CHANGE SKIP ON CONTROL DONE AND (7007 TAD (7007 DCA IOTKC TAD IOTKE /CHANGE SKIP ON ERROR AND (7007 TAD CODE74 DCA IOTKE DVCOD2, JMS I LCODE3 /ASK FOR CHANGE IN CODE 75 JMS I LTEXHAND TAD TEXBUF /IS THE # TOO LARGE AND (7700 SNA CLA JMP .+3 /# OK JMS I LQUESMK JMP DVCOD2 TAD TEXBUF CLL RTL RAL DCA CODE75 /STORE CODE TAD CODE73 /IS CODE 75 = TO CODE 73 CIA TAD CODE75 SZA CLA JMP .+3 /NO! OK JMS I LQUESMK /YES! FETCH NEW CODE JMP DVCOD2 TAD CODE74 /IS CODE 75 = TO CODE 74 CIA TAD CODE75 SNA CLA /NO! OK JMP .+3 JMS I LQUESMK /YES! FETCH NEW CODE JMP DVCOD2 TAD IOTLA /CHANGE THE CLEAR COMMAND AND (7007 TAD CODE75 DCA IOTLA TAD IOTWC /CHANGE LOAD WORD COUNT COMMAND AND (7007 TAD CODE75 DCA IOTWC TAD IOTCA /CHANGE LOAD CURRENT ADDRESS COMMAND AND (7007 TAD CODE75 DCA IOTCA TAD IOTRW /CHANGE READ WORD COUNT COMMAND AND (7007 TAD CODE75 DCA IOTRW HLT /IOT CHANGED / / LCODE1, CODE1 /LINK TO CHANGE CODE 73 VIA TTY LCODE2, CODE2 /LINK TO CHANGE CODE 74 VIA TTY LCODE3, CODE3 /LINK TO CHANGE CODE 75 VIA TTY / / / /OPERATOR CHANGED DEVICE CODE 73 TO THIS NO. CODE73, 730 /# ROTATED THREE TO LEFT / /OPERATOR CHANGED DEVICE CODE 74 TO THIS NO. CODE74, 740 /# ROTATED THREE TO LEFT / /OPERATOR CHANDED DEVICE CODE 75 TO THIS NO. CODE75, 750 /# ROTATED THREE TO LEFT / / / $