/BN4SV /AUGUST 10, 1972 /ROGER KUYKENDALL /ELECTRO SCIENTIFIC INDUSTRIES /13900 N.W. SCIENCE PARK DRIVE /PORTLAND, OREGON /THIS PROGRAM TRANSLATES SAVED FILES TO /BINARY FORMAT FOR PS/8 OS/8 SYSTEMS. / /ON ENTRY, THE COMMAND DECODER IS CALLED /SO THE RESPONSE TO THE ASTERISK (*) IS /IN THE STANDARD COMMAND DECODER FORMAT. /ONE OUTPUT FILE IS ALLOWED (OR ONE NON-FILE- /FORMAT DEVICE) AND UP TO NINE INPUT FILES /ARE ALLOWED. THE INPUT FILES ARE OUTPUT /IN THE ORDER GIVEN IN THE COMMAND STRING, /THUS WHEN THEY ARE LOADED, THE LATER ONES /WILL OVERLAY THE EARLIER IF THERE IS ANY /OVERLAP. USE CARE IN SELECTING OVERLAPPING /FILES; REMEMBER THAT ALL SAVED FILES START /AT ADDRESSES DIVISIBLE BY 400 (OCTAL), AS /DO ALL NONCONTIGUOUS SEGMENTS OF THESE /FILES. / /ERROR MESSAGES: /THERE ARE THREE TYPES OF ERROR MESSAGES: /COMMAND DECODER MESSAGES, MONITOR ERRORS, /AND USER ERRORS. /COMMAND DECODER ERRORS ARE SELF-EXPLANATORY /AND SHOULD BE FAMILIAR TO ANYONE WITH /EXPERIENCE IN OS/8-PS/8 PIP OR OTHER /STANDARD PROGRAMS. /MONITOR ERRORS ALMOST ALWAYS INDICATE /HARDWARE FAILURES. /USER ERROR MESSAGES HAVE THE FOLLOWING /FORMAT: / USER ERROR (CHARACTER) AT 00707 /THE CHARACTER INDICATES THE TYPE OF /FAILURE AS FOLLOWS: / /USER ERROR D INPUT DEVICE ERROR /(ALS0 = OR SPACE) / /USER ERROR J BAD CORE IMAGE /(ALSO O OR BACK- /ARROW) / /USER ERROR X OUTPUT DEVICE ERROR /(ALSO I, T, /OR >) / /USER ERROR A OUTPUT DEVICE FULL / /DEFINITIONS: USR=200 COUNT=20 OUTCNT=21 CKSM=22 ADDRES=23 BINFLD=24 INCONT=25 CHAR=26 CHR1=27 CHR2=30 CHR3=31 LDCT=32 CHC=33 CHARK=34 NAMES=100 INFILES=NAMES+17 OUTBUF=5000 CTLBUF=6000 *CHARK+1 BSW=JMS . BSWZ, 0 CLL RTR RTR RTR JMP I BSWZ PAGE START, CLA CLL CMA RTL DCA CHC DCA CHR1 DCA CHR2 CIF 10 JMS I (7700 /GET USER 10 /USERIN CIF 10 JMS I (USR 5 /DECODE 2326 /ASSUMED EXTENSION .SV 7000 /CLOSE TENTATIVE FILES TAD (7577 /START OF CD LIST DCA 10 TAD (NAMES-1 DCA 11 TAD (7600-7617-22 DCA COUNT /NUMBER OF ENTRIES NAMLP, CDF 10 TAD I 10 CDF 0 DCA I 11 ISZ COUNT /FINISHED? JMP NAMLP /NO-- LOOP AGAIN TAD NAMES+4 SZA CLA JMP EXOK TAD (0216 DCA NAMES+4 JMP EXOK CHECK, 0 /SUBROUTINE TO ADD TO CHECKSUM DCA CHARK /SAVE INPUT TAD CKSM TAD CHARK /ADD TO CHECKSUM DCA CKSM TAD CHARK /GET INPUT AGAIN JMP I CHECK /ROUTINE TO LOAD 2 FOR 3 IN BINARY FORMAT LOAD, 0 DCA CHR3 /SAVE INPUT CHARACTER ISZ CHC /DO WE HAVE A FIRST CHARACTER? JMP CHSF /NO--SHIFT CHARACTERS DOWN TAD CHR3 /YES--SPLIT 3RD CHARACTER RTL CLL RTL CLL DCA CHR3 TAD CHR3 AND (7400 /MASK FIRST 4 BITS TAD CHR1 /COMBINE WITH FIRST CHARACTER JMS PUT DCA CHR1 TAD CHR3 RTL CLL RTL CLL AND (7400 /MASK 2ND 4 BITS TAD CHR2 /COMBINE WITH 2ND CHARACTER JMS PUT CLA CLL CMA RTL DCA CHC /RESET CHARACTER COUNTER CHS1, DCA CHR2 /CLEAR 2ND CHARACTER DCA CHR3 /CLEAR 3RD CHARACTER JMP I LOAD /RETURN CHSF, TAD CHR2 /SHIFT 2ND CHARACTER DCA CHR1 /TO FIRST TAD CHR3 /SHIFT 3RD JMP CHS1 /TO 2ND PUT, 0 /LOAD OUTPUT BUFFER DCA I 14 ISZ OUTCNT JMP I PUT JMS DUMP /BUFFER FULL, DUMP IT JMP I PUT LEADER, 0 /OUTPUT SOME LEADER TAD (-40 DCA LDCT TAD (200 JMS LOAD ISZ LDCT JMP .-3 JMP I LEADER TAD CHR1 JMS PUT /1ST CHARACTER TO OUTPUT BUFFER DCA CHR1 /CLEAR TAD CHR2 JMS PUT /SECOND CHARACTER TO OUTPUT BUFFER PAGE READ, ISZ COUNT /READ A FILE SKP /LAST FILE READ? JMP CLOSE /YES--CLOSE OUTPUT FILE TAD (4401 /NO--GET ANOTHER FILE DCA INHND /INPUT HANDLER FUNCTION TAD I 13 SNA /LAST FILE READ? JMP CLOSE /YES--CLOSE OUTPUT CIF 10 /USR FIELD JMS I (7700 /HIGH USER 1 /FETCH HANDLER INHND, 0 /HANDLER ADDRESS JMS ERROR TAD I 13 DCA INBLK JMS I INHND /HANDLER 200 CTLBUF INBLK, 0 /DEVICE BLOCK NUMBER JMS ERROR TAD (CTLBUF-1 DCA 15 TAD I 15 TAD (100 SPA CLA JMS ERROR /BAD CORE IMAGE TAD I 15 AND (7707 TAD (-6203 SZA CLA JMS ERROR /BAD CORE IMAGE CLA IAC TAD INBLK DCA RDBLK TAD (CTLBUF+3 DCA 15 INPUT, TAD CTLBUF SNA CLA /HAVE WE READ THE LAST OF THIS FILE? JMP READ /YES--READ ANOTHER TAD I 15 /NO--GET START ADDRESS DCA ADDRES TAD ADDRES AND (7400 CIA TAD ADDRES SZA CLA JMS ERROR /BAD CORE IMAGE TAD I 15 /GET FUNCTION WORD DCA BINFLD TAD BINFLD AND (3700 TAD (10 DCA RDFN /FORCE INTO FIELD 1 TAD BINFLD AND (3700 RAL CLL /NUMBER OF WORDS CIA DCA INCONT /INPUT COUNTER TAD BINFLD AND (70 /GET FIELD DCA BINFLD TAD ADDRES BSW AND (77 TAD (100 JMS CHECK JMS LOAD TAD ADDRES AND (77 JMS CHECK JMS LOAD TAD BINFLD TAD (300 JMS LOAD GETBLK, JMS I INHND /INPUT HANDLER RDFN, 0 /DYNAMIC 0 /CORE ADDRESS =0, FIELD 1 RDBLK, 0 /DYNAMIC JMS ERROR CLA CLL CMA DCA 16 /AUTO INDEX TO -1 TRANS, CDF 10 /TRANSLATE TO BIN FORMAT TAD I 16 CDF 0 JMS CODE /ACTUAL TRANSLATION ROUTINE ISZ INCONT /DONE WITH CORE SEGMENT? JMP TRANS /NO-- LOOP AGAIN TAD RDFN /YES--COMPUTE NEW BLOCK NO. TAD (100 /ROUND UP RAR CLL BSW AND (37 TAD RDBLK DCA RDBLK ISZ CTLBUF /LAST CORE SEGMENT? JMP INPUT /NO--GET ANOTHER JMP READ /YES--GET ANOTHER FILE CODE, 0 DCA CHAR TAD CHAR BSW AND (77 JMS CHECK JMS LOAD TAD CHAR AND (77 JMS CHECK JMS LOAD JMP I CODE PAGE /OUTPUT ROUTINES EXOK, TAD (INFILES-1 DCA 13 TAD (-12 DCA COUNT /ALLOW 9 INPUT FILES TAD (4001 DCA OUTHND TAD NAMES /GET OUTPUT DEVICE NO. SNA /IS THERE A NAME? JMP START /NO--START OVER CIF 10 JMS I (USR /USR SHOULD STILL BE IN CORE 1 /FETCH OUTPUT HANDLER OUTHND, 0 /OUTPUT HANDLER ADDRESS JMS ERROR TAD CLONAM DCA ENTNAM /POINTER TO NAME DCA ENTNAM+1 /CLEAR ARG2 DCA CLOCNT /CLEAR CLOSE COUNTER TAD NAMES CIF 10 JMS I (USR 3 /ENTER OUTPUT FILE ENTNAM, NAMES+1 /DYNAMIC 0 JMS ERROR TAD (OUTBUF-1 DCA 14 TAD (-400 DCA OUTCNT DCA CKSM /CLEAR CHECKSUM JMS LEADER JMP READ DUMP, 0 /DUMP ONE BLOCK OF OUTPUT FILE TAD ENTNAM DCA DBLOK JMS I OUTHND 4200 /WRITE ONE BLOCK ON DEVICE OUTBUF /FROM OUTPUT BUFFER DBLOK, 0 JMS ERROR ISZ ENTNAM ISZ CLOCNT TAD (OUTBUF-1 DCA 14 /14 IS OUTPUT POINTER TAD (-400 DCA OUTCNT /RESET OUTPUT COUNTER ISZ ENTNAM+1 JMP I DUMP JMS ERROR /THIS HAPPENS RARELY /ROUTINE TO CLOSE THE OUTPUT FILE CLOSE, CLA CLL TAD CKSM JMS CODE /OUTPUT NEGATIVE OF CHECKSUM JMS LEADER /OUTPUT SOME LEADER TAD (232 /CTRL Z JMS LOAD JMS LOAD JMS LOAD /TO MAKE SURE CTRL Z WAS LOADED CLLP, DCA I 14 /LOAD ZERO IN REST OF BLOCK ISZ OUTCNT JMP CLLP JMS DUMP /OUTPUT LAST BUFFER TAD NAMES CIF 10 JMS I (7700 4 /USR CLOSE FILE CLONAM, NAMES+1 /GENERAL POINTER TO NAME CLOCNT, 0 /NUMBER OF BLOCKS IN FILE JMS ERROR JMP START OOPS, CDF 0 CIF 10 JMS I (7700 7 /USER ERROR ERROR, 0 JMP OOPS $ *U* 4