/ RXCOPY FOR OS/8 V3D AND OS/78 V1A / / THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A / SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION / OF THE ABOVE SOPYRIGHT NOTICE. THIS SOFTWARE, OR ANY THEREOF, / MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER / PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO / THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE / SHALL AT ALL TIMES REMAIN IN DEC. / / THE INFORMATION IN THIS SOFTWARE 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. / / / VERSION V4A M.H. MAY 20, 1977 / S.R. MAY 20, 1977 / / START ADDRESS 16000; JSW 7403 / / THIS PROGRAM PERFORMS COPY, READ, AND COMPARE OPERATIONS ON / RX FLOPPY DISKS ON A TRACK BY TRACK BASIS. THE COMMAND FORMAT / IS: DEV: 128 DCA WRTCNT ST4, TAD I X10 /FETCH A BYTE STR /SKIP IF READY TO TRANSFER JMP .-1 /NO (SHOULDN'T HIT THIS ON VT78) XDR /MOVE BYTE TO SILO CLA /CLEAR THE MUMBLE AC TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA ISZ WRTCNT /THRU WITH SILO? JMP ST4 /NO JMP WRIT2 /REST OF LOOP ON OTHER PAGE / WRTCNT, 0 /CONTROL COUNT FOR FILL SILO LOOP / PAGE / / / READ-WRITE ENTRY POINT / / RW, 0 DCA TRCKNO /ARRIVES WITH TRACK # IN AC TAD I RW /DATA FIELD 10, FETCH CONTROL BITS TAD L7100 /FLOPPY CONTROLLER IGNORES TOP 4 BITS; 100 / /BIT IS 8 BIT MODE; CONTROL FOR UNIT, R/W, IN PLACE DCA FN /BUFFER BIT (COMPLEMENTED) ALSO STORED IN FN TAD (17 /SET UP AUTO-INCR REG. DCA X10 TAD (-32 /26 DECIMAL SECTORS PER TRACK DCA SECTOR ISZ RW /POINT TO OK EXIT TAD FN /IF FIELD ZERO BUFFER, NEED TO CDF SPA /SKIP ON FIELD 10 BUFFER, ALREADY SET! CDF 0 RTR /READ/WRITE BIT TO LINK SZL CLA /SKIP IF WRITE JMP READLP /GO TO READ / / WRITE LOOP / WRITLP, CLL CLA CMA RTL /LITERAL -3 FOR RETRY COUNT DCA RETRY WRTRY, TAD FN /RETRY ERROR HERE THREE TIMES JMS LDCMD JMP WRIT1 /OTHER PAGE TO MOVE DATA TO SILO WRIT2, JMS DOIO /RETURN FROM OTHER PAGE TO ACCESS I/O ISZ SECTOR JMP WRITLP XT1, CDF CIF 10 JMP I RW / / READ LOOP / READLP, CLL CLA CMA RTL /LITERAL -3 FOR RETRY COUNT DCA RETRY RDTRY, JMS DOIO /COME HERE TO RETRY I/O TAD FN JMS LDCMD TAD (-40 /32 PASSES THRU 4 BYTES MOVED DCA FLEA ST5, STR JMP .-1 XDR DCA I X10 STR JMP .-1 XDR DCA I X10 STR JMP .-1 XDR DCA I X10 STR JMP .-1 XDR DCA I X10 ISZ FLEA JMP ST5 ISZ SECTOR JMP READLP JMP XT1 / / DO READ OR WRITE I/O FUNCTION / DOIO, 0 TAD FN /SILO FUNCTION, CONVERTED TO READ-WRITE TAD L7004 /BY LITERAL 4 (TOP FOUR BITS IRREL) JMS LDCMD JMS GETSEC /FETCH SECTOR TO AC STR JMP .-1 XDR CLA TAD TRCKNO STR JMP .-1 XDR CLA TAD L7530 /UNIT 1, 8-BIT NO-OP (TOP 4 BITS IGNORED) JMS LDCMD JMP I DOIO / / LOAD COMMAND REGISTER / FLEA=. LDCMD, 0 SDN /SKIP ON DONE JMP .-1 LCD /LOAD COMMAND SER /SKIP ON ERROR JMP I LDCMD ISZ RETRY /TRIED THREE TIMES YET JMP KEEPON /NO, KEEP ON TRYING JMS GETSEC /RETURN SECTOR IN AC ISZ RW /ON ERROR, RETURN ONE FURTHER DOWN JMP XT1 /EXIT TO CALLER WITH SECTOR # IN AC / / ENTRY TO CONTINUE AFTER ERROR / CONTIN, STA /BACK UP EXIT TO GOOD EXIT TAD RW DCA RW TAD FN /SET DATA FIELD TO 0 IF NECESSARY SPA CLA /ALREADY CDF TO 10, SKIP IF OK CDF 0 /NO, SO SET TO 0 JMP I LDCMD /PRETEND OPERATION OK, SO RETURN THRU LDCMD! / KEEPON, FLINIT /DO A RECAL TO SHAKE IT UP TAD FN /RETRYING READ OR WRITE RTR /R/W BIT TO LINK SZL CLA /SKIP ON WRITE JMP RDTRY /RETRY A READ TAD (-200 /BACK UP AUTO INCR TO REFILL SILO FOR WRITE TAD X10 /SINCE THE FLINIT CLEARED SILO DCA X10 JMP WRTRY /SO GO RETRY WRITE / / CONVERT COUNT TO SECTOR / GETSEC, 0 TAD SECTOR /CONVERT -32 TO -1 TO INTERLEAVED SECTOR TAD (15 L7100, CLL /100 BIT SETS 8-BIT MODE, AS LITERAL L7530, SPA SZL /SZL JUST TO MAKE CORRECT LITERAL, NO-OP WAIT TAD (15 CML RAL IAC JMP I GETSEC L7004, 7004 / / / TRCKNO, 0 /TRACK NUMBER, INVARIANT THRU CALL SECTOR, 0 /COUNTS -32 UP TO 0; 26 DECIMAL SECTORS PER TRACK FN, 0 /FUNCTION BITS: ALWAYS 100 FOR 8BIT MODE / /20 IF UNIT 1 / /2 IF READ OPERATION (2 IS SILO FETCH; 0 SILO FILL) / /MINUS WORD IF BUFFER IN FIELD 0, PLUS IF FIELD 10 / /CONTROLLER IGNORES TOP 4 BITS OF WORD RETRY, 0 /RETRY COUNTER -3 TO 0 FIELD 1 *6000 / / ***** BEGIN ONCE ONLY CODE ***** / / / ENTER HERE AND GET USER INPUTS / START, CLA!SKP /NORMAL ENTRY (MUST CALL DECODER) CHAIN, JMP NODEC /CHAIN ENTRY JMS I (USR /CALL IT 5 5200 /DEFAULT INPUT EXT.(SPECIAL MODE) 0 /PRESERVE TENTATIVE FILES / / LOAD CONSOLE TTY HANDLER / NODEC, JMS I (USR /LOAD THE KL8E HANDLER 1 DEVICE TTY TTYEP, 7201 JMP ERRUSR /PRINT USER ERROR TAD TTYEP /MOVE ENTRY POINT FROM THIS PAGE DCA TTYENT / / LOAD OUTPUT DEVICE IF SPECIFIED / JMS CTRLC /CHECK FOR CONTROL C TYPE-IN TAD I (7600 /GET OUTPUT DEV AND (17 DCA OUTDEV TAD I (7605 /GET INPUT DEVICE AND (17 DCA INDEV TAD OUTDEV /IF NO OUTPUT DEVICE SZA /IS NAMED MOVE INPUT JMP LOC10 /TO OUTPUT DEVICE TAD INDEV /MOVE IT! DCA OUTDEV DCA INDEV /ZERO INPUT DEVICE / / VALIDATE OUTPUT DEVICES AND FILES / LOC10, JMS CTRLC /CHECK FOR CONTROL C TAD (7601 /MAKE SURE THAT THERE ARE NO OUTPUT FILES DCA TMP1 /OR OTHER OUTPUT DEVICES TAD (-4 DCA TMP2 LOC1, TAD I TMP1 /GET DECODER ENTRY SZA!CLA /IS IT ZERO? JMP ERR2 /NO -- ERROR ISZ TMP1 /INCREMENT POINTER ISZ TMP2 /YES -- DONE WITH OUTPUT ENTRIES? JMP LOC1 /NO -- PROCEED /YES -- / JMS CTRLC /CHECK FOR CONTROL C TAD I (7605 /WAS THERE ANY INPUT SPECIFICATION? SNA JMP LOC3A /NO TAD (7606 /YES -- MAKE SURE THAT THERE ARE NO INPUT FILES DCA TMP1 /OR OTHER INPUT DEVICES TAD (-5 DCA TMP2 LOC2, TAD I TMP1 /GET DECODER ENTRY SZA!CLA /IS IT ZERO? JMP ERR2 /NO -- ERROR ISZ TMP1 /INCREMENT POINTER ISZ TMP2 /YES -- DONE WITH INPUT ENTRIES? JMP LOC2 /NO -- PROCEED /YES -- / LOC3A, JMS I (USR /LOAD RXA0 AND RXA1 SO UNIT NUMBERS CAN 1 /BE FOUND. DEVICE RXA0 RX0EP, 200 NOP JMS I (USR 1 DEVICE RXA1 RX1EP, 200 NOP JMP LOC3 /GO TO NEXT PAGE / OUTDEV, 0 /OUTPUT DEVICE NUMBER INDEV, 0 /INPUT DEVICE NUMBER TMP1, 0 /TEMP STORE TMP2, 0 /TEMP STORE / ERR2, TAD (MSG2 /ILLEGAL SPECIFICATION PERR, JMS TYPE /PRINT ERROR MESSAGE JMP EXIT /LEAVE / ERRUSR, JMS I (USR /PRINT USER ERROR 7 2 JMP EXIT / / SUBROUTINE UNIT -- FIND OUT WHAT THE UNIT NUMBER IS / ON ENTRY AC HAS DEVICE NUMBER / ON EXIT AC HAS 0 IFF UNIT 0 OR 0020 IFF UNIT 1 / UNIT, 0 DCA TMP1 /SAVE DEVICE NUMBER CLA!CMA TAD TMP1 /IS DEVICE SYS:?(I.E. IS DEV NUM=1?) SZA!CLA JMP UNITNS /NO UNITSY, CDF 0 /YES -- FIND OUT WHICH UNIT IS SYS: TAD I (MAGIC /GUT HOOK RX SYSTEM HANDLER******** CDF 10 AND (0020 /IF AC IS 0 ITS UNIT 0 JMP I UNIT UNITNS, TAD TMP1 /GET INFO ON DEVICE NUMBER JMS I (USR 12 UNITIN, 0 JMP ERR3 /SAY DEVICE IS NOT RX IF ERROR HERE TAD UNITIN /IS DEV SYS: IN DISGUISE? RAL SZL!CLA JMP UNITSY /YES -- GO DIG OUT THE UNIT NUM. TAD UNITIN /NO -- DOES EP MATCH RXA0'S CMA!IAC TAD RX0EP SNA!CLA JMP I UNIT /YES TAD UNITIN /NO -- CHECK RXA1 CMA!IAC TAD RX1EP SZA!CLA JMP ERR3 /NO -- ERROR TAD (20 /YES JMP I UNIT / PAGE / / / CHECK THAT REQ'D DEVICES WERE SPECIFIED FOR OPTIONS SELECTED / LOC3, JMS OUTD /CHECK THAT OUTPUT DEVICE WAS GIVEN TAD I (OPT2 /IF COPY OR MATCH, CHECK FOR INPUT DEV AND (NOMAT!MATCH SZA!CLA JMS IND TAD I (OPT2 /IF NOT READ OPTION, CHECK FOR INPUT DEV AND (READ SNA!CLA JMS IND / / PRINT VERSION IF SELECTED / VERS, JMS CTRLC /CHECK FOR CONTROL C TAD I (OPT2 /SHOULD VERSION NUMBER BE PRINTED? AND (VERSION SNA!CLA JMP TRANS /NO -- GO CHECK THAT DEVS ARE RXS TAD (VERBUF /YES -- PRINT MESSAGE JMS TYPE / / PREPARE FOR DATA TRANSFER / TRANS, TAD I (OPT2 /SET C SWITCH IF COPY REQ'D AND (MATCH!READ SNA!CLA JMP TRANSB TAD I (OPT2 AND (NOMAT SNA!CLA JMP TRANSA /DON'T SET C SWITCH TRANSB, TAD I (OPT1 /SET IT AND (MCOPY TAD (COPY DCA I (OPT1 TRANSA, TAD I (OPT2 /SET M SWITCH IF MATCH REQ'D AND (NOMAT!READ SZA!CLA JMP TRANS1 TAD I (OPT2 AND (MMATCH TAD (MATCH DCA I (OPT2 TRANS1, TAD OUTDEV /NO -- CHECK THAT OUTPUT DEV IS RX TAD (7757 /PREPARE TO GET DEV TYPE FROM TABLE DCA TMP3 TAD I TMP3 AND (0770 RTR!CLL RAR TAD (-DEVTYP /WAS DEVICE AN RX? SZA!CLA /DOES IT MATCH? JMP ERR3 /NO -- OUTDEV IS NOT AN RX!! TAD OUTDEV /SETUP UNIT NUMBERS JMS UNIT /FOR OUPUT DEVICE DCA WO1 TAD WO1 TAD (4002 DCA RO1 / OUTOK, TAD I (OPT1 /IF MATCH OR COPY GET INFO ON INDEV AND (COPY SZA!CLA JMP OUTOK1 TAD I (OPT2 AND (MATCH SNA!CLA /WAS MATCH OR COPY SELECTED? JMP DORDY /NO -- OK OUTOK1, TAD INDEV /MAKE SURE INPUT DEVICE IS AN RX TAD (7757 /PREPARE TO ACCESS TABLE DCA TMP3 TAD I TMP3 AND (0770 RTR!CLL RAR TAD (-DEVTYP SZA!CLA /DOES IT MATCH? JMP ERR3 /NO -- ERROR TAD INDEV /SETUP UNIT NUMBERS JMS UNIT /FOR INPUT DEVICE TAD (2 DCA RI1 DORDY, JMS QUEST /PAUSE IF SPECIFIED MSG12 JMP DO /PROCESS DISKS / / SUBROUTINE IND -- RETURN IF INPUT DEVICE NUMBER IS NON-ZERO / IND, 0 TAD INDEV /IF INPUT DEV WAS SPEC'D RETURN SNA!CLA /IF NOT DECLARE ERROR JMP ERR5 JMP I IND / / SUBROUTINE OUTD -- RETURN IF OUTPUT DEVICE NUMBER IS NON-ZERO / OUTD, 0 CLA TAD OUTDEV /IF OUTPUT DEV WAS SPEC'D RETURN SNA!CLA /IF NOT DECLARE ERROR JMP ERR6 JMP I OUTD / TMP3, 0 /TEMP STORE TMP4, 0 /TEMP STORE / ERR3, TAD (MSG3 JMP PERR ERR5, TAD (MSG5 JMP PERR ERR6, TAD (MSG6 JMP PERR / PAGE / DO, JMS I (USR /UNLOCK USR FROM CORE 11 TAD (-115 /INIT COUNTER TO -77 DECIMAL DCA CNT DCA TRACK /INIT TRACK NUMBER TO 0 JMP DO1 / / ****** END OF ONCE ONLY CODE ****** / *6420 / / WAS COPY SELECTED? / DO1, TAD I (OPT1 /SHOULD WE COPY? AND (COPY SNA!CLA JMP DO2 /NO JMS RI /YES -- READ INPUT DEVICE INTO FIELD 0 JMS WO /WRITE OUTPUT DEVICE FROM FIELD 0 / / WAS READ SELECTED? / DO2, TAD I (OPT2 /SHOULD WE READ? AND (READ SNA!CLA JMP DO3 /NO -- CHECK MATCH IAC /YES -- READ OUTPUT DEVICE INTO FIELD 1 JMS RO / / WAS MATCH SELECTED? / DO3, TAD I (OPT2 /SHOULD WE MATCH? AND (MATCH SNA!CLA JMP DO5 /NO TAD I (OPT1 /YES -- WAS THERE A COPY? AND (COPY SNA!CLA JMS RI /NO -- READ INPUT DEVICE INTO FILED 0 TAD I (OPT2 /YES -- WAS THERE A READ? AND (READ SZA!CLA JMP DO4 /YES IAC /NO -- READ OUTDEV TO FIELD 1 JMS RO / / COMPARE BUFFERS / DO4, TAD (BSTART DCA PTR /INIT BUFFER POINTER TAD (-BSIZE /SETUP WD IN BUFFER COUNTER DCA WDCNT DO4A, TAD I PTR /GET A WD FROM FIELD 1 DCA TMP5 /SAVE CDF 0 /GET A WD FROM FIELD 0 TAD I PTR CDF 10 CMA!IAC /NEGATE TAD TMP5 /DID WDS MATCH? SZA!CLA /SKIP IF SO JMS ERR7 /NO -- ERROR (BUT NOT FATAL) ISZ PTR /YES -- INCREMENT POINTER ISZ WDCNT /DONE WITH BUFFER? JMP DO4A /NO -- PROCEED /YES -- / / TEST FOR END OF DISK / DO5, ISZ TRACK /INCREMENT TRACK ISZ CNT /DONE? JMP DO1 /NO JMP EXITOK /YES TMP5, 0 /TEMP STORE CNT, 0 /ISZ COUNTER OF TRACKS TRACK, 0 /TRACK NUMBER PTR, 0 /WORD IN BUFFER POINTER WDCNT, 0 /BUFFER WORD COUNTER / / SUBROUTINE QUEST -- PRINT MSG AND ASK QUESTION / ASK IT ONLY IF /P WAS SPECIFIED / JMS+1 HAS MSG TO ASK / RETURN ONLY WHEN ANSWER IS YES / QUEST, 0 TAD I (OPT2 /WAS /P SPECIFIED? AND (PAUS SNA!CLA JMP Q2 /NO -- RETURN Q1, TAD I QUEST /YES -- GET MESG ADDR JMS TYPE /PRINT IT TAD (BUFF /SELECT INPUT BUFFER JMS RDANS /READ ANSWER TAD I (BUFF /WAS IT "Y"? AND (77 TAD (-31 SZA!CLA JMP Q1 /NO -- ASK AGAIN Q2, ISZ QUEST /YES -- RETURN AT JMS+2 JMP I QUEST / / SUBROUTINE CTRLC -- CHECK FOR CONTROL C / CTRLC, 0 KRS AND (177 TAD (-3 SNA!CLA KSF JMP I CTRLC JMP EXIT / / EXIT PROGRAM / EXITOK, JMS QUEST MSG11 EXIT, CIF!CDF 0 JMP I (7605 / PAGE / / / SUBROUTINE RI -- READ FROM INPUT DEVICE / RI, 0 /READ FROM INPUT DEVICE JMS CTRLC /CHECK FOR CONTROL C TAD TRACK /GET TRACK NUMBER INTO AC CIF 0 /PREPARE TO ENTRY DRIVER JMS I (RW /CALL DRIVER RI1, 0 /FUNCTION WORD JMP I RI /EXIT -- SUCCESSFUL JMS ERR8 /ERROR JMS CTRLC /CHECK FOR CONTROL C CIF 0 JMP I (CONTIN /PROCEED / / SUBROUTINE RO -- READ FROM OUTPUT DEVICE / RO, 0 /READ FROM OUTDEV JMS CTRLC /CHECK FOR CONTROL C TAD TRACK CIF 0 JMS I (RW RO1, 0 JMP I RO JMS ERR9 JMS CTRLC CIF 0 JMP I (CONTIN / / SUBROUTINE WO -- WRITE OUTPUT DEVICE / WO, 0 /WRITE TO OUTPUT DEVICE JMS CTRLC TAD TRACK CIF 0 JMS I (RW WO1, 0 JMP I WO JMS ERR10 JMS CTRLC CIF 0 JMP I (CONTIN / / MISC ERROR ROUTINES / ERR7, 0 TAD (-BSTART /SUBTRACK BUFFER START TAD PTR /FROM WORD IN BUFFER POINTER TAD (-BHALF /THEN SUBTRACT 1/2 OF BUFFER SIZE SPA /SKIP IF PTR IN 2ND HALF JMP ERR7A /PTR IN 1ST HALF AND (7600 /DIVIDE BY 64 DECIMAL AND ADD 2 CLL!RTR RTR RTR IAC JMP ERR7W ERR7A, TAD (BHALF /MAKE POSITIVE AND (7600 /DIVIDE BY 64 AND ADD 1 CLL!RTR RTR RTR ERR7W, IAC DCA ERRTMP /SAVE SECTOR NUMBER TAD TRACK /WAS THERE ANOTHER MISMATCH ON THIS SECTOR? TAD ERR7TR SZA!CLA JMP ERR7P /NO TAD ERRTMP /MAYBE TAD ERR7SC SNA!CLA JMP I ERR7 /YES ERR7P, TAD (MSG7 JMS TYPE TAD ERRTMP JMS ADPRNT TAD TRACK /SAVE TRACK AND SECTOR CMA!IAC /AS 2'S COMP FOR FUTURE COMPARISION DCA ERR7TR TAD ERRTMP CMA!IAC DCA ERR7SC JMP I ERR7 ERR7TR, 400 ERR7SC, 400 ERR8, 0 DCA ERRTMP TAD (MSG8 JMS TYPE TAD ERRTMP JMS ADPRNT JMP I ERR8 ERR9, 0 DCA ERRTMP TAD (MSG9 JMS TYPE TAD ERRTMP JMS ADPRNT JMP I ERR9 ERR10, 0 DCA ERRTMP TAD (MSG10 JMS TYPE TAD ERRTMP JMS ADPRNT JMP I ERR10 / ERRTMP, 0 / / / SUBROUTINE TYPE -- PRINT MESSAGE / ON ENTRY AC HAS MESSAGE ADDRESS / TYPE, 0 DCA TYPAD /SAVE ADDR CIF 0 JMS I TTYENT 4110 TYPAD, 0 0 NOP JMP I TYPE / / SUBROUTINE RDANS -- READ ANSWER FROM TTY / ON ENTRY AC HAS BUFFER ADDR / RDANS, 0 DCA RDAD /SAVE ADDR CIF 0 JMS I TTYENT 0110 RDAD, 0 0 NOP JMP I RDANS / TTYENT, 0 /ENTRY POINT TO TTY HANDLER / / PAGE / / / SUBROUTINE APRNT -- PRINT TRACK AND SECTOR / ENTER WITH SECTOR IN AC / ADPRNT, 0 JMS SETIN MSG13B-1 TAD I TRACKN JMS SETIN MSG13A-1 TAD MSG JMS I TYPEIT JMP I ADPRNT TYPEIT, TYPE TRACKN, TRACK MSG, MSG13 / / SUBROUTINE SETIN -- ENTER NUMBER INTO A MESSAGE / / ON ENTRY AC HAS NUMBER AND JMS+1 HAS POINTER TO MESSAGE / HOLE MINUS 1. (2 DECIMAL DIGIT NUMBERS ARE ASSUMED) / SETIN, 0 DCA SETIN1 /SAVE NUMBER DCA SETCNT /ZERO 10'S COUNTER TAD I SETIN /GET MSG ADDR DCA 10 /ENTER INTO AUTOINC POINTER ISZ SETIN /BUMP RETURN ADDR SETINB, TAD SETIN1 /GET NUMBER TAD M12 /SUBTRACT 10 DECIMAL SMA /DONE DIVIDING? JMP SETINA /NO CLA /YES TAD SETCNT /GET 10'S TAD P260 /MAKE IT ASCII DCA I 10 /STORE IN MESSAGE TAD SETIN1 /GET REMAINDER TAD P260 /MAKE IT ASCII DCA I 10 /STORE IN MESSAGE JMP I SETIN SETINA, DCA SETIN1 /SAVE RESULT ISZ SETCNT /INCREMENT 10'S COUNT JMP SETINB /CONTINUE / SETIN1, 0 /NUMBER STORAGE SETCNT, 0 /10'S COUNTER M12, -12 /MINUS 10 DECIMAL P7, 7 /LITERAL P260, 260 /LITERAL / / ERROR MESSAGES / VERBUF, "R; "X; "C; "O; "P; "Y; 240; "V; "4; "A; 240; 215; 212; 232 MSG2, "I; "L; "L; "E; "G; "A; "L; 240; "S; "P; "E; "C; "I; "F; "I "C; "A; "T; "I; "O; "N; 215; 212; 232 MSG3, "D; "E; "V; "I; "C; "E; 240; "I; "S; 240; "N; "O; "T; 240 "R; "X; 215; 212; 232 MSG5, "N; "O; 240; "I; "N; "P; "U; "T; 240; "D; "E; "V; "I; "C; "E; 215; 212; 232 MSG6, "N; "O; 240; "O; "U; "T; "P; "U; "T; 240 "D; "E; "V; "I; "C; "E; 215; 212; 232 MSG7, "C; "O; "M; "P; "A; "R; "E; 240 "E; "R; "R; "O; "R; 232 MSG8, "I; "N; "P; "U; "T; 240; "D; "E; "V; "I; "C; "E; 240 "R; "E; "A; "D; 240; "E; "R; "R; "O; "R; 232 MSG9, "O; "U; "T; "P; "U; "T; 240; "D; "E; "V; "I; "C; "E; 240 "R; "E; "A; "D; 240; "E; "R; "R; "O; "R; 232 MSG10, "O; "U; "T; "P; "U; "T; 240; "D; "E; "V; "I; "C; "E; 240 "W; "R; "I; "T; "E; 240; "E; "R; "R; "O; "R; 232 MSG11, "I; "S; 240; "M; "O; "N; "I; "T; "O; "R; 240 "R; "E; "M; "O; "U; "N; "T; "E; "D "?; 232 MSG12, "R; "E; "A; "D; "Y; "?; 232 MSG13, 240; "T; "R; "A; "C; "K; 240 MSG13A, 0 0 ",; "S; "E; "C; "T; "O; "R; 240 MSG13B, 0 0 215; 212; 232 $