*20 ///KOSSTRAN / /PROGRAM TO CONVERT A /PDP-12 APAMOS II CELL DATA TAPE /TO A SPECIAL LINC /TAPE SUITABLE FOR TRANSLATION /BY PRCT12-F INTO A PDP-8 /TAPE WHICH CAN THEN BE USED /TO WRITE TICAS RECORDS /ONTO 7 TRACK MAG TAPE / /-------------------------- /FINAL TICAS MAG TAPE FORMAT / /HEADER LINE FORMAT (37 BYTES) / /WAVELENGTH 4 BYTES /ROWS 7 BYTES (4 NULLS) /COLS 10 BYTES (7 NULLS) /ATTRIBUTE 3 BYTES (IM.) /OBJECT 3 BYTES (CL.) /CELL NAME 8 BYTES /CRLF 2 BYTES (15,12) / / /DATA LINE FORMAT (18 BYTES) / /DATA ELEMENTS 16 (4 BYTES EACH) /CRLF 2 BYTES (15,12) / /------------------------------ / /SPECIAL LINC TAPE CHARACTER FORMAT /IS 6 BIT ASCII HALF WORD PACKED /EOF IS SIGNALED WITH 77 /EOT IS SIGNALED WITH 77,77 / /---------------------------------- / /APAMOS II DATA TAPE FORMAT / /DIRECTORY IS IN BLOCKS 1-10 /32 DIRECTORY ENTRYS PER BLOCK /NULL ENTRIES ARE SET TO ZERO /ALL DIRECTORYS FULLY PACKED /THUS FIRST ZERO ENTRY IS END. / /DIRECTORY FOMAT /WORD CONTENTS / 0 C\E / 1 L\L / 2 N\A / 3 M\E / 4 NO. (12 BIT NUMBER) / 5 W\A (WAVELENGTH) / 6 V\E / 7 BLK (STARTING BLOCK / /----------------------------------- / / / /DATA IS PRECEEDED BY A HEADER BLOCK / /HEADER BLOCK FORMAT / / IMPORTANT STUFF ONLY / / 35 NUMBER OF BLOCKS / 36 NUMBER OF COLUMNS / 37 NUMBER OF ROWS / /--------------------------- /BUFFER LOCATIONS (SEGMENT 7) /DIRECTORY 3400-3777 /INPUT 3000-3377 /OUTPUT 2400-2777 / /LOG TABLE IN SEGMENT 6 SEGMNT 5 *20 /===================================== / INITIAL KEYBOARD INTERACTION CLR AXO / LIF 4 MESOUT KOSMES /MAKE LOG TABLE IN SEGMENT 6 JMP SETLOG / /INPUT TAPE RESTAR, LIF 4 MESOUT INPMES /MOUNT INPUT TAPE /OUTPUT TAPE JMP OUTTAP /DIRECTORY SETUP JMP ININIT /================================= / MAIN PROGRAM LOGIC / DOACEL, JMP NXTCEL /NEXT ENTRY JMP ENDALL /DONE JMP GETCEL /SETUP CELL / JMP HEADER /HEADER LINE / NEWLIN, JMP MOVCRL /MOVE CRLF CLR STC LINCNT /NOW DATA VALUES NXDAT, JMP GETDAT JMP ENDDAT /FINISHED CELL /DATA IN FAC /AND IN CURVAL JMP GETLOG SETWRD 400 JMP CLRNUM OUTPUT NUMBUF LDA I 4 JMP MOVNUM /4 BYTES OUT /CHECK OUTPUT LINE COUNT LDA I 1 ADM I LINCNT, 0 SAE I 20 JMP NXDAT JMP NEWLIN /CRLF FIRST / /END OF DATA, WRITE EOF / ENDDAT, LDA I LASCHR, 0 SAE I 45 JMP MOVCRL JMP MOVMRK JMP DOACEL /NEXT CELL / /END OF DIRECTORY ENDALL, JMP MOVMRK /SECOND EOF JMP WRTBLK /JUST IN CASE JMP RESTAR /RUN AGAIN /============================== / HANDLERS FOLLOW /INTITIALIZE INPUT TAPE / ININIT, SET 1 0 LDA I 7001 STC DIRBLK STC DIRCNT LDA I 40 STC ENTCNT JMP 1 / /GET NEXT DIRECTORY / NXTDIR, LDF 7 RDC 10 DIRBLK, 7001 LDA I 1 ADD DIRBLK STC DIRBLK LDA I 3370 STC DIRPTR ADD ONE STC ENTCNT LDA I ONE, 1 ADM I DIRCNT, 0 SAE I 11 XSK I 0 JMP 0 / /GET NEXT CELL NAME FROM DIRECTORY / NXTCEL, SET 1 0 LDA I 1 ADM I ENTCNT, 40 SAE I 41 JMP .+3 JMP NXTDIR /NEXT DIRECTORY JMP 1 /END OF ENTRIES /NEXT ENTRY OK LDA I CELNAM-1 STC 3 LDA I 10 ADM I DIRPTR, 3370 STC 2 LDF 7 LDA 2 AZE I JMP 1 STA I 3 LDA I 2 STA I 3 LDA I 2 STA I 3 LDA I 2 STA I 3 LDA I 2 STA I 3 /NUMBER LDA I 2 STA I 3 /WAVE LDA I 2 STA I 3 / " LDA I 2 STA I 3 /BLOCK / XSK I 1 JMP 1 / /READ A CELL BLOCK INTO CORE / RDECEL, SET 3 0 LDA I 1020 AXO LDA I 7000 TMA RDC 10 CELBLK, 0 CLR AXO SET I 15 2777 /DATA POINTER ADD ONE ADD CELBLK STC CELBLK JMP 3 / /MOVE HEADER INFO / HEADER, SET 1 0 /WAVELENGTH SET I 2 4\WAV-1 SET I 3 -4 LDH I 2 JMP FIL57 XSK I 3 JMP .-3 / /MOVE ROWS AND COLUMN TEXT / SETWRD 300 JMP CLRNUM SFLOAT ROWS OUTPUT NUMBUF LDA I 7 JMP MOVNUM SFLOAT COLS OUTPUT NUMBUF LDA I 12 JMP MOVNUM / /MOVE ATTRIBUTE AND OBJECT TEXT / SET I 2 4\ATTX-1 SET I 3 -6 LDH I 2 JMP FIL57 XSK I 3 JMP .-3 / /MOVE NAME TEXT / SFLOAT CELNUM SETWRD 400 JMP CLRNUM OUTPUT NUMBUF / SET I 2 4\CELNAM-1 SET I 3 -4 LDH I 2 JMP FIL57 XSK I 3 JMP .-3 LDA I 4 JMP MOVNUM JMP 1 / /MOVE CRLF TEXT / MOVCRL, SET 1 0 LDA I 45 JMP FIL57 JMP 1 / /MOVE TEXT FROM NUMBER BUFFER / MOVNUM, SET 10 0 COM STC 11 SET I 2 4\NUMBUF-1 LDH I 2 SAE I 40 JMP .+3 ADA I 20 JMP FIL57 XSK I 11 JMP .-10 JMP 10 / /CLEAR NUMBER BUFFER / CLRNUM, CLR STC NUMBUF STC NUMBUF+1 STC NUMBUF+2 STC NUMBUF+3 STC NUMBUF+4 JMP 0 / /GET A LOG VALUE / GETLOG, SET 1 0 LDA I LOGFLG, 0 APO I JMP 1 /DO LOG LDA I CURVAL, 0 BSE I 2000 STC 6 LDF 6 LDA 6 LDF 7 STC CURVAL SFLOAT CURVAL JMP 1 / /STORE HALF WORD INTO OUTPUT BUFFER / FIL57, SET 17 0 LDF 7 STA LASCHR STH I 16 /CHECK FOR BUFFER OVER FLOW LDA 16 SAE I 6777 JMP 17 JMP WRTBLK JMP 17 / /WRITE OUT THE OUTPUT BUFFER /THEN CLEAR BUFFER / WRTBLK, SET 14 0 LDA I 1020 AXO LDA I 6400 TMA WRC OUTBLK, 0 LDA I 1 ADM OUTBLK SET I 16 2377 SET I 13 -400 CLR AXO STA I 16 XSK I 13 JMP .-2 SET I 16 4\2400-1 JMP 14 / /GET A DATUM FROM INPUT BLOCK / GETDAT, SET 1 0 LDA 15 SAE I 3377 SKP JMP RDECEL /NEXT BLOCK /COUNT ROWS LDA I 1 ADM I CURCOL, 0 COM ADA I COLS, 0 AZE I JMP OKDAT APO I JMP OKDAT LDA I 1 STC CURCOL ADD ONE ADM I CURROW, 0 SAE I ROWS, 0 SKP JMP 1 /END OF CELL / OKDAT, LDA I 15 STC CURVAL SFLOAT CURVAL XSK I 1 JMP 1 / /CHECK THE OUTPUT TAPE FOR ENOUGH /ROOM LEFT / CHKOUT, SET 1 0 LDA OUTBLK COM ADA I 1000 STC FREBLK LDA ROWS MUL 4\COLS ROL 5 BCL I 37 STC QT QAC SCR 7 ADA I QT, 0 COM ADA I FREBLK, 0 APO I JMP 1 /ENOUGH ROOM //OUTPUT TAPE IS FULL /WRITE EOF AND GET NEW TAPE JMP MOVMRK JMP MOVMRK JMP WRTBLK LIF 4 MESOUT FULMES JMP OUTTAP JMP 1 /OK TO CONTINUE / / /GET A CELL SET UP FROM THE DIRECTORY / GETCEL, SET 17 0 LDA BLOCK STC CELBLK /HEADER JMP RDECEL /READ A BLOCK LDF 7 LDA 3036 STC ROWS LDA 3037 STC COLS STC CURCOL STC CURROW JMP RDECEL /DATA BLOCK / /CHECK OUTPUT TAPE CONDITION JMP CHKOUT JMP 17 / /MOVE EOF MARK MOVMRK, LDA I 77 STH I 16 JMP 0 / /OUTPUT TAPE SETUP HANDLER / OUTTAP, SET 3 0 LIF 4 INTRAC I0 OUTMES / OUTINI, CLR STC OUTBLK JMP WRTBLK STC OUTBLK JMP 3 / I0, T0 J0 T0, 0 J0, JMP OUTINI JMP OUTINI / / /LOG SETUP INTERACTION / SETLOG, CLR STC LOGFLG LIF 4 INTRAC L0 LOGQES / L0, T1 J1 T1, YES NO 0 J1, JMP RESTAR JMP YESLOG JMP RESTAR JMP SETLOG / YESLOG, CLR COM STC LOGFLG /GET MAX INPUT VALUE MAXVIN, LIF 4 INTRAC L1 INQES / L1, T0 J2 J2, JMP MAXVIN JMP MAXVOT / MAXVOT, STORE MAXIN MAXOTQ, LIF 4 INTRAC L2 OTQES / L2, T0 J3 J3, JMP MAXOTQ JMP MAKTAB / MAKTAB, STORE MAXOUT SET I 6 2000 /SET ZERO VALUE FIX FAC ISTOR1 LGVAL LDA I LGVAL, 0 LDF 6 STA 6 / /DO TABLE UP TO END FZER STORE THSLOG / NXLOG, LOAD FONE FADD THSLOG STORE THSLOG FDIV MAXIN JMP LOG10 NOP FAPO FCOMP FMUL HUN FADD FHALF FIX FAC ISTOR1 LGVAL LDA LGVAL STA I 6 / LOAD THSLOG FSUB MAXIN FAZE JMP NXLOG LDF 7 JMP RESTAR /DONE TABLE / / /VARIABLES / THSLOG, 0 0 0 MAXIN, 0 0 0 MAXOUT, 0 0 0 /DIRECTORY ENTRY CELNAM, 0 0 0 0 CELNUM, 0 WAV, 0 0 BLOCK, 0 / NUMBUF, 0 0 0 0 0 / / /ROUTINE TO CALCULATE COMMON LOG (BASE 10) /USES POLYNOMIAL APPROXIMATION / LOG10, STORE TEM /X SET 3 0 /CHECK IF X=0 FAZE SKP JMP 3 /ERROR RETURN / ADD TEM /EXPONENT ADA I -1 /DIV BY 2 STC EXP STC TEM /CLR EXPONENT LOAD TEM FMUL FP2 /1